Programmieraufgabe



  • ok, verstehe
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-205299-and-postdays-is-0-and-postorder-is-asc-and-start-is-10.html

    du willst bezahlen.

    solltest du auch dazuschreiben, sonst kappiert das logischerweise keiner.



  • Ja hatte ich vergessen dazu zu schreiben!!!also wer lust hat mir so ein programm zu schreiben kann sich ja melden!



  • hier schonmal der code der teil 1 der aufgabe erledigen könnte 😃 vielleicht erbarmen sich noch andere die weiteren teile zu ergänzen, lol

    #define _GNU_SOURCE
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    const char* cities[10]  =
    {	"Aachen", "Berlin", "Bremen", "Dresden", "Essen",
    	"Hannover", "Leipzig", "Muenchen", "Osnabrueck", "Stuttgart" };
    
    static const int dist[10][10] =
    {
    	{ 0, 637, 369, 651, 123, 354, 573, 650, 256, 408 },
    	{ 637, 0, 357, 214, 480, 258, 184, 596, 410, 631 },
    	{ 369, 375, 0, 478, 249, 118, 367, 766, 120, 645 },
    	{ 651, 214, 478, 0, 581, 385, 140, 496, 590, 531 },
    	{ 123, 480, 249, 581, 0, 258, 475, 646, 135, 472 },
    	{ 354, 258, 118, 385, 258, 0, 252, 647, 135, 526 },
    	{ 573, 184, 367, 140, 475, 252, 0, 436, 410, 471 },
    	{ 650, 596, 766, 496, 646, 647, 436, 0, 655, 210 },
    	{ 256, 410, 120, 590, 135, 135, 410, 655, 0, 557 },
    	{ 408, 631, 645, 531, 472, 526, 471, 210, 557, 0 }
    };
    
    int getcmd()
    {
    	char* inbuf = NULL;
    	int temp;
    	size_t n = 0;
    
    	getline(&inbuf, &n, stdin);
    	if (n == 0)
    	{
    		free(inbuf);
    		return -2;
    	}
    	if ((n > 3) && (!memcmp(inbuf, "quit", 4)))
    	{
    		free(inbuf);
    		return -1;
    	}
    	if ((inbuf[0] < 0x30) || (inbuf[0] > 0x39))
    	{
    		free(inbuf);
    		return -3;
    	}
    	temp = inbuf[0] & 0xF;
    	free(inbuf);
    	return temp;
    }
    
    int main(int argc, char* argv[])
    {
    	int start, end;
    
    	while (1)
    	{
    		system("clear");
    		printf("(0) Aachen\n(1) Berlin\n(2) Bremen\n(3) Dresden\n(4) Essen\n(5) Hannover\n");
    		printf("(6) Leipzig\n(7) Muenchen\n(8) Osnabrueck\n(9) Stuttgart\n");
    		printf("start > ");
    
    		start = getcmd();
    		if (start == -1) return 0;
    		if (start < -1) continue;
    		else break;
    	}
    	while (1)
    	{
    		system("clear");
    		printf("(0) Aachen\n(1) Berlin\n(2) Bremen\n(3) Dresden\n(4) Essen\n(5) Hannover\n");
    		printf("(6) Leipzig\n(7) Muenchen\n(8) Osnabrueck\n(9) Stuttgart\n");
    		printf("end  > ");
    
    		end = getcmd();
    		if (end == -1) return 0;
    		if (end < -1) continue;
    		else break;
    	}
    	printf("\nTicket von %s nach %s (%d km).\nBasispreis: %.2f€.\n\n", cities[start], cities[end],
    		dist[start][end], (dist[start][end]*15.0f)/100.0f);
    	return 0;
    }
    


  • #include <iostream>
    
    using namespace std;
    
    int main()
    {
        char input;
    
        int betrag;
    
        bool quit = true;
    
        while(quit)
        {
        cout<<"(0)ICE(6,00€)\n(1)Intercity(4,00€)\n(2)Fahrradmitnahme(3,00€)\n";
    
        cin>>input;
        switch (input)
        {
               case '0' :
                    cout<<"ICE gewaehlt! J/N?\n";
                    cin>>input;
                    switch (input)
                    {
                           case 'j':
                                betrag =+ 6;
                                break;
                           case 'J':
                                betrag =+ 6;
                                break;
                           case 'n':
                                continue;
                           case 'N':
                                continue;
                           default:
                                   cout<<"Falsche Eingabe!!!\n";
                                   continue;
                    }
                   quit = false;
                   break;
               case '1' :
                    cout<<"Intercity gewaehlt! J/N?\n";
                    cin>>input;
                    switch (input)
                    {
                           case 'j':
                                betrag =+ 4;
                                break;
                           case 'J':
                                betrag =+ 4;
                                break;
                           case 'n':
                                continue;
                           case 'N':
                                continue;
                           default:
                                   cout<<"Falsche Eingabe!!!\n";
                                   continue;
                    }
                   quit = false;
                   break;
               case '2' :
                    cout<<"Fahhrradmitnahme gewaehlt! J/N?\n";
                    cin>>input;
                    switch (input)
                    {
                           case 'j':
                                betrag =+ 3;
                                break;
                           case 'J':
                                betrag =+ 3;
                                break;
                           case 'n':
                                continue;
                           case 'N':
                                continue;
                           default:
                                   cout<<"Falsche Eingabe!!!\n";
                                   continue;
                    }
                   quit = false;
                   break;
               default:
                       cout<<"Falsche Eingabe!!!\n";
                       break;
        }
    }
    
    cout<<"Kosten: "<<betrag<<"€\n";
    
    cin>>input;
    
        return EXIT_SUCCESS;
    }
    

    das wäre dann aufgabe 2!
    für Betrag muss man noch den wert von vorhin einsetzen!
    am besten ganz am anfang.



  • @Star69:
    Ich habs dir 3x bewusst geloescht weil du einfach nur eine Aufgabe reingepostet hast die keine Honorarangabe gemacht hast. Zu deinem Glueck hat sich jemand erbarmt und dir einen Teil kostenfrei erstellt. Vielleicht hast du weiter Glueck, und es erbarmt sich nocheiner, ansonsten mach bitte ein Angebot (in Eur) oder das landet wieder im Papierkorb.



  • Danke danke!!Das ist echt super!da kann ich schon viel mit anfangen!sorry aber ich dachte das man dann den preis verhandelt! bin neu hier und wußte es nicht besser!



  • ******



  • Star69 schrieb:

    Ich würde 45€ dafür bezahlen wenn mir einer das komplette programm in c schreibt und alle Quelltexte sollten kommentiert werden

    Die 45€ könnte man sich auch sparen, wenn man ein bisschen selbst probieren würde. Man muss eigentlich nur mit if/switch abfragen und scheliefen arbeiten.
    Muss es nur Konsole oder auch mit GUI sein?
    Bis wann muss es fertig sein.



  • Hab leider nicht so viel ahnung!denke nur konsole.Wir haben da so ein programm MinGW! Und dort steht noch das es mit visual-C oder einem Gnu-compiler übersetzen lassen sollte!so einfach wie möglich!
    Wie schnell kann man denn sowas schaffen!Bis montag oder so?



  • also ich verscuhs mal in c. ich programmier hauptsächlcih c++. muss dann eben einige andre funktionen benutzen. aber bis montag ist es denke ich zu schaffen.



  • Cool das wäre echt super wenn das klappt!Kannst ja mir dann schreiben oder ich meld mich bis dahin nochmal!Ich hab ja auch icq!wenn du ein skript dafür brauchst dann kann ich dir eins schicken! schonmal DANKE !!
    mfg!



  • Dieser Thread wurde von Moderator/in Korbinian aus dem Forum Projekte in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • wofür ein script??
    das ist meine email: tweenkit[at]gmail.com



  • sothis_ schrieb:

    hier schonmal der code der teil 1 der aufgabe erledigen könnte 😃 vielleicht erbarmen sich noch andere die weiteren teile zu ergänzen, lol

    const char* cities[10]  =
    {	"Aachen", "Berlin", "Bremen", "Dresden", "Essen",
    	"Hannover", "Leipzig", "Muenchen", "Osnabrueck", "Stuttgart" };
    ...
    

    bin mir nicht sicher aber solltest du sicherheitshalber nicht noch eine 0 als letztes element in das array schreiben. wenn ich solche 2-dim arrays durchgehn will krieg ich nämlich ohne eine nullterminierung immer probleme...



  • @sothis_ könntest du mir mal dein getcmd() erklären?
    ich hab noch nicht ganz umrissen was das alles prüft?
    wie wird getline() eingesetzt? was ist der 2. parameter. soll dort hinein geschriebden werden wie lang der input war? oder wie groß er maximal sein darf? ich denk mal 2tens ist richtig?



  • tweenki schrieb:

    @sothis_ könntest du mir mal dein getcmd() erklären?
    ich hab noch nicht ganz umrissen was das alles prüft?
    wie wird getline() eingesetzt? was ist der 2. parameter. soll dort hinein geschriebden werden wie lang der input war? oder wie groß er maximal sein darf? ich denk mal 2tens ist richtig?

    oh, das war auf die schnelle geschrieben 😛 getline ist eine GNU erweiterung, deswegen bin ich nicht sicher ob das auch in der msvcrt in windows vorhanden ist.

    int getcmd()
    {
        char* inbuf = NULL;
        int temp;
        size_t n = 0;
    
        getline(&inbuf, &n, stdin);
    

    wenn inbuf NULL ist, alloziert getline() mit malloc soviel speicher wie nötig, wenn inbuf nicht NULL ist, passt getline() den puffer mit realloc() an. nach n wird, wie du vermutet hast, die anzahl der zeichen ohne den newline character geschrieben wenn n vorher 0 war, wenn n > 0 dann liest getline genau soviel zeichen vom stream. der dritte parameter ist selbsterklärend 🙂

    if (n == 0)
        {
            free(inbuf);
            return -2;
        }
    

    da war ich mir nicht sicher, ob dieser fall überhaupt mit getline eintreten kann, ist also nur sicherheitshalber da 😛

    if ((n > 3) && (!memcmp(inbuf, "quit", 4)))
        {
            free(inbuf);
            return -1;
        }
    

    beenden wenn "quit" eingegeben wurde 🙂

    if ((inbuf[0] < 0x30) || (inbuf[0] > 0x39))
        {
            free(inbuf);
            return -3;
        }
    

    -3 zurückgeben wenn das erste zeichen keine zahl ist

    temp = inbuf[0] & 0xF;
        free(inbuf);
        return temp;
    }
    

    ansonsten eben diese zahl zurückgeben 🙂



  • andy p. schrieb:

    sothis_ schrieb:

    hier schonmal der code der teil 1 der aufgabe erledigen könnte 😃 vielleicht erbarmen sich noch andere die weiteren teile zu ergänzen, lol

    const char* cities[10]  =
    {	"Aachen", "Berlin", "Bremen", "Dresden", "Essen",
    	"Hannover", "Leipzig", "Muenchen", "Osnabrueck", "Stuttgart" };
    ...
    

    bin mir nicht sicher aber solltest du sicherheitshalber nicht noch eine 0 als letztes element in das array schreiben. wenn ich solche 2-dim arrays durchgehn will krieg ich nämlich ohne eine nullterminierung immer probleme...

    0.o also ich bin mir nicht sicher was der microsoft c/c++ kompiler macht, aber ich denke dieser wird genauso wie gcc konstante char-arrays automatisch null-terminieren. ansonsten würde ein printf("hello, world"); nicht funktionieren 🙂



  • also unter Dev-C++ konnte ich deins nicht kompilieren, darum bin ich schnell auf linux umgestiegen 🙂 dort gehts jetzt. hab mal unsre teile zusammengefügt.



  • tweenki schrieb:

    also unter Dev-C++ konnte ich deins nicht kompilieren, darum bin ich schnell auf linux umgestiegen 🙂 dort gehts jetzt. hab mal unsre teile zusammengefügt.

    yup, unter windows mit c muss man leider fgets und konsorten benutzen. ist aber eigentlich auch schell geschrieben, wenn man auf die komfortabilität der automatischen speicherverwaltung von getline verzichten kann 🙂



  • kann mir jemand schnell sagen, wie man einen float auf zwei stellen nach dem komma formatiert bei printf ich weiss das nicht mehr? habs iwo mal gelesen find die seite aber nimmer? kann mir jemand eben schnell helfen?


Anmelden zum Antworten