kann man so mit Vektoren umgehen

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:
#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)
 
Hi.

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

DerSensenmann hat gesagt.:
Code:
char vokabel[20,30];
Eine solche Syntax gibt es nicht. Ein mehrdimensionales Array definiert man folgendermaßen:
Code:
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:
#include <iostream> // 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 :-(
 
Zuletzt bearbeitet:
Code:
   return min + (int)(r * rand()/(RAND_MAX+1.0));
sollte wohl besser:
Code:
   return min + rand() %  ((max - min) + 1)
sein

Hier vergleichst du 2 Adressen und keine 2 Strings
Code:
if (deutsch == vokabel[c+10])
sovergleicht man strings
Code:
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
 
Hi.
eViLiSSiMo hat gesagt.:
Code:
   return min + (int)(r * rand()/(RAND_MAX+1.0));
sollte wohl besser:
Code:
   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
 
Zuletzt bearbeitet:
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
 
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
 
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?
 
Zuletzt bearbeitet:
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....
:rolleyes:
 
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:
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).
 
Zurück