Zu den Aufzeichnungen der tutorials.de-Live-Workshops
Seite 1 von 2 12 LetzteLetzte
Like Tree2Danke
ERLEDIGT
JA
ANTWORTEN
27
ZUGRIFFE
2017
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Soul-ya Soul-ya ist offline Mitglied
    Registriert seit
    Oct 2009
    Beiträge
    14
    Da ich im Netz auf nichts Ähnliches gestoßen bin stelle ich mein kürzlich erstelltes Programm allen zur Verfügung. Hier werden 6 Pseudozufallszahlen
    generiert, die jeweils nur einmal vorkommen.

    Da ich selbst oft die Hilfe von anderen benötige dachte ich mir mein Programm auch veranschaulichen zu können. MfG Soul-ya( Mustapha Merabti)
    zu stolz auf mein Progrämmchen um's namenlos auszusetzen

    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
    
    #include "stdafx.h"
    #include <stdio.h>
    #include <iostream>
    #include <time.h>
     
    void main()
    {
    system("title 6er Lotto");
     
    int zahl[6];
     
    srand(time(NULL)); // ab jetzt können pseudozufallszahlen generiert werden
     
     for(int x=0;x<6;x++)
        {
        zahl[x]=rand()%49; // generieren einer pseudozufallszahl
        }
     
    /* ab hier werden die arrays solange sie ungleich sind miteinander verglichen,
    sollten sie gleich werden wird anstelle des zahl[x]-arrays ein neuer wert generiert*/ 
     
    int ok=0;
    while(ok==0)
         {
          for(int y=0;y<5;y++)
             {
              for(x=0;x<6;x++)
                 {
                  if(y==x)
                     y++;
                  if(zahl[y]!=zahl[x])
                     ok=1; // hier wird die bedingung der while-schleife verändert
                  else
                  {
                   zahl[x]=rand()%49;
                   ok=0;
                  }
                 }
             }
         }
    //hier fängt die ausgabe an
     
     for(x=0;x<6;x++)
        {
        printf("%i",zahl[x]+1);
        }
     
    system("pause");
    }
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Hi. Willkommen!
    Zitat Zitat von Soul-ya Beitrag anzeigen
    Da ich im Netz auf nichts Ähnliches gestoßen bin
    Deine Suchfähigkeiten sind offenbar stark verbeserungswürdig...

    http://www.tutorials.de/forum/c-c/32...vermeiden.html

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Soul-ya Soul-ya ist offline Mitglied
    Registriert seit
    Oct 2009
    Beiträge
    14
    Zitat Zitat von deepthroat Beitrag anzeigen
    Hi. Willkommen!

    Deine Suchfähigkeiten sind offenbar stark verbeserungswürdig...

    http://www.tutorials.de/forum/c-c/32...vermeiden.html

    Gruß
    du willst den quark doch nicht mit meinem meisterwerk(angeb*) vergleichen
    scherz bei seite, die beiträge sind auch nicht schlecht, meiner ist dennoch besser. ohne großes täräää ein einfach verständliches programm.
     

  4. #4
    jsendrow Tutorials.de Gastzugang
    Zitat Zitat von Soul-ya Beitrag anzeigen
    meiner ist dennoch besser. ohne großes täräää ein einfach verständliches programm.
    Dein Ansatz ist nichteinmal gut, geschweige denn "besser". Genaugenommen funktioniert er nicht einmal.

    Logikfehler 1: Wenn Du zwei gleiche Zahlen findest setzt du OK = 0, testest aber weiter anstatt die Schleife abzubrechen. Ist der folgende Test dann wieder ungleich setzt Du ok = 1. Fazit: Dein Algo kann gleiche Zahlen nur erkennen wenn diese im letzten Eintrag des Arrays sind.

    Logikfehler 2: Die äußere Schleife ist sinnlos, praktisch läuft nur die innere Schleife einmal durch von 0 - 5. Warum? Naja, schau mal hier:
    if(y==x) y++;

    Dadurch passiert folgendes in der inneren Schleife.

    1. Durchlauf: x = 0, y = 0. Gleich, also y++;
    2. Durchlauf x = 1, y = 1 (durch y++). Gleich, also y++;
    3. Durchlauf x = 2, y = 2 (durch y++). Gleich, also y++;
    4. Durchlauf x = 3, y = 3 (durch y++). Gleich, also y++;
    5. Durchlauf x = 4, y = 4 (durch y++). Gleich, also y++;
    6. Durchlauf x = 5, y = 5 (durch y++). Gleich, also y++;

    So, jetzt ist die innere Schleife genau einmal durchlaufen und y hat den Wert 6, also bricht die äußere Schleife ab.

    Btw, Beim letzten Durchlauf der inneren Schleife hat Y den Wert 6, greift also auf undefinierten Speicher zu. (array ist 0 - 5)

    Fazit: Der Algo funktioniert nicht, er vergleicht lediglich die benachbarten Zahlen auf Gleichheit.

    Beweis: Gibt mal folgendes Array vor:

    int zahl[6] = { 1, 2, 1, 2, 1, 2 };

    Und lass das durch deinen Algo laufen. Du wirst sehen das am Ende immer noch 1,2,1,2,1,2 im Array steht...
     

  5. #5
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.774
    Blog-Einträge
    5
    Hallo,

    wie wäre es hiermit?

    Code c:
    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
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    int main(void) {
      int zahlen[6];         // Die Lottozahlen
      bool zahl_benutzt[49]; // Gibt für jede Zahl 0-48 an, ob sie bereits in zahlen gespeichert ist
      int zahl;              // Zum Speichern einer Zufallszahl
      int i;                 // Zählvariable
     
      // Initialisierung von zahl_benutzt
      for (i = 0; i < 49; ++i) {
        zahl_benutzt[i] = false;
      }
     
      // Initialisierung des PRNG
      srand(time(NULL));
      
      // Ziehung der Zahlen
      i = 0;
      while (i < 6) {
        zahl = rand() % 49; // Zufallszahl 0-48 erzeugen
        if (!zahl_benutzt[zahl]) {   // Wenn die Zahl noch nicht in zahlen gespeichert ist:
          zahlen[i] = zahl;          // Die Zahl speichern und...
          zahl_benutzt[zahl] = true; // ...als bereits benutzt markieren.
          i++;
        }
      }
     
      // Ausgabe
      for (i = 0; i < 6; ++i) {
        printf("%i ", zahlen[i] + 1);
      }
     
      return 0;
    }

    Grüße, Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  6. #6
    Soul-ya Soul-ya ist offline Mitglied
    Registriert seit
    Oct 2009
    Beiträge
    14
    das teil ist natürlich sahnig ohne logische fehler

    Zitat Zitat von Matthias Reitinger Beitrag anzeigen
    Hallo,

    wie wäre es hiermit?

    Code c:
    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
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    int main(void) {
      int zahlen[6];         // Die Lottozahlen
      bool zahl_benutzt[49]; // Gibt für jede Zahl 0-48 an, ob sie bereits in zahlen gespeichert ist
      int zahl;              // Zum Speichern einer Zufallszahl
      int i;                 // Zählvariable
     
      // Initialisierung von zahl_benutzt
      for (i = 0; i < 49; ++i) {
        zahl_benutzt[i] = false;
      }
     
      // Initialisierung des PRNG
      srand(time(NULL));
      
      // Ziehung der Zahlen
      i = 0;
      while (i < 6) {
        zahl = rand() % 49; // Zufallszahl 0-48 erzeugen
        if (!zahl_benutzt[zahl]) {   // Wenn die Zahl noch nicht in zahlen gespeichert ist:
          zahlen[i] = zahl;          // Die Zahl speichern und...
          zahl_benutzt[zahl] = true; // ...als bereits benutzt markieren.
          i++;
        }
      }
     
      // Ausgabe
      for (i = 0; i < 6; ++i) {
        printf("%i ", zahlen[i] + 1);
      }
     
      return 0;
    }

    Grüße, Matthias
     

  7. #7
    Soul-ya Soul-ya ist offline Mitglied
    Registriert seit
    Oct 2009
    Beiträge
    14
    dir danke ich auch für die aufklärung dann muss ich mir mein progrämmchen nochmal anschauen

    Zitat Zitat von jsendrow Beitrag anzeigen
    Dein Ansatz ist nichteinmal gut, geschweige denn "besser". Genaugenommen funktioniert er nicht einmal.

    Logikfehler 1: Wenn Du zwei gleiche Zahlen findest setzt du OK = 0, testest aber weiter anstatt die Schleife abzubrechen. Ist der folgende Test dann wieder ungleich setzt Du ok = 1. Fazit: Dein Algo kann gleiche Zahlen nur erkennen wenn diese im letzten Eintrag des Arrays sind.

    Logikfehler 2: Die äußere Schleife ist sinnlos, praktisch läuft nur die innere Schleife einmal durch von 0 - 5. Warum? Naja, schau mal hier:
    if(y==x) y++;

    Dadurch passiert folgendes in der inneren Schleife.

    1. Durchlauf: x = 0, y = 0. Gleich, also y++;
    2. Durchlauf x = 1, y = 1 (durch y++). Gleich, also y++;
    3. Durchlauf x = 2, y = 2 (durch y++). Gleich, also y++;
    4. Durchlauf x = 3, y = 3 (durch y++). Gleich, also y++;
    5. Durchlauf x = 4, y = 4 (durch y++). Gleich, also y++;
    6. Durchlauf x = 5, y = 5 (durch y++). Gleich, also y++;

    So, jetzt ist die innere Schleife genau einmal durchlaufen und y hat den Wert 6, also bricht die äußere Schleife ab.

    Btw, Beim letzten Durchlauf der inneren Schleife hat Y den Wert 6, greift also auf undefinierten Speicher zu. (array ist 0 - 5)

    Fazit: Der Algo funktioniert nicht, er vergleicht lediglich die benachbarten Zahlen auf Gleichheit.

    Beweis: Gibt mal folgendes Array vor:

    int zahl[6] = { 1, 2, 1, 2, 1, 2 };

    Und lass das durch deinen Algo laufen. Du wirst sehen das am Ende immer noch 1,2,1,2,1,2 im Array steht...
     

  8. #8
    Soul-ya Soul-ya ist offline Mitglied
    Registriert seit
    Oct 2009
    Beiträge
    14
    Zitat Zitat von jsendrow Beitrag anzeigen
    Dadurch passiert folgendes in der inneren Schleife.

    1. Durchlauf: x = 0, y = 0. Gleich, also y++;
    2. Durchlauf x = 1, y = 1 (durch y++). Gleich, also y++;
    3. Durchlauf x = 2, y = 2 (durch y++). Gleich, also y++;
    4. Durchlauf x = 3, y = 3 (durch y++). Gleich, also y++;
    5. Durchlauf x = 4, y = 4 (durch y++). Gleich, also y++;
    6. Durchlauf x = 5, y = 5 (durch y++). Gleich, also y++;

    So, jetzt ist die innere Schleife genau einmal durchlaufen und y hat den Wert 6, also bricht die äußere Schleife ab.

    Btw, Beim letzten Durchlauf der inneren Schleife hat Y den Wert 6, greift also auf undefinierten Speicher zu. (array ist 0 - 5)

    F
    nicht ganz, muss ich noch hinzufügen. y kann nur bis 4 ansteigen, denn y<5 ist die bedingung der äußeren schleife. deine ausführung sind verständlich und hilfreich, aber den durchblick hast du auch noch nicht

    ich verneige mich demütig... ich habe den fehler jetzt verstanden.
    Geändert von Soul-ya (04.10.09 um 17:11 Uhr)
     

  9. #9
    Soul-ya Soul-ya ist offline Mitglied
    Registriert seit
    Oct 2009
    Beiträge
    14
    jetzt habe ich durch eure kritik mein programm vervollständigen können. ich nehme äußert ungern programme anderer und noch viel weniger mag ich boolsche variablen. wobei das andere programm mir echt gut gefällt!

    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
    
    #include "stdafx.h"
    #include <stdio.h>
    #include <iostream>
    #include <time.h>
     
    void main()
    {
    system("title 6er Lotto");
     
    int zahl[6]/*={1,2,1,2,1,2}*//*die probe*/,x,ok=0;
     
    srand(time(NULL));
     
    for(x=0;x<6;x++)
       {
        zahl[x]=rand()%49;// die anweisung muss mann zur probe ausklammern
       }
     
    while(ok==0)
         {
          for(int y=0;y<6;y++)
             {
              for(x=0;x<5;x++)
                 {
                  if(y==x)
                     x++;
                  if(zahl[y]!=zahl[x])
                     ok=1;
                  else
                  {
                   zahl[x]=rand()%49;
                   ok=0;
                   break;
                  }
                 }
              if(ok==0)
                 break;
             }
         }
     
     for(x=0;x<6;x++)
        {
        printf("%i ",zahl[x]+1);
        }
     
    system("pause");
    }
    Geändert von Soul-ya (04.10.09 um 19:07 Uhr)
     

  10. #10
    jsendrow Tutorials.de Gastzugang
    Zitat Zitat von Soul-ya Beitrag anzeigen
    nicht ganz, muss ich noch hinzufügen. y kann nur bis 4 ansteigen, denn y<5 ist die bedingung der äußeren schleife. deine ausführung sind verständlich und hilfreich, aber den durchblick hast du auch noch nicht

    ich verneige mich demütig... ich habe den fehler jetzt verstanden.
    Soso. Dann überprüf es doch mal y hat nach dem Durchlauf der inneren Schleife den Wert 6. Erst dann wird die Abbruchbedingung der äußeren Schleife überprüft und da 6 > 4 ist bricht die äußere Schleife dann ab.
     

  11. #11
    Soul-ya Soul-ya ist offline Mitglied
    Registriert seit
    Oct 2009
    Beiträge
    14
    Zitat Zitat von jsendrow Beitrag anzeigen
    Soso. Dann überprüf es doch mal y hat nach dem Durchlauf der inneren Schleife den Wert 6. Erst dann wird die Abbruchbedingung der äußeren Schleife überprüft und da 6 > 4 ist bricht die äußere Schleife dann ab.
    habe ich getan du hast recht, aber an meiner ausgearbeiteten syntax gibt's nichts zu meckern kollege, oder
     

  12. #12
    jsendrow Tutorials.de Gastzugang
    Zitat Zitat von Soul-ya Beitrag anzeigen
    habe ich getan du hast recht, aber an meiner ausgearbeiteten syntax gibt's nichts zu meckern kollege, oder
    Kommt drauf an. Wenn Programmieren für Dich nur son Hobby ist, ja, super Lösung.
     

  13. #13
    Soul-ya Soul-ya ist offline Mitglied
    Registriert seit
    Oct 2009
    Beiträge
    14
    Zitat Zitat von jsendrow Beitrag anzeigen
    Kommt drauf an. Wenn Programmieren für Dich nur son Hobby ist, ja, super Lösung.
    ne,ne... ich bin ein anfänger aber ich will's schon intensivieren(studium und co.)
     

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

    Evlt. solltest du dich aber mal entscheiden ob das C oder C++ sein soll?

    Der <iostream> Header weist auf C++ hin, wobei das dein kein korrektes C++ Programm ist. Die main Funktion muss int zurückgeben und Header der C Bibliothek werden ohne die Endung .h und mit dem Präfix "c" eingebunden. Also statt <stdio.h> <cstdio>.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  15. #15
    Soul-ya Soul-ya ist offline Mitglied
    Registriert seit
    Oct 2009
    Beiträge
    14
    Zitat Zitat von deepthroat Beitrag anzeigen
    Hi.

    Evlt. solltest du dich aber mal entscheiden ob das C oder C++ sein soll?

    Der <iostream> Header weist auf C++ hin, wobei das dein kein korrektes C++ Programm ist. Die main Funktion muss int zurückgeben und Header der C Bibliothek werden ohne die Endung .h und mit dem Präfix "c" eingebunden. Also statt <stdio.h> <cstdio>.

    Gruß
    detailiertere statements sind oftmals effektiver...(als ob ich weiß was davon jetzt nicht c++ ist und was davon daraus ein c programm macht) was an dem programm macht daraus kein korrektes c++ programm

    ps: den iostream header benutze ich nur um system("pause") benutzen können.

    mfg soul-ya
     

Ähnliche Themen

  1. Zufallszahlen
    Von WorldRacer im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 13.06.08, 23:19
  2. zufallszahlen
    Von kurcob im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 25.05.08, 11:07
  3. Zufallszahlen
    Von Gen-Chan im Forum PHP
    Antworten: 1
    Letzter Beitrag: 16.04.05, 21:57
  4. zufallszahlen
    Von mihawk im Forum PHP
    Antworten: 3
    Letzter Beitrag: 17.05.04, 17:56
  5. zufallszahlen von 1-6
    Von computers im Forum Visual Basic 6.0
    Antworten: 7
    Letzter Beitrag: 20.01.04, 09:33

Stichworte