For-Schleife < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 13:45 Fr 12.01.2018 | Autor: | imzadi |
Aufgabe | In k soll die Anzahl der im Algorithmus ausgeführten Divisionen zurückgegeben werden. |
Guten Tag.
In meinem Code suche ich ggT von a und b, a größer b. Dafür teile ich mit Rest in der Schleife rückwärts von b bis 2. Damit ist alles klar. Ich muss aber Divisionen zählen und ich komme nicht darauf, wie. Vielleicht hat jemand für mich ein Stichwort. Das würde mir schon reichen. Deshalb poste ich hier auch kein Code-Beispiel. Vielen Dank.
|
|
|
|
Hiho,
wenn du über eine for-Schleife runterzählst…
k = 0;
for laufindex …
division
k = k+1;
end
Dabei wird nach jeder Division k um eins erhöht… und am Ende steht in k halt die Anzahl der Divisionen, die dein Programm gemacht hat.
Gruß,
Gono
|
|
|
|
|
Bei einer for-Schleife musst du normaler Weise nicht mitzählen, weil du ja zu Beginn schon weißt, wie oft diese durchlaufen wird (es sei denn, du springst vorzeitig heraus, was man aber nicht tun soll). Bei ggt ist eine While- oder Repeat-Schleife mit zu Beginn unbekannter Durchlaufanzahl angebracht und damit auch ein Zähler in der von dir angegebenen Form.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:05 Fr 12.01.2018 | Autor: | imzadi |
Super, vielen Dank!! Es hat auch schon geklappt. 😃😛😊
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:06 Fr 12.01.2018 | Autor: | Gonozal_IX |
Hiho,
> Bei einer for-Schleife musst du normaler Weise nicht
> mitzählen, weil du ja zu Beginn schon weißt, wie oft
> diese durchlaufen wird (es sei denn, du springst vorzeitig
> heraus, was man aber nicht tun soll).
Ja, oder man hat eine IF Anweisung drin.
In dem von mir angegebenen Beispiel wäre das aber tatsächlich unnötig, da hast du recht.
> Bei ggt ist eine
> While- oder Repeat-Schleife mit zu Beginn unbekannter
> Durchlaufanzahl angebracht und damit auch ein Zähler in
> der von dir angegebenen Form.
Wieso angebracht? Tatsächlich muss man ja maximal bis [mm] $\lfloor\sqrt{b}\rfloor$ [/mm] durchlaufen… und das sind auch die maximalen Divisionen, die man braucht.
Gruß,
Gono
|
|
|
|
|
Mit dem IF hast du recht, mit der Durchlaufzahl für den ggT aber nicht.
Mein Algorithmus für den ggT(a,b):
Eingabe a, b (beides [mm] \ne [/mm] 0)
Solange b>0 wiederhole
c=a mod b
a=b
b=c
ende wiederhole
Ausgabe a
Dann erhältst du für a=54 und b=36:
a b c
Eingabe 54 36 -
Werte NACH 1. Durchlauf 36 18 18
Werte NACH 1. Durchlauf 18 0 0
Ausgabe 18
schon nach 2 und nicht erst nach [mm] 6=\wurzel{36} [/mm] Durchläufen, oder noch extremer:
a b c
Eingabe 20 000 10 0000 -
Werte NACH 1. Durchlauf 10 000 0 0
Ausgabe 10 000
schon nach einem Durchlauf und nicht erst nach 100.
|
|
|
|