WinFuture-Forum.de: Auswertung Von Prüfungsergebnissen In C - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Auswertung Von Prüfungsergebnissen In C


#1 Mitglied ist offline   Geddie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 22
  • Beigetreten: 04. Juli 06
  • Reputation: 0

geschrieben 04. Juli 2006 - 18:24

Hallo zusammen,

habe auf meinen Übungszettel folgende Aufgabe zu bearbeiten:


Die Studierenden eines Semesters erreichten bei sechs Klausuren, die im Rahmen eines Informatistudiums geschrieben wurden, folgende Bewertungen: Tabelle ungefähr von der Form

Matrikelnummer Klausurergebnisse
111111 10 20 30 40 50 60
111112 11 12 13 14 15 61

a)
Schreiben Sie ein C-Programm, dass als Eingabe die Matrikelnummer mit den zugehörigen Klausurergebnissen annimmt. Bestimmen SIe den Bewertungsmittel für jeden Studenten und geben Sie die Matrikelnummer, die einzelnen Klausurergebnisse und den berechneten Bewertungsmittelwert aus</task>


habe ein ziemliches Problem mit dieser Aufgabe bzw. mit der Umsetzung.

Also mein Problem liegt darin, dass ich die Studierenden mit ihrer Matrikelnummer und den Klausurergebnissen eingeben kann(das ist ja nicht so schwer) mit einer for-Schleife, aber ich kriege es nicht hin, dass das Programm sich die eingegeben Daten dann selbstständig in die auszugebende Tabelle einfügt. Also das jedem Durchlauf der for-Schleife die Ergebnisse in die nächste Zeile kommen. Weiss nicht wie ich den einzelnen Studenten aus der for-Schleife den Wert in den verschiedenen Zeilen der Tabelle zuweisen kann.
So sieht mein Programm bis jetzt aus. Die Zuweisungen in der Tabelle geschehen über Felder und die Daten der Studieren werden über die for-Schleife eingelesen.

Das Programm sieht folgendermaßen aus bis jetzt. Manches ist technisch nicht so schön, aber is ja noch nicht fertig :-)


#include<stdio.h>
#include<limits.h>
int main(void)

{

enum {Klausuren=6};

int i,a;
int x[Klausuren];




do{
printf("Für welchen Studenten möchten Sie die Ergebnisse eingeben? \n",a);
scanf("%d", &x[a]);
a = a + 1;
for (i = 0; i <= Klausuren; i++)

{

printf(" Geben Sie das Ergebnis der Klausur ein: \n");
scanf("%d", &x[i]);

}



printf("Matrikelnummer Klausurergebnisse \n");
printf(" (in Prozent)\n");
printf("------------------------\n");
printf( " %d %d %d %d %d %d %d\n", x[a], x[0], x[1], x[2], x[3], x[4], x[5]);
} while(a<2);



return 0;

}


Für Hilfen und Tipps wäre ich sehr dankbar.
Grüße

Gerd

Dieser Beitrag wurde von Geddie bearbeitet: 04. Juli 2006 - 18:27

0

Anzeige



#2 Mitglied ist offline   mo 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.796
  • Beigetreten: 17. Juni 02
  • Reputation: 0
  • Wohnort:Ulm / BaWü

geschrieben 05. Juli 2006 - 09:13

ich versteh das problem nicht ganz...
mir scheint das eher so, als bekommst du die matnr + klausurergebnisse in der form direkt an stdin geliefert und sollst gar nicht gross interkation mit dem benutzer treiben. lass die ausgaben erstmal weg und verdingse einfach zeile fuer zeile die eingabe. ausserdem weisst du nicht, wieviele klausuren je matrikelnummer geschrieben wurden. (was du ja hard reincodierst oO)

ueberleg dir mal etwa in pseudocode sowas:
while ( !feof(stdin) ) {
   lese matrikelnummer, gebe matrikelnummer aus.
   int klausurenanzahl, klausurtotalprozent;
   while (!end of line) {
	  klausurtotalprozent += aktuelleklausurprozent;
	  klausurenanzahl++;
	  gebe aktuelleklausurprozent aus;
   }
  printf(" approx %d \% in averarge", klausurtotalprozent/klausurenanzahl; );
}

