Wegstreckenberechnung per Kommandozeilenparameter - häää???



  • du gibst ein um dein Programm zu starten:

    programmname Startort Zwischenstop Ziel

    argv[0] = Programmname
    argv[1] = Startort
    argv[2] = Zwischenstop
    argv[3] = Zielort

    Du solltest es allerdings am besten so flexibel gestalten, dass du 0 bis x Zwischenstops eingeben kannst und das Programm die letzte Angabe als Zielort identifiziert.



  • aha, okay, ich denke ich begreife langsam was ich da so zu tun hab... ich werde jetzt mal ein wenig rumprobieren und dann den (wahrscheinlich falschen code) posten 💡 👍



  • guten abend^^
    also bis jetzt hab ich's so gelöst:

    //Preprozessoranweisungen
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<string.h>
    
    //Funktionsprotoypen
    int kdoCheck(char *argv[]);
    //Main
    int main(int argc, char *argv[]){
    //argc = Anzahl der mitgeschickten char-Pointer; argv = Feld von Strings
    
        //Städte
        int city[9][9] = {{0}};
        /* Angaben der Städteentfernungen zu finden in der Excel Tabelle*!/
        /*New York*/
        city[0][0] = 0; //New York - New York
        city[0][1] = 154;  //New York - Philadelphia
        city[0][2] = 346;  //New York - Boston
        city[0][3] = 2499;  //New York - Dallas
        city[0][4] = 1424;  //New York - Atlanta
        city[0][5] = 1773;  //New York - Memphis
        city[0][6] = 748;  //New York - Cleveland
        city[0][7] = 1759;  //New York - Tallahassee
        city[0][8] = 837;  //New York - Springfield
        city[0][9] = 2627;  //New York - Houston
        /*Philadelphia*/
        city[1][0] = 0; //Philadelphia - Philadelphia
        city[1][1] = 154; //Philadelphia - New York
        city[1][2] = 506; //Philadelphia - Boston
        city[1][3] = 2361; //Philadelphia - Dallas
        city[1][4] = 1246; //Philadelphia - Atlanta
        city[1][5] = 1635; //Philadelphia - Memphis
        city[1][6] = 695; //Philadelphia - Cleveland
        city[1][7] = 1613; //Philadelphia - Tallahassee
        city[1][8] = 826; //Philadelphia - Springfield
        city[1][9] = 2489; //Philadelphia - Houston
        /*Boston*/
        city[2][0] = 0; //Boston - Boston
        city[2][1] = 346; //Boston - New York
        city[2][2] = 506; //Boston - Philadelphia
        city[2][3] = 2843; //Boston - Dallas
        city[2][4] = 1768; //Boston - Atlanta
        city[2][5] = 2117; //Boston - Memphis
        city[2][6] = 1027; //Boston - Cleveland
        city[2][7] = 2115; //Boston - Tallahassee
        city[2][8] = 1316; //Boston - Springfield
        city[2][9] = 2971; //Boston - Houston
        /*Dallas*/
        city[3][0] = 0; //Dallas - Dallas
        city[3][1] = 2499; //Dallas - New York
        city[3][2] = 2361; //Dallas - Philadelphia
        city[3][3] = 2843; //Dallas - Boston
        city[3][4] = 1257; //Dallas - Atlanta
        city[3][5] = 729; //Dallas - Memphis
        city[3][6] = 1903; //Dallas - Cleveland
        city[3][7] = 1419; //Dallas - Tallahassee
        city[3][8] = 1633; //Dallas - Springfield
        city[3][9] = 385; //Dallas - Houston
        /*Atlanta*/
        city[4][0] = 0; //Atlanta - Atlanta
        city[4][1] = 1424; //Atlanta - New York
        city[4][2] = 1246; //Atlanta - Philadelphia
        city[4][3] = 1768; //Atlanta - Boston
        city[4][4] = 1257; //Atlanta - Dallas
        city[4][5] = 616; //Atlanta - Memphis
        city[4][6] = 1141; //Atlanta - Cleveland
        city[4][7] = 433; //Atlanta - Tallahassee
        city[4][8] = 871; //Atlanta - Springfield
        city[4][9] = 1277; //Atlanta - Houston
        /*Memphis*/
        city[5][0] = 0; //Memphis - Memphis
        city[5][1] = 1773; //Memphis - New York
        city[5][2] = 1635; //Memphis - Philadelphia
        city[5][3] = 2117; //Memphis - Boston
        city[5][4] = 729; //Memphis - Dallas
        city[5][5] = 616; //Memphis - Atlanta
        city[5][6] = 1177; //Memphis - Cleveland
        city[5][7] = 870; //Memphis - Tallahassee
        city[5][8] = 907; //Memphis - Springfield
        city[5][9] = 1043; //Memphis - Houston
        /*Cleveland*/
        city[6][0] = 0; //Cleveland - Cleveland
        city[6][1] = 748; //Cleveland - New York
        city[6][2] = 695; //Cleveland - Philadelphia
        city[6][3] = 1027; //Cleveland - Boston
        city[6][4] = 1903; //Cleveland - Dallas
        city[6][5] = 1141; //Cleveland - Atlanta
        city[6][6] = 1177; //Cleveland - Memphis
        city[6][7] = 1572; //Cleveland - Tallahassee
        city[6][8] = 297; //Cleveland - Springfield
        city[6][9] = 2214; //Cleveland - Houston
        /*Tallahassee*/
        city[7][0] = 0; //Tallahassee - Tallahassee
        city[7][1] = 1759; //Tallahassee - New York
        city[7][2] = 1613; //Tallahassee - Philadelphia
        city[7][3] = 2115; //Tallahassee - Boston
        city[7][4] = 1419; //Tallahassee - Dallas
        city[7][5] = 433; //Tallahassee - Atlanta
        city[7][6] = 870; //Tallahassee - Memphis
        city[7][7] = 1572; //Tallahassee - Cleveland
        city[7][8] = 1307; //Tallahassee - Springfield
        city[7][9] = 1141; //Tallahassee - Houston
         /*Springfield, OH*/
        city[8][0] = 0; //Springfield - Springfield
        city[8][1] = 837; //Springfield - New York
        city[8][2] = 826; //Springfield - Philadelphia
        city[8][3] = 1316; //Springfield - Boston
        city[8][4] = 1633; //Springfield - Dallas
        city[8][5] = 871; //Springfield - Atlanta
        city[8][6] = 907; //Springfield - Memphis
        city[8][7] = 297; //Springfield - Cleveland
        city[8][8] = 1307; //Springfield - Tallahassee
        city[8][9] = 1944; //Springfield - Houston
         /*Houston*/
        city[9][0] = 0; //Houston - Houston
        city[9][1] = 2627; //Houston - New York
        city[9][2] = 2489; //Houston - Philadelphia
        city[9][3] = 2971; //Houston - Boston
        city[9][4] = 385; //Houston - Dallas
        city[9][5] = 1277; //Houston - Atlanta
        city[9][6] = 1043; //Houston - Memphis
        city[9][7] = 2214; //Houston - Cleveland
        city[9][8] = 1141; //Houston - Tallahassee
        city[9][9] = 1944; //Houston - Springfield
    
        //Variablendeklarationen
        int i = 0;
    
        //Check, ob GENAU 3 Orte eingegeben wurden
        if(argc!=4) {
          kdoCheck();
        }
        else{
           printf("Falsche Anzahl von Argumenten! Bitte geben Sie genau 3 Orte an!\n");
           return 1;
        }
    
        printf("\n\n\n");
        system("pause");
        return 0;
    }
    /* Name der Funktion: kdoCheck
    *  Aufruf: main()
    *  Beschreibung: Diese Funktion überprüft ob die Eingaben des Users gültig 
    *  sind. Bei Fehler wird 1 returniert.
    */
    int kdoCheck(char *argv[]){
        int j;
    //abfrage ob eingegebene werte mit denen im feld übereinstimmen
        for(){
        }
    }
    

    In der KdoCheck funktion, ich verstehe nicht wie ich das überprüfen kann, iwie haperts da schon an der bedingung in der mitte der for...
    Anschliessend muss ich dann noch die berechnung lösen, ich hoffe ihr könnt mir helfen... 😞 😞
    Wie aus mir mal ein richtiger Programmierer werden soll, das frage ich mich wirklich... 😕 👎



  • Du übergibst nix an die Funktion, d.h. du müßtest den Weg per globaler Variable übergeben, was aber ehr weniger schön ist.
    => übergib die Parameter

    In der Funktion mußt du dann aus den Parameterangaben die Ziffern der Städte gewinnen und dann läuft das wohl nur noch so ab:

    Weg = city[x][y] + city[y][z]

    mit
    x = Startort
    y = Zwischenstop
    z = Zielort



  • danke für die antwort 🙂
    die parameter übergeben? also int kdoCheck(param1, param2); so in etwa?
    und das gewinnen der ziffern für die städte dann in einer schleife?

    oje langsam läuft mir die zeit davon, morgen um 8 uhr abends spätestens muss ichs abgeben 😡 ich will programmieren können!!! 😞



  • Hi!
    Abends abgeben? Machst du ne Abendschule?

    Gültigkeitsprüfung für die Eingabe:
    Du brauchst eine Liste mit allen Städten, z.B. char* cities[] = ...

    Dann brauchst du nur noch das argv-Array durchzugehen und jeden Eintrag
    beginnend mit Index 1 dieses Arrays im Städte-Array wieder zu finden.
    Da ja auch der Anfangsbuchstabe gültig sein soll, brauchst du also
    nur die Anfangsbuchstaben zu vergleichen.

    z.B. so:

    char* cities[] = { "New York", "Philadelphia", "Boston", "Dallas",
                            "Atlanta", "Memphis", "Cleveland", "Tallahassee",
                               "Springfield", "Houston", NULL };  
    char Error[256];
    
    int CitiesExist ( char* c[], unsigned n )
    {
        unsigned i = 0, z = 0;
        char** helper;
    
        for ( i = 1; i <= n; i++ ) // Beginne mit Index 1, 0 ist Programmname.
        {
            helper = cities;
            while ( *helper )
            {
                if ( **helper == c[i][0] )
                {
                     z++; // Anfangsbuchtabe erkannt.
                     break;                        
                }
                *helper++;
            }
            if ( ! *helper ) // Fehler speichern.
            {
              sprintf( Error, "Unknown city: %s\n", c[i] );
              break; // Abbruch bei der ersten unbekannten Stadt.
            }
    
        }
        if ( z == n ) return 0; // Alle Anfangsbuchstaben erkannt.
        else return 1; // Nicht alle Anfangsbuchstaben erkannt.
    }
    
    int main( int argc, char* argv[] ) 
    { 
        if ( argc < 2 ) // Mindestens ein Stadtname. Keine Maximumbegrenzung.
        {
          puts ( "Too few arguments!" );
          return 1;
        }
    
        if ( CitiesExist( argv, argc-1 ) )
            puts ( Error );
    
        return 0; 
    }
    

    Gruß,
    B.B.



  • Ne, aber wir haben so eine Online Plattform für Hausaufgaben etc. 🙂 👍
    Großes THX für den code, ich versteh das jetzt! ich werd mich morgen gleich nach der schule hinsetzen und nochma schnell alle kapitel durchgehen die mir da anscheinend fehlen, und dann endlich diese aufgabe fertig stellen! kann doch nicht so schwer sein 😡 😃 Ich werde programmieren können, das hab ich mir fest vorgenommen. 👍

    EDIT:
    Ich versteh zeile 13 ned ganz, woher nimmst du das "cities"? meinst du damit das städtefeld? das steht ja im main und nicht in der funktion?! 😕



  • Ahornsirup schrieb:

    Ne, aber wir haben so eine Online Plattform für Hausaufgaben etc. 🙂 👍
    Großes THX für den code, ich versteh das jetzt! ich werd mich morgen gleich nach der schule hinsetzen und nochma schnell alle kapitel durchgehen die mir da anscheinend fehlen, und dann endlich diese aufgabe fertig stellen! kann doch nicht so schwer sein 😡 😃 Ich werde programmieren können, das hab ich mir fest vorgenommen. 👍

    EDIT:
    Ich versteh zeile 13 ned ganz, woher nimmst du das "cities"? meinst du damit das städtefeld? das steht ja im main und nicht in der funktion?! 😕

    B.B. Hat die Variable cities ganz am Anfang global deklariert, so kann sie im gesamten Programm genutzt werden, also auch in Zeile 13.



  • Ahornsirup schrieb:

    guten abend^^
    also bis jetzt hab ich's so gelöst:

    int kdoCheck(char *argv[]){
        int j;
    //abfrage ob eingegebene werte mit denen im feld übereinstimmen
        for(){
        }
    }
    

    In der KdoCheck funktion, ich verstehe nicht wie ich das überprüfen kann, iwie haperts da schon an der bedingung in der mitte der for...
    Anschliessend muss ich dann noch die berechnung lösen, ich hoffe ihr könnt mir helfen... 😞 😞
    Wie aus mir mal ein richtiger Programmierer werden soll, das frage ich mich wirklich... 😕 👎

    Irgendwie sieht das so aus, als wenn du vielleicht nochmals einen Schritt zurücktreten solltest (Überblick verschaffen).
    Wenn du programmierst, überlege dir erst, was du machen willst (z.B. alle Parameter durchlaufen) und fange erst danach an zu programmieren.

    Hier sieht das so aus, als wenn dir die for-Schleife gefallen hat, du sie einfügst und dann überlegst, was man denn jetzt damit machen könnte.



  • tja leider hast du da nich ganz unrecht, manchmal zumindest 🙄 👎
    auf die sache mit der globalen variable hätt ich auch selber draufkommen können, seufz 🙄
    Ich glaube es hilft einem als Anfänger, sich mal auf nem zettel alles zu notieren was man machen will und DANN erst den pc einzuschalten... 🙂 programmieren ist wohl 90% hirn und 10% tippen 🙂
    Und genau das werde ich jetzt machen 🙂 👍



  • also ich habs jetzt wirklich geschafft, es ist zwar ein wenig... buggy^^" aber ich habs geschafft 🙂 so, und nun werden erst nochmal grundlagen nachgepaukt! 😃 🙄 😃

    Vielen herzlichen Dank für Eure Hilfe hier, tolle community! 👍 🙂 👍
    Ohne die denkschubser wär ich wohl nicht sehr weit gekommen. 😃
    Mein Programm ist zwar SEHR anfängerhaft und schlecht geschrieben, aber immerhin. 🕶 Irgendwie hab ich langsam richtig Bock auf C, auch wenn das hier wohl niemanden interessiert. 😃



  • Lol! Ich habe genau die selbe Aufgabe (HTL edvo)


Anmelden zum Antworten