PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was macht dieses Programm?


pippo
2004-10-10, 11:47:42
So, in meinem Studium haben wir jetz gleich begonnen mit C++ zu programmieren. Nach den ersten 2 Vorlesungen hat uns die Professorin auch gleich folgendes Programm gegeben, indem wir bis zur nächsten Vorlesung alle Syntaxfehler finden und das Programm so abändern müssen, dass man die Zahlen zahl1 und zahl2 von der Standardeingabe einlesen kann.


#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
float zahl1, zahl2;
float ergebnis;
int zaehler;

zahl1 = 1.0; zahl2 = 2.0; zaehler = 0;
while (zahl1 + zahl2 != zahl1)
{
zaehler++;
zahl2 = zahl2 / 10.0;
}
cout << setw(2) << zaehler << "???" << endl;

zahl2 = 2.0; zaehler = 0;
while (1)
{
ergebnis = zahl1 + zahl2;
if (ergebnis == zahl1)
break;
zaehler++;
zahl2 = zahl2 / 10.0;
}
cout <<setw(2) << zaehler << "??? "<< endl;
return (0);
}

Die Syntaxfehler hab ich meiner Meinung nach schon alle gefunden, nur leider habe ich keine Ahnung, was das Programm jetzt eigentlich macht. Könnte mir das vielleicht mal kurz jemand erklären ? THX

Einfachkrank
2004-10-10, 15:49:01
Erscheint mir sehr merkwürdig! In der ersten und zweiten Schleife dividiert er zahl2 solange bis sie gleich null ist, aber das wird theoretich nie der Fall sein, da ja 2 geteilt durch jede Zahl nie 0 sein kann! Errinnert mich irgendwie an Asymbtoten und Grenzwertberechnung oder so was in der Art...

Gast
2004-10-10, 18:25:09
Erscheint mir sehr merkwürdig! In der ersten und zweiten Schleife dividiert er zahl2 solange bis sie gleich null ist, aber das wird theoretich nie der Fall sein, da ja 2 geteilt durch jede Zahl nie 0 sein kann! Errinnert mich irgendwie an Asymbtoten und Grenzwertberechnung oder so was in der Art...

theorie und praxis... in der theorie gibt es zwischen theorie und praxis keinen unterschied, in der praxis schon.

ein float kann nicht jede mögliche zahl darstellen. es gibt grenzen beim komma hin und herschieben. ausserdem hat die zahl selber einen begrentzen wertebereich.

wenn man eine grosse und eine kleine zahl addiert, kann es deshalb durchaus sein, das die kleine zahl zu klein ist, um irgendeine änderung bei der grossen hervorzurufen.

Aqualon
2004-10-10, 20:36:14
Sinn macht das ganze zwar nicht, aber in beiden Fällen läuft es darauf hinaus, dass zahl2 so klein wird, dass sie als float nicht mehr >0 sein kann.

Beide Schleifen sollten auch auf dasselbe Ergebnis bei zaehler kommen, der einzige Unterschied ist, dass die Abbruchbedingung anders gehandhabt wird. Einmal wird direkt am Anfang die Schleife bei erfüllter Bedingung beendet und bei der anderen Schleife wird diese innerhalb per break; verlassen.

Aqua