fetitsch.
C-implementierung mussu natuerlich selber machen. wir sind ja keine hausaufagenhilfe :(

ps: in meinem C-kurs wurde sehr gerne einfach mit der pipe stdin-outs weitergereicht.. ich bin mir ziemlich sicher,d ass hier einfach cat klausurergebinsse | deinprogramm gemacht wird und geschaut, ob du es richtig berechnest... also immer schon von stdin lesen und in stdout schreiben. fehlermeldungen nach stderr abschieben. ggf. noch via parameter (if argi > 1 then stdin = fopen("args[1]:smokin: ....) zulassen, dass direkt aus ner datei gelesen wird.
I'm mó. mo's good twin.
0

#3 Mitglied ist offline   Geddie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 22
  • Beigetreten: 04. Juli 06
  • Reputation: 0

geschrieben 05. Juli 2006 - 13:50

hallo,
erstmal danke für die antwort.

also das ich die nicht alle einzeln eingeben muss, kann gut sein. ist ja ein haufen arbeit. das heißt ich soll mich eigentlich nur darum kümmern, wie ich die einzelnen eingaben verarbeiten kann?!?!!?

Allerdings habe ich mit deinen Hilfestellungen so meine Probleme, da ich das meiste nicht kenne und auch nicht verstehe :-/

ueberleg dir mal etwa in pseudocode sowas:
QUELLTEXT

while ( !feof(stdin) <-- kenn ich gar nicht mit stdin) {
lese matrikelnummer, gebe matrikelnummer aus.
int klausurenanzahl, klausurtotalprozent;
while (!end of line) was hat das end of line denn zu bedeuten {
klausurtotalprozent += aktuelleklausurprozent;
klausurenanzahl++;
gebe aktuelleklausurprozent aus;
}
printf(" approx %d \% in averarge", klausurtotalprozent/klausurenanzahl; );
}

fetitsch.
C-implementierung mussu natuerlich selber machen. wir sind ja keine hausaufagenhilfe wink.gif

ps: in meinem C-kurs wurde sehr gerne einfach mit der pipe stdin-outs weitergereicht.. ich bin mir ziemlich sicher,d ass hier einfach cat klausurergebinsse | deinprogramm gemacht wird und geschaut, ob du es richtig berechnest... also immer schon von stdin lesen und in stdout schreiben. fehlermeldungen nach stderr abschieben. ggf. noch via parameter (if argi > 1 then stdin = fopen("args[1]smile.gif ....) zulassen, dass direkt aus ner datei gelesen wird.
in dem letzten abschnitt versteh ich eigentlich gar nichts :smokin: ist glaub ich aber auch nicht schlimm.

prinzipiell versteh ich dich aber. soll also nur die eingaben verarbeiten und nicht die eingabe selbst noch mit reinbringen.
die anzahl der klausur ist übrigens vorgegeben. hatte ich auch geschrieben. 6 klausuren :( trotzdem erstmal danke
0

#4 Mitglied ist offline   mo 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.796
  • Beigetreten: 17. Juni 02
  • Reputation: 0
  • Wohnort:Ulm / BaWü

geschrieben 06. Juli 2006 - 06:33

Zitat

Allerdings habe ich mit deinen Hilfestellungen so meine Probleme, da ich das meiste nicht kenne und auch nicht verstehe :-/

war ja auch pseudocode :wub:
feof(stdin) gibts aber natuerlich. das ist einfach ein FILE *stdin, allerdings ohne die moeglichkeit zum seek'en. s.u.

Zitat

abschnitt versteh ich eigentlich gar nichts dry.gif ist glaub ich aber auch nicht schlimm.

hmmm... gut isses aber nich, wenn du das nich verstehst :/.
stdin ist der filepointer auf den standard-input. das kann z.B. die tastatur sein.
unter unix und afaik auch wi ndows kann man via pipes aber die stdin verbiegen.
z.B. mit 'cat datei | deinprogramm'. cat liest einfach datei aus und schreibst sie an stdout. stdout wird fuer deinprogramm natuerlich zu stdin. also bekommt deinprogramm als stdin den inhalt der datei ab. (alternativ wuerde 'deinprogramm < datei' das gleiche machen, oder 'deinprorgamm < datei > stdout_datei' die ausgabe von stdout in stdout_datei schreiben ... das kann man beliebig verketten, 'deinprogramm | bzip2 --stdout | gzip --stdout > ausgabe.bz2.gz' komprimiert die ausgabe von deinprogramm erstmal mit bzip2, schickt das ergebnis wieder an stdout, das wird an gzip weitergereicht, welches die ausgabe wieder an stdout shcickt und dann in die ausgabe.bz2.gz datei verbogen wird.

dass die anzahl der klausuren auf 6 festgelegt ist, macht die sache total einfach:
while (!feof(stdin)) {
int matnr,i,totalpkt=0;
scanf("%d", &matnr);
printf("%d ",matnr);
if (feof(stdin)) break;
for(i=0;i<6; i++) {
int kerg;
scanf("%d",&kerg);
totalpkt+=kerg;
printf("%d ");
}
printf("AVG: %.2f\n", (float)totalpkt/(float)6 );


ich hab zum spass noch ne andere loesung als ich gestern unterwegs war auf dem laptop gebastelt, die hat beliebig viele klausurergebnisse akzeptiert. dazu hab ich jedes einzelne klausurergebnis in einen char* geschrieben, geschaut, ob es mit leerzeichen oder zeilenumbruch terminiert wurde. wenn mit zeilenumbruch, dann folgt daraus, letzte klausur zu dieser matnr. mit sscanf(str,blabla) dann den char* str ausenander genommen und den durchschnitt ausgerechnet.

gruesse,
mo

Dieser Beitrag wurde von mo bearbeitet: 06. Juli 2006 - 06:37

I'm mó. mo's good twin.
0

#5 Mitglied ist offline   Geddie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 22
  • Beigetreten: 04. Juli 06
  • Reputation: 0

geschrieben 07. Juli 2006 - 11:54

hi!

danke dir erstmal für deine ganzen mühen! war sehr hilfreich!!!

ich höre nur einführung in c. ist auch die einzige informatikveranstaltung, die ich hören muss. deswegen kenn ich mich da nicht so gut aus. is zwar interessant, aber trotzdem halt relativ unwichtig alles für mich.

trotzdem danke dir. werd mir die skripte mal durchlesen.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0