Hilfe(funktionen)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hilfe(funktionen)

    [i][i]Hi, ich bräuchte rat/hilfe/tipps.
    Hab zwei programme geschrieben, hab aber eiegtnlich alles inner main.
    aufgabe ist jedoch die einzelnen programme mit funktionen zu schreiben,damit hab ich aber irgendwie probleme.kann mir da jmd vll weiter helfen???

    hier ist aufgaben1:
    [/i][/i]

    Quellcode

    1. #include <iostream>
    2. #include<ctime>
    3. using namespace std;
    4. int main(){
    5. int *x = new int[6];
    6. cout<<"Waehlen Sie 6 Zahlen von 1 bis 49: "<<endl;
    7. for(int y = 0; y < 6; y++){
    8. cout << y+1 << ". Zahl: ";
    9. cin >> x[y];
    10. }
    11. int zufallsZahl = 0;
    12. srand( (int) time(NULL) ); // ist einmalig notwendig damit der Zufallsgenerator funktioniert,
    13. int *arr= new int[6];
    14. for (int i=0; i<6; i++) { // i<20, wir wollen 20x wuerfeln
    15. zufallsZahl = rand(); // "rand();" gibt eine zufällige Interger-Zahl zwischen 1 und 32768 zurück
    16. zufallsZahl = zufallsZahlI + 1; // jetzt muessen wir von unserer Zufallszahl so lange 6 abziehen, bis sie kleiner als 6 ist
    17. // Ausgabe auf dem Bildschirm
    18. arr = zufallsZahl;
    19. cout << zufallsZahl << " " ;
    20. }
    21. int treffer = 0;
    22. for(int j = 0; j<6; j++)
    23. for(int k = 0; k<6; k++)
    24. if(x[j] == arr[k])
    25. treffer++;
    26. cout<<"Sie haben " << treffer <<" Treffer!"<<endl;
    27. return 0;
    28. }
    Alles anzeigen

    [i][i][i]aufgabe 2:
    [/i][/i][/i]

    Quellcode

    1. #include<iostream>
    2. using namespace std;
    3. int main(){
    4. int ar;
    5. cout << "Array: ";
    6. cin >> ar;
    7. bool *arr = new bool[ar];
    8. for(int i=0 ; i<ar ; i++)
    9. arr=true;
    10. arr[0]=false;
    11. arr[1]=false;
    12. for(int a=2 ; a<ar ; a++){
    13. if(arr[a]==true){
    14. for(int b=2 ; a*b<ar ; b++)
    15. arr[a*b] = false;// Alle Geradezahlen nach dem kleinsten Index(=2) sind jetzt falsch
    16. }
    17. }
    18. for(int i=0 ; i<ar ; i++)
    19. if(arr==true)
    20. cout<<i<<"\t";
    21. cout<<endl;
    22. return 0;
    23. }
    Alles anzeigen

    [i][i][i][i][i]
    die probleme äußern sich darin, dass ich nicht weiß welche funktionen ich verwenden muss,und wie ich dann sozusagen das programm aufbaue.was alles raus muss aus der main und was drinne bleiben soll. bin leider totaler anfänger...

    vielen dank im voraus
    [/i][/i][/i][/i][/i]
  • vll kann damit mir jmd helfen.
    in so einem stil muss ich funktionen einbauen.

    Quellcode

    1. #include<iostream>
    2. using namespace std;
    3. // Diese Funktion dient dem Ausgaben des Arrays
    4. void print(int *arr, int laenge){
    5. for(int i = 0; i < laenge; i++)
    6. cout << arr[i] << "\t";
    7. cout << endl;
    8. }
    9. // Diese Funktion potenziert jeden Arrayeintrag. Am Ende der Funktion steht an
    10. // jeder Stelle die dritte Potenz des ursprünglichen Eintrags.
    11. void potenzieren(int *arr, int laenge){
    12. for(int i = 0; i < laenge; i++)
    13. arr[i] = arr[i]*arr[i]*arr[i];
    14. }
    15. int main(){
    16. unsigned int i;
    17. cout << "Bitte die Laenge eingeben: ";
    18. cin >> i;
    19. // Erstellen eines dynamischen Arrays (wird nächste Woche ausführlicher besprochen)
    20. int * arr = new int [i];
    21. for (int ind = 0; ind < i; ind++)
    22. arr[ind] = ind + 1;
    23. print(arr, i);
    24. potenzieren(arr, i);
    25. print(arr, i);
    26. return 0;
    27. }
    Alles anzeigen
  • Hallo,

    Und nun postest du auch noch ein gutes Code Snippet?
    Darin steht alles was du brauchst um deine Aufgabe zu lösen!

    Fang erstmal von neu an und bring etwas Struktur in dein Codeleben.
    (Einrücken, Absätze usw

    Mit freundlichen Grüßen

    Sheldon

    Mit dem IPhone verfasst.
  • zu der einen aufgabe hab ich es so gemacht bekomm aber fehler...

    Quellcode

    1. #include <iostream>
    2. #include<ctime>
    3. using namespace std;
    4. void zahlenAbfragen(){
    5. int *x = new int[6];
    6. cout<<"Waehlen Sie 6 Zahlen von 1 bis 49: "<<endl;
    7. for(int y = 0; y < 6; y++){
    8. cout << y+1 << ". Zahl: ";
    9. cin >> x[y];
    10. delete[] x}
    11. }
    12. void zufallszahlenErzeugen()
    13. {int zufallsZahl = 0;
    14. srand( (int) time(NULL) ); // ist einmalig notwendig damit der Zufallsgenerator funktioniert,
    15. int *arr= new int[6];
    16. for (int i=0; i<6; i++) { // i<20, wir wollen 20x wuerfeln
    17. zufallsZahl = rand(); // "rand();" gibt eine zufällige Interger-Zahl zwischen 1 und 32768 zurück
    18. zufallsZahl = zufallsZahl%49 + 1; // jetzt muessen wir von unserer Zufallszahl so lange 6 abziehen, bis sie kleiner als 6 ist
    19. // Ausgabe auf dem Bildschirm
    20. arr[i] = zufallsZahl;
    21. cout << zufallsZahl << " " ;
    22. }
    23. }
    24. void resultatVergleichen()
    25. {int treffer = 0;
    26. for(int j = 0; j<6; j++)
    27. for(int k = 0; k<6; k++)
    28. if(x[j] == arr[k])
    29. treffer++;
    30. cout<<"Sie haben " << treffer <<" Treffer!"<<endl;
    31. }
    32. int main(){
    33. zahlenabfrage();
    34. zufallszahlenErzeugen();
    35. resultatVergleichen();
    36. return 0;
    37. }
    Alles anzeigen
  • @Sheldon
    hab es sortiert und eingerückt.
    mein problem ist ich weiß nicht wie ich das code "snipit" darauf anwenden soll bzw wie ich ansetzen soll.

    Quellcode

    1. #include<iostream>
    2. using namespace std;
    3. int main(){
    4. int ar;
    5. cout << "Array: ";
    6. cin >> ar;
    7. bool *arr = new bool[ar];
    8. for(int i=0 ; i<ar ; i++)
    9. arr[i]=true;
    10. arr[0]=false;
    11. arr[1]=false;
    12. for(int a=2 ; a<ar ; a++){
    13. if(arr[a]==true){
    14. for(int b=2 ; a*b<ar ; b++)
    15. arr[a*b] = false;// Alle Geradezahlen nach dem kleinsten Index(=2) sind jetzt falsch
    16. }
    17. }
    18. for(int i=0 ; i<ar ; i++)
    19. if(arr[i]==true)
    20. cout<<i<<"\t";
    21. cout<<endl;
    22. return 0;
    23. }
    Alles anzeigen
  • in

    Quellcode

    1. void zahlenAbfragen()

    delete[] x; // Semikolon vergessen

    Quellcode

    1. zahlenAbfragen();

    nicht

    Quellcode

    1. zahlenabfrage();

    und noch paar andere Sachen, wer so ein Programm schreibt, sollte den rest wohl auch finden,
    nicht böse gemeint, aber schreib lieber langsam und richtig, sonst wird die Fehlersuche nachher schrecklich.
    mfg Pokertom
    edit: nimm den C/C++ Quelltext, oder geht das nicht?
    Außerdem ein Source-Code Formatter: couponmeister.com/beautify.aspx
    Du bist Terrorist, warum? Siehe hier
  • danke für deine antwort.
    die rechtschreib fehler hatte ich auch danach gesehn...
    nach dem ich auch das ; eingefügt habe bekomm ich noch
    1>c:\users\jenne\documents\visual studio 2008\projects\asd\asd\lotoo.cpp(32) : error C2065: 'x': nichtdeklarierter Bezeichner
    1>c:\users\jenne\documents\visual studio 2008\projects\asd\asd\lotoo.cpp(32) : error C2065: 'arr': nichtdeklarierter Bezeichner
    fehler
    in resultatVergleichen()
  • so siehts jetzt aus. beim kompilieren gibt es keine fehler, das programm stürtzt aber ab nach der zweiten abfrage...

    Quellcode

    1. #include <iostream>
    2. #include<ctime>
    3. using namespace std;
    4. int *x = new int[6];
    5. int *arr= new int[6];
    6. void zahlenAbfragen(){
    7. int *x = new int[6];
    8. cout<<"Waehlen Sie 6 Zahlen von 1 bis 49: "<<endl;
    9. for(int y = 0; y < 6; y++){
    10. cout << y+1 << ". Zahl: ";
    11. cin >> x[y];
    12. delete[] x;}
    13. }
    14. void zufallszahlenErzeugen()
    15. {int zufallsZahl = 0;
    16. srand( (int) time(NULL) ); // ist einmalig notwendig damit der Zufallsgenerator funktioniert,
    17. int *arr= new int[6];
    18. for (int i=0; i<6; i++) { // i<20, wir wollen 20x wuerfeln
    19. zufallsZahl = rand(); // "rand();" gibt eine zufällige Interger-Zahl zwischen 1 und 32768 zurück
    20. zufallsZahl = zufallsZahl%49 + 1; // jetzt muessen wir von unserer Zufallszahl so lange 6 abziehen, bis sie kleiner als 6 ist
    21. // Ausgabe auf dem Bildschirm
    22. arr[i] = zufallsZahl;
    23. cout << zufallsZahl << " " ;
    24. }
    25. }
    26. void resultatVergleichen()
    27. {int treffer = 0;
    28. for(int j = 0; j<6; j++)
    29. for(int k = 0; k<6; k++)
    30. if(x[j] == arr[k])
    31. treffer++;
    32. cout<<"Sie haben " << treffer <<" Treffer!"<<endl;
    33. }
    34. int main(){
    35. zahlenAbfragen();
    36. zufallszahlenErzeugen();
    37. resultatVergleichen();
    38. return 0;
    39. }
    Alles anzeigen
  • File1.cpp:18:26: error: ‘srand’ was not declared in this scope
    File1.cpp:20:22: error: ‘rand’ was not declared in this scope
    kommt bei mir bei deinem Quelltext noch, ka warum, hab damit noch nicht gearbeitet?
    Und du hast x und arr doppelt deklariert, also kein Wunder,
    wenn du Sie Global deklarierst, nicht nochmal in den Funktionen... ;)
    Übrigens, bin an einem Open Suse 11.4 Linux-PC, mit g++ vielleicht liegts ja daran.
    edit: Dafür ist ein Forum ja da, oder?
    Finds aber nett, dass du dich bedankst.
    mfg Pokertom
    Du bist Terrorist, warum? Siehe hier
  • pokertom schrieb:

    Quellcode

    1. #include <iostream>
    2. #include<ctime>
    3. using namespace std;
    4. int *x = new int[6];
    5. int *arr= new int[6];

    Deklarier sie Global, denn in

    Quellcode

    1. resultatVergleichen()

    gibt es Sie nicht, deshalb kann er Sie auch nicht finden.
    Jetzt müsste es eigentlich gehen, hab bei mir noch nicht alle Fehler entfernt...
    :P


    Muss es nicht trotzdem in der main() deklariert werden und nicht außerhalb?

    turboj schrieb:


    den fehler bekomm ich nach der abfrage.


    In den Fehlermeldungen wird immer eine Zeile mit angegeben um zu erfahren, an welcher Stelle im Code der Fehler ist.
    Bezüglich deiner Fehlermeldung, kannst du mal Zeile 52 raussuchen und posten?

    Mit freundlichen Grüßen

    Sheldon
  • Der Fehler zeigt meistens an dass du entweder über einen Speicherbereich hinaus und hinein in einen andereren Block schreibst oder versuchst etwas freizugeben was bereits freigegeben wurde. Er tritt jedenfalls leider immer erst beim Versuch den korrupten Speicher freizugeben auf und nicht schon dort wo der eigentliche Fehler passiert.

    von dot auf spieleprogrammierer.de/index.php?page=Thread&threadID=14774
    Sprich, da wird in Speicher geschrieben, den das Programm gar nicht zugeteilt bekommen hat, oder was doppelt freigibst muss ich mir mal genauer anschauen.
    mfg Pokertom
    @Sheldon stimmt, hast recht, sry... Aber bin ja erst 16, da darf sowas mal passieren, hauptsache es fällt auf... sonst kann man suchen :)
    Du bist Terrorist, warum? Siehe hier
  • so zeile 52 gibt es eigentlig garnicht...

    hier ist mal noch ein rat den ich bekommen hab.
    Globale Variablen benutzen ist mehr als unschoen. Wo ist den das Problem die Arrays in der main anzulegen und diese dann an die Funktionen weiterzugeben. Damit haettest du den ersten Fehler auch nicht. Ich denke das Hauptproblem ist die Funktion

    Quellcode

    1. void zahlenAbfragen(){
    2. int *x = new int[6];
    3. cout<<"Waehlen Sie 6 Zahlen von 1 bis 49: "<<endl;
    4. for(int y = 0; y < 6; y++){
    5. cout << y+1 << ". Zahl: ";
    6. cin >> x[y];
    7. delete[] x;}
    8. }
    Alles anzeigen


    Hier legst du ein Array an. So weit sogut, aber nach dem ersten Schleifendurchlauf loescht du dieses wieder. Das heisst, wenn du den Speicher unbedingt in der Funktion wieder freigeben wollen wuerdest, dass nach der Schleife. Das Problem ist dann nur (wenn du das Array freigibst) dass deine gerade eingelesenen Zahlen weg sind. Man koennte/muesste um dies zu verhindern vorher ein Return einbauen, was das Array zurueck gibt. Die viel bessere Variante ist es das Array in der main anzulegen, dieses dann an die Funktion zu uebergeben und dann die Werte einzulesen. Das tolle daran ist, dass du nur am Ende der main das Array freigeben brauchst und die Aenderungen automatisch mit dem Orginalarray passieren.


    Quellcode

    1. void zufallszahlenErzeugen()
    2. {int zufallsZahl = 0;
    3. srand( (int) time(NULL) ); // ist einmalig notwendig damit der Zufallsgenerator funktioniert,
    4. int *arr= new int[6];
    5. for (int i=0; i<6; i++) { // i<20, wir wollen 20x wuerfeln
    6. zufallsZahl = rand(); // "rand();" gibt eine zufällige Interger-Zahl zwischen 1 und 32768 zurück
    7. zufallsZahl = zufallsZahlI + 1; // jetzt muessen wir von unserer Zufallszahl so lange 6 abziehen, bis sie kleiner als 6 ist
    8. // Ausgabe auf dem Bildschirm
    9. arr[i] = zufallsZahl;
    10. cout << zufallsZahl << " " ;
    11. }
    12. }
    Alles anzeigen



    Hier machst du einen aehnlichen Fehler. Du legst das Array in der Funktion an, aber sobald die Funktion verlassen wird sind deine Zahlen weg und du hast keine Moeglichkeit, diese abzurufen. Also auch hier entweder das Array zurueckgeben oder ein Array in der main anlegen und diese in die Funktion reingeben.

    Das gleiche Spiel fuer diese Funktion

    Quellcode

    1. void resultatVergleichen()
    2. {int treffer = 0;
    3. for(int j = 0; j<6; j++)
    4. for(int k = 0; k<6; k++)
    5. if(x[j] == arr[k])
    6. treffer++;
    7. cout<<"Sie haben " << treffer <<" Treffer!"<<endl;
    8. }
    Alles anzeigen



    könnte ihr mir vll mal ein bsp zeigen anhand der tipps?
    also wie ich die in die main einbinde
  • Er hat schon recht. Ich hab versucht deinen Code in C# zu schreiben und behandle es im Endeffekt wie er es gesagt hat.

    Du weißt ja bereits wofür Funktionen da. Nur es gibt verschiedene Arten von Funktionen (Rückgabewert, Zugriffe).

    Quellcode

    1. void zahlenAbfragen(){
    2. int *x = new int[6];
    3. cout<<"Waehlen Sie 6 Zahlen von 1 bis 49: "<<endl;
    4. for(int y = 0; y < 6; y++){
    5. cout << y+1 << ". Zahl: ";
    6. cin >> x[y];
    7. delete[] x;}
    8. }
    Alles anzeigen


    Rückgabewerte

    In deinem aktuellen Code steht void an erster Stelle der Funktion. void steht für Leerstelle und gibt an, dass kein Rückgabewert zurückgegeben wird.
    Seit du angefangen hast, programmieren zu lernen, arbeitest du bereits mit einer Funktion. die main-Funktion. Obwohl kein void davor steht,
    gibt sie ebenfalls keinen Rückgabewert zurück. Warum?

    Weil du am Schluss "return 0" und ebenfalls kein Rückgabewert zurückgibst.

    Was wissen wir nun?

    void deklariert Funktion ohne Rückgabewert und return übermittelt den Rückgabewert.

    Aber wie sieht eine Funktion mit Rückgabewert aus?

    Ich kenn mich nicht genug mit C++ aus, aber eine Funktion mit Rückgabewert wird mit dem Typen und dem Funktionsnamen deklariert.

    z.B

    Quellcode

    1. int addieren(int zahl1, int zahl2) // 2 Parameter
    2. {
    3. int zahl1;
    4. int zahl2;
    5. summe = zahl1 + zahl2;
    6. return int summe;
    7. }



    Es muss aber eine Rückgabewert des Types Int zurückgeben werden. Nicht, dass du versucht komischerweise den Int in eine String zu konvertieren und den String rück zu liefern.

    Sorry muss weg.

    Mit freundlichen Grüßen

    Sheldon
  • dank dir erstmal,werd es weiter versuchen und morgen früh nochmal hier schreiben ob ich weiter gekommen bin.

    nochmal danke ihr beiden habt mir zumindest soweit schonmal sehr geholfen!
    und ich hoffe ihr guckt morgen nochmal rein um mir einen kleine tipp zu geben falls ich es noch nicht geschafft habe!?