Contents
- CompMath-Vorlesung 27.10.2023
- Sequenz
- Alternative [IF-THEN-ELSE]
- Einseitige Alternative
- Zweiseitige Alternative
- Mehrseitige Alternative
- Auswahlkriterium [SWITCH]
- Zaehlzyklus [FOR-Loop]
- Demo einfacher FOR-Schleifen
- Variante 1
- Variante 2
- Variante 3
- Variante 4
- Range-For
- geschachtelte Zyklen: Hilbertmatrix
- Hilbert matrix: Symmetrie ausnutzen
- Vergleich mit Hilbermatrix aus Matlab
- Abweisendender Zyklus (WHILE-Loop)
CompMath-Vorlesung 27.10.2023
Einfuehrung in die strukturierte Programmierung: Alternative, Zaehlzyklus
close all; clear; clc;
Sequenz
x = linspace(0,pi,21); y = sin(x); plot(x,y)
Alternative [IF-THEN-ELSE]
clear; clc;
Einseitige Alternative
x = 4; % x = input('Eingabe x: '); if x~=0 disp(['x = ',num2str(x),' ist ungleich Null.']); end % und jetzt zusaetzlich mit logischen Operatoren if x>0 && mod(x,2)==0 disp(['x = ',num2str(x),' ist eine positive gerade Zahl.']); end;
x = 4 ist ungleich Null. x = 4 ist eine positive gerade Zahl.
Zweiseitige Alternative
x = 4; % x = input('Eingabe x: '); if x~=0 s = 'ungleich'; y = 1/x; else s = 'gleich'; y = nan; end disp(['x = ',num2str(x),' ist ',s, ' Null.']); disp(y);
x = 4 ist ungleich Null. 0.2500
Mehrseitige Alternative
fb = 33; % fb = input('\nFeinstaubkonzentration in �g/m^3: '); if fb > 50 s = ' kein Auto fahren.'; else if fb > 5 s = 'naja'; else if fb >= 0 s = 'sauber'; else s = 'Messfehler'; end end end disp(['Einschaetzung: ',s]);
Einschaetzung: naja
Auswahlkriterium [SWITCH]
clear; clc; name_monat = ["january", "february","march","april","may","june","july","august","september","october","november","december"]; monat = 3; % monat = input('Monatsnummer: '); switch monat case {4,6,9,11} % if m==4 || m==6 || ... tage = 30; case {1,3,5,7,8,10,12} % elseif m==1 || m==3 ... tage = 31; case 2 % elseif m==2 tage = 28; % Achtung: Schaltjahr muss noch beruecksichtigt werden!! otherwise % else tage = 0; % entspricht Fehler end if tage ~=0 disp(name_monat(monat)+" has " + tage+ " days."); else disp('Eingabefehler!!'); end
march has 31 days.
Zaehlzyklus [FOR-Loop]
Demo einfacher FOR-Schleifen
Summe ungerader natuerlicher Zahlen bis 10
clc; clear
Variante 1
summe = 0; n = 10; for i = 1:2:n % fuer allg. n summe = summe+i; end disp(['Summe1 = ',num2str(summe)]);
Summe1 = 25
Variante 2
summe = 0; for i = [9 3 5 7 1] % nicht fuer allg. n summe = summe+i; end disp(['Summe2 = ',num2str(summe)]);
Summe2 = 25
Variante 3
summe = 0; for i = linspace(1, 9, 5) % fuer allg. n moeglich % for i = linspace(1, n-1+mod(n,2), (n+mod(n,2))/2 ) % fuer allg. n möglich summe = summe+i; end disp(['Summe3 = ',num2str(summe)]);
Summe3 = 25
Variante 4
summe = 0; n = 10; for i = 1:1:n % fuer allg. n if mod(i,2)==1 summe = summe+i; end end disp(['Summe4 = ',num2str(summe)]);
Summe4 = 25
Range-For
x = rand(1,20); summe = 0; n = 10; for v = x % fuer allg. n summe = summe+v; end disp(['Summe5 = ',num2str(summe)]); disp(['Sum 5 = ',num2str( sum(x) )]);
Summe5 = 9.6342 Sum 5 = 9.6342
geschachtelte Zyklen: Hilbertmatrix
clc; clear n = 10; % Speicher reservieren H(n,n) = 0; % H = zeros(n,n) for row=1:n for col=1:n H(row,col) = 1/(row+col-1); end end
Hilbert matrix: Symmetrie ausnutzen
Es gilt H_(i,j) == H_(j,i) ==> symmetrische Matrix
clc; clear n = 5; % Speicher reservieren H(n,n) = 0; % H = zeros(n,n) % auch moeglich for row=1:n for col=row:n H(row,col) = 1/(row+col-1); H(col,row) = H(row,col); end end H
H = 1.0000 0.5000 0.3333 0.2500 0.2000 0.5000 0.3333 0.2500 0.2000 0.1667 0.3333 0.2500 0.2000 0.1667 0.1429 0.2500 0.2000 0.1667 0.1429 0.1250 0.2000 0.1667 0.1429 0.1250 0.1111
Vergleich mit Hilbermatrix aus Matlab
beachte Quantifikator: all()
if all(all( H==hilb(n) )) disp('Identisch mit Hilbermatrix aus Matlab'); else disp('Da ist etwas falsch mit der Matrix H'); end
Identisch mit Hilbermatrix aus Matlab
Abweisendender Zyklus (WHILE-Loop)
Ziel: Eingabe einer Zahl im Intervall [3,10] mit dem WHILE-Loop
clc; clear; disp('abweisender Zyklus') k = randi([-5,15],1) % k = input('Zahl aus [3,10]: '); %while ~( 3<=k && k <=10 ) % k nicht im Intervall [3,10] while k<3 || 10 < k k = randi([-5,15],1) % k = input('Zahl aus [3,10]: '); end
abweisender Zyklus k = 3