Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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?


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 :)

Geschrieben
Was wären hier die Werte von X sowie des Vektors v?
Spiel es mit Bleistift und Papier durch.

Und als Vorschlag bräuchte ich einen algorithmus der die Fakultät eines ganzen positiven sowie Null-Wertes rechnet, n!.
Ein erster Ansatz: Versuche zu formulieren, wie du als Mensch die Fakultät berechnen würdest.
Geschrieben

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]

?

^^

Geschrieben
also die Fakultät mit der Hand rechnen wäre nicht das Problem
Dann beschreib doch einfach mal die Vorgehensweise. Einfach in normaler menschlicher Sprache, keine Fachbegriffe.

Und bei dem ersten, wäre meine Vermutung, dass folgendes Resultat raus kommt:
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.
Geschrieben


fac(x)
{
var ergebnis=1;
if (x>1) ergebnis = x*fac(x-1);
return ergebnis;
}
[/php]

Die erste Aufgabe ist nicht korrekt beantwortet.

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].

Geschrieben
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.

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.

Geschrieben
Falls n=0, Resultat ist 1;

Solange n>1, rechne mit derselben Funktion n*(n-1)

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.

wenn man denn die Logik von dem Programm verstehen würde, wäre es ja auch einfach dies auf dem Papier durchzuspielen^^
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.

Das Resultat von lilith2k3 kommt mir schon spanisch vor ;) (also kann sein, dass es korrekt ist, aber ich verstehs nicht)
Es ist korrekt, auch wenn ich es nicht gut finde, dass er vorsagt ;)

solange x zwischen 1 inklusive und exklusive 8 ist, wird x+2 gerechnet also 3,4,5,6,7,8,9
Erklär mir doch mal, wie bei dir x jemals 4 wird.
Geschrieben (bearbeitet)
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.

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)

Erklär mir doch mal, wie bei dir x jemals 4 wird.

ich versteh's so: x geht ja von 1 bis exklusive 8;

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

fac(x)

{

var ergebnis=1;

if (x>1) ergebnis = x*fac(x-1);

return ergebnis;

}

da hätte ich noch eine Frage. Geht das so mit if? Sollte dies keine for oder while Schleife sein?

Bearbeitet von zerogravity
Geschrieben
n wäre 4 dann rechne ich resultat=4*(4-1), danach resultat*(4-1-1) bis halt (4-1-1-1)
Schon besser. Und jetzt beschreib die Vorgehensweise im allgemeinen Fall.

Wenn du mir sagst, den code einfach stumpf durchzugehn...das kommt dabei raus :/
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.

ABer mir ist der Zusammenhang Vektor/x nicht klar glaub ich mal.
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):

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[/code] 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 [COLOR="red"]2[/COLOR] 2 3 4 5 6 7 8
In der nächsten Anweisung wird x um 2 erhöht:
x v[1] v[2] v[3] v[4] v[5] v[6] v[7] v[8] 

[COLOR="red"]3[/COLOR] 2 2 3 4 5 6 7 8[/code] 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 [COLOR="red"]6[/COLOR] 4 5 6 7 8

usw.

Geschrieben

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);

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...