Hallo,
da ich nicht so wirklich fit bin in Sachen Algorithmen, wollte ich hier mal um Hilfe bitten um folgenden Algorithmus zu lösen:
Was wären hier die Werte von X sowie des Vektors v?
Code:v:=[1,2,3,4,5,6,7,8] for((x:=1);(x<8) do v[x]:=v[x]*2; x:=x+2 enddo);
Und als Vorschlag bräuchte ich einen algorithmus der die Fakultät eines ganzen positiven sowie Null-Wertes rechnet, n!.
Danke![]()
Ergebnis 1 bis 11 von 11
Algorithmus vorschlagen und einen lösen
Diskussion über Algorithmus vorschlagen und einen lösen in Algorithmik der Kategorie Programmierung; Hallo, da ich nicht so wirklich fit bin in Sachen Algorithmen, wollte ich hier mal um Hilfe bitten um folgenden ...
- 23.04.2012, 10:29 #1Reg.-Benutzer
- Reg.-Datum
- 30.06.2009
- Beiträge
- 9
Algorithmus vorschlagen und einen lösen
- 23.04.2012, 10:35 #2
- 23.04.2012, 11:06 #3Reg.-Benutzer
- Reg.-Datum
- 30.06.2009
- Beiträge
- 9
Hi,
also die Fakultät mit der Hand rechnen wäre nicht das Problem; so gesehn ist es ja eine rekursive Funktion mit n*(n-1) aber ich habe meine Probleme damit, dies so als algorithmus hinzuschreiben.
Und bei dem ersten, wäre meine Vermutung, dass folgendes Resultat raus kommt:
x=3,4,5,6,7,8,9
und der Vektor v:=[2,4,6,8,10,12,14,16]
?
^^
- 23.04.2012, 11:17 #4
Administrator + Moderator
C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
- Reg.-Datum
- 10.07.2001
- Ort
- Essen
- Beiträge
- 9.409
Dann beschreib doch einfach mal die Vorgehensweise. Einfach in normaler menschlicher Sprache, keine Fachbegriffe.
Vermutung? Du sollst nicht vermuten, du sollst das Programm auf dem Papier durchspielen. Da steht am Ende ein Ergebnis, keine Vermutung. Raten wird dich nicht weiterbringen."Funktioniert nicht" ist keine ausreichende Problembeschreibung.
- 23.04.2012, 11:26 #5
Die erste Aufgabe ist nicht korrekt beantwortet.PHP-Code:fac(x)
{
var ergebnis=1;
if (x>1) ergebnis = x*fac(x-1);
return ergebnis;
}
Die Zählervariable sieht wie folgt aus:
Initial ist es 1
dann 3
dann 5
dann 7
dann >8
Also werden die Elemente v[x] ; mit x € {1, 3, 5, 7} verändert.
Aus [1, 2, 3, 4, 5, 6, 7, 8] wird [2, 2, 6, 4, 10, 6, 14, 8].Experience is what you get when you didn't get what you wanted.
- 23.04.2012, 11:49 #6Reg.-Benutzer
- Reg.-Datum
- 30.06.2009
- Beiträge
- 9
Falls n=0, Resultat ist 1;
Solange n>1, rechne mit derselben Funktion n*(n-1)
wenn man denn die Logik von dem Programm verstehen würde, wäre es ja auch einfach dies auf dem Papier durchzuspielen^^
Das Resultat von lilith2k3 kommt mir schon spanisch vor
(also kann sein, dass es korrekt ist, aber ich verstehs nicht)
solange x zwischen 1 inklusive und exklusive 8 ist, wird x+2 gerechnet also 3,4,5,6,7,8,9 daher meine "Vermutung"
und der Wert des Vektors wird *2 multipliziert.
- 23.04.2012, 11:57 #7
Administrator + Moderator
C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
- Reg.-Datum
- 10.07.2001
- Ort
- Essen
- Beiträge
- 9.409
Für n = 4 (beispielsweise) rechne ich also 4 * 3, macht 12. Danach ist n immer noch 4, also rechne ich nochmal 4 *3, und nochmal und nochmal und nochmal. Das kommt zu keinem Ende.
Ich traue dir zu, dass du eine Fakultät korrekt ausrechnen kannst. Also gibt diese Beschreibung nicht wieder, wie du dabei vorgehst.
Du brauchst die Logik nicht zu verstehen, um das Programm durchzuspielen, du musst ja nur stumpf Anweisungen befolgen. Du sollst das durchspielen, damit du die Logik verstehst.
Es ist korrekt, auch wenn ich es nicht gut finde, dass er vorsagt
Erklär mir doch mal, wie bei dir x jemals 4 wird."Funktioniert nicht" ist keine ausreichende Problembeschreibung.
- 24.04.2012, 11:47 #8Reg.-Benutzer
- Reg.-Datum
- 30.06.2009
- Beiträge
- 9
Hm ja also 4! wäre ja 4*3*2*1
n wäre 4 dann rechne ich resultat=4*(4-1), danach resultat*(4-1-1) bis halt (4-1-1-1)
ich versteh's so: x geht ja von 1 bis exklusive 8;Erklär mir doch mal, wie bei dir x jemals 4 wird.
und x:=x+2 also alle x von 1 bis 7 wird 2 addiert.
Wenn du mir sagst, den code einfach stumpf durchzugehn...das kommt dabei raus :/
ABer mir ist der Zusammenhang Vektor/x nicht klar glaub ich mal.
Danke
da hätte ich noch eine Frage. Geht das so mit if? Sollte dies keine for oder while Schleife sein?fac(x)
{
var ergebnis=1;
if (x>1) ergebnis = x*fac(x-1);
return ergebnis;
}Geändert von zerogravity (24.04.2012 um 11:55 Uhr)
- 24.04.2012, 12:07 #9
Administrator + Moderator
C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
- Reg.-Datum
- 10.07.2001
- Ort
- Essen
- Beiträge
- 9.409
Schon besser. Und jetzt beschreib die Vorgehensweise im allgemeinen Fall.
Ich glaube, dir ist nicht klar, was mit "Durchgehen" gemeint ist. Du sollst den Anfangswert jeder Variablen aufschreiben, und dann das Programm Anweisung für Anweisung durchgehen, und die Änderungen der Variablenwerte aufschreiben.
Es gibt keinen Zusammenhang. Die Variablen sind unabhängig.
Du hast einen Vektor v mit 8 Zahlen, und eine weitere Zahl x.
So sieht's zu Beginn aus (alles unter der Annahme, dass der Index des Vektors 1-basiert ist):
Jetzt gehst du das Programm durch bis zur ersten Anweisung, die etwas verändert. Das ist v[x]:=v[x]*2. x ist 1, also multiplizierst du v[1] mit 2:Code:x v[1] v[2] v[3] v[4] v[5] v[6] v[7] v[8] 1 1 2 3 4 5 6 7 8
In der nächsten Anweisung wird x um 2 erhöht:Code:x v[1] v[2] v[3] v[4] v[5] v[6] v[7] v[8] 1 2 2 3 4 5 6 7 8
Dann wird die Schleifenbedingung geprüft. x < 8 ist wahr, also geht es wieder von vorn los: v[x] wird verdoppelt:Code:x v[1] v[2] v[3] v[4] v[5] v[6] v[7] v[8] 3 2 2 3 4 5 6 7 8
usw.Code:x v[1] v[2] v[3] v[4] v[5] v[6] v[7] v[8] 3 2 2 6 4 5 6 7 8
"Funktioniert nicht" ist keine ausreichende Problembeschreibung.
- 24.04.2012, 22:56 #10Reg.-Benutzer
- Reg.-Datum
- 30.06.2009
- Beiträge
- 9
Guten Abend,
danke für die Antworten!
jetzt hab ich den Alg verstanden und es ist wirklich logisch. ich war da irgendwie auf einem Holzweg; habe das komplett anders interpretiert :/
Das hat mir jetzt echt geholfen
und wegen der Fakultät,
da ist es ja so, dass dieser rekursiv augerufen wird solange x>=1. aber es muss ja zu Beginn noch ein if x==0 hin dann ist das Resultat 1.
if (x == 0) return 1;
else return x * fac(x-1);
- 25.04.2012, 21:39 #11
Den Schritt kannst Du Dir schenken. Prüfe einfach ob x>1 ist, ansonsten gebe 1 zurück. Dann hast Du die Überprüfung mit 0 gespart!
Experience is what you get when you didn't get what you wanted.
Aktive Benutzer
Aktive Benutzer
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Ähnliche Themen
-
aufgabe zu lösen
Von russwurm7 im Forum JavaAntworten: 1Letzter Beitrag: 01.12.2009, 12:12 -
Wie beurteile ich einen Algorithmus?
Von gatow im Forum AlgorithmikAntworten: 3Letzter Beitrag: 27.04.2007, 09:43 -
Wie rekursiv lösen?
Von TheBest im Forum C und C++Antworten: 2Letzter Beitrag: 14.06.2006, 06:02 -
Lösen einer Subnetaufgabe
Von tatanka im Forum Prüfungsaufgaben und -lösungenAntworten: 12Letzter Beitrag: 10.05.2003, 20:23 -
Domainnamen vorschlagen
Von Slayer8 im Forum Internetdienste und -dienstleisterAntworten: 2Letzter Beitrag: 05.08.2002, 15:01


LinkBack URL
About LinkBacks
Zitieren