Schleifen+ Schaltjahrberechnun < Algor.+Datenstr. < Theoretische Inform. < Hochschule < Informatik < Vorhilfe
|
Hallo!
Also ich kenne mich da überhaupt nicht aus, da ich in meinem ganzen Leben noch nie programmiert habe. Ich freue mich, wenn mir da jemand helfen könnte.
a) Gesucht ist ein Algorithmus int power("pfeil nach unten"p, "pfeil nach unten" q), welcher für ganzzahlige p>0 und q>0 die Funktion pq berechnet. Formulieren Sie drei Algorithmen mit den folgenden Schleifen:
(a) for
(b) while
(c) repeat
b)
Gesucht ist ein Algorithmus int daysInMonth("pfeil nach unten" m, "pfeil nach unten" y), welcher für ganzzahlige 1<=m<=12 und 1000<y<3000 die die Zahl der Tage im Monat m im Jahr y berechnet.
Danke die Hilfe.
mfg narutochen
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 16:55 Do 15.03.2007 | Autor: | Ankh |
> a) Gesucht ist ein Algorithmus int power("pfeil nach
> unten"p, "pfeil nach unten" q), welcher für ganzzahlige p>0
> und q>0 die Funktion pq berechnet. Formulieren Sie drei
> Algorithmen mit den folgenden Schleifen:
Meinst du wirklich p*q?
Dann, mal abgesehen von syntaktischen Feinheiten:
> (a) for
x := 0
for i := 1 to q
x := x+p
return x
> (b) while
x := 0
i := 1
while i <= q
x := x+p
i := i+1
return x
> (c) repeat
x := 0
i := 1
repeat
x := x+p
i := i+1
until i > q
return x
|
|
|
|
|
ups, es sollte [mm] p^q [/mm] heißen.
könntest du mir erklären was die Begriffe "repeat" und "return" heißen? Wäre dir dankbar.
mfg narutochen
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 23:40 Do 15.03.2007 | Autor: | Ankh |
> ups, es sollte [mm]p^q[/mm] heißen.
Dann musst du den Startwert für x ändern und statt der Addition in der Schleife eine Multiplikation ausführen.
> könntest du mir erklären was die Begriffe "repeat" und
> "return" heißen? Wäre dir dankbar.
"return x" gibt x als ergebniswert der funktion power(p,q) zurück.
"repeat" zeigt den anfang einer repeat-until-schleife an, das ende wird durch "until([bedingung])" markiert. Alles zwischen "repeat" und "until" wird zunächst einmal durchlaufen und anschließend so lange wiederholt, bis die Bedingung bei "until" erfüllt ist.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 23:51 Do 15.03.2007 | Autor: | Ankh |
> b)
> Gesucht ist ein Algorithmus int daysInMonth("pfeil nach
> unten" m, "pfeil nach unten" y), welcher für ganzzahlige
> 1<=m<=12 und 1000<y<3000 die die Zahl der Tage im Monat m
> im Jahr y berechnet.
int daysInMonth(m, y):
begin
d := 31
if (m=4)or(m=6)or(m=9)or(m=11) then d := 30
if (m=2)then begin
if (y/4=round(y/4) then d := 29
else d := 28
end
end
return d
Das erklärt sich hoffentlich von selbst. Ich habe angenommen, dass die Funktion round(x) die Nachkommastellen von x abschneidet, diese Funktion kann auch ganz anders heißen, je nachdem wo du programmierst. Ich habe damit nur getestet, ob y durch 4 teilbar ist. Die richtige Schaltjahrregel ist aber noch etwas komplizierter...
|
|
|
|
|
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Hallo Ankh!
Herzlichen Dank für deine Hilfe.
So ich hab jetzt mal nach deiner Anweisung die Algorithmen neu zusammengestellt.
Hier die Algorithmen:
> (a) for
int power (↓p, ↓q) {
p = 0
for (i = 1
q) {
p = p*q
}
return p
}
return -1
}
> (b) while
int power (↓p, ↓q) {
p = 0
i = 1
while (i <= q) {
p = p*q
i = i+1
}
return p
}
return -1
}
(c) repeat
int power (↓p, ↓q) {
p = 0
i = 1
repeat{
p = p*q
i = i+1
} until (i > q)
return p
}
return -1
}
Stimmt diese? Ehrlich gesagt, verstehe ich beim Beispiel 1 noch immer nicht was diese Algorithmen tatsächtlich bedeuten. Ja ich weiß schon, dass die Algorithmen p^q ausrechnen soll, aber warum multiplizieren und warum nach der Angabe int power (p, q) p=0 und i= 1 setzen?
Das Beispiel 2, omg, habe ich tatsächlich verstanden.
Danke nochmals.
mfg narutochen
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:57 Mo 19.03.2007 | Autor: | Ankh |
> Stimmt diese? Ehrlich gesagt, verstehe ich beim Beispiel 1
> noch immer nicht was diese Algorithmen tatsächtlich
> bedeuten. Ja ich weiß schon, dass die Algorithmen [mm] p^q [/mm]
> ausrechnen soll, aber warum multiplizieren und warum nach
> der Angabe int power (p, q) p=0 und i= 1 setzen?
Der Startwert für p sollte bei der Potenzberechnung immer 1 sein (neutrales Element der Multiplikation) und nicht Null (neutrales Element der Addition).
p ist der Wert der Potenz, er beträgt am Anfang 1 = "Pfeil" [mm] p^0, [/mm] und wird in jedem Schritt mit "Pfeil nach unten"p multipliziert. (Wichtig ist hier zu unterscheiden zwischen dem innerhalb der Funktion unveränderlichen Parameter "Pfeil"p und der lokalen Variable p (nenn sie besser anders, hier "pow"). pow nimmt also nacheinander die Werte [mm] p^0, p^1=1*p, p^2=p*p, p^3=p*p*p, [/mm] ..., [mm] p^q [/mm] an.
i ist nur eine Laufvariable, die anzeigt, wie oft die Schleife schon durchlaufen wurde. Jede Schleife sollte q mal durchlaufen werden. q-mal sollte mit p multipliziert werden.
Bin mir nicht sicher, aber ich glaube, nach jeder Anweisung muss ein Semikolon stehen.
|
|
|
|
|
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Hallo!
Also soll ich statt p=o, p=1 schreiben.
Das es wird dann so ausschauen:
> (a) for
int power (↓p, ↓q) {
p = 1
for (i = 1
q) {
p = p*q
}
return p
}
return -1
}
> (b) while
int power (↓p, ↓q) {
p = 1
i = 1
while (i <= q) {
p = p*q
i = i+1
}
return p
}
return -1
}
(c) repeat
int power (↓p, ↓q) {
p = 1
i = 1
repeat{
p = p*q
i = i+1
} until (i > q)
return p
}
return -1
}
Stimmt das jetzt?
Ajo, danke nochmals für deine Hilfe
mfg narutochen
PS: Semikolons, glaube ich sind in diesen Beispielen unwichtig.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 09:01 Di 20.03.2007 | Autor: | Ankh |
Ja, sieht gut aus.
Ist die Funktionsweise der for- , while-, und repeat-until-schliefe inzwischen klar? Sie machen im Prinzip alle das Gleiche: den Zähler i solange erhöhen, bis er gleich q ist (und außerdem die Multiplikation natürlich). Die Abbruchbedingung ist überall die gleiche, sie steht bei der for-Schleife als Obergrenze (q), bei der repeat-until-Schleife hinter dem until (i>q) und bei der while-Schleife steht stattdessen eine Nicht-Abbruchbedingung (i<=q).
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:57 Di 20.03.2007 | Autor: | narutochen |
Tja, ja, glaube ich. Ich glaube ich brauche einfach noch ein bisschen mehr Übungen.
Danke für deine Hilfe.
mfg narutochen
|
|
|
|