WinFuture-Forum.de: Berechnung Mit Sinus In C - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

Berechnung Mit Sinus In C


#1 Mitglied ist offline   Triale 

  • Gruppe: aktive Mitglieder
  • Beiträge: 132
  • Beigetreten: 13. September 05
  • Reputation: 0

geschrieben 16. November 2008 - 22:40

Hallo,

habe folgendes Problem: es soll eine wertetabelle einer bestimmten funktion erstellt werden. Man gibt die untere und obere grenze und die anzahl der werte die ausgegeben werden sollen ein. Daraus soll eine Tabelle von zb. 10 Werten zwischen zwei Grenzen von x erstellt werden. Das Problem ist wie krieg ich das hin genau 10 Werte auszugeben und nicht alle zwischen diesen grenzen?


Vielen Dank!

mfg
0

Anzeige



#2 Mitglied ist offline   Ludacris 

  • Gruppe: Moderation
  • Beiträge: 4.668
  • Beigetreten: 28. Mai 06
  • Reputation: 218
  • Geschlecht:Männlich

geschrieben 17. November 2008 - 01:37

Welche 10 werte? Sollen die fix oder variabel sein?
0

#3 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 17. November 2008 - 09:01

Ich habe mal kurz etwas zusammengebastelt. Das ist weder sehr elegant noch sicher, aber verdeutlicht dir, wie man so etwas bewerkstelligen kann:

double dLower = 0;
double dUpper = 0;
int iSteps = 0;
int i = 0;

double dSteppsize = 0;

printf("Untere Grenze: ");
scanf("%lf", &dLower);

//Sicherstellen, dass obere Grenze > untere Grenze
do {
	printf("Obere Grenze: ");
	scanf("%lf", &dUpper);
} while (dUpper < dLower);

printf("Schrittzahl: ");
scanf("%d", &iSteps);

//Schrittgröße berechnen
dSteppsize = (dUpper - dLower) / iSteps;

/*
* Iterationsstart:	x_0 = untere Grenze
* Iteration:		x_n+1 = x_n + Schrittgröße
*
* Iterationsende falls x_n+1 > obere Grenze
*/
for (double x = dLower; x <= dUpper; x += dSteppsize) {
	//Hier kannst du mit dem x-Wert berechnen, was immer du willst
	printf("x%d:\t%lf\tsin(x%i) = %lf\n", i, x, i, sin(x));
	i++;
}

return 0;


Grüße,
Stefan
0

#4 Mitglied ist offline   Triale 

  • Gruppe: aktive Mitglieder
  • Beiträge: 132
  • Beigetreten: 13. September 05
  • Reputation: 0

geschrieben 18. November 2008 - 20:56

vielen dank... ja nur das problem ist es geht nicht aus der aufgabenstellung hervor ob fix oder variabel... das problem ist die while schleife haben wir bis jetzt noch garnicht durchgenommen *g*.. trotzdem danke =)

edit:

aber wie ist die letzte printf zeile zu verstehen? habe dies in dieser form bisher noch garnicht gesehn

Dieser Beitrag wurde von Triale bearbeitet: 18. November 2008 - 21:03

0

#5 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 19. November 2008 - 07:31

printf("x%d:\t%lf\tsin(x%i) = %lf\n", i, x, i, sin(x));

Die Formatierungsanweisung x%d:\t%lf\tsin(x%i) = %lf\n bedeutet:

x%d in Verbindung mit i: gibt x0, x1, ... aus
\t: Tab
%lf in Verbindung mit x: gibt die x-Werte aus
sin(x%i) in Verbindung mit i: gibt sin(x0), sin(x1), ... aus
%lf in Verbindung mit sin(x): gibt die Werte von sin(x) aus. Hier könnte man auch vorher die Berechnung durchführen lassen und in eine Variable schreiben. Jedoch wäre das hier sinnlos.
\n: Zeilenumbruch

Ich hoffe, so wird es klar. Bei Fragen einfach schreiben.

Grüße,
Stefan
0

#6 Mitglied ist offline   Witi 

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

geschrieben 19. November 2008 - 07:46

Hier findest du übrigens eine Auflistung sämtlicher Platzhalter:
http://www.cplusplus.com/reference/clibrar...dio/printf.html
0

#7 Mitglied ist offline   Triale 

  • Gruppe: aktive Mitglieder
  • Beiträge: 132
  • Beigetreten: 13. September 05
  • Reputation: 0

geschrieben 19. November 2008 - 19:38

ah ok vielen dank =).. und die formel zur berechnung kommt ja dann in die letzte schleife unten mit rein oder ?

mal gucken wie sich unser prof das vorgestellt hat ... unmöglich so eine unklare aufgabenstellung

Dieser Beitrag wurde von Triale bearbeitet: 19. November 2008 - 19:38

0

#8 Mitglied ist offline   bardelot 

  • Gruppe: aktive Mitglieder
  • Beiträge: 517
  • Beigetreten: 20. März 04
  • Reputation: 0

geschrieben 19. November 2008 - 20:07

