C++ Anfänger frage

05/05/2012 19:57 xNopex#16
nein... Du legst genau ein Array mit 6Feldern an. Index 0 für Note 1, Index 1 für Note 2, etc. Dann liest du die Noten ein und summierst sie auf. Dabei speicherst du auch gleich, wie viele 1er, 2er, etc. eingegeben worden. Am schluss berechnest du den Mittelwert und gibst die Anzahl der Noten über dem Mittelwert aus dem 6er-Array aus.. Kein 1000er Array.. Darauf würde ich dir -1000000000Punkte geben.
05/05/2012 20:00 Pataya40#17
Also einfach in die for schleife in der ich die noten zusammenzähle gleich alle 1er 2er 3er usw mitzählen ?!

das ich da nicht früher draufgekommen bin :rolleyes:

vielen vielen dank!
05/06/2012 01:58 MoepMeep#18
Wofür überhaupt das Array? Einfach alles zusammenaddieren und am ende durch die Anzahl teilen.
05/06/2012 10:32 xNopex#19
Quote:
Wofür überhaupt das Array? Einfach alles zusammenaddieren und am ende durch die Anzahl teilen.
Quote:
Das Program muss am ende denn mittelwert und die anzahl der noten welche über dem mittelwert sind ausgeben.
Hab's auch erst überlesen.
05/06/2012 13:17 Tyrar#20
wenn die stl nicht verwendet werden darf (was ich durchaus für sehr schwachsinnig halte), würde ich mit malloc/realloc/free arbeiten.

in richtung:
Code:
uint32_t elements;
double* noten;
elements=1;
noten=malloc(sizeof(double)*elements);
und
Code:
++elements;
noten=realloc(noten,sizeof(double)*elements);
der zugriff auf das aktuelle element würde dann natürlich mit
Code:
noten[elements-1]
erfolgen :)


das wäre jedenfalls eine c lösung (worauf es meiner meinung nach auch hinausläuft wenn man die stl nicht verwendet)
05/07/2012 19:38 MrSm!th#21
Quote:
Originally Posted by HeavyHacker View Post
wenn die stl nicht verwendet werden darf (was ich durchaus für sehr schwachsinnig halte), würde ich mit malloc/realloc/free arbeiten.

in richtung:
Code:
uint32_t elements;
double* noten;
elements=1;
noten=malloc(sizeof(double)*elements);
und
Code:
++elements;
noten=realloc(noten,sizeof(double)*elements);
der zugriff auf das aktuelle element würde dann natürlich mit
Code:
noten[elements-1]
erfolgen :)


das wäre jedenfalls eine c lösung (worauf es meiner meinung nach auch hinausläuft wenn man die stl nicht verwendet)
absoluter blödsinn, nopexs lösung ist da weitaus sinnvoller und die stl ist nicht das einzige, was c und c++ unterscheidet.
05/07/2012 20:16 Pataya40#22
Bin grad total erschüttert das wir nach einem Jahr Programieren nichts von dem gelernt haben >.<

Auf jeden fall hab ich das beispiel jetzt fast, indem ich ein array (note[5]) erstellt hab, das Program zählt so dann wie oft welche Note eingegeben wurde um am schluss alles noten über dem durchschnitt zusammen zu zählen. (da hab ich noch kleine Probleme).
Wenn jemand ne idee hat, würds mich freun wenn ihr mir helfen könntet ;)
05/07/2012 20:37 MrSm!th#23
Wie speicherst du die Zähler von 6 verschiedenen Noten in einem Feld mit 5 Elementen?
05/07/2012 20:43 Pataya40#24
Quote:
Originally Posted by MrSm!th View Post
Wie speicherst du die Zähler von 6 verschiedenen Noten in einem Feld mit 5 Elementen?
Ich brauch nur 5 zähler weils bei uns in österreich nur 5 Noten gibt ;)
05/08/2012 08:38 Tyrar#25
Quote:
Originally Posted by MrSm!th View Post
absoluter blödsinn, nopexs lösung ist da weitaus sinnvoller und die stl ist nicht das einzige, was c und c++ unterscheidet.
es ist nur eine zweite lösungsmöglichkeit! ich weiss nicht was dagegen spricht!
sicher unterscheiden sich c und c++ nicht nur durch die stl, allerdings wird wahrscheinlich auch nichts anderes c++ spezifisches verwendet, wie z.b. klassen ;)
05/08/2012 19:13 xNopex#26
Quote:
es ist nur eine zweite lösungsmöglichkeit! ich weiss nicht was dagegen spricht!
Realloc kopiert u.U. den Speicher. Das ist natürlich unnötiger Aufwand neben dem Aufwand, der geleistet werden muss, um den neuen Speicher überhaupt zu erhalten.. Da läuft ja nochmal so einiges im Hintergrund ab. Dazu ist das Ganze noch ziemlich fehleranfällig. Da spricht so einiges dagegen...

EDIT:
Quote:
alles noten über dem durchschnitt zusammen zu zählen. (da hab ich noch kleine Probleme).
Code:
double schnitt = 3.14;
int index = int(schnitt) + 1;

// blabla hier noch index überprüfen unso, sonst overflow unso
int ueberSchnitt = 0;
for(int i = index; i < 4; i++)
{
    ueberSchnitt += notenAnzahl[i];
}
So iwie...
05/08/2012 21:36 Pataya40#27
Quote:
Originally Posted by xNopex View Post
Realloc kopiert u.U. den Speicher. Das ist natürlich unnötiger Aufwand neben dem Aufwand, der geleistet werden muss, um den neuen Speicher überhaupt zu erhalten.. Da läuft ja nochmal so einiges im Hintergrund ab. Dazu ist das Ganze noch ziemlich fehleranfällig. Da spricht so einiges dagegen...

EDIT:


Code:
double schnitt = 3.14;
int index = int(schnitt) + 1;

// blabla hier noch index überprüfen unso, sonst overflow unso
int ueberSchnitt = 0;
for(int i = index; i < 4; i++)
{
    ueberSchnitt += notenAnzahl[i];
}
So iwie...
Vielen dank, sehr hilfreich, wusste gar nicht das "+=" geht
05/08/2012 21:54 xNopex#28
a += c ist einfach die Kurzform für a = a + c, ja das geht. Programmierer sind halt Tippfaul ;O
05/09/2012 13:17 .Dash#29
Ja. Variablen mit eckigen Klammern sind Arrays. Dort werden mehrere Variablen gespeichert.