Return der Funktion



  • Hallo,

    hoffe mir kann hier jemand von Zeit zu Zeit helfen - dieses Forum scheint ja, im Vergleich zu anderen, ganz belebt zu sein. Ich studiere derzeit Informatik im 1. Semester und muß mich mit c auseinandersetzen - was mir sehr gefällt.

    Bei folgender Aufgabe komme ich nicht weiter:
    Es ist ein Programm was anhand eines zweidimensionalen arrays die fahrtkosten errechnet. Leider krieg ich die Übergabe der Funktion nicht hin - es schint auch so, daß die Kilometererrechnung nicht funktioniert 😕

    Danke im voraus!

    #include <stdio.h>
    #include <stdlib.h>

    float fahrtkosten(int start, int ziel, int vkmittel)
    {
    int entfernung[4][4]={(0, 350, 450, 400),
    (340, 0 , 900, 500),
    (420, 880, 0, 280),
    (630, 480, 300, 0)};

    int km;
    float autopreis=0.40, bahnpreis=0.38, gesamtpreis;

    // Berechnung des Preises
    if (start>ziel)
    {
    if (vkmittel=1)
    {
    km = entfernung[start][ziel];
    autopreis = autopreis * km;
    }
    else if (vkmittel=2)
    km = entfernung[start][ziel];
    autopreis = autopreis * km;
    }
    else if (ziel>start)
    {
    if (vkmittel=1)
    {
    km = entfernung[start][ziel];
    autopreis = autopreis * km;
    }
    else if (vkmittel=2)
    km = entfernung[ziel][start];
    autopreis = autopreis * km;
    }

    return start;
    return ziel;
    return vkmittel;

    }

    int main(int argc, char* argv[])
    {
    char stadt[4][10]={"Frankfurt", "Muenchen", "Hamburg", "Berlin"};
    char verkehrsmittel[3][10]={"", "Auto", "Bahn"};
    float preis;

    int start, ziel, vkmittel, i;

    // Header
    printf("Fahrtkostenberechnung\n");
    printf("---------------------\n");

    // Start und Ziel
    for (i=0; i<=3; i++)
    printf("%d %s\n", i, stadt[i]);
    printf("Startort: ");
    scanf ("%d", &start);
    printf("Zielort: ");
    scanf ("%d", &ziel);
    printf("Verkehrsmittel: \n");

    // Verkehrsmittel
    for (i=1; i<=2; i++)
    printf("%d %s\n", i, verkehrsmittel[i]);
    printf("Wahl: ");
    scanf ("%d", &vkmittel);

    // Funktionsaufruf
    preis = fahrtkosten(start, ziel, vkmittel);

    // Ausgabe des Fahrtkostenpreises
    printf("Fahrt von %s nach %s mit %s\n",
    stadt[start], stadt[ziel], verkehrsmittel[vkmittel]);
    printf("Fahrtkosten: %6.2f\n", preis);

    return 0;
    }



  • Hi,

    benutze bitte das nächste mal Code-Tags, so ist es übersichtlicher.

    return start; 
    return ziel; 
    return vkmittel;
    

    Ein return beendet die Funktion und kehrt zum Aufrufer zurück.
    Die beiden letzten Zeilen werden also nie erreicht werden.



  • [EDIT] selber Inhalt wie bei SeppSchrot [/EDIT]
    Wenn du den C/C++-Button unter dem Postfenster benutzt, kann man gleich alles viel besser lesen. Hilfreich ist auch Einrückung, die ich jetzt nicht vorgenommen habe:

    #include <stdio.h>
    #include <stdlib.h>
    
    float fahrtkosten(int start, int ziel, int vkmittel)
    {
    int entfernung[4][4]={(0, 350, 450, 400),
    (340, 0 , 900, 500),
    (420, 880, 0, 280),
    (630, 480, 300, 0)};
    
    int km;
    float autopreis=0.40, bahnpreis=0.38, gesamtpreis;
    
    // Berechnung des Preises
    if (start>ziel)
    {
    if (vkmittel=1)
    {
    km = entfernung[start][ziel];
    autopreis = autopreis * km;
    }
    else if (vkmittel=2)
    km = entfernung[start][ziel];
    autopreis = autopreis * km;
    }
    else if (ziel>start)
    {
    if (vkmittel=1)
    {
    km = entfernung[start][ziel];
    autopreis = autopreis * km;
    }
    else if (vkmittel=2)
    km = entfernung[ziel][start];
    autopreis = autopreis * km;
    }
    
    return start;
    return ziel;
    return vkmittel;
    
    }
    
    int main(int argc, char* argv[])
    {
    char stadt[4][10]={"Frankfurt", "Muenchen", "Hamburg", "Berlin"};
    char verkehrsmittel[3][10]={"", "Auto", "Bahn"};
    float preis;
    
    int start, ziel, vkmittel, i;
    
    // Header
    printf("Fahrtkostenberechnung\n");
    printf("---------------------\n");
    
    // Start und Ziel
    for (i=0; i<=3; i++)
    printf("%d %s\n", i, stadt[i]);
    printf("Startort: ");
    scanf ("%d", &start);
    printf("Zielort: ");
    scanf ("%d", &ziel);
    printf("Verkehrsmittel: \n");
    
    // Verkehrsmittel
    for (i=1; i<=2; i++)
    printf("%d %s\n", i, verkehrsmittel[i]);
    printf("Wahl: ");
    scanf ("%d", &vkmittel);
    
    // Funktionsaufruf
    preis = fahrtkosten(start, ziel, vkmittel);
    
    // Ausgabe des Fahrtkostenpreises
    printf("Fahrt von %s nach %s mit %s\n",
    stadt[start], stadt[ziel], verkehrsmittel[vkmittel]);
    printf("Fahrtkosten: %6.2f\n", preis);
    
    return 0;
    }
    

    Deine Funktion hat drei returns hintereinander, aber nur das erste wird ausgeführt, weil die Funktion nach einem return beendet wird und beim Aufrufpunkt der Funktion weitergemacht wird.



  • Hi,

    will nächsten winter wahrscheinlich auch auf der fh informatik anfangen. Ist es bei dir bis jetzt zu empfehlen, sofern du auf der fh studierst?

    Zum Thema:

    Michael E. schrieb:

    return start;
    return ziel;
    return vkmittel;

    Hier wird nur der erste wert returned und die funktion verlassen.
    möchtest du mehrere rückgabewerte einer funktion, musst du vom
    hauptprogramm aus die adressen deiner variablen der funktion
    übergeben um dort die werte abzulegen. Also übergib der funktion
    fahrtkosten pointer auf die variablen start, ziel, vkmittel!

    :xmas2: b4sh0r :xmas2:



  • Hallo,

    danke - das hat weitergholfen.

    @Michael: mir gefällt das Studium an der fh sehr gut, weil es im Gegensatz zur Uni sehr praxisorientiert ist. Es gibt immer eine Möglichkeit bei einer Voresung Gast zu sein - einfach mal anfragen.



  • Hallo,

    danke - das hat weitergholfen.

    @Michael: mir gefällt das Studium an der fh sehr gut, weil es im Gegensatz zur Uni sehr praxisorientiert ist. Es gibt immer eine Möglichkeit bei einer Voresung Gast zu sein - einfach mal anfragen.



  • Hilfe, was hab ich angerichtet?

    Ich hab nur den Code vom Threadersteller in C++-Tags gepostet, um es für die anderen besser lesbar zu machen und schon sagt /bin/bash0R *Mir*, was *ich* angeblich falsch gemacht habe. Und ich hab Spawny auch nicht gefragt, wie es an ner FH ist 😕 😕



  • sorry das war mein fehler, ich habe nämlich michael e. zitiert.



  • Verwirrung nicht nur hier, sondern auch bei meinem Programm.

    Ich krieg den zweidimensionalen array nicht gelesen:

    km = entfernung[start][ziel];
    

    das ergebnis ist 0 - kann aber nicht sein 😕

    *nochmal hilfe brauch*



  • Spawny schrieb:

    Ich krieg den zweidimensionalen array nicht gelesen:

    km = entfernung[start][ziel];
    

    das ergebnis ist 0 - kann aber nicht sein 😕

    Ist auch nicht so. Das Problem ist, dass du start aus fahrtkosten() zurückgibst, was ja nicht dem Fahrtkostenpreis entspricht.

    btw:
    Diese Bedingung

    if (vkmittel=1)
    

    ist immer wahr, da vkmittel der Wert 1 zugewiesen wird. Anschliessend wird dieser Wert in einen boolschen Ausdruck umgewandelt. 0 evaluiert dabei zu false, alles andere zu true.

    autopreis = autopreis * km;
    

    Für sowas gibts die verschiedenen Assignment Operatoren
    ➡

    autopreis *= km;
    


  • Ok,

    if (vkmittel=1)
    

    in

    if (vkmittel==1)
    

    geändert.

    autopreis = autopreis * km;
    

    in

    gesamtpreis = autopreis * km;
    

    geändert.

    Habe leider immer noch nicht verstanden, wie ich nun meine array auslesen kann?!



  • Habe herausgefunden dass der array nur bei Auswahl Start = 1 und Ziel = 0 ein ergebnis zurückbringt. Nämlich der Wert 500 - wie kommt das ???


Anmelden zum Antworten