von php in c++ o.Ä.

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

  • von php in c++ o.Ä.

    Hi!

    Ich habe grade was in php geschrieben (is das einzige womit ich das immo hinkriege ^^)
    Jetzt is das Problem das es sich um eine sehr lange rechnung handelt und deßhalb immer nach 10 s abgebrochen wird!
    Deßhalb brauch ich das ganze als exe oder was auch immer ^^
    Hauptsache die Funktion stimmt
    Hier das Script:

    Quellcode

    1. <?php
    2. $summe=1;
    3. $dazu=3;
    4. for($summe=1; $summe<=489511; $summe+$dazu){
    5. $dazu=$dazu+2;
    6. }
    7. echo $summe;
    8. ?>


    Problem könnte auch werden dass das Ergebnis nicht in eine Variable passt (is bei c++ glaub ich so!?)

    Naja vielleicht hat ja jemd. paar min Zeit (is ja kein Anspruchsvoller Code XD )
    Ich wäre auf jeden Fall sehr dankbar!

    MFG
    Leange
  • Quellcode

    1. #include <iostream>
    2. using namespace std;
    3. int main()
    4. {
    5. int dazu = 3;
    6. int summe = 1;
    7. for(;summe <= 489511; summe += dazu)
    8. {
    9. dazu += 2;
    10. }
    11. cout << summe << endl;
    12. for(;;);
    13. return(0);
    14. }
    Alles anzeigen


    ich weiß zwar nich wozu du das brauchst, aber so wärs in c++...
    wennsu die exe noch brauchst mach sie dir selbst, oder sags mir

    ausgabe is 489997


    -pocky-


    (ach ja, es is klar das dein teil net geht, ich kenn mich in php net aus, aber meinesachtens wird der NIE fertig...
    weil bei deiner schleife zu der summe nichts richtig dazugemacht wird...)
  • (ach ja, es is klar das dein teil net geht, ich kenn mich in php net aus, aber meinesachtens wird der NIE fertig...
    weil bei deiner schleife zu der summe nichts richtig dazugemacht wird...)


    Also erstma danke!
    hm also die Ausgabe kann net stimmen! Denn in eine int passt das Ergebnis nicht das weiß ich! (long? oder wie heißt das?)

    Vom Prinzip soll das Prog alle ungraden Zahlen von 1 bis 489511 zusammenaddieren

    am Anfang summe + dazu (1+3)
    dann wird dazu um 2 erhöt
    summe +dazu (4+5) usw. ... so SOLLTE es funktionieren

    ABER ich hab schon den ersten Fehler gefunden ...
    $summe<=489511
    Bedingung muss aber sein
    $dazu<=489511

    Hm ...

    EDIT:

    Quellcode

    1. #include <cstdlib>
    2. #include <iostream>
    3. using namespace std;
    4. int main()
    5. {
    6. int dazu = 3;
    7. long summe = 1;
    8. for(;dazu <= 489511; summe += dazu)
    9. {
    10. dazu += 2;
    11. }
    12. cout << summe << endl;
    13. for(;;);
    14. return(0);
    15. }
    Alles anzeigen


    Jetzt kommt eine Minuszahl raus ...

    EDIT2:

    Quellcode

    1. #include <cstdlib>
    2. #include <iostream>
    3. using namespace std;
    4. int main()
    5. {
    6. long long dazu = 3;
    7. long long summe = 1;
    8. for(;dazu <= 489511; summe += dazu)
    9. {
    10. dazu += 2;
    11. }
    12. cout << summe << endl;
    13. for(;;);
    14. return(0);
    15. }
    Alles anzeigen


    Jetzt kommt eine positive Zahl raus aber das ergebnis stimmt nicht -.-
  • long long ist IMHO C99 und cout C++98 => Beides Mischen und das ganze ist in keiner Sprache mehr gültig.

    gcc dürfte es zwar schlucken ;)

    Kann mich aber auch irren

    EDIT:// Da du das Ergebniss scheinbar kennst: Was soll den rauskommen?

    EDIT2://
    Mit deinem Programm kommt 59.905.989.046 bei mir raus

    EDIT3://
    Mit unsigned int kommt 4.071.414.198
    raus

    => Ich vermute mal das Ergebniss ist zu groß ums so zu berechnen. Da bräuchte man deutlich größere Zahlen. (boost bietet da was, glaub ich)

    EDIT4://
    Mit float kommt 5.9906e+10 raus, ebenso mit double, daher denke ich das Ergebniss passt
    There are only 10 types of people in the world: Those who understand binary, and those who don't.

    Download meines ersten Spiels:HIER
    Über Feedback würde ich mich freuen ;)
  • Hm, macht doch Spaß in alten Threads rumzuschmökern...

    Da gibt's immer wieder die Möglichkeit nochmal den eigenen Senf dazuzugeben.

    Ich find's erstaunlich, wie häufig das Vorurteil gepflegt wird, php wär so grottig langsam. Man müsse auf C(++) ausweichen, wenn eine Aufgabenstellung zu komplex wird.... php könne nicht mit long umgehen, usw.

    Wenn das Programm richtig geschrieben wird, klappt's auch mit dem Nachbarn.

    PHP-Quellcode

    1. <?php
    2. $start=microtime(true);
    3. $ungrad_max=489511;
    4. $summe=0;
    5. for($i=1; $i<=$ungrad_max; $i=$i+2){
    6. $summe+=$i;
    7. }
    8. $end=microtime(true);
    9. echo
    10. 'Ergebnis: '.number_format($summe,0,',','.')."\n\n",
    11. 'Laufzeit: '.($end-$start).' sek';
    12. ?>
    Alles anzeigen


    Ausgabe:

    Ergebnis: 59.905.499.536

    Laufzeit: 0.058641910553 sek


    [EDIT] Oder ist das Ergebnis jetzt falsch? immerhin ist is_double() in php ein Alias für is_float().... *grübel*

    [EDIT]
    Sicherheitshalber deswegen einfach mal die BC-Math-Erweiterung benutzen
    (Rechnen mit beliebiger Genauigkeit, da die Werte als Strings behandelt werden.)

    PHP-Quellcode

    1. <?php
    2. $start=microtime(true);
    3. $ungrad_max=489511;
    4. $summe='0';
    5. for($i=1; $i<=$ungrad_max; $i=$i+2){
    6. $summe=bcadd($summe,(string)$i);
    7. }
    8. $end=microtime(true);
    9. echo
    10. 'Ergebnis: '.$summe."\n\n",
    11. 'Laufzeit: '.($end-$start).' sek';
    12. ?>
    Alles anzeigen

    Kommt aber das gleiche heraus, Nur die Laufzeit erhöht sich um eine halbe Sekunde.
    Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Jeder glaubt, er hätte genug davon.
    --------------------------------------------------(Rene Descartes)

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von McSush ()

  • Pah, so rum ist's doch viel zu einfach gestrickt. - ging (mir zumindest)
    doch drum, daß php nicht fähig wäre ein paar mal hintereinander zu addieren,
    so wie es der Threadstarter behauptete. ;)
    Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Jeder glaubt, er hätte genug davon.
    --------------------------------------------------(Rene Descartes)
  • Das ganze in Java...

    Hallo :)

    Hab insgesamt nicht allzuviel Ahnung, bin noch Anfängerin, aber mit PHP steh ich total auf Kriegsfuß. Das ist doch keine Sprache.... :P :D ^^
    Java liegt mir da schon eher :love: Daher hab ich das ganze mal in Java ausprobiert:

    Quellcode

    1. public class Additionen
    2. {
    3. public static void main(String[] args)
    4. {
    5. long summe = 1;
    6. // long dazu = 3; brauch ich ja nur in der schleife...
    7. for (long dazu = 1; dazu <= 489511; dazu += 2)
    8. {
    9. summe += dazu;
    10. }
    11. System.out.println(summe);
    12. }
    13. }
    Alles anzeigen


    Zum Verständnis der for-Schleife kann ich nur sagen:
    Wenn alle ungeraden Zahlen bis 489511 addiert werden sollen, muss ich ja den Wert eben dieser Variablen in der Schleifenbedingung jedesmal erhöhen.
    Und jedesmal, wenn erhöht wurde, wird halt der Wert zur Summe addiert.
    Oder anders ausgedrückt: "Für 'dazu' von 1 bis 489511 mit Schrittweite 2: addiere 'dazu' zu 'summe'."

    Achja, bei mir schmeißt Java das hier als Ergebnis auf die Konsole:
    59905499537

    ==========================================================

    So, hab gerade 2 Tage C++ Workshop hinter mir :D ... also das gleiche, was ich oben in Java gemacht habe, mach ich hier in C++

    Quellcode

    1. #include <iostream>
    2. using namespace std;
    3. int main()
    4. {
    5. int summe;
    6. int dazu;
    7. for(dazu = 1 ;dazu <= 489511 ; dazu += 2)
    8. {
    9. summe += dazu;
    10. }
    11. cout << summe << endl;
    12. return(0);
    13. }
    Alles anzeigen


    Habs jetzt nicht getestet, aber sollte meiner Meinung nach funktionieren.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Fireflower ()