C++ Programm geht nicht

W

Willüüü

Gast
Code:
/*
Autor: Wolter & Co.
Datum:05.04.05
Beschreibung: 
*/


#pragma hdrstop
#include <condefs.h>
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
#include<math.h>
#include<windows.h>

 void menue();
 void eingabe (float zensuren[10], int *anzahl);
 void ausgabe_z (float zensuren[10], int anzahl);
 float durchschnitt (int anzahl, float schnitt, float zensuren[10]);
 void probezeit (float zensuren[10], int*anzahl, bool *probezeit);
 void ausgabe_d(float zensuren[10], int anzahl, float *schnitt, bool probezeit);

//---------------------------------------------------------------------------
#pragma argsused
 int main(int argc, char **argv)
 {
 menue();
 return 0;
 }

 void menue()
 {
 float zensuren[10], schnitt;
 int anzahl;
 bool probezeit=0;
 char menue;

 do
  {
  clrscr();
  gotoxy(23,5);cout<<"<><><><><> Menue <><><><><>";
  gotoxy(28,7);cout<<"Eingabe [e]";
  gotoxy(28,8);cout<<"Ausgabe der Zensuren [z]";
  gotoxy(28,9);cout<<"Ausgabe des Durchschnittes und des Bestehens/";
  gotoxy(28,10);cout<<"Nichtbestehens der Probezeit [d]";
  gotoxy(28,11);cout<<"Beenden [b]";
  gotoxy(28,13);cout<<"Bitte waehlen Sie: ";
  cin>>menue;

  switch(menue)
   {
   case'e':
    {
    eingabe (zensuren, &anzahl);
    }break;

   case'z':
    {
    ausgabe_z (zensuren, anzahl);
    }break;

   case'd':
    {
    ausgabe_d (anzahl, &schnitt, probezeit, zensuren);
    }break;

   case'b':
    {
    cout<<"Das Programm wird beendet!!!!!!!!!\nWeiter mit beliebiger Taste";
    }

   default: clrscr();gotoxy(65,10);cout<<"!!!\nFalsche Eingabe, bitte neu Waehlen!!!"; getch(); break;
   }
  }
  while(menue != 'b');
 getch();
 }

void eingabe (float zensuren[10], int *anzahl)
{
    int zaehler=0;

    do
    {
        cout<<"Gib die "<<(zaehler+1)<<". Zensur ein: ";
        cin>>zensuren[zaehler];
        zaehler++;
    }
    while(zaehler<10 && zensuren[zaehler-1] != 0);
    if (zensuren[zaehler-1] == 0)
        *anzahl = zaehler-1 ;
    else
        *anzahl = zaehler;
}

void ausgabe_z (float zensuren[10], int anzahl)
{
    int zaehler=0;

    for (zaehler=0; zaehler<anzahl; zaehler++)
        cout<<(zaehler+1)<<". Zensuren: "<<zensuren[zaehler]<<endl;
    getch();
}

float durchschnitt (int anzahl, float schnitt, float zensuren[10])
{
    float summe=0;

    for(int i=0; i<anzahl; i++)
        summe=summe+zensuren[i];

    schnitt=summe/anzahl;
    cout<<schnitt;
    getch();
    return schnitt;
}

void probezeit (float zensuren[10], int anzahl, bool *probezeit)
{
int z=0;

    for (int i=0; i<anzahl; i++)
        {
            if (zensuren[i]>4)
                z++;
        }
    if (z>1)
        probezeit=probezeit+1;
}

void ausgabe_d(int anzahl, float *schnitt, bool probezeit, float zensuren[10])
{
    int zaehler=0;
    float wert;
    
    for (zaehler=0; zaehler<anzahl; zaehler++)
        cout<<(zaehler+1)<<". Zensuren: "<<zensuren[zaehler]<<endl;
    wert=*schnitt;
    cout<<"Der Durchschnitt der Zensuren betraegt "<< durchschnitt(anzahl, wert);

    if(probezeit==0)
        cout<<"Du hast das Halbjahr geschafft!";
    else
        cout<<"Du hast das Halbjahr nicht geschafft!";
getch();
}


//Folgendes Programm habe ich geschrieben, es sollen Zensuren eingegeben werden und es soll ein Durchschnitt errechnet werden und bei mehr als 2 Fünfen ist das Probehalbjahr nicht bestanden. Wenn nicht wird angezeigt man hat bestanden. Ich komme aber nicht weier, habe Fehlermeldungen siehe Anhang. Proframm ist im C++ Builder geschrieben.
Gruß

Willüüü
 

Anhänge

  • Fehler.JPG
    Fehler.JPG
    43,1 KB · Aufrufe: 262
Zuletzt von einem Moderator bearbeitet: (Code-Tags ergänzt)
G

geisterfahrer

Gast
Wenn du die Fehlermeldung anguckst und die betreffende Zeile ansiehst:
cout<<"Der Durchschnitt der Zensuren betraegt "<< durchschnitt(anzahl, wert);
Was fällt dir auf? Genau, die Funktion ist so definiert:
float durchschnitt (int anzahl, float schnitt, float zensuren[10])
Beim Aufruf der Funktion fehlt der Parameter float zensuren[10] völlig, eben zu wenig Parameter wie auch in der Fehlermeldung gesagt wurde. Es wäre schön wenn du noch angeben würdest, welche Zeile die Nr. 65 trägt, man kann den Fehler vermutlich auch so finden, ist aber deutlich komplizierter, da man den gesamten Quellcode durchlesen muss.
Jedenfalls sind da die Parameter völlig vertauscht:
ausgabe_d (anzahl, &schnitt, probezeit, zensuren);
void ausgabe_d(float zensuren[10], int anzahl, float *schnitt, bool probezeit);
Du übergibst eben Anzahl (Int), an der Stelle wo float[10] erwartet wird... und so weiter und so fort. So missverständlich sind die Fehlermeldungen nun nicht, dass man das nicht hätte alleine lösen können.
 

7H3 N4C3R

Lt. Commander
Dabei seit
Feb. 2002
Beiträge
1.816
Hallo Willü.

Mh also zu allererst mal etwas (ist nicht böse gemeint) :)

"geht nicht" ist keine Fehlermeldung ;)
Dann gleich mit dem Programm anzufangen verschreckt die allermeisten Leser ;)
Und bitte [code] [/code] Tags benutzen, das Lesen von deinem Programm war wirklich eine Qual. Außerdem bleibt Dir so die Formatierung erhalten.

Zum eigentlichen Problem:
Die Fehlermeldungen finde ich allesamt sehr aussagekräftig. Als Programmierer sollte man gerade mit solch einfachen Meldungen klar kommen können.
Was der Compiler Dir dort sagen möchte ist, dass die Datentypen der Parameter, die Du übergeben willst, nicht zu der Funktion passen, die aufgerufen wird.
Schau Dir mal die Signatur von Durchschnitt an, dann sieht man es relativ schnell. Noch als Tipp, zumindest beim ersten Fehler hast Du einfach die Parameter vertauscht. Versuch es doch einfach erstmal selber zu lösen, so schwer ist das nicht! Ansonsten einfach nochmal nachfragen.

MfG!
 
Zuletzt bearbeitet:
W

Willüüü

Gast
Danke für die Hilfe erstmal, Programmieren ist halt nicht so mein Fall, mir ist Serveranwendungstechnik einfach sehr viel lieber.

Gruß

Willüüü
 
Top