Beitrag anzeigenZitat (Triale: 19.11.2008, 20:38)

ah ok vielen dank =).. und die formel zur berechnung kommt ja dann in die letzte schleife unten mit rein oder ?

Formel zur Berechnung?

Zitat

printf("x%d:\t%lf\tsin(x%i) = %lf\n", i, x, i, sin(x));

Dieser Beitrag wurde von bardelot bearbeitet: 19. November 2008 - 20:29

0

#9 Mitglied ist offline   Triale 

  • Gruppe: aktive Mitglieder
  • Beiträge: 132
  • Beigetreten: 13. September 05
  • Reputation: 0

geschrieben 20. November 2008 - 14:43

ja stimmt klar.. danke =).. jetzt hab ich das soweit implementiert nur die formatierung klappt noch nicht so ganz.. wie man auf dem screenshot sehen kann fügt er bei manchen anzahlen von ausgabewerten (zb. 8 und 9) hinter dem vorletzten bzw. vor dem letzten wert kein tabstop mehr ein.. kann mir da vll jemand noch helfen?

Angehängte Miniaturbilder

  • Angehängtes Bild: Unbenannt.jpg

Dieser Beitrag wurde von Triale bearbeitet: 20. November 2008 - 15:04

0

#10 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 21. November 2008 - 23:00

Kannst du den entsprechenden Codeteil posten? Das ist einfacher als blind zu raten :wink:

Grüße,
Stefan
0

#11 Mitglied ist offline   Triale 

  • Gruppe: aktive Mitglieder
  • Beiträge: 132
  • Beigetreten: 13. September 05
  • Reputation: 0

geschrieben 23. November 2008 - 12:58

also das wäre folgender abschnitt:

for (i=0; i<anzahl; i++) {
erg = (2 * sin(x)- 3 * sin(2 * x) + 0.05 * pow((x-3),3) + (x * x) - x);
if (i%3==0) {
printf ("\n");
}
printf ("f(%.3lf) = %.2lf\t", x, erg);
x = x+schrittWeite;
}

hab das sozusagen über eine modulo-division gemacht... nach 3 ausgegebenen Werten immer eine neue Zeile und nach jedem Wert ein Tabstop.. nur das Problem ist manchmal verhaut er es mit dem tabstop wie man im screenshot sieht

Dieser Beitrag wurde von Triale bearbeitet: 23. November 2008 - 13:00

0

#12 Mitglied ist offline   bardelot 

  • Gruppe: aktive Mitglieder
  • Beiträge: 517
  • Beigetreten: 20. März 04
  • Reputation: 0

geschrieben 23. November 2008 - 15:05

Nunja, das mit den Tabstops ist immer so eine Sache, der Tabstop wäre genau hinter dem 7.33. Bei Zahlen die etwa gleich gross sind kannst du sie mit zusätzlichen Leerstellen ausrichten. z.B. so
printf ("f(% 7.3lf) = % 6.2lf\t", x, erg);

Dieser Beitrag wurde von bardelot bearbeitet: 23. November 2008 - 16:49

0

#13 Mitglied ist offline   Triale 

  • Gruppe: aktive Mitglieder
  • Beiträge: 132
  • Beigetreten: 13. September 05
  • Reputation: 0

geschrieben 23. November 2008 - 15:08

ach du meinst praktisch das es nur durch verwenden vom tabstop zu problem kommen kann, da die Zahlen unterschiedliche Stellenanzahl haben (zb mal negativ oder zweistellig).. hab ich das so richtig verstanden?

Edit:

aber zb in der 2. Zeile stimmts doch auch überein mit der 1. Zeile von der ausrichtung her obwohl die beiden Werte links unterschiedliche länge haben oder?

Dieser Beitrag wurde von Triale bearbeitet: 23. November 2008 - 15:14

0

#14 Mitglied ist offline   bardelot 

  • Gruppe: aktive Mitglieder
  • Beiträge: 517
  • Beigetreten: 20. März 04
  • Reputation: 0

geschrieben 23. November 2008 - 16:53

Ja aber wie du siehst ist der Tabstop genau nach dem Wert 7.33 in der zweiten Zeile, deshalb wird in der ersten und zweiten Zeile der nächste Tabstop angesprungen.
0

#15 Mitglied ist offline   Triale 

  • Gruppe: aktive Mitglieder
  • Beiträge: 132
  • Beigetreten: 13. September 05
  • Reputation: 0

geschrieben 23. November 2008 - 17:20

aber wenn bei 1. und 2. zeile der tabstop doch genau hinter der letzten zahl des ersten wertes steht dürften doch die zweiten werte der 1. und 2. zeile nicht genau auf einer höhe stehen oder?

Edit:
sry jetzt hab ichs kapiert.. der wert der 3. zeile is der kürzeste deswegen zu diesem tabstop.. die beiden werte drüber sind länger deswegen bei beiden zumnächstmöglichen tabstop..richtig?

Vielen Dank =)

Dieser Beitrag wurde von Triale bearbeitet: 23. November 2008 - 17:23

0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

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