Autor
Nachricht
Alistair1231
Mitglied
Benutzerprofil
Anmeldungsdatum: 28.10.2011
Beiträge: 4
Alistair1231 Mitglied
15:49:13 28.10.2011 Titel:
seltsame printf ausgabe bei Heron Verfahren
Zitieren
Hallo Ich habe mir (als wir in der schule das Heron verfahren durchgenommen haben) gedacht ich schreibe dazu mal ein programm. so: jetzt habe ich den code eigentlich soweit fertig, aber jetzt, wenn ich das programm an mache gibt er mir als ergebnis etwas wie "0.0000000009" jedes mal aus... egal mit welcher Zahl ich ihn rechnen lasse... Hilfe!
Achja... Hier der Code:
C/C++ 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 50 51 52 53 54 55
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 50 51 52 53 54 55
#include <stdio.h>
int main()
{
int loops,schleife,art,men3,mom=0, default ;
double start,erg,test,geg;
printf("Zahl:\n ");
scanf("%d ", &geg);
printf("\nVorgehensart? \n 1. bestimmte Anzahl Wiederholungen? \n 2. Bis zum bitteren Ende \(nicht empfohlen\) \n 3. 1000 Wiederholungen? \n\n ALS ANTWORT BITTE EINFACH 1,2 oder 3 angeben \n ");
scanf("%d ", &art);
start=1;
switch (art) {
case 1: {
printf("Wie viele?\n ");
scanf("%d ", &loops);
while (schleife<=loops) {
erg=0.5*(start+(start/geg));
start=erg;
printf("%d: zwichenergebnis: %f0.9\n ", mom,erg);
schleife++;
mom++; }
printf("\n %d Endergebnis: %f0.9 ", mom, erg);
break ; }
case 2: {
while (geg != test) {
erg=0.5*(start+(start/geg));
start=erg;
printf("zwichenergebnis: %f0.9\n ", erg); }
printf("\nEndergebnis: %f0.9 ", erg);
break ; }
case 3: {
while (men3 <= 1000) {
erg=0.5*(start+(start/geg));
start=erg;
printf("zwichenergebnis: %f0.9\n ", erg);
men3++;
mom++; }
printf("\nEndergebnis: %f0.9 ", erg);
break ; }
default : {
default ++;
break ; }
return 0;
}
C/C++ 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 50 51 52 53 54 55
#include <stdio.h>
int main()
{
int loops,schleife,art,men3,mom=0, default ;
double start,erg,test,geg;
printf("Zahl:\n ");
scanf("%d ", &geg);
printf("\nVorgehensart? \n 1. bestimmte Anzahl Wiederholungen? \n 2. Bis zum bitteren Ende \(nicht empfohlen\) \n 3. 1000 Wiederholungen? \n\n ALS ANTWORT BITTE EINFACH 1,2 oder 3 angeben \n ");
scanf("%d ", &art);
start=1;
switch (art) {
case 1: {
printf("Wie viele?\n ");
scanf("%d ", &loops);
while (schleife<=loops) {
erg=0.5*(start+(start/geg));
start=erg;
printf("%d: zwichenergebnis: %f0.9\n ", mom,erg);
schleife++;
mom++; }
printf("\n %d Endergebnis: %f0.9 ", mom, erg);
break ; }
case 2: {
while (geg != test) {
erg=0.5*(start+(start/geg));
start=erg;
printf("zwichenergebnis: %f0.9\n ", erg); }
printf("\nEndergebnis: %f0.9 ", erg);
break ; }
case 3: {
while (men3 <= 1000) {
erg=0.5*(start+(start/geg));
start=erg;
printf("zwichenergebnis: %f0.9\n ", erg);
men3++;
mom++; }
printf("\nEndergebnis: %f0.9 ", erg);
break ; }
default : {
default ++;
break ; }
return 0;
}
C/C++ 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 50 51 52 53 54 55
#include <stdio.h>
int main()
{
int loops,schleife,art,men3,mom=0, default ;
double start,erg,test,geg;
printf("Zahl:\n ");
scanf("%d ", &geg);
printf("\nVorgehensart? \n 1. bestimmte Anzahl Wiederholungen? \n 2. Bis zum bitteren Ende \(nicht empfohlen\) \n 3. 1000 Wiederholungen? \n\n ALS ANTWORT BITTE EINFACH 1,2 oder 3 angeben \n ");
scanf("%d ", &art);
start=1;
switch (art) {
case 1: {
printf("Wie viele?\n ");
scanf("%d ", &loops);
while (schleife<=loops) {
erg=0.5*(start+(start/geg));
start=erg;
printf("%d: zwichenergebnis: %f0.9\n ", mom,erg);
schleife++;
mom++; }
printf("\n %d Endergebnis: %f0.9 ", mom, erg);
break ; }
case 2: {
while (geg != test) {
erg=0.5*(start+(start/geg));
start=erg;
printf("zwichenergebnis: %f0.9\n ", erg); }
printf("\nEndergebnis: %f0.9 ", erg);
break ; }
case 3: {
while (men3 <= 1000) {
erg=0.5*(start+(start/geg));
start=erg;
printf("zwichenergebnis: %f0.9\n ", erg);
men3++;
mom++; }
printf("\nEndergebnis: %f0.9 ", erg);
break ; }
default : {
default ++;
break ; }
return 0;
}
Grüsse
Alistair
Chris_
Mitglied
Benutzerprofil
Anmeldungsdatum: 28.06.2009
Beiträge: 177
Chris_ Mitglied
16:01:37 28.10.2011 Titel:
Zitieren
Soweit ich das jetzt beim kurzen Drüberschauen gesehen habe, muss das im printf()-Befehl IMHO so aussehen:
statt
_________________ Planet *Earth = new Planet(); //Schöpfung
Alistair1231
Mitglied
Benutzerprofil
Anmeldungsdatum: 28.10.2011
Beiträge: 4
Alistair1231 Mitglied
16:17:18 28.10.2011 Titel:
Zitieren
wenn ich
mit
cpp]%0.9f] ersetze,
kommt immernoch was andres als das erhoffte raus...
jetzt kommt stadt
das
Chris_
Mitglied
Benutzerprofil
Anmeldungsdatum: 28.06.2009
Beiträge: 177
Chris_ Mitglied
18:25:37 28.10.2011 Titel:
Zitieren
Ich habe mir die Heron-Formel noch einmal angeschaut, der Fehler liegt nämlich in der Berechnung selbst:C/C++ Code: erg=0.5*(start+(geg/start));
C/C++ Code: erg=0.5*(start+(geg/start));
C/C++ Code: erg=0.5*(start+(geg/start));
stattC/C++ Code: erg=0.5*(start+(start/geg));
C/C++ Code: erg=0.5*(start+(start/geg));
C/C++ Code: erg=0.5*(start+(start/geg));
Jetzt kommen auch richtige Ergebnisse raus
MfG
Chris_
EDIT: Mit welchem Compiler ist dein oben gezeigter Code kompilierbar?
_________________ Planet *Earth = new Planet(); //Schöpfung
Zuletzt bearbeitet von Chris_ am 18:27:45 28.10.2011, insgesamt 1-mal bearbeitet
Alistair1231
Mitglied
Benutzerprofil
Anmeldungsdatum: 28.10.2011
Beiträge: 4
Alistair1231 Mitglied
18:42:08 28.10.2011 Titel:
Zitieren
Ich Idiot
Ja klar...
//
Chris_ schrieb:
EDIT: Mit welchem Compiler ist dein oben gezeigter Code kompilierbar?
Ich nutze Dev-C++
Nicht gut?
Chris_
Mitglied
Benutzerprofil
Anmeldungsdatum: 28.06.2009
Beiträge: 177
Chris_ Mitglied
20:32:34 28.10.2011 Titel:
Zitieren
Dev-C++ ist meines Wissens veraltet.
Als bessere Alternative wird hierzu oft die kostenlose Variante (Express Edition glaube ich) von Visual Studio empfohlen. (Womit ich selbst leider keine Erfahrung habe)
MfG
Chris_
_________________ Planet *Earth = new Planet(); //Schöpfung
DirkB
Unregistrierter
DirkB Unregistrierter
10:18:25 29.10.2011 Titel:
Zitieren
Es gibt seit Sommer neuere Versionen von Dev-C++.
Die sind aber nicht auf der alten Webseite.
Steht auch in der FAQ Dev-C++ ist veraltet!
Alistair1231
Mitglied
Benutzerprofil
Anmeldungsdatum: 28.10.2011
Beiträge: 4
Alistair1231 Mitglied
17:48:28 29.10.2011 Titel:
Zitieren
k Hab jetzt sowieso mal wieder Windoof vertrieben und mir Ubuntu installiert.. ( Gibts denn bei gcc irgendwelche Einwände? )
//
Hab den code jetzt mal was überarbeitet... (hab die rechenschritte in eine funktion gepackt und hab die double- mit floatvariablen ersetzt)
C/C++ 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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
#include <stdio.h>
float rechnen (float start,float geg);
void main()
{
int loops,schleife,art,men3,mom=0; //loops=wenn menüpunkt1 wieviele wiederholungen? ; art=menüauswahl für switch ; men3=menüpunkt3 (für while)
//geg= gegebene Zahl ; schleife=gegenzahl case 1 ; mom= momentane zahl
float start,erg,test,geg; // start+start2=Zahlen für Mittelwert ; Erg= errechneter mittelwert ; test=test für case 2
printf("Zahl:\n ");
scanf("%f ", &geg);
Idiot: {
printf("\nVorgehensart? \n 1. bestimmte Anzahl Wiederholungen? \n 2. Bis zum bitteren Ende (nicht empfohlen) \n 3. 1000 Wiederholungen? \n\n ALS ANTWORT BITTE EINFACH 1,2 oder 3 angeben \n ");
scanf("%d ", &art); }
start=1;
switch (art) {
case 1: {
printf("Wie viele?\n ");
scanf("%d ", &loops);
while (schleife<=loops) {
start = erg = rechnen(start,geg);
printf("%d: zwichenergebnis: %.9f\n ", mom,erg);
schleife++;
mom++; }
printf("\n %d Endergebnis: %.9f \n ", mom, erg);
break ; }
case 2: {
while (geg != test) {
start = erg = rechnen(start,geg);
printf("zwichenergebnis: %.9f\n ", erg); }
printf("\nEndergebnis: %.9f ", erg);
break ; }
case 3: {
while (men3 <= 1000) {
start = erg = rechnen(start,geg);
printf("zwichenergebnis: %.9f\n ", erg);
men3++;
mom++; }
printf("\nEndergebnis: %.9f ", erg);
break ; }
default : {
printf("Idiot^^ Lesen bildet! ");
goto Idiot;
break ; }
}
}
float rechnen(float start,float geg) {
return 0.5*(start+(start/geg)); }
C/C++ 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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
#include <stdio.h>
float rechnen (float start,float geg);
void main()
{
int loops,schleife,art,men3,mom=0; //loops=wenn menüpunkt1 wieviele wiederholungen? ; art=menüauswahl für switch ; men3=menüpunkt3 (für while)
//geg= gegebene Zahl ; schleife=gegenzahl case 1 ; mom= momentane zahl
float start,erg,test,geg; // start+start2=Zahlen für Mittelwert ; Erg= errechneter mittelwert ; test=test für case 2
printf("Zahl:\n ");
scanf("%f ", &geg);
Idiot: {
printf("\nVorgehensart? \n 1. bestimmte Anzahl Wiederholungen? \n 2. Bis zum bitteren Ende (nicht empfohlen) \n 3. 1000 Wiederholungen? \n\n ALS ANTWORT BITTE EINFACH 1,2 oder 3 angeben \n ");
scanf("%d ", &art); }
start=1;
switch (art) {
case 1: {
printf("Wie viele?\n ");
scanf("%d ", &loops);
while (schleife<=loops) {
start = erg = rechnen(start,geg);
printf("%d: zwichenergebnis: %.9f\n ", mom,erg);
schleife++;
mom++; }
printf("\n %d Endergebnis: %.9f \n ", mom, erg);
break ; }
case 2: {
while (geg != test) {
start = erg = rechnen(start,geg);
printf("zwichenergebnis: %.9f\n ", erg); }
printf("\nEndergebnis: %.9f ", erg);
break ; }
case 3: {
while (men3 <= 1000) {
start = erg = rechnen(start,geg);
printf("zwichenergebnis: %.9f\n ", erg);
men3++;
mom++; }
printf("\nEndergebnis: %.9f ", erg);
break ; }
default : {
printf("Idiot^^ Lesen bildet! ");
goto Idiot;
break ; }
}
}
float rechnen(float start,float geg) {
return 0.5*(start+(start/geg)); }
C/C++ 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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
#include <stdio.h>
float rechnen (float start,float geg);
void main()
{
int loops,schleife,art,men3,mom=0; //loops=wenn menüpunkt1 wieviele wiederholungen? ; art=menüauswahl für switch ; men3=menüpunkt3 (für while)
//geg= gegebene Zahl ; schleife=gegenzahl case 1 ; mom= momentane zahl
float start,erg,test,geg; // start+start2=Zahlen für Mittelwert ; Erg= errechneter mittelwert ; test=test für case 2
printf("Zahl:\n ");
scanf("%f ", &geg);
Idiot: {
printf("\nVorgehensart? \n 1. bestimmte Anzahl Wiederholungen? \n 2. Bis zum bitteren Ende (nicht empfohlen) \n 3. 1000 Wiederholungen? \n\n ALS ANTWORT BITTE EINFACH 1,2 oder 3 angeben \n ");
scanf("%d ", &art); }
start=1;
switch (art) {
case 1: {
printf("Wie viele?\n ");
scanf("%d ", &loops);
while (schleife<=loops) {
start = erg = rechnen(start,geg);
printf("%d: zwichenergebnis: %.9f\n ", mom,erg);
schleife++;
mom++; }
printf("\n %d Endergebnis: %.9f \n ", mom, erg);
break ; }
case 2: {
while (geg != test) {
start = erg = rechnen(start,geg);
printf("zwichenergebnis: %.9f\n ", erg); }
printf("\nEndergebnis: %.9f ", erg);
break ; }
case 3: {
while (men3 <= 1000) {
start = erg = rechnen(start,geg);
printf("zwichenergebnis: %.9f\n ", erg);
men3++;
mom++; }
printf("\nEndergebnis: %.9f ", erg);
break ; }
default : {
printf("Idiot^^ Lesen bildet! ");
goto Idiot;
break ; }
}
}
float rechnen(float start,float geg) {
return 0.5*(start+(start/geg)); }
gcc zickt nicht un kompiliert das ganze, wenn ich aber dann folgendes mache:
Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
~/Arbeitsfläche$ ./a.out
Zahl:
8
Vorgehensart?
1. bestimmte Anzahl Wiederholungen?
2. Bis zum bitteren Ende (nicht empfohlen)
3. 1000 Wiederholungen?
ALS ANTWORT BITTE EINFACH 1,2 oder 3 angeben
1
Wie viele?
1000
0 Endergebnis: -1.507821083
Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
~/Arbeitsfläche$ ./a.out
Zahl:
8
Vorgehensart?
1. bestimmte Anzahl Wiederholungen?
2. Bis zum bitteren Ende (nicht empfohlen)
3. 1000 Wiederholungen?
ALS ANTWORT BITTE EINFACH 1,2 oder 3 angeben
1
Wie viele?
1000
0 Endergebnis: -1.507821083
Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
~/Arbeitsfläche$ ./a.out
Zahl:
8
Vorgehensart?
1. bestimmte Anzahl Wiederholungen?
2. Bis zum bitteren Ende (nicht empfohlen)
3. 1000 Wiederholungen?
ALS ANTWORT BITTE EINFACH 1,2 oder 3 angeben
1
Wie viele?
1000
0 Endergebnis: -1.507821083
gibt er mir dennoch ein seltsames Ergebnis... so langsam komm ich mir ziemlich dumm vor... kann mir jemand helfen?
DirkB
Unregistrierter
DirkB Unregistrierter
21:28:03 29.10.2011 Titel:
Zitieren
Bitte formatier das nochmal anständig, davon bekommt man ja Augencrepes.
Hinweise unter Einrückungsstil
Und ich sehe da auch kein double.
Und versuch unbedingt das goto los zu werden. Das ist da nicht nötig.
Blubberauto
Unregistrierter
Blubberauto Unregistrierter
22:30:34 31.10.2011 Titel:
Schleife nicht initialisiert
Zitieren
Du deklarierst die variable "schleife" und vergleichst den Wert der Variable "schleife" ohne sie initialisiert zu haben bzw definiert. Deswegen halte deine Variablen so Lokal wie möglich und definiere sie so schnell wie möglich. Dann passiert so etwas nicht.
Wenn die Variable sofort einen Wert zugewiesen wird, brauchst du sie nicht zu definieren.
Z.B:
int a;
cin >> a;
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.