Wegstreckenberechnung per Kommandozeilenparameter - häää???
-
Mehrdimensionale Arrays sind auch nicht schwerer als normale (eindimensionale). Aber es wäre schon schöner, wenn du die Daten in einer Datei auslagern würdest/könntest. Falls dir diese Option nicht verboten ist, würd ich sie nutzen. Das ist auch ganz schnell gelernt/verstanden.
Zwischenstationen:
Mache einfach mehrere Wegberechnungen und addiere:Aufruf:
"deinProgramm Berlin K Hamburg"Wegberechnung Berlin -> K
Wegberechnung K -> Hamburg
(Wer hat dir eigentlich so eine besch***** Abkürzung genannt ??? )
-
Korhil schrieb:
Mehrdimensionale Arrays sind auch nicht schwerer als normale (eindimensionale). Aber es wäre schon schöner, wenn du die Daten in einer Datei auslagern würdest/könntest. Falls dir diese Option nicht verboten ist, würd ich sie nutzen. Das ist auch ganz schnell gelernt/verstanden.
Zwischenstationen:
Mache einfach mehrere Wegberechnungen und addiere:Aufruf:
"deinProgramm Berlin K Hamburg"Wegberechnung Berlin -> K
Wegberechnung K -> Hamburg
(Wer hat dir eigentlich so eine besch***** Abkürzung genannt ??? )hö, welche abkürzung? naja daran kann nur mein prog-lehrer schuld sein
naja wir sollen schon die stoffgebiete nehmen die wir auch schon gemacht haben, in nem aufsatz wär das dann vielleicht "schön aber themenverfehlung".
den aufruf check ich grade nicht ganz, das heisst ich lese einmal das komplette berlin k hamburg per kdozeilenparameter ein, und dann nur den ersten string berling verarbeiten??? oder versteh ich das falsch?
-
du gibst ein um dein Programm zu starten:
programmname Startort Zwischenstop Ziel
argv[0] = Programmname
argv[1] = Startort
argv[2] = Zwischenstop
argv[3] = ZielortDu 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 ParameterIn 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)