tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
9
ZUGRIFFE
533
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    DerSensenmann DerSensenmann ist offline Mitglied Bronze
    Registriert seit
    Sep 2005
    Beiträge
    37
    also ich bin noch Schüler.
    naja aufjedenfall wollte ich mir ein Programm zum Vokabeln abfragen programmieren.

    aber da kommen ein paar Fehler.
    ich benutze dev c++

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    
    #include <iostream.h>
    #include <time.h>
    #include <stdlib.h>
     
    /* Zufallszahl zwischen min und max generieren */
    int irand( int min, int max)
    {
        double r = max - min + 1;
        return min + (int)(r * rand()/(RAND_MAX+1.0));
    }
     
    //------------------MAIN:-------------------------------------
    int main()
    {
        srand( (unsigned)time( NULL ) );
        
        int zufallszahl,a,b,c;
        
        
        
         for(int f=0;f<10;)
         {
              cout << "geben sie die vokabel ein" << endl;
              f++;
              char vokabel[20,30];
              cin >> vokabel[f];
              
              cout << "und noch bitte die dt.bedeutung" << endl;
              f++;
              cin >> vokabel[f];
              
         }
         
         for(int j=0;j<10;)
         {
                 a = irand(1,10);
                 b = irand(1,10);
                 c = irand(1,10); 
                 zufallszahl = irand(1,10);
                 c = c*2;
                 j++;
                 char deutsch[50];
                 cout << "sagen sie die dt. bedeutung von" << vokabel[c] << ":" << endl;
                 cin >> deutsch;
                 
                 c++;
                 if (deutsch == vokabel[c])
                    cout << "das ist richtig" << endl;
                 else 
                    cout << " das ist falsch " << endl;   
                    
         }
         cout << " ende.... ©DerSensenmann " << endl;
         system("pause");
         return 0;
    }
    da kommen golgende fehler.
    25 C:\Dev-Cpp\vokabel.cpp expected primary-expression before "char"
    25 C:\Dev-Cpp\vokabel.cpp expected `;' before "char"
    26 C:\Dev-Cpp\vokabel.cpp `vokabel' undeclared (first use this function)
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Erstmal verwendest du keine Vektoren (C++ Header <vector>) sondern ganz normale Arrays.

    Zitat Zitat von DerSensenmann
    Code :
    1
    
    char vokabel[20,30];
    Eine solche Syntax gibt es nicht. Ein mehrdimensionales Array definiert man folgendermaßen:
    Code :
    1
    
    char vokabel[20][30];
    D.h. du hast dann ein Array von 20 Elementen von C-Strings mit 30 Zeichen (wobei du natürlich aber nur 29 speichern kannst, denn normalerweise kommt ja noch die terminierende \0 dazu).

    Außerdem darfst du das vokabel Array nicht innerhalb der for-Schleife definieren wenn du es auch außerhalb der for-Schleife benutzen willst - so wie es jetzt ist, gibt es das Array auch wirklich nur innerhalb der ersten for-Schleife; außerhalb ist es nicht zugreifbar.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    
    [b]#include <iostream>[/b] // Standard C++ Header haben keine .h Endung
    #include <ctime>   // Standard Header von C sind in C++ verfügbar mit
    #include <cstdlib> // Präfix "c" und ohne .h Endung.
    #include <cstring>
     
    using namespace std; // Objekte und Funktionen der Standard C++ Bibliothek 
     // (string, cout, endl etc.) sind im Namensraum "std" definiert.
     
    /* Zufallszahl zwischen min und max generieren */
    int irand( int min, int max)
    {
        double r = max - min + 1;
        return min + (int)(r * rand()/(RAND_MAX+1.0));
    }
     
    //------------------MAIN:-------------------------------------
    int main()
    {
        srand( (unsigned)time( NULL ) );
        
        int zufallszahl,a,b,c;
        char vokabel[20][30];
        
         for(int f=0;f<10;++f)
         {
              cout << "geben sie die vokabel ein" << endl;
              cin >> vokabel[f];
              
              cout << "und noch bitte die dt.bedeutung" << endl;
              cin >> vokabel[f+10];
         }
         
         for(int j=0;j<10;++j)
         {
                 a = irand(1,10);
                 b = irand(1,10);
                 c = irand(1,10); 
                 zufallszahl = irand(1,10);
     
                 char deutsch[50];
                 cout << "sagen sie die dt. bedeutung von " << vokabel[c] << ":" << endl;
                 cin >> deutsch;
                 
                 if (strcmp (deutsch, vokabel[c+10]) == 0)
                    cout << "das ist richtig" << endl;
                 else 
                    cout << " das ist falsch " << endl;                
         }
         cout << " ende.... ©DerSensenmann " << endl;
         system("pause");
         return 0;
    }

    /edit: hab mal gleich noch die Sache mit den Strings berichtigt, da hat eViLiSSiMo natürlich vollkommen Recht. Ist mir gar nicht aufgefallen
    Geändert von deepthroat (05.10.05 um 16:20 Uhr)
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    eViLiSSiMo eViLiSSiMo ist offline Grünschnabel
    Registriert seit
    Sep 2004
    Beiträge
    4
    Code :
    1
    
       return min + (int)(r * rand()/(RAND_MAX+1.0));
    sollte wohl besser:
    Code :
    1
    
       return min + rand() %  ((max - min) + 1)
    sein

    Hier vergleichst du 2 Adressen und keine 2 Strings
    Code :
    1
    
    if (deutsch == vokabel[c+10])
    sovergleicht man strings
    Code :
    1
    
    if (strcmp(deutsch,vokabel[c+10]) == 0)
    oder du benutzt gleich std::string das ist eine Klasse die sich um alles kümmert und sicherer ist
    Die kann man dann auch per == vergleichen
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von eViLiSSiMo
    Code :
    1
    
       return min + (int)(r * rand()/(RAND_MAX+1.0));
    sollte wohl besser:
    Code :
    1
    
       return min + rand() %  ((max - min) + 1)
    sein
    Nein, sollte es nicht! Aus dem einfachen Grund das bei der 2ten Methode niederwertige Bits benutzt werden und da keine wirklich zufällig erscheinenden Zahlen generiert werden.

    /edit: siehe http://cplus.kompf.de/artikel/random.html
    Geändert von deepthroat (05.10.05 um 16:13 Uhr)
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    DerSensenmann DerSensenmann ist offline Mitglied Bronze
    Registriert seit
    Sep 2005
    Beiträge
    37
    die funktion wie man zufallszahlen generiert hab ich von hier.
    weil so wie es in nem buchsteht.
    durch time.h und stdlib.h
    randomize()
    und rand()
    ging es nicht.
    naja vielen dank.
    kann geclosed werden
     

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von DerSensenmann
    die funktion wie man zufallszahlen generiert hab ich von hier.
    Die Funktion ist ja auch gut so.
    Zitat Zitat von DerSensenmann
    kann geclosed werden
    Das mußt du schon selber machen. Einfach das Thema als erledigt markieren.

    Und bitte achte etwas auf die Groß- und Kleinschreibung.
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  7. #7
    DerSensenmann DerSensenmann ist offline Mitglied Bronze
    Registriert seit
    Sep 2005
    Beiträge
    37
    ohh
    sollte wohl besser doch net geclosed werden.
    mit Groß- und Kleinschriebnug werd ich drauf achten.

    also bei dem Code wirde die Vokabel falsch herum abgefragt.

    also zB.
    geben sie die Vokabel ein
    laudare
    die dt. Bedeutung
    loben.
    ...
    und dann
    geben sie die dt Bedeutung von loben an......


    nunja ich weis nicht woran das liegt.
    weil eigentlich sollte ja in der Schleife ab 1 angefangen werden und nicht ab 11.
    wäre net wenn ihr dazu eine Lösung schreiben könntet.
    achja des mit dem erledigt makieren wusste ich net( bin ja neu hier )
    MFG
     

  8. #8
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Also bei mir funktioniert's. Schau dir doch nochmal meinen Code an, da hast du irgendwo was falsch (evtl. das c = c*2 noch drin?).

    /edit: Hab's grad nochmal getestet. Es funktioniert doch nicht (immer), da du ja auch Zufallszahlen zwischen 1 und 10 generierst wo du doch Zahlen von 0 bis 9 benötigst.

    PS: Warum generierst du eigentlich soviele Zufallszahlen in der Schleife?
    Geändert von deepthroat (05.10.05 um 22:41 Uhr)
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  9. #9
    DerSensenmann DerSensenmann ist offline Mitglied Bronze
    Registriert seit
    Sep 2005
    Beiträge
    37
    das hat damit zu tun, dass die erste Zahl immer die Gleiche ist.
    und dann hab ich mir überlegt , dass die Dritte oder Vierte an zufälligsten ist....
     

  10. #10
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Also die erste generierte Zufallszahl dürfte nicht immer die gleiche sein da du ja den Random Seed abhängig von der Zeit verstellt hast. Es ist nur so das wenn du ein Programm kurz hintereinander (wenn noch keine ganze Sekunde vergangen ist) startest, das dann die (Pseudo-)Zufallszahlen exakt die gleichen sind.

    Dennoch brauchst natürlich aber auch nicht soviele Variablen. Du könntest einmal eine Variable mehrfach benutzen oder du benutzt den Rückgabewert der Funktion irand() einfach nicht.
    Code :
    1
    
    irand(0,9); irand(0,9); c = irand (0,9); c = irand (0,9);

    Aber sonst ist der Zufallswert (wenn du srand so benutzt) wirklich jedesmal verschieden (außer du übergibts der srand Funktion jedesmal den gleichen Wert was aber nur in einem Zeitintervall von max. 1 Sekunde der Fall sein kann).
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. Antworten: 31
    Letzter Beitrag: 31.12.10, 18:40
  2. "Die Seite kann nicht angezeigt werden" umgehen?
    Von deb_ugger im Forum Hosting & Webserver
    Antworten: 0
    Letzter Beitrag: 30.03.05, 15:54
  3. Wie kann ich mit der Kamera umgehen
    Von anime im Forum 3D Studio Max
    Antworten: 13
    Letzter Beitrag: 10.08.04, 18:50
  4. wie kann man OnChangeEdit() umgehen
    Von Reticent im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 02.04.04, 14:45
  5. Suche jemand der mit 3DSM & Co. umgehen kann
    Von soul710 im Forum 3D Studio Max
    Antworten: 15
    Letzter Beitrag: 09.02.02, 14:42