CS 99
Summer 2002: Lab 7
Solutions

 

1. I need a ‘perm, part 2
function [ x ] = xperm( x )
% XPERM        Permute x.
%        XPERM(X) returns a random permutation of the elements of vector X.
%        An error is reported if length( X ) < 2.
if length( x ) < 2
    error('Too few elements!');
end

for k = 1 : length( x )
    %swap element k with another randomly chosen element
    pos = ceil( rand*length(x) );
    tmp = x( k );
    x( k ) = x( pos );
    x( pos ) = tmp;
end

 

2. A super-duper all-purpose integer reader

function value = readIntPrompt( prompt )
% READINTPROMPT    Input function to read integer values.
%        READINTPROMPT( S ) returns an error if S is not a string.
%        Repeatedly prompts user until integer value is entered.

% Ensure that the prompt is a string:
if ~ischar( prompt )
 error('Your prompt should be a string!');
end

value = input( prompt );

% Ensure that the input is legal:
while isempty( value) | ...                % no empty values
    ~isreal(value) | ...                      % no complex numbers
      isinf(value) | ...                          % no infinite values
    isnan(value) | ...                          % no NaNs
     ~isnumeric(value) | ...              % no non-numerical values
     floor(value)~=ceil(value) | ...  % no decimal/fraction values
     value < -realmax          | ...          % lower bound of integer    
     value > realmax                          % upper bound of integer
     % Reprompt the user
    disp('That value is not an integer!');
    value = input( prompt );
end