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