Zehnkampfwettbewerb



  • Hallo
    Kann mir wer den Quelltext in die prozeduale Programmierung umschreiben?
    Also so das er nicht mehr in der objektorientierten Programmierung ist.

    #include <conio.h> 
    #include <iostream.h> 
    
    class sport 
    { 
    private: 
       string sportlername; 
       int punkte[10]; 
    public: 
       void setze_spname(string name){sportlername=name;} 
       void setze_wettkampfergebnis(int wettkampfnr,int punktzahl){punkte[wettkampfnr]=punktzahl;} 
       string gib_spname(){return sportlername;} 
       int gib_wettkampfergebnis(int wettkampfnr){return punkte[wettkampfnr];} 
    }; 
    
    class wettkampf 
    { 
    private: 
       sport *sportler[8]; 
    public: 
       ~wettkampf(){for(int i=0;i<8;i++)delete sportler[i];} 
       void namenserfassung() 
       { 
          clrscr(); 
          string name; 
          cout << "\tWettkampfsteilnehmererfassung\n\n"; 
          for(int i=0;i<8;i++) 
          { 
             sportler[i]=new sport; 
             cout <<"\nBitte "<<i+1<<". Teilnehmernamen eingeben: "; 
             cin >> name; 
             sportler[i]->setze_spname(name); 
          } 
       } 
       void ergebnisserfassung() 
       { 
          clrscr(); 
          int ergebniss; 
          for (int i=0;i<10;i++) 
          { 
             cout << "\tErgebnisse Wettkampf Nr.: "<<i+1<<"\n\n"; 
             for(int j=0;j<8;j++) 
             { 
                cout << "Ergebnis Sportler "<<sportler[j]->gib_spname()<<" :"; 
                cin >>ergebniss; 
                sportler[j]->setze_wettkampfergebnis(i,ergebniss); 
             } 
             auswertung(i); 
          } 
       } 
       void auswertung(int wettkampfnr) 
       { 
          clrscr(); 
          int swap,pos=0,i,j; 
          int zwpunktpos[8][2]; 
          for(i=0;i<8;i++) 
          { 
             zwpunktpos[i][0]=i; 
             zwpunktpos[i][1]=0; 
             for(j=0;j<=wettkampfnr;j++) zwpunktpos[i][1]+=sportler[i]->gib_wettkampfergebnis(j); 
          } 
          for(i=0;i<8;i++) 
          { 
             for(j=1;j<8;j++) 
             { 
                if(zwpunktpos[j][1]>zwpunktpos[j-1][1]) 
                { 
                   for(int k=0;k<2;k++) 
                   { 
                      swap=zwpunktpos[j][k]; 
                      zwpunktpos[j][k]=zwpunktpos[j-1][k]; 
                      zwpunktpos[j-1][k]=swap; 
                   } 
                } 
             } 
          } 
          cout << "\t\tErgebnisse der Wettbewerbe\n\nSportler:"; 
          for(i=0;i<8;i++)cout << " |  "<<sportler[i]->gib_spname(); 
          cout << endl; 
          for(i=0;i<=wettkampfnr;i++) 
          { 
             cout << "wb"<<i+1<<":     "; 
             for(j=0;j<8;j++) 
             { 
                cout << " |  " << sportler[j]->gib_wettkampfergebnis(i); 
             } 
             cout << endl; 
          } 
          cout << "\n\n"; 
          for(j=0;j<8;j++) 
          { 
             if(j&&zwpunktpos[j-1][1]!=zwpunktpos[j][1]) pos++; 
             cout << pos+1<< ".Platz: " << sportler[zwpunktpos[j][0]]->gib_spname()<< " mit " << zwpunktpos[j][1] << " Punkten.\n"; 
          } 
          cout << endl; 
       } 
    }; 
    int main() 
    { 
       wettkampf zehnkampf; 
       zehnkampf.namenserfassung(); 
       zehnkampf.ergebnisserfassung(); 
       getch(); 
    return 0; 
    }
    


  • moep_mich2 schrieb:

    Kann mir wer den Quelltext in die prozeduale Programmierung umschreiben?

    was ist jetzt kaputt 😕 wenn so etwas gefragt wird.

    ps: kann mir jemand meinen leveleditor fertigschreiben 😃



  • Bitte! Es ist sehr dringend. 😞



  • Du macht folgendes Ersaetze:
    class -> struct
    cout -> printf
    string -> char * order char []
    Member funktionen -> einfache funktionen die ein zeiger auf struct empfangen (als parameter). Es ist auch ein gute Idea es this zu heissen. z.b:

    void setze_spname(struct sport * this, char * name)
    {
    strncpy (this->sportlername,name,sizeof this->sportlername);
    this->sportlername[sizeof (this->sportlername) - 1] = 0;
    }

    usw...
    Das ist nicht so dumme Frage wie Man auf den ersten Blick denken kann.



  • cout -> printf

    kurze frage, ist es echt objekt orientiert wenn ich cout nutze ???



  • Ja, erst dann sogar. printf() sollte man in C++ vermeiden.

    class -> struct
    cout -> printf
    string -> char * order char []

    Ist das dein ernst?? Du meinst also, ein Programm, welches auf die o. a. Dinge verzichtet, ist automatisch nicht mehr objektorientiert?!?!

    Das ist nicht so dumme Frage wie Man auf den ersten Blick denken kann.

    Seh ich anders...:D



  • Wenn ich dass richtig verstehe moep_mich moechte eine C++ -> rein C Konvertierung.
    Eine echte Objekt-orientierte programmirung kann sogar mit printf und snprintf erreicht werden. Obwohl es ist nicht besonders emphelenswert.

    PS: es ist auch nicht immer sehr grossartig (und optimal) exceptionen zu werfen und zu fangen.



  • Wenn ich dass richtig verstehe moep_mich moechte eine C++ -> rein C Konvertierung.

    Nein, ich glaub genau das möchte er nicht. Auch in C kann man objektorientiert programmieren, genauso wie man in C++ prozedual programmieren kann. ER müsste eigentlich das ganz Programm umschreiben. Auf jeden Fall hängt das nicht von einigen Schlüsselwörtern ab!

    PS: es ist auch nicht immer sehr grossartig (und optimal) exceptionen zu werfen und zu fangen.

    Dann schreib ein Programm, was keine Fehler hat. Dann brauchst du das auch nicht......



  • Ist das dein ernst?? Du meinst also, ein Programm, welches auf die o. a. Dinge verzichtet, ist automatisch nicht mehr

    Was ist o.a.? Und dabei, das Ziel ist nicht auf die objekt-orientierte Programmirung zu verzichten aber C++ program zu rein C program zu konvertiren. Und es gibt viel Sinn so zu machen. Z.b. rein C programm ist mehr portabel. Dennkest du mal warum Linux kernel mit rein C geschrieben ist?





  • CarstenJ schrieb:

    Wenn ich dass richtig verstehe moep_mich moechte eine C++ -> rein C Konvertierung.
    Nein, ich glaub genau das möchte er nicht.

    Denn seine Frage scheint wirklich dumm zu seint.

    Auch in C kann man objektorientiert programmieren, genauso wie man in C++ prozedual programmieren kann.

    Einverstanden.

    ER müsste eigentlich das ganz Programm umschreiben. Auf jeden Fall hängt das nicht von einigen Schlüsselwörtern ab!

    Ich zeigte nur den Weg. Meinst du dass ich das ganzes Programm fuer Ihn umschrebein? 😃

    PS: es ist auch nicht immer sehr grossartig (und optimal) exceptionen zu werfen und zu fangen.

    Dann schreib ein Programm, was keine Fehler hat. Dann brauchst du das auch nicht......

    Nein, Ich meine zurueckgegeben Feheler kode. Exceptionen sind langsamer.[/quote]



  • Was ist o.a.?

    O. a. bedeutet: Oben angegeben. Dabei bezog ich mich auf den von dir geposteten Text.

    Und es gibt viel Sinn so zu machen. Z.b. rein C programm ist mehr portabel.

    Quatsch. Standard C ist genauso portabel wie Standard C++.

    Dennkest du mal warum Linux kernel mit rein C geschrieben ist?

    Performance. Und als Unix (wovon Linux schließlich abgeleitet ist) geschrieben wurde, gab es auch noch kein C++. Abgesehen davon sind deine Möglichkeit mit Ansi-C unter Linux auch begrenzt.

    Nein, Ich meine zurueckgegeben Feheler kode. Exceptionen sind langsamer.

    Ob das von Bedeutung ist? Fehlercodes müssen nicht ausgewertet werden. Lieber ein langsameres Programm als eins, was fehlerhaft läuft.



  • Quatsch. Standard C ist genauso portabel wie Standard C++.

    Du hast unrecht. Standard C++ is viel mehr kompliziert. Und C++ compiler haben viel mehr Feheler. Nim, z.b. Visual C++ (6.x) versus GCC (G++).

    Im gcc:

    for (int i = 0; i < 5; i++) {
     ...
    }
    
    for (int i = 0; i < 10; i++) {
     ...
    }
    

    Im Microsoft Visual C 6.x

    for (int i = 0; i < 5; i++) {
    }
    
    for (int i = 0; i < 10; i++) { // Feheler !!! i ist definiert zum zweiten mal
    }
    

    und est nur eine Beispiel, es gibt auch vile andere schlechte Beischpile.



  • Standard C++ is viel mehr kompliziert.

    Mag sein, aber das hat mit Portabilität & Standard nix zu tun.

    Und C++ compiler haben viel mehr Feheler. Nim, z.b. Visual C++ (6.x) versus GCC (G++).

    Du sagst es ja selber: Die Compiler. Nicht jeder Compiler ist 100%ig standardkompatibel (sogar die wenigsten). Und genau da liegt das Problem.

    for (int i = 0; i < 10; i++) { // Feheler !!! i ist definiert zum zweiten mal
    }
    

    Jo, das ist dann ein Bug im Visual C++ Compiler von Microsoft. Das hat aber absolut nix mit dem Standard zu tun.



  • ok, die Compiler 🙂

    Jo, das ist dann ein Bug im Visual C++ Compiler von Microsoft. Das hat aber absolut nix mit dem Standard zu tun.

    Und est ist wirklich kein Bug sogar obsolete Standard. Und ich glaube: je complizierter Computersprache ist desto mehr Fehler Die Compiler haben. Das hat nichts mit der Unix, Windows usw API Vereinbarkeit zu tun. Ich moechte nur sagen dass es viel mehr compliziert 100% oder sogar 95% compatibel zu sein. Und dabei C++ ist viel junger als C.

    Aber was mehr interessant ist 🙂 was der Autor der ersten Meldung meinte ? 🙂



  • Danke ertseinmal ...



  • Komplett ohne Funktionen.

    #include <conio.h>
    #include <iostream.h>
    
    int main()
    {
       string sportlernamen[8];
       int punkte[8][10],i,j,k,l,swap,pos,zwpunktpos[8][2];
       clrscr();
       cout << "\tWettkampfsteilnehmererfassung\n\n";
       for(i=0;i<8;i++)
       {
          cout <<"\nBitte "<<i+1<<". Teilnehmernamen eingeben: ";
          cin >> sportlernamen[i];
       }
       clrscr();
       for (i=0;i<10;i++)
       {
          cout << "\tErgebnisse Wettkampf Nr.: "<<i+1<<"\n\n";
          for(j=0;j<8;j++)
          {
             cout << "Ergebnis Sportler "<<sportlernamen[j]<<" :";
             cin >>punkte[j][i];
          }
          clrscr();
          for(k=0;k<8;k++)
          {
             zwpunktpos[k][0]=k;
             zwpunktpos[k][1]=0;
             for(j=0;j<=i;j++) zwpunktpos[k][1]+=punkte[k][j];
          }
          for(j=0;j<8;j++)
          {
             for(k=1;k<8;k++)
             {
                if(zwpunktpos[k][1]>zwpunktpos[k-1][1])
                {
                   for(int l=0;l<2;l++)
                   {
                      swap=zwpunktpos[k][l];
                      zwpunktpos[k][l]=zwpunktpos[k-1][l];
                      zwpunktpos[k-1][l]=swap;
                   }
                }
             }
          }
          cout << "\t\tErgebnisse der Wettbewerbe\n\nSportler:";
          for(j=0;j<8;j++)cout << " |  "<<sportlernamen[j];
          cout << endl;
          for(j=0;j<=i;j++)
          {
             cout << "wb"<<j+1<<":     ";
             for(k=0;k<8;k++)
             {
                cout << " |  " << punkte[k][j];
             }
             cout << endl;
          }
          cout << "\n\n";
          pos=0;
          for(j=0;j<8;j++)
          {
             if(j&&zwpunktpos[j-1][1]!=zwpunktpos[j][1]) pos++;
             cout << pos+1<< ".Platz: " << sportlernamen[zwpunktpos[j][0]]<< " mit " << zwpunktpos[j][1] << " Punkten.\n";
          }
          cout << endl;
       }
       getch();
       return 0;
    }
    


  • Danke


Anmelden zum Antworten