Join fachinformatiker.de Forum Now
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 ...

  1. #1
    Reg.-Benutzer
    Reg.-Datum
    30.06.2009
    Beiträge
    9

    Standard Algorithmus vorschlagen und einen lösen

    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


  2. #2
    Administrator + Moderator
    C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
    Avatar von Klotzkopp
    Reg.-Datum
    10.07.2001
    Ort
    Essen
    Beiträge
    9.409

    Standard

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

    Zitat Zitat von zerogravity Beitrag anzeigen
    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.
    "Funktioniert nicht" ist keine ausreichende Problembeschreibung.

  3. #3
    Reg.-Benutzer
    Reg.-Datum
    30.06.2009
    Beiträge
    9

    Standard

    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]

    ?
    ^^

  4. #4
    Administrator + Moderator
    C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
    Avatar von Klotzkopp
    Reg.-Datum
    10.07.2001
    Ort
    Essen
    Beiträge
    9.409

    Standard

    Zitat Zitat von zerogravity Beitrag anzeigen
    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.

    Zitat Zitat von zerogravity Beitrag anzeigen
    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.
    "Funktioniert nicht" ist keine ausreichende Problembeschreibung.

  5. #5
    Reg.-Benutzer Avatar von lilith2k3
    Reg.-Datum
    10.03.2010
    Ort
    Osnabrück
    Beiträge
    1.011

    Standard

    PHP-Code:
    fac(x)
    {
         var 
    ergebnis=1;
         if (
    x>1ergebnis x*fac(x-1);
         return 
    ergebnis;

    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].
    Experience is what you get when you didn't get what you wanted.

  6. #6
    Reg.-Benutzer
    Reg.-Datum
    30.06.2009
    Beiträge
    9

    Standard

    Zitat Zitat von Klotzkopp Beitrag anzeigen
    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.

  7. #7
    Administrator + Moderator
    C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
    Avatar von Klotzkopp
    Reg.-Datum
    10.07.2001
    Ort
    Essen
    Beiträge
    9.409

    Standard

    Zitat Zitat von zerogravity Beitrag anzeigen
    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.

    Zitat Zitat von zerogravity Beitrag anzeigen
    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.

    Zitat Zitat von zerogravity Beitrag anzeigen
    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

    Zitat Zitat von zerogravity Beitrag anzeigen
    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.
    "Funktioniert nicht" ist keine ausreichende Problembeschreibung.

  8. #8
    Reg.-Benutzer
    Reg.-Datum
    30.06.2009
    Beiträge
    9

    Standard

    Zitat Zitat von Klotzkopp Beitrag anzeigen
    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?
    Geändert von zerogravity (24.04.2012 um 11:55 Uhr)

  9. #9
    Administrator + Moderator
    C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
    Avatar von Klotzkopp
    Reg.-Datum
    10.07.2001
    Ort
    Essen
    Beiträge
    9.409

    Standard

    Zitat Zitat von zerogravity Beitrag anzeigen
    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.


    Zitat Zitat von zerogravity Beitrag anzeigen
    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.

    Zitat Zitat von zerogravity Beitrag anzeigen
    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):
    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
    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   2    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] 
    
    3   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    6    4    5    6    7    8
    usw.
    "Funktioniert nicht" ist keine ausreichende Problembeschreibung.

  10. #10
    Reg.-Benutzer
    Reg.-Datum
    30.06.2009
    Beiträge
    9

    Standard

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

  11. #11
    Reg.-Benutzer Avatar von lilith2k3
    Reg.-Datum
    10.03.2010
    Ort
    Osnabrück
    Beiträge
    1.011

    Standard

    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

  1. aufgabe zu lösen
    Von russwurm7 im Forum Java
    Antworten: 1
    Letzter Beitrag: 01.12.2009, 12:12
  2. Wie beurteile ich einen Algorithmus?
    Von gatow im Forum Algorithmik
    Antworten: 3
    Letzter Beitrag: 27.04.2007, 09:43
  3. Wie rekursiv lösen?
    Von TheBest im Forum C und C++
    Antworten: 2
    Letzter Beitrag: 14.06.2006, 06:02
  4. Lösen einer Subnetaufgabe
    Von tatanka im Forum Prüfungsaufgaben und -lösungen
    Antworten: 12
    Letzter Beitrag: 10.05.2003, 20:23
  5. Domainnamen vorschlagen
    Von Slayer8 im Forum Internetdienste und -dienstleister
    Antworten: 2
    Letzter Beitrag: 05.08.2002, 15:01