Notentabelle Ausgebe - Anfänger ;-) Programmiersprache C
-
Hi
ich muss in der Schule ein Projekt machen, welches Noten ausgibt. Zuerst soll nach der Prozentzahl und der Klasse gefragt werden. dann wird die Note ausgegeben (if- Befehl habe ich benutzt).Soweit so gut. danach soll abgefragt werden, ob man die ganze Notentabelle sehen will. Doch da harkts bei mir. Bitte helft mir, damit das Programm richtig gut läuft.
Hier der Quellcode (in C - bitte nicht C++ helfen und am besten elcihte Befehle zur Verbesserung miteinbeziehen).:
[cpp]#include <stdio.h> #include <conio.h> #include <math.h> #include <stdlib.h> #include <ctype.h> int Klasse,Prozent,c,t; char taste; int Eingabe() { printf("\nT.Soring, S.Merten, T.Wolscht Projektthema: Notenliste 25.5.2004 \n"); printf("\nMit diesem Programm koennen sie durch Eingabe einer Prozentzahl und der\n dazugehoerigen Klasse die entsprechende(n) Note bzw. Punkte ausgeben lassen.\nDies funktioniert mit den Klassen 11-13.\n"); do { printf("\n\n Bitte geben sie die Klasse an: "); scanf("%d",&Klasse); } while (Klasse != 11 && Klasse != 12 && Klasse != 13); do { printf(" Nun koennen sie eine Prozentzahl zwischen 0 und 100 angeben: "); scanf("%d",&Prozent); } while (Prozent <0 || Prozent >100); } int VerarbeitungKlasse11() { if (Klasse==11 && Prozent>=0 && Prozent<=27) printf("\n %d-Prozent ergibt die Note 6",Prozent); else if (Klasse==11 && Prozent>=28 && Prozent<=47) printf("\n %d-Prozent ergibt die Note 5",Prozent); else if (Klasse==11 && Prozent>=48 && Prozent<=62) printf("\n %d-Prozent ergibt die Note 4",Prozent); else if (Klasse==11 && Prozent>=63 && Prozent<=77) printf("\n %d-Prozent ergibt die Note 3",Prozent); else if (Klasse==11 && Prozent>=78 && Prozent<=90) printf("\n %d-Prozent ergibt die Note 2",Prozent); else if (Klasse==11 && Prozent>=91 && Prozent<=100) printf("\n %d-Prozent ergibt die Note 1",Prozent); } int VerarbeitungKlasse12() { if (Klasse==12 && Prozent>=0 && Prozent<=19 || Klasse == 13 && Prozent>=0 && Prozent<=19) printf("\n %d-Prozent ergibt die Note 6 (0 Punkte)",Prozent); else if (Klasse==12 && Prozent>19 && Prozent<=27 || Klasse == 13 && Prozent>19 && Prozent<=27) printf("\n %d-Prozent ergibt die Note 5- (1 Punkt)",Prozent); else if (Klasse==12 && Prozent>27 && Prozent<=34 || Klasse == 13 && Prozent>27 && Prozent<=34) printf("\n %d-Prozent ergibt die Note 5 (2 Punkte)",Prozent); else if (Klasse==12 && Prozent>34 && Prozent<=41 || Klasse == 13 && Prozent>34 && Prozent<=41) printf("\n %d-Prozent ergibt die Note 5+ (3 Punkte)",Prozent); else if (Klasse==12 && Prozent>41 && Prozent<=47 || Klasse == 13 && Prozent>41 && Prozent<=47) printf("\n %d-Prozent ergibt die Note 4- (4 Punkte)",Prozent); else if (Klasse==12 && Prozent>47 && Prozent<=52 || Klasse == 13 && Prozent>47 && Prozent<=52) printf("\n %d-Prozent ergibt die Note 4 (5 Punkte)",Prozent); else if (Klasse==12 && Prozent>52 && Prozent<=57 || Klasse == 13 && Prozent>52 && Prozent<=57) printf("\n %d-Prozent ergibt die Note 4+ (6 Punkte)",Prozent); else if (Klasse==12 && Prozent>57 && Prozent<=62 || Klasse == 13 && Prozent>57 && Prozent<=62) printf("\n %d-Prozent ergibt die Note 3- (7 Punkte)",Prozent); else if (Klasse==12 && Prozent>62 && Prozent<=67 || Klasse == 13 && Prozent>62 && Prozent<=67) printf("\n %d-Prozent ergibt die Note 3 (8 Punkte)",Prozent); else if (Klasse==12 && Prozent>67 && Prozent<=72 || Klasse == 13 && Prozent>67 && Prozent<=72) printf("\n %d-Prozent ergibt die Note 3+ (9 Punkte)",Prozent); else if (Klasse==12 && Prozent>72 && Prozent<=77 || Klasse == 13 && Prozent>72 && Prozent<=77) printf("\n %d-Prozent ergibt die Note 2- (10 Punkte)",Prozent); else if (Klasse==12 && Prozent>77 && Prozent<=82 || Klasse == 13 && Prozent>77 && Prozent<=82) printf("\n %d-Prozent ergibt die Note 2 (11 Punkte)",Prozent); else if (Klasse==12 && Prozent>82 && Prozent<=87 || Klasse == 13 && Prozent>82 && Prozent<=87) printf("\n %d-Prozent ergibt die Note 2+ (12 Punkte)",Prozent); else if (Klasse==12 && Prozent>87 && Prozent<=92 || Klasse == 13 && Prozent>87 && Prozent<=92) printf("\n %d-Prozent ergibt die Note 1- (13 Punkte)",Prozent); else if (Klasse==12 && Prozent>92 && Prozent<=96 || Klasse == 13 && Prozent>92 && Prozent<=96) printf("\n %d-Prozent ergibt die Note 1 (14 Punkte)",Prozent); else if (Klasse==12 && Prozent>96 && Prozent<=100 || Klasse == 13 && Prozent>96 && Prozent<=100) printf("\n %d-Prozent ergibt die Note 1+ (15 Punkte)",Prozent); } int Tabellenausgabe() { printf("\n\n Wollen Sie die Tabelle fuer die Klasse %d sehen???(J / N ): ",Klasse); scanf("%c",&t); t == tolower (t); if (t == 'j' && Klasse == 11) {printf ("\n\n---------------Klasse11-----------------\n ----[ Prozent --- Note ]----\n 100-91 --- 1 \n 90-78 --- 2\n 77-63 --- 3 \n 62-48 --- 4 \n----------------------------------------\n 47-28 --- 5 \n 27-00 --- 6 \nVielen Dank fuer die Nutzung des Programms!!!\n");}; if (t == 'j' && Klasse == 12) {printf ("\n\n----------------Klasse12-----------------\n(Entspricht der Notengebung der Klasse 12)\n ----[ Prozent --- Punkte --- Note ]----\n 100-97 --- 15 --- 1+ \n 96-93 --- 14 --- 1 \n 92-83 --- 13 --- 1- \n 87-83 --- 12 --- 2+ \n 82-78 --- 11 --- 2 \n 77-73 --- 10 --- 2- \n 72-68 --- 9 --- 3+ \n 67-63 --- 8 --- 3 \n 62-58 --- 7 --- 3- \n 57-53 --- 6 --- 4+ \n 52-48 --- 5 --- 4 \n-----------------------------------------\n 47-42 --- 4 --- 4- \n 41-35 --- 3 --- 5+ \n 34-28 --- 2 --- 5 \n 27-20 --- 1 --- 5- \n 19-00 --- 0 --- 6 \nVielen Dank fuer die Nutzung des Programms!!!\nFuer eine Wiederholung der Abfrage bitte beliebige Taste druecken!!\n");}; if (t == 'j' && Klasse == 13) {printf ("\n\n----------------Klasse13-----------------\n(Entspricht der Notengebung der Klasse 13)\n ----[ Prozent --- Punkte --- Note ]----\n 100-97 --- 15 --- 1+ \n 96-93 --- 14 --- 1 \n 92-83 --- 13 --- 1- \n 87-83 --- 12 --- 2+ \n 82-78 --- 11 --- 2 \n 77-73 --- 10 --- 2- \n 72-68 --- 9 --- 3+ \n 67-63 --- 8 --- 3 \n 62-58 --- 7 --- 3- \n 57-53 --- 6 --- 4+ \n 52-48 --- 5 --- 4 \n-----------------------------------------\n 47-42 --- 4 --- 4- \n 41-35 --- 3 --- 5+ \n 34-28 --- 2 --- 5 \n 27-20 --- 1 --- 5- \n 19-00 --- 0 --- 6 \nVielen Dank fuer die Nutzung des Programms!!!\nFuer eine Wiederholung der Abfrage bitte beliebige Taste druecken!!\n");}; if (t != 'j') printf ("\n\n Ok! Vielen Dank fuer die Nutzung des Programms!!!\n\n"); } int main() { do { Eingabe(); VerarbeitungKlasse11(); VerarbeitungKlasse12(); Tabellenausgabe(); printf(" (B)eenden ??\n"); taste=getch(); } while(taste!='b'); }[/cpp]
so das war der quellcode. Hinweis: der Befehl tolower gehn nicht. Wieso??
ich hoffe ich könnt mir helfen
mfg
Mr.Vain
-
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.
-
aua... ich glaub an dem programm gibt es nicht eine zeile die mir gefällt...(globals... unsinnige abfragen...) aber seis drum...
das einzige wonach ich schnell geguckt habe ist dein tolower...
t == tolower (t); //ist ein vergleich und keine zuweisung...
du wolltest vermutlich das hier machen
t = tolower (t);
naja und vielleicht solltest du das design deines programmes nochmal ein wenig überdenken... ist ein echter hammer
-
danke für den Hinweis, doch das prog läuft nicht wirklich. Könnt ihr mir nicht helfen??
Das Design ist doch nebensächlich. Das kann man auch naqchher noch ändern. Erstmal muss das prog laufen.
mfg
Mr.Vain
-
Das Design ist doch nebensächlich. Das kann man auch naqchher noch ändern. Erstmal muss das prog laufen.
Hast du glaub ich missverstanden. Nicht, wie es ausguckt sondern die internen Programmstrukturen. So viele ifs sind umständlich.
mfg
-
Geht vielleicht an den Sinn des Threads vorbei aber hier mal ein etwas eleganteres Programm:
#include <stdio.h> #include <assert.h> const char * get_mark(int percentage) { const char * mark_names[] = { "Note 1", "Note 2", "Note 3", "Note 4", "Note 5", "Note 6" }; int mark_ranges[] = { 100, 91, 78, 69, 48, 28, 0 }; int i; assert(0 <= percentage && percentage <= 100); /* find out correct array indecies */ for (i = 0; i <= 6; i++) { if (percentage >= mark_ranges[i]) break; } if (i == 6) i = 5; /* finally return the name*/ return mark_names[i]; } int main(void) { int i; for (i = 0; i <= 100; i += 5) { printf("%d percent gives Mark %s\n", i, get_mark(i)); } return 0; }
mfg
-
Danke für das Prog, doch findet keiner in meinem quelltext den fehler, der das vollständige anwenden vermießt
mfg
Mr.Vain
-
Mr.Vain schrieb:
Doch da harkts bei mir. Bitte helft mir, damit das Programm richtig gut läuft.
Meinst Du wirklich mit so einer exakten Fehlerbeschreibung wird Dir irgendwer helfen können?
Definiere "richtig gut". Was heißt "richtig gut"?
-
ok, bei mir funzt es jetz
verbesserungsvorschläge:
- definiere für all deine funktionen (ausser der main-funktion) void als rückgabetyp (also void Eingabe() { ... } usw.)
- dann schreibst du ganz unten an deine main-funktion ein return 0;
- mach aus deinem scanf("%c",&t) einfach das hier t = getch();
das wärs glaub ich erst ma.
MFG
Chris
-
Klasse das Programm funktioniert.
Besten Dank.
Kannman eigentlich auch irgendwo switch und case miteinbneziehen??
mfg
Mr.Vain
-
also ich würd die beiden klassenverarbeitungsfunktionen zusammenfassen zu einer und dann prüfst du mittels switch(Klasse) { ... } um welche klasse es sich jeweils handelt und kannst dann in den case marken ggf. noch eine weitere switch-anweisungen reinpacken die halt den prozentsatz prüft und dementsprechend die ausgabe bewältigt.
mfg
#C
-
hi
wie muss ich das denn machen, wenn ich vor der Abfrage der Klase angebe, wieviele Schüler es gibt und dei Summe der Noten aller Schüler. Wie der Durchschnitt.Angabe der Summe und Schüler dann anstatt von der Angabe der Prozantzahl
mfg
Mr.Vain
-
ich verstehe deine frage nicht so ganz.
kannst du sie ein wenig umformulieren und an den stellen ein fragezeichen setzen, wo eins hingehört?
-
HI
sorry dass ich mich so schlecht ausgedrückt habe, hatte keine zeit:)naja
also da das Programm nun läuft wollte ich es optimieren.
Ganz am Anfang soll ein Menü kommen, bei dem man entweder direkt eine Prozentzahl angeben kann, oder die Prozentzahl berechnen kann. Da heisst dass man die Gesamtpunktzahl einer Arbeit und die eigentlichen (erreichten) Punkte angeben kann. Davon soll das Prog dann die Prozentzahl angeben und wie schon in dem Programm die entsprechende Note finden.
mfg
Mr.VainPS: Bitte helft mir. Habe nur noch bis morgen Zeit