Lösungen für den Aufgabenkomplex: Struktogramme 1. A("Eingabe 1.Zahl: ") E(a) A("Eingabe 2. Zahl: ") E(b) summe=a+b A("Summe: ",summe) 2. E(r) PI=3.14 S=4*PI*r*r V=S*r/3 A(S,V) 3. A("Erste Waehrung:") E(w1) A("Zweite Waehrung:") E(w2) A("Wechselkurs:") E(wk) A("Betrag in der ersten Wahrung:") E(b1) b2=0.995*b1*wk A(b1,w1,"= ", b2,w2) 1 4. A("Eingabe 1.Zahl: ") E(a) A("Eingabe 2. Zahl: ") E(b) dif=a-b dif<0 Ja dif=dif * -1 Nein A("absolute Differenz= ",dif) 5. E (a,b) a>b Y max=a N max=b A (max) E (a, b, c) a>b Y N a>c Y max=a b>c N max=c Y max=b N max=c A (max) 6. E (p,q) d=p*p/4-q d>=0 Y N d>0 Y X1= - p/2+Wurzel(d) X= - p/2 X2= - p/2-Wurzel(d) A("reelle Lösungen:",X1,X2) N A("Doppel-Wurzel X1=X2", X) XR= - p/2 XI=Wurzel(-d) A("2 Komplexe Lösungen:", XR,"+-",XI,"i") 2 7.a) Datenmodell: Alle Werte werden der Reihe nach in eine einfache Variable x eingegeben - Lösung mit Abweisschleife: A("Anzahl der Zahlen: ") E(n) sum = 0 i=1 i<=n A(i, "-te Zahl eingeben: ") E(x) sum = sum + x i=i+1 A("Summe der ",n," Zahlen= ",sum) - Lösung mit Nichtabweisschleife: A("Anzahl der Zahlen: ") E(n) sum = 0 i=1 A(i, "-te Zahl eingeben: ") E(x) sum = sum + x i = i+1 i<=n A("Summe der ", n, " Zahlen = ", sum) - Lösung mit Zählschleife: A("Anzahl der Zahlen: ") E(n) sum = 0 A("Eingabe der Zahlen") i=1,n,1 A(i, "-te Zahl eingeben: ") E(x) sum = sum+x A("Summe der ",n," Zahlen= ",sum) 3 7.b) Anderes Datenmodell: Zahlen werden in Feld (=Vektor) eingelesen. A("Anzahl der Zahlen: ") E(n) i = 1, n, 1 A(i, "-te Zahl eingeben: ") E( x[i] ) sum = 0 i = 1, n, 1 sum = sum + x[i] A("Summe der ", n, " Zahlen = ", sum) 8. A("Gib Anzahl der Werte ein (Anzahl >1!): ") E(n) n<2 E(x) max=x i=2,n,1 E(x) x>max Ja max=x Nein A("Groesster Wert: ",max) 9. E (x) x<=0 Y y=1/(1+x*x) N x<=5 Y y=1-(x*x/10) N x<=30 Y N y=15/4*x A("f (",x, ")=", y) 4 y=1/8 10. A(" x x²") x=1 x<=10 y=x*x A(x,y) x=x+1 11. A("Geben Sie Anfangs-, Endwert und Schrittweite ein") E(xa,xe,xs) A("x y") x=xa x<=xe 2*x-1 != 0 Y N y= (3*x+4) / (2*x-1) A (x,"Funktion ist nicht bestimmt") A (x,y) x=x+xs 12. E (a, operator, b) ok=1 operator '+' '-' '*','.' ja erg=a+b erg=a-b sonst '/',':' b= =0 nein ok=0 erg=a*b erg=a/b A("Fehler: Divion durch Null") ok= =1 ja A ("Ergebnis=", erg) 5 ok=0 A("Unzulässiges Operationszeichen") nein 13. a) A("Eingabe n und x:: ") E(n, x) xhn=1 nfak=1 i=1,n,1 xhn=xhn*x nfak=nfak*i g=xhn/nfak A("Funktionswert: ",g) A("Eingabe n und x : ") E(n,x) g=x i=2,n,1 g=g*x/i A("Funktionswert : ",g) 6 b) fak(n) n==0 ja nein fak=1 fak=n* fak(n-1) xhochn(x,n) n==0 ja xhochn=1 nein xhochn=x* xhochn(x,n-1) A(„ n und x eingeben“) E( n,x) nfak= fak(n) xhn= xhochn(x,n) g= xhn/nfak A(„Funktionswert:“, g) 7 14. E(x,epsilon) s=0; g=1 i=1 |g|>=epsilon s=s+g g=g*x/i i=i+1 A ("exp(", x, ")=", s) 15. E(x,epsilon) s=0; g=x i=2 |g|>=epsilon s=s+g g= -g*x*(i-1)/i i=i+1 A ("ln(1+", x, ")=", s) 16. E(n) i=1,n,1 E(x[i]) max=x[1] sum=x[1] i=2,n,1 x[i]>max Ja Nein max=x[i] sum=sum+x[i] A("Größter Wert: ",max, "Summe: ",sum) 8 17. - Formeln: -- Mittelwert: in der Statistik als N bezeichnet; in der Informatik besser z.B. mw mw = 1 n å x[i] n i =1 -- Streuung (oder auch: Varianz): in der Statistik als s2 bezeichnet; in der Informatik besser z.B. var var = n 2 2 1 1 = ( − n * mw * mw) ( x [ i ] mw ) ( x [ i ]) − å å n −1 n − 1 1=1 Bemerkung: Die zweite Formel für var ist rechentechnisch güstiger. Bei der algorithmischen Berechnung von mw wird man zuerst die enthaltene Summe berechnen, dieses „Zwischenresultat“ auch in mw speichern und schließlich durch n dividieren. Entsprechend geht man bei der Berechnung von var vor: zunächst wird die enthaltene Summe berechnet, dieses „Zwischenresultat“ auch in var gespeichert und anschließend n*mw*mw abgezogen und alles durch (n-1) dividiert. - Datenmodell: x[1], x[2], ..., x[n] mw, var, min, max n, i reeller Vektor („Feld“, „Array“); n bekannt reelle Zahlen ganze Zahlen („Integer“) - Struktogramm: A("Eingabe der Anzahl der Messwerte (>=1): ") E(n) i = 1, n, 1 A(i, "-ten reellen Wert eingeben: ") E(x[i]) min = x[1] max = x[1] i = 2, n, 1 x[i] > max Y N x[i] < min max = x[i] Y min = x[i] mw = 0 var = 0 i = 1, n, 1 mw = mw + x[i] var = var + ( x[i] * x[i] ) mw = mw / n var = ( var - n * mw * mw ) / ( n - 1 ) A("Minimum = ", min, "Maximum = ", max) A("Mittelwert = ", mw, "Varianz = ", var) 9 N % 18. A("Reelles Endeerkennungszeichen eingeben: ") E(ende) n=0 n = n+1 A(n, "-te reelle Zahl eingeben: ") E( x[n] ) x[n] != ende n = n -1 j= 1, n-1, 1 min = x [ j ] k=j i = j+1,n,1 x [ i ] < min Y N min = x [ i ] % k=i x[ k ] = x [ j ] x [ j ] = min A("Sortierte Folge:") i = 1, n, 1 A( x [ i ] ) 10 19. Bubblesort I E(n) i=1,n,1 E (x[i]) ok=0 ok==0 ok=1 i=1,n-1,1 x[i]>x[i+1] Ja h=x[i] Nein x[i]=x[i+1] x[i+1]=h ok=0 i=1,n,1 A (x[i]) Bubblesort II j=n-1,1,-1 i=1,j,1 x[i]>x[i+1] Ja h=x[i] Nein x[i]=x[i+1] x[i+1]=h 11 20. A ("Geben Sie ein:") A ("1 - Transponieren einer Matrix") A ("2 - Addition zweier Matrizen") A ("3 - Multiplikation zweier Matrizen") E (ant) eingabe (zA,spA,A) ja ant= =2 oder ant= =3 nein eingabe (zB,spB,B) ok=1 ant 1 2 ja trans (zA,spA,A, zC,spC,C) sonst 3 zA= =zB und spA= =spB add (zA, spA,A,B, zC,spC,C) nein A("Berechnung nicht möglich") spA= =zB ja mult (zA, spA,spB,A, B,zC,spC,C) ok=0 i=1,zC,1 A (i, " Zeile") j=1,spC,1 A (c [i,j]) 12 A ("Unzulässiges Zeichen") A("Berechnung nicht möglich") ok=0 ok = = 1 ja nein ok=0 nein eingabe (zA, spA, A) E (zA) E (spA) i= 1, zA, 1 j= 1, spA, 1 E(a[i,j]) trans (zA, spA, A, zC, spC, C) zC = s pA spC =zA i = 1, zC, 1 j = 1, spC, 1 c [ i,j ] = a [ j,i ] add (zA, spA, A, B, zC, spC, C) zC= zA spC=spA i= 1, zC, 1 j= 1, spC, 1 c [i,j]= a [i,j] + b [i,j] 13 mult (zA, spA, spB, A, B, zC, spC, C) zC= zA spC=spB i= 1, zC, 1 j= 1, spC, 1 c[i,j]=0 k=1,spA,1 c[i,j]=c[i,j]+a[i,k]*b[k,j] 21. A("Geben Sie die Information für einen Artikel ein") E(Art.Kategorie) E( Art.Bezeichnung) E(Art.Preis) E(Art.Anzahl) Art.Kategorie==1 or Art.Kategorie==2 Ja Nein A(" Der Wert für die Kategorie Ja Nein ist unzulässig") kf=Art.Preis*Art.Anzahl kf=Art.Preis*Art.Anzahl *1.07 *1.16 Artl.Kategorie==1 A("Kaufpreis= ",kf) 14 22. A("Wieviele Kunden ? ") E(anz) i=1,anz,1 E(best[i].datum.tag, best[i].datum.monat, best[i].datum.jahr) E(best[i].artnr) E(best[i].stueckzahl) E(best[i].preis) gespreis=0 i=1,anz,1 gespreis=gespreis+best[i].stueckzahl*best[i].preis A("Gesamtpreis für alle",anz,"Kunden= ",gespreis) 15 23. a) A("Eingabe Integer-Zahl: ") E(ele.zahl) ele.pz='' ele.zahl>=51 ele.zahl=ele.zahl-51 ele.pz=ele.pz+'T' ele.zahl>=29 ele.zahl=ele.zahl-29 ele.pz=ele.pz+'L' ele.zahl>=11 ele.zahl=ele.zahl-11 ele.pz=ele.pz+'E' ele.zahl>=3 ele.zahl=ele.zahl-3 ele.pz=ele.pz+'N' ele.zahl>=1 ele.zahl=ele.zahl-1 ele.pz=ele.pz+'K' A(ele.zahl, "entspricht der pascalinischen Ziffer ",ele.pz) 16 b) i=1,10,1 A("Eingabe", i,". Integer-Zahl: ") E(f[i].ele.zahl) f[i].ele.pz='' f[i].ele.zahl>=51 f[i].ele.zahl=f[i].ele.zahl-51 f[i].ele.pz=f[i].ele.pz+'T' f[i].ele.zahl>=29 f[i].ele.zahl=f[i].ele.zahl-29 f[i].ele.pz=f[i].ele.pz+'L' f[i].ele.zahl>=11 f[i].ele.zahl=f[i].ele.zahl-11 f[i].ele.pz=f[i].ele.pz+'E' f[i].ele.zahl>=3 f[i].ele.zahl=f[i].ele.zahl-3 f[i].ele.pz=f[i].ele.pz+'N' f[i].ele.zahl>=1 f[i].ele.zahl=f[i].ele.zahl-1 f[i].ele.pz=f[i].ele.pz+'K' A(f[i].ele.zahl, "entspricht der pascalinischen Ziffer ",f[i].ele.pz) 17 24. a) gewinn=0 i=1,1000,1 w1= Zufallszahl zw. 1 und 6 w2= Zufallszahl zw. 1 und 6 w3= Zufallszahl zw. 1 und 6 w=w1+w2+w3 w==15 Y gewinn= gewinn+2 N w==16 Y gewinn= gewinn+5 N w==17 Y N gewinn= gewinn+10 w==18 Y gewinn= gewinn+100 gewinn=gewinn-1 A(gewinn) 18 N b) i=1,1000,1 w1= Zufallszahl zw. 1 und 6 w2= Zufallszahl zw. 1 und 6 w3= Zufallszahl zw. 1 und 6 w[i]=w1+w2+w3 A(w[i]) gewinn=0 i=1,1000,1 w[i]==15 Y gewinn= gewinn+2 N w[i]==16 Y gewinn= gewinn+5 N w[i]==17 Y N gewinn= gewinn+10 w[i]==18 Y gewinn= gewinn+100 gewinn=gewinn-1 A(gewinn) c) i=3,18,1 inhalt[i]=0 i=1,1000,1 w1= Zufallszahl zw. 1 und 6 w2= Zufallszahl zw. 1 und 6 w3= Zufallszahl zw. 1 und 6 w=w1+w2+w3 inhalt[w]=inhalt[w]+1 i=3,18,1 A(i,inhalt[i]) gewinn=inhalt[15]*2+inhalt[16]*5+inhalt[17]*10+inhalt[18]*100-1000 A(gewinn) 19 N 25. E(kleinst, groest) zahl=Zufallszahl zw. kleinst und groest n=0 v=kleinst-1 v!=zahl n=n+1 A(n,"te Versuch:") E(v) v>zahl Y N A("Ihre Zahl ist zu gross!") v<zahl Y A("Ihre Zahl ist zu klein!") A("Erraten beim",n,"ten Versuch!!") N 26) r a 91 65 26 13 26 13 0 - Ausgabe: b 65 26 13 0 ggT = 13 - Beim zugrunde liegenden Algorithmus handelt es sich um den aus der Schule bekannten Euklidischen Algorithmus zur Bestimmung des größten gemeinsamen Teilers (ggT) zweier ganzer Zahlen. (Als größter gemeinsamer Teiler wurde im Trockentest 13 ermittelt.) -Wenn der kleinere Wert zuerst eingelesen wird, wird die Schleife nur einmal mehr durchlaufen. Beim ersten Durchlauf werden dabei die Werte von a und b vertauscht. Danach geht es wie oben weiter. 20