Aufgabe in C++, wer kann mir helfen?
-
Hallo,
ich muss gerade ein Programm zum Thema Notenbestellung machen. Es müssen für 2 Schüler jeweils 4 Noten gemacht werden und für jeden Schüler soll die Durchschnittsnote ermittelt werden.
Ich habe das Programm fast fertig, aber der Lehrer ist damit unzufrieden, auch weil ich zwei getrennte Strukturen angelegt habe und noch nicht die Durchschnittsnote habe.
Ich komme leider nicht weiter im Moment, kann mir jemand helfen?
Hier ist das Programm:
#include <iomanip>
#include <iostream>
#include <conio>
using namespace std;struct tnoten
{
int note;
};struct tschueler
{
string klasse;
string vorn;
string nachn;};
int menue();
void main()
{const int zahl=2;
tschueler schueler [zahl];
const int zahl2=2 ;
tnoten noten [zahl2];char ende='j';
int element;
int auswahl;double hm;
double err; // Erreichte Punktzahl
double hoch; // Höchste zu erreichende Punktzahl
double prozent;do
{
auswahl = menue();switch(auswahl)
{
case 1:for(int h=0;h<zahl;h++)
{
clrscr();
cout << h+1 << ". Schueler " << endl << endl;
cout <<"Klasse : ";
cin >> ws;
getline(cin,schueler[h].klasse);
cout<<endl;cout <<"Vorname : ";
cin >>schueler[h].vorn;cout <<"Nachname : ";
cin >> schueler[h].nachn;for(int i=0;i<zahl2;i++)
{
clrscr();
cout << i+1<< ". Notenberechnung " << endl << endl;
cout << "Bitte die Hoechstpunktzahl eingeben: ";
cin >> hoch;
cout<<endl;cout << "Erreichte Punktzahl: ";
cin >> err;prozent = err / hoch * 100;
if (prozent >= 92)
{
noten[i+1+h+h].note=1;
}
else if (prozent >= 81)
{
noten[i+1+h+h].note = 2;
}
else if (prozent >= 67)
{
noten[i+1+h+h].note = 3;
}
else if (prozent >= 50)
{
noten[i+1+h+h].note =4;
}
else if (prozent >=30)
{
noten[i+1+h+h].note=5;
}
else
{
noten[i+1+h+h].note=6;
}};
};break;
case 2: clrscr();
for(int h=0; h<zahl;h++)
{
if(schueler[h].vorn=="")
{
cout << "\t\t\t Keine Daten vorhanden!" << endl;
}else
{
cout << h+1 << ". Schueler " << endl << endl;
cout << "Klasse: " << schueler[h].klasse<< endl;
cout << "Vorname: " << schueler[h].vorn << endl;
cout << "Nachname: " << schueler[h].nachn << endl<< endl;for(int i=0; i<zahl2;i++)
{cout << i+1 << ". Note: " << noten[i+1+h+h].note <<endl;
} cout<<endl<<endl;
getch();
}; };break;
case 3: ende='n';
break;
}
clrscr();
}while(ende!='n');}
//---------------------------------------------------------------------------int menue()
{ int ein;
cout << "\t\t\t Schuelerverwaltung " << endl << endl;;
cout << "\t[1] Eingabe " << endl;
cout << "\t[2] Ausgabe " << endl;
cout << "\t[3] Beenden " << endl << endl << endl;
cout << "\t\t Ihre Eingabe ";
cin >> ein;
return ein;
}
-
Also wenn du das Programm wirklich selber geschrieben hast, dann dürfte es doch kein Problem sein es fertig zu machen.
Für die Durchschnittsnote zählst du einfach alle 4 Noten zusammen und teilst das Ergebnis durch 4.
Wenn dein Lehrer keine 2 Strukturen will, dann mach halt 1 draus (oder wieviele er auch immer haben will).
Und wenn du mit Strings arbeitest dann solltest du auch#include <string>einbinden.
-
Danke, nur ich habe im Moment irgendwie eine Blockade und weiss nicht, was ich genau eingeben muss um den Durchschnitt zu errechnen

Die Noten durch 4, das weiss ich nur was muss ich genau eingeben?
-
Hm, das Verfahren schreibe ich noch hin, aber da Du mit Schleifen klarzukommen scheinst kannst Du den Rest denke ich schon selbst machen
durchschnitt=0; for (jede note in noten) durchschnitt = durchschnitt + note; durchschnitt = durchschnitt / anzahl(noten);
-
Hi!
Mit ein wenig Gedanken wirst du das Problem doch ganz leicht lösen können!
Schreib dir eine Klasse Schueler welche die entsprechenden Variablen beinhaltet.Irgendwie sowas in der Art von:
#include <cassert> #include <iostream> #include <string> #include <vector> typedef unsigned long u32_t; class Schueler { private: std::string m_name; std::string m_vorname; u32_t m_klasse; std::vector< u32_t > m_noten; public: Schueler( const std::string &name, const std::string &vorname, u32_t klasse ) : m_name( name ), m_vorname( vorname ), m_klasse( klasse ) {} void NeueNote( u32_t note ) { assert( note > 0 && note <= 6 ); m_noten.push_back( note ); } u32_t BerechneDurschnitt() const { u32_t summe = 0; for ( std::vector< u32_t >::const_iterator i = m_noten.begin(); i != m_noten.end(); ++i ) { summe += *i; } return summe / m_noten.size(); } friend std::ostream &operator<<( std::ostream &o, Schueler &obj ) { o << "Name: " << obj.m_name << std::endl << "Vorname: " << obj.m_vorname << std::endl << "Klasse: " << obj.m_klasse << std::endl << "Durchschnitt: " << obj.BerechneDurschnitt() << std::endl; } };Dann kannst du ganz dynamisch deine Schüler anlegen, kannst ihnen beliebig viele Noten zuweisen und schön die Daten ausgeben über:
std::cout << schuelerobjekt;So, das soll nur ein Denkanstoß sein. Das Programm kannst du selbst schreiben, ist ja auch quasi alles schon vorhanden...

grüße
-
Danke für eure Hilfe, ihr habt mir sehr geholfen.
David, was du programmiert hast ist für uns fast noch zu kompliziert, obwohl ich es logisch nachvollziehen, ich mache gerade das 1. Ausbildungsjahr zum kaufmännischen Assistenten für Wirtschaftsinformatik

Aber danke für die Anregungen.