IMP: 9.12.2011

Einfuehrung in die strukturierte Programmierung

Contents

abweisender Zyklus [WHILE-Loop]

Ziel: Eingabe einer Zahl im Intervall  [3,10]
clc; clear;
disp('abweisender Zyklus')
%k = input('Zahl aus [3,10]: ');
k = randi([-5,15],1)
%while ~( 3<=k && k <=10 )     %  k nicht im Intervall [3,10]
while  k<3 || 10 < k
    %k = input('Zahl aus [3,10]: ');
    k = randi([-5,15],1)
end
abweisender Zyklus
k =
    14
k =
    -3
k =
    14
k =
     8

Zaehlschleife

clc; clear
disp('Reihe via Zaehlschleife')
realval = pi^2/6;      % wahrer Reihenwert
sum(1) = 1;
for n=1:999
%   Partialsumme        Folgenglied
    sum(n+1) = sum(n) + 1/(n+1)^2;
end
disp(['Differenz zu pi^2/6: ', num2str(sum(end)-realval)] );
Reihe via Zaehlschleife
Differenz zu pi^2/6: -0.0009995

Via Vektorarithmetik (und Speicherung aller Partialsummen)

clc; clear
disp('Reihe via Vektorarithmetik')
realval = pi^2/6;         % wahrer Reihenwert
KK = 1./(1:1000).^2;      %  Folgenglieder
SS = cumsum(KK);          %  Partialsummen
disp(['Differenz zu pi^2/6: ', num2str(SS(end)-realval)] );
Reihe via Vektorarithmetik
Differenz zu pi^2/6: -0.0009995

Zaehlschleife mit Abbruch

clc; clear
disp('Reihe via Zaehlschleife mit Abbruch (nicht in Uebung/Klausur)')
realval = pi^2/6;      % wahrer Reihenwert
seps = 1e-5;           % relative Abbruchgenauigkeit
sum(1) = 1;
for n=1:200000
    sum(n+1) = sum(n) + 1/(n+1)^2;
    if abs(sum(end)-realval) < seps
        break; % in Uenung und Klausur verboten!!
    end
end
disp(['Differenz zu pi^2/6: ', num2str(sum(end)-realval)] );
Reihe via Zaehlschleife mit Abbruch (nicht in Uebung/Klausur)
Differenz zu pi^2/6: -9.9999e-06

Zaehlschleife in While-Loop umwandlen

clc; clear
disp('Zaehlschleife in While-Loop umwandlen')
realval = pi^2/6;               % wahrer Reihenwert
sum(1) = 1;
n = 1;                          % Laufvariable: Anfangswert setzen
while n<=999                    % Laufvariable: bzgl. Endwert testen
    sum(n+1) = sum(n) + 1/(n+1)^2;
    n = n+1;                    % Laufvariable veraendern
end
disp(['Differenz zu pi^2/6: ', num2str(sum(end)-realval)] );
Zaehlschleife in While-Loop umwandlen
Differenz zu pi^2/6: -0.0009995

Zaehlschleife in While umwandlen mit Abbruch

clc; clear
disp('Reihe via While-Loop')
realval = pi^2/6;      % wahrer Reihenwert
seps = 2e-4 ;          % relative Abbruchgenauigkeit
sum(1) = 1;
n = 1;
%while n<=9999 && abs(sum(n)-pi^2/6) >= seps
while  abs(sum(n)-realval) >= seps   % absoluter Test
    sum(n+1) = sum(n) + 1/(n+1)^2;
    n = n+1;
end
disp(['Differenz zu pi^2/6: ', num2str(sum(end)-realval)] );
disp(['N: ',num2str(length(sum))]);
Reihe via While-Loop
Differenz zu pi^2/6: -0.00019998
N: 5000