C++ Anfänger- Programm funktoniert nicht!



  • Nach 'cd' (change directory) muss der Pfad des Ordners, in dem die durch den Compiler und Linker erstellte .exe liegt, angegeben werden.

    Du kannst außerdem eine Verknüpfung am Desktop erstellen, als Pfad C:\Windows\system32\cmd.exe angeben, darauf rechte Maustaste -> 'ausführen in', da den Pfad angeben, damit startet die Konsole in dem gewünschten Ordner.



  • Herzlichen Dank an alle!!!!

    Nun muss man den Code eingeben, dann kommt man soll eine Zahl eingeben und diese wird dann umgerechnet.

    Alles so wie es soll. vielen Dank.

    Nun habe ich aber erneut eine Frage.
    Ich hoffe ihr nehmt mir das nicht übel.

    Nun:

    Das Ziel ist es einen NotenCalculator zu basteln:

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    float Gesamtpunktzahl;
    printf("Bitte geben sie die Gesamtpunktzahl ein: \n");
    scanf("%d",&Gesamtpunktzahl);
    
    float r;
    printf("Bitte geben sie ein, welche Punktzahl für eine Sechs nötig ist: \n");
    scanf("%d",&r);
    
    float punktezahleins;
    printf("Bitte geben sie ein, welche Punktzahl für eine Eins nötig ist: \n");
    scanf("%d",&punktezahleins);
    
    float y;
    float erreichtepunktzahl;
    printf("Bitte geben sie ein, welche Punktzahl der Schueler erreicht hat : \n");
    scanf("%d",&erreichtepunktzahl);
    (erreichtepunktzahl*5)=y;
    {
    float Ergebnis;
    while(Ergebnis!=7);
    }
    {
    float Ergebnis;
    float note;
    float r;
    float z;
    float x;
    r=punktezahleins;
    y/r=x;
    x+1=note;
    
    printf("Die note ist %f\n",note);
        return EXIT_SUCCESS;
    }
    }
    

    bei dem Befehl (erreichtepunktzahl*5)=y; gibt es den Fehler

    Non-Ivalue in assigment

    Wie kann ich das verhindern?

    mfG Leo



  • In c++ (wie auch Assembler) ist links immer der Zieloperant angegeben.

    y=(e+5) schreibt den Wert (e+5) in die für y reservierte Speicherstelle und ist daher richtig.



  • Herzlichen Dank, jetzt hab ich alles so:

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    float Gesamtpunktzahl;
    printf("Bitte geben sie die Gesamtpunktzahl ein: \n");
    scanf("%d",&Gesamtpunktzahl);
    
    float r;
    printf("Bitte geben sie ein, welche Punktzahl für eine Sechs nötig ist: \n");
    scanf("%d",&r);
    
    float punktezahleins;
    printf("Bitte geben sie ein, welche Punktzahl für eine Eins nötig ist: \n");
    scanf("%d",&punktezahleins);
    
    float y;
    float erreichtepunktzahl;
    printf("Bitte geben sie ein, welche Punktzahl der Schueler erreicht hat : \n");
    scanf("%d",&erreichtepunktzahl);
    y=(erreichtepunktzahl*5);
    {
    float Ergebnis;
    while(Ergebnis!=7);
    }
    {
    float Ergebnis;
    float note;
    float r;
    float z;
    float x;
    r=punktezahleins;
    x=(y/r);
    note=(x+1);
    
    printf("Die note ist %d\n",note);
        return EXIT_SUCCESS;
    }
    }
    

    es rechnet trotzdem nich die Note aus, sondern es erscheint gar nichts.

    Ist es ein Fehler im letzten printf?

    Die Berechnung sollte so erfolgen:

    (erreichte Punkte{durch}Punktzahl für die Eins) +1= Note.

    mfG Leo



  • Zeile 27 ist mal Unsinn. Wenn du eine While-Schleife machen willst, hat die so auszusehen:

    while(true){
    //do something
    }
    

    Bei dir stehen einige komische Klammern und ein Semikolon gleich nach 'while'.



  • Danke, hab das jetzt mal so gemacht:

    #include <cstdlib> 
    #include <iostream> 
    
    using namespace std; 
    
    int main(int argc, char *argv[]) 
    { 
    float Gesamtpunktzahl; 
    printf("Bitte geben sie die Gesamtpunktzahl ein: \n"); 
    scanf("%d",&Gesamtpunktzahl); 
    
    float r; 
    printf("Bitte geben sie ein, welche Punktzahl für eine Sechs nötig ist: \n"); 
    scanf("%d",&r); 
    
    float punktezahleins; 
    printf("Bitte geben sie ein, welche Punktzahl für eine Eins nötig ist: \n"); 
    scanf("%d",&punktezahleins); 
    
    float y; 
    float erreichtepunktzahl; 
    printf("Bitte geben sie ein, welche Punktzahl der Schueler erreicht hat : \n"); 
    scanf("%d",&erreichtepunktzahl); 
    y=(erreichtepunktzahl*5); 
    
    int note;
    while(true)
    
    {
    float note; 
    float r; 
    float z; 
    float x; 
    r=punktezahleins; 
    x=(y/r); 
    note=(x+1);
    }
    printf("Die note ist %d\n",note); 
    return EXIT_SUCCESS;
    }
    

    Es lässt sich zwar kompilieren, aber es rechnet die Note noch nicht aus.
    mfG Leo



  • Mir ist auch noch nicht klar was du da mit der Schleife machen willst.

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	double peins, perreicht;
    	cout << "Bitte geben Sie die Werte der Variablen 'Punktezahl fuer die Eins' und 'Erreichte Punkte' ein: ";
    	cin >> peins >> perreicht;
    
    	cout << "Die erreichte Note ist " << perreicht/peins+1 << ".\n";
    
    	return EXIT_SUCCESS;
    }
    

    Das wäre eine einfache Lösung, die nach deiner Formel die Note berechnet.



  • float note;
    float r;
    float z;
    float x;
    

    Wie oft, genoni, kommt jede dieser Zeile in deinem Quelltext vor?
    Und was passiert dann?
    Okay, das kann gar funktionieren aber nur, wenn der Programmierer nicht den Überblick verliert. Also, wenn bei einem Anfänger eine dieser Zeilen, oder vergleichbare vorkommen, immer überlegen, ist das irgend wo vom Auftraggeber so vorgegeben? Wenn nicht, eine übersichtlichere Lösung vorziehen.

    Zur Krönung der Unübersichtlichkeit:

    int note;
    ...
    float note;
    

    😮
    weist du was du da willst oder machst?

    MfG f.-th.



  • Was vergessen 😡

    Also, wenn bei einem Anfänger eine dieser Zeilen oder vergleichbare mehr als einmal in einem Quelltext vorkommen immer überlegen, ist das irgend wo vom Auftraggeber so vorgegeben?

    So sollte das besser sein.



  • Sorry, ich war jetzt eine Woche ohne Internet abwesend.

    Vielen Dank für die Antworten.

    @Thuruk,

    Deine Version funktioniert bestens, herzlichen Dank.

    @f-th

    lach*, mir ist klar dass meine Programme extrem unübersichtlich sind.
    Ich habe einfach mal mit denen mir Bekannten Befehlen losgelegt und es wurden dann immer mehr Änderungen.

    Wenn ich das nun ähnlich meiner Vorgabe machen möchte, muss ich dann nur diese floats anders gestalten? Oder geht das so gar nicht?

    mfG Leo



  • Hab ich doch geschrieben, solange du den Überblick über deinen Quelltext hast bekommst du das hin 👍
    Wenn du den Überblick verlierst, ... 🤡

    Also würde ich den Quelltext übersichtlich formatieren.
    Dann solltest du dir selber im Quelltext keine Fallen aufbauen in der Form das du dich selbst austrickst.

    float r;
      printf("Bitte geben sie ein, welche Punktzahl für eine Sechs nötig ist: \n");
      scanf("%d",&r);
    

    Was willst du damit erreichen? Okay, es kann sein das es nur eine mögliche Punktzahl für eine 6 gibt? Dann gibt es innerhalb von Europa Staaten wo 6 die schlechteste Zensur ist und andere wo eine 6 die beste ist. Also soll das Programm in Deutschland, in Österreich, in der Schweiz oder sonst wo spielen?

    So ein wenig Hintergrund brauche ich schon, wenn das ein halbwegs gutes Programm werden soll. Ich nehme an du solltest dich auch mal eingehender damit beschäftigen. Zum einen mit dem Hintergrund und zum anderen mit den Grundlagen von C und/oder C++.

    int note; //  siehe 4 Zeilen später
      while(true)
    
      {
        float note; // note hast du doch gerade als int definiert und bislang nicht gebraucht???
    

    MfG f.-th.



  • Herzlichen Dank.

    Das Programm soll in der Schweiz spielen, wo 6 die höchste und 1 die tiefste Note ist. Das mit dem Note hab ich gar nicht gesehen 😞 . Wie gesagt, ich hab erst vor 2 Wochen mit C angefangen und kenne darum nur wenige Befehle. Als dann eine Bekannte gesagt hat ihr fehle ein Programm das Noten berechnet, habe ich gesagt ich könne versuchen eines zu basteln. 🙂

    mfG Leo



  • Du kennst immer noch nicht den Unterschied zwischen C und C++.

    Hier mal ein schnell zusammen genagelter C-Quelltext:

    // punkt2note - swiss
    // hier Punkte fest vorgegeben -> add Punkte für Note aus externe Datei lesen. 
    // 2012feb11
    
    #include<stdio.h>
    
    int main()
    {
    	int punkte;
    	int pkt2 = 25;
    	int pkt3 = 42;
    	int pkt4;	// ergänzen
    	int pkt5;
    	int pkt6 = 90;
    
    	printf("Bitte geben Sie hier die erreichten Punkte ein: ");
    	scanf("%d", &punkte);
    
    	if( punkte < pkt2 )
    		printf("%d-> eins \n", punkte);
    	else if( punkte < pkt3 )
    		printf("%d-> zwei\n", punkte);
    	else
    		printf("%d-> sechs\n", punkte);
    }
    

    kannst das ja noch ergänzen.



  • Und man könnte die Punkte noch in einem Array anordnen, das dann per for-Schleife nach der richtigen Note durchsucht wird.

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	unsigned short pkt[5]={10, 20, 30, 40, 50}, j=0, punkte=0; //einlesen/im Quellcode angeben
    
    	cout << "Notenschluessel:\n";
    
    	for(;j<5;++j){
    		cout << pkt[j] << ": " << j+2 << '\n';
    	}
    
    	for(;;){
    		cin >> punkte;
    		for(j=1;punkte>=pkt[j-1];++j) {}
    		cout << "Erreichte Note: " << j << '\n';
    	}
    }
    

    😉



  • Muss zugeben das ich das nicht ganz ausgefeilt hab 😉

    Aber zum einen soll der Beitragsersteller auch noch etwas zu tun haben 😃
    Und zum anderen, denke ich das das Programm noch ein wenig leistungsfähiger und damit umfangreicher werden soll.

    Was man noch einbauen kann:
    Ein Schüler hat mehrere Arbeiten abgeliefert, die mit unterschiedlichen Schlüsseln bewertet werden und wo am Ende z.B. eine Zeugnisnote herauskommen soll.

    Eine Schleife um das Kernprogramm mit Menu wäre auch noch eine Option.

    Es gibt da sicher noch andere Varianten 👍

    MfG f.-th.



  • genoni schrieb:

    [...]bis jetzt arbeitete ich immer auf dem Mac und nun habe ich mir per Bootcamp eine Windows-Partition geholt.

    Vielleicht weisst du das einfach noch nicht daher sage ich es einfach mal: du kannst auch auf deinem Mac einen C++ Compiler installieren.

    Gruss,
    anneXus


Anmelden zum Antworten