Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: DOS und Win32-Konsole ::  seltsame printf ausgabe bei Heron Verfahren  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Alistair1231
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.10.2011
Beiträge: 4
Beitrag 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
Beitrag 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:
C/C++ Code:
%0.9f
C/C++ Code:
%0.9f
C/C++ Code:
%0.9f
statt
C/C++ Code:
%f0.9
C/C++ Code:
%f0.9
C/C++ Code:
%f0.9

_________________
Planet *Earth = new Planet(); //Schöpfung
Alistair1231
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.10.2011
Beiträge: 4
Beitrag Alistair1231 Mitglied 16:17:18 28.10.2011   Titel:              Zitieren

wenn ich
C/C++ Code:
%f0.9
C/C++ Code:
%f0.9
C/C++ Code:
%f0.9

mit
cpp]%0.9f] ersetze,

kommt immernoch was andres als das erhoffte raus...

jetzt kommt stadt
Code:
0.000000000.9
Code:
0.000000000.9
Code:
0.000000000.9

das
Code:
0.000000000
Code:
0.000000000
Code:
0.000000000
:( :confused:
Chris_
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.06.2009
Beiträge: 177
Beitrag 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));
statt
C/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? :confused:

_________________
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
Beitrag Alistair1231 Mitglied 18:42:08 28.10.2011   Titel:              Zitieren

Ich Idiot :D
Ja klar...
//

Chris_ schrieb:

EDIT: Mit welchem Compiler ist dein oben gezeigter Code kompilierbar? :confused:


Ich nutze Dev-C++
Nicht gut? :)
Chris_
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.06.2009
Beiträge: 177
Beitrag 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




Beitrag 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
Beitrag 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? :D )

//

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? :D
DirkB
Unregistrierter




Beitrag 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




Beitrag 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;
C/C++ Forum :: DOS und Win32-Konsole ::  seltsame printf ausgabe bei Heron Verfahren  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.