WinFuture-Forum.de: C: Problem Mit Ergebnissen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

C: Problem Mit Ergebnissen scheinbar stimmt mit den Zahlenbereichen was nicht


#1 Mitglied ist offline   ShadowHunter 

  • Gruppe: aktive Mitglieder
  • Beiträge: 4.199
  • Beigetreten: 31. August 04
  • Reputation: 1

geschrieben 25. November 2006 - 16:35

Wir haben folgende Aufgabe:
https://www.informatik.uni-augsburg.de/lehr...gen/blatt06.pdf

Verwendet: GCC unter Linux, mit -ansi kompiliert (wir sollen uns an ANSI C 90 halten)

Es geht um Aufgabe 3, ich hab zunächst einmal den Uni Source Code komplett weg, der machte Probleme sobald ich dann selber meinen Code hinzufügte, der eigens ging und komplett andere Variablennamen hatte.
Nun hab ich das Problem wenn ich bei Teilaufgabe 6 z berechnen lasse, dass bei manchen Werten z sowieso nicht stimmt aber dann im nachhinein ich für alpha, alpha1 etc. nix mehr eingeben kann, sondern er einfach irgendwelche zahlen zuweist.

Zitat

Geben sie x ein:
1234.5678
z ist 114143765
7.Teilaufgabe
Geben sie alpha ein:
Geben sie alpha1 ein:
Geben sie alpha2 ein:
Geben sie beta ein:
alpha ist 134519284, alpha1 ist 0, alpha2 ist 134513488, beta ist 0
nue ist 0


Die Frage ist wieso? Wieso wirkt sich der dortige Fehler auf den letzten Teil überhaupt aus, wenn keine Variable dort erneut auftaucht.

Der gesamte Code (noch nicht wirklich schön ik):
#include 
#include 
int main()
{
  /* Vereinbarungen */
  double  v1, v2; /* doppelt genaue Fliesskommavariablen */
  int m1, m2, over, ax, ay, a;   /* ganzzahlige Variablen */


	 
	printf("1.Teilaufgabe\n");
	m1 = (3*4)/5;		/* Ergibt 2, da 12/5 = 2,4 und bei Integer nur die 2 genommen wird */
	printf("m1 ist %d\n", m1);
	printf("2.Teilaufgabe\n");
	m2 = (3/5)*4;		/* Ergibt 0, da für den PC hier 3/5 als 0 gerechnet wird, richtig wäre erneut 2,4 */
	printf("m2 ist %d\n", m2);
	printf("3.Teilaufgabe\n");
	int b,c;
	printf("Geben sie Werte für ax und ay in der Form (ax,ay) ein:\n");
	scanf("(%d,%d)", &b, &c); /* solang man sich im Zahlenbereich befindet wird ein richtiges Ergebniss (ganze Zahlen) geliefert, ab 3 Milliarden nicht mehr, da der Zahlenbereich überschritten wird (Zahl aus Angabenhinweis) */
	printf("Ihre Eingabe war %d für ax und %d für ay\n", b, c);
	over = b + c;
	printf("Die Summe ergibt %d\n", over);
	printf("4.Teilaufgabe\n");
	v1 = 7/8 + 14/9;
	printf("v1 ist %d\n", v1);
	printf("5.Teilaufgabe\n");
	v2 = 7/8. + 14/9;
	printf("v2 ist %d\n", v2);
	printf("6.Teilaufgabe\n");
	double z;
	double x;
	const double pi = 3.1415927;
	printf("Geben sie x ein:\n");
	scanf("%d", &x);
	z = (pi*x + 0.01)/(20000+0.5);
	printf("z ist %d\n", z);
	printf("7.Teilaufgabe\n");
	int alpha, alpha1, alpha2, beta;
	long nue;
	printf("Geben sie alpha ein:\n");
	scanf("%d", &alpha);
	printf("Geben sie alpha1 ein:\n");
	scanf("%d", &alpha1);
	printf("Geben sie alpha2 ein:\n");
	scanf("%d", &alpha2);
	printf("Geben sie beta ein:\n");
	scanf("%d", &beta);
	printf("alpha ist %d, alpha1 ist %d, alpha2 ist %d, beta ist %d\n", alpha, alpha1, alpha2, beta);
	nue = (alpha1*alpha2)/((alpha*alpha)+(beta*beta));
	printf("nue ist %d\n", nue);
	
  return 0;
}



Dieser Beitrag wurde von mo bearbeitet: 25. November 2006 - 19:58

"Wir können Regierungen nicht trauen, wir müssen sie kontrollieren"
(Marco Gercke)
0

Anzeige



#2 Mitglied ist offline   mo 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.796
  • Beigetreten: 17. Juni 02
  • Reputation: 0
  • Wohnort:Ulm / BaWü

geschrieben 25. November 2006 - 20:30

hab nur ganz kurz zeit, muss gleich los.

also...
z = (pi*x + 0.01)/(20000+0.5);

es steht also ... (double*double + double) / ( int + double), wird zu ( double ) / (int) zu (int).

mach aus dem 20000 einfach mal 20000.0 und schau, was passiert... keine zeit, auszuprobieren, ob's daran lag. sry.

bye
I'm mó. mo's good twin.
0

#3 Mitglied ist offline   ShadowHunter 

  • Gruppe: aktive Mitglieder
  • Beiträge: 4.199
  • Beigetreten: 31. August 04
  • Reputation: 1

geschrieben 25. November 2006 - 21:05

half nix, trotzdem danke...selbst wenn ich alles da im unteren teil auf double stell dann wird z.b alpha1 falsch :/

vor lauter %d total verplant, dass esbei double ja %le und %e sein muss (scanf, printf).... aber von 10 leuten ejtzt erst einem kollegen aufgefallen!

Dieser Beitrag wurde von ShadowHunter bearbeitet: 25. November 2006 - 21:21

"Wir können Regierungen nicht trauen, wir müssen sie kontrollieren"
(Marco Gercke)
0

#4 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 25. November 2006 - 21:28

printf("Geben sie x ein:\n");
scanf("%d", &x);

%d erwartet ein int. %x ist aber double/float. Versuch's also mal mit %f.

Tipp: Mach mal ein "man scanf" auf der Konsole. :)

Edit: Sehe gerade, dass du es schon herausgefunden hast :)

Dieser Beitrag wurde von Witi bearbeitet: 25. November 2006 - 21:29

0

#5 Mitglied ist offline   ThunderKiller 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.697
  • Beigetreten: 31. August 06
  • Reputation: 0
  • Wohnort:Deutschland

geschrieben 26. November 2006 - 14:25

%lf is bei double
Eingefügtes Bild
0

#6 Mitglied ist offline   ShadowHunter 

  • Gruppe: aktive Mitglieder
  • Beiträge: 4.199
  • Beigetreten: 31. August 04
  • Reputation: 1

geschrieben 26. November 2006 - 14:38

%le stand im skript und geht auch, ist imho analog
"Wir können Regierungen nicht trauen, wir müssen sie kontrollieren"
(Marco Gercke)
0

#7 Mitglied ist offline   ThunderKiller 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.697
  • Beigetreten: 31. August 06
  • Reputation: 0
  • Wohnort:Deutschland

geschrieben 26. November 2006 - 16:57

aso hab das net durchgelesen (kein adobe reader drauf) habs inner schule mit %lf gelernt ;D
Eingefügtes Bild
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0