如何简化这个程序

时间:2012-02-19 03:59:17

标签: matlab

我已经完成了这个程序,但是我的讲师希望它更简单..我试图改变命令,但它出错了...可以请帮助我......给一些线索或者其他......我真的很感激,如果你可以帮助我..这是问题,下面是命令..根据用户自己的选择,通过MATLAB编程确定两个向量的最高,最低和平均值..

   close all
   clear all
   clc

     disp('Welcome to my program.');
     disp(' ');
     disp('instruction:');
     disp(' a ) Enter the number of column of a vector.');
     disp(' b ) Next, enter the element for vector A and vector B.');
     disp(' c ) Then, select your option of what do you want to find.');
     disp(' ');
     column = input (' Enter the number of column of a vector: ');
     disp(' ')
     disp(' Enter the element for vector A ');
      for count=1:column 
        disp(['A (',num2str(count), ')=']);
        A(count)=input(' ');
    end
   disp(' ')
   disp(' Enter the element for vector B');
    for count=1:column
        disp(['B(',num2str(count),')=']);
        B(count)=input(' ');
   end
    disp(' ')
    disp(['Vector A is [',num2str(A),')']);
    disp(['Vector B is [',num2str(B),')']);
    disp(' ')
    disp('What do you want to find?');
    disp(' ')
    disp('1-find the highest value');
    disp('2-find the lowest value');
    disp('3-find the average value');
    choose=input('Choose:');
   disp(' ')

    while choose >3
        disp('Sorry, please enter the right input!');
        choose=input('choose:');
    end

    disp('Your result:')
   disp(' ')
    fprintf('number of column:%2.0f\n',column);
    disp(['vector A:[',num2str(A),']']);
    disp(['vector B:[',num2str(B),']']);

    if choose ==1
        disp('choice: find the highest value');
    elseif choose==2
        disp('choice: find the lowest value');
    elseif choose==3
        disp('choice: find the average value');
    end
    switch choose
       case 1 
            A = max(A);
            B = max(B);
           result=max(A,B);
       case 2
            A = min (A);
            B = min (B);
           result=min(A,B);
       case 3
            A = mean (A);
            B = mean (B);
    end

    disp(['Vector A:',num2str(A)]);
    disp(['Vector B:',num2str(B)]);
    if choose==1
        disp(['the highest value: ',num2str(result),'']);
    else if choose==2
            disp(['the lowest value:',num2str(result),'']);
        end
    end

3 个答案:

答案 0 :(得分:3)

我建议做一些改动:

  1. 问你的教授什么"更简单"好像。
  2. 模块化 - 将代码放在您调用的较小方法中。
  3. 减少输入提示。我反对关于min,max和mean的东西。只要把它们全部用于善良'清酒。
  4. 视觉上代码有点混乱。我的方法比较小;保持代码清洁。
  5. 循环提示输入是一种方式;从文件中读取将是另一个。我给自己选择了从中得到价值的地方。将其与计算分开。

答案 1 :(得分:3)

我会选择这样的东西:

function out = mergevectors(x,y,method)
%MERGEVECTORS  Determine max, min, or mean value
%    MERGEVECTORS(X, Y, 'CHOICE') determines basic statistics between two
%    vectors.  X and Y are any identically sized vectors.  'METHOD' is one
%    of:  'max','min','mean'.
%
%Examples:
%    x = [1 2 3 4];
%    y = [4 3 2 1];
%    mergevectors(x, y,'max')
%    mergevectors(x, y,'min')
%    mergevectors(x, y,'mean')


%Error handling
error(nargchk(3,3,nargin));
if ~isequal(size(x), size(y))
    error('X and Y must be identically sized')
end
if ~ischar(method)
    error('Method must be one of ''max'', ''min'', ''mean''');
end

%Processing
switch lower(method)
    case 'max'
        out = max(x, y);
    case 'min'
        out = min(x, y);
    case 'mean'
        out = (x + y)/2;
    otherwise
        error('Method must be one of ''max'', ''min'', ''mean''');
end

一些自我放纵的评论:

  • 请避免使用以下语句:全部清除;全部关闭; CLC;我理解为什么有这么多人这样做,但如果我使用你的工具,我有可能在我的工作区中有一些我想保留的东西。不需要此声明。如果您担心工作区中的杂散变量,function关键字可以正常工作。

  • 通过在向量中键入的长途方法,无需引导用户。 Matlab命令窗口已经附带了适合输入矢量的工具。 (例如[])。

  • 一般来说,错误消息应该是完全中立的。没有“!”的。任何错误至少是程序员的错误的一半,他们找不到使用所提供的输入的方法,或者提供更好的文档。

  • 在提供的解决方案中,初始注释块用作文档,用户可通过help mergevectors使用。但是,一旦用户成为专家用户,就不再需要文档,也不会介入。

  • 尽可能避免使用input等交互式输入。 (也就是说,总是避免交互式输入。)编写一个有用的功能的全部意义在于,您(或其他人)可以在忘记它的工作原理后很好地使用它,并且您可以使用它来构建更好,更高级的功能功能。您很少希望通过不断的输入请求来减慢此过程。

    对于这个学习示例,这一点可能并不明显,但如果您要编写复杂的代码片段(无论语言如何),这都是需要记住的一点。

答案 2 :(得分:2)

考虑如何构建MATLAB的内置函数。用户只需通过传递附加参数来选择案例。用户可以通过调用“help yourfunctionname”来请求函数调用下面的一组注释,而不是通过显示提示用户

非常粗暴地说,你应该写一个看起来像这样的函数:

function f = yourfunction(A,B,i)
%A and B are input vectors
%i = 1 for max, i = 2 for min, i = 3 for mean

'the rest of your code'