Float -> int problem (noob-frage <<)

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

  • Float -> int problem (noob-frage <<)

    hi leutz
    bin neu hier, und kenn mich auch noch net so wirklich mit C(++) aus
    und jetzt hab ich gedacht, weil wir gerade parabeln und der gleichen zeug in der schule machen, mach ich mal nen simples prog, das mir ne parabel zeigt (ohne grafik)

    Quellcode

    1. #include <iostream>
    2. using namespace std;
    3. int main()
    4. {
    5. int step;
    6. cin >> step;
    7. int a,b,c;
    8. float i,j;
    9. int x[21][21];
    10. for(i=0;i<=19;i=i+step)
    11. {
    12. for(j=-10;j<=9;j=j+step)
    13. {
    14. x[int(i)][int(j+10)] = 0;
    15. if(i == j*j)
    16. {
    17. x[int(i)][int(j+10)] = 1;
    18. }
    19. }
    20. }
    21. for(i=0;i<=19;i++)
    22. {
    23. for(j=0;j<=19;j++)
    24. {
    25. if(x[int(i)][int(j)] == 1)
    26. {
    27. cout << " #";
    28. }
    29. else
    30. {
    31. cout << " .";
    32. }
    33. }
    34. cout << endl;
    35. }
    36. }
    Alles anzeigen


    mit dem wert am anfang (step, also die schrittgrüße, nach die der suchen soll) = 1 gehtz wunderbar...

    wenn ich jetzt aber z.B 2 eingeb kommen wirre zahlen raus...
    bei 0.5 wiederum seh ich gar nix mehr...

    ich weiß, das es iwo nen ganz simpler fehler is...
    nur ich komm nich drauf ><

    schonmal danke, fals mir jmd helfen "will" x3

    -pocky-[/coderwiki]
  • Ich habs mal ausprobiert...
    Also bei mir gibts mit der 2 keine Probleme... ergebnis stimmt ^^

    Wenn du step = 0.5 setzt wird 0.5 in einen Integer gecastet und somit fällt die Kommastelle weg. Also haste im Endeffekt step = 0 geschreiben und damit ne Endlosschleife gebaut.
    Hey morons, let's get a move on before the other moron does something especially moronic.
  • also ich hab die variable step anstat int als float declariert - aber des hat auch nix gebracht... bei 1 gabs ne schöne normalparabel - aber bei 2 sowas wieschiffe versenken ^^ lauter # :D

    aber die idee is gut - wollt sowas auch schonmal machen aber mir hat die zeit gefehlt...

    wär auch happy wenn jemand da n bug findet un weiß wie man den fixxt


    mfg JeSt
  • "pocky" schrieb:

    moment...
    *denk*
    also heißt das wenn ich int(var) nich nur die abgerundete variable ausgegeben wird, sondern das die ganze variable gerundet wird?!
    *angst*


    Nein.
    Da step vom Typ int ist, wird beim Einlesen, wenn du 0.5 eintippst, kurzerhand alles hinterm Punkt weggeschmissen und step ist nun 0.

    Und zum "Schiffe versenken" ^^:
    Bei mir sahs wunderbar aus, weil Visual Studio offenbar das x-Array mit lauter Nullen initialisiert. Klar macht das net jeder Compiler. Der Fehler bei dir ist, dass du nur bei den Feldern entscheidest, ob 0 oder 1 rein soll, die du auch wirklich abtastest. Wenn du step = 2 setzt gibt es also Felder in deinem array, die du nie berührst. Die bleiben dann eben auf dem Wert stehen, mit dem sie ürsprünglich initialisiert wurden. Und was das für Werte sind ist mehr oder weniger zufällig ;)

    Füge einfach folgende Zeile nach int x[21][21]; ein

    Quellcode

    1. for (i=0; i<441; i++) x[0][i]=0;
    Hey morons, let's get a move on before the other moron does something especially moronic.
  • Logisch, weil:
    Nehmen wir z.b. step=3...

    er beginnt bei i=0
    testet
    j=-10 -> i == j*j -> falsch
    j=-7 -> i == j*j -> falsch
    ...
    j=-1 ...
    j=2 ...
    ...

    da er nie j=0 testet, wird für i=0 nix gefunden...
    dann kommen i=3, i=6 -> keine quadratzahlen

    für i=9 müsste an j=3 ein # gemacht werden. da j aner nur die werte -10, -7, -4, -1, 2, 5, 8 annimmt wird j=3 net getestet...

    usw ^^
    Hey morons, let's get a move on before the other moron does something especially moronic.