Hilfe bei Quellcode in C

Hallo.
Ich habe folgende Aufgabe:

Sinuskurvengenerator
Nach Eingabe von Frequenz, Amplitude und Schrittweite soll das
Programm eine Sinuskurve mit den entsprechenden Eingabewerten
Ausgeben. Die Kurve soll einfachheitshalber vertikal dargestellt werden.
Das Menü soll die drei oben genannten Eingabemöglichkeiten besitzen
und eine Option um das Programm zu beenden.
Wenn eines der Eingabefelder leer gelassen wird soll das Programm mit
folgenden Standartwerten rechnen:
Frequenz: 0,5PI Hz (ca. 1,57 Hz)
Amplitude:1
Schrittweite:
0,5

Ich habe nun angefangen zu Programmieren (dazu sei gesagt ich bin Anfänger) und einen Quellcode geschrieben. Bis auf die Ausgabe der Kurve funktioniert er gut. Allerdings hab ich dann einen/einige Fehler (ab while (l
#include

int main (void)

{

int B, Z, k = 0, i = 0, l = 0, j = 0, n = 0; /*Deklarieren aller Variablen*/
double P,C,Y [200]={},A,S,F,X = 0; /*B-Beenden, Z-Zahl der Schritte, Y-Ywerte*/
/*P-Periode, C-Streckunsfaktor, A-Amplitude*/
const float PI = 3.1415926535; /*S-Schrittweite, F-Frequenz, X-Xwert*/

back: printf(„Beenden? 1 für JA, 0 für NEIN\n\n“); /*Schleife zum Beenden*/

scanf("%d",&B);

if (B == 1)
{ goto ende; }

else if ( B == 0 )

{

printf("\nWillkommen zum Sinuskurvengenetator!\n\nBitte geben Sie eine Amplitude zwischen 0 und 4 ein:\n");
scanf("%lf",&A);
printf("\nGeben Sie die Frequenz in PI Hz ein:\n");
scanf("%lf",&F);
printf("\nGeben Sie die Schrittweite ein: (ACHTUNG: Schrittweite = 0 && X Z) {break;}

k = 0;

}

else { printf(" "); }

k = k + 1;

}

printf("\n\n");

ende: return 0;
}

else
{
printf(„Bitte geben Sie 1 oder 0 ein!\n\n“); /*Fehlermeldung bei Falscheingabe bei Beenden*/
goto back;
}

}

Hi,
da mir gerade die Zeit fehlt den code genau zu analysieren gebe ich mal meine Lösung frei.
Es sind einige C++ codes drin, wenn es reines c
sein soll kann man das aber leicht ändern.
Den Eingabeteil spare ich mal, der funktioniert ja
bei Dir schon. Vieleicht hilfts dennoch ein wenig.
Schönen Gruß!

#include
#define _USE_MATH_DEFINES
#include

#include
#include

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
//display
const int width = 84;
const int height = 40;
//eingabedaten
const double A = 0.5;
const double f = 2.0;

char sinusGraph[width][height];

for(int h=0;h

Hallole,

die Anweisung beim Label ‚ende‘ verstehe ich nicht. Wohin soll auf der Ebene der Hauptroutine ( main ) gesprungen werden??

MfG
G. Aust

Hallo,

sorry, ich kenn’ mich mit C nicht aus, ich habe keine Ahnung, wieso ich als „Experte“ auserwählt wurde.

Gruß

Hermann

Hallo,
bei der schnellen Betrachtung des Code habe ich die Variable S gesehen das sie auf 0 gesetzt wurde.
Weiter unten wird Z=P/S; ausgeführt ? einen Wert durch 0 teilen?
Noch etwas weiter wird x=x+s; ausgeführt ! x soll die Schleife beenden! Wenn 0 zu x adiert wird kann das nicht erfolgen.
Beim Lesen des Code finde ich die Variablen Namen nicht gut.
Hochsprachen hat man um sie gut zulesen!
Zum Beispiel könnte man es auch so schreiben
double periode, strek_faktor,y_werte[200]={},amplitude, schrittweite ,frequens, xwert= 0;
Dann würde der Code Z = P / S;
schritt_zahl = periode / schritweite;
Mit freundlichen Grüßen
Uwe

Hallo,

Ich habe fast nur mit C# statt C/C++ gearbeitet.
Trotzdem ein paar Hinweise:

-Das While mit { i = i + 1; } führt dazu dass i=Z wird, prüfe nochmal die schliessende Klammer
-In der for-Schleife muss der Teil n = (84 / Z); eine Bedingung sein für die die Laufvariable sich erhöht, willst Du hier in der Schleife n neu berechnen und gleichzeitig erhöhen oder sollte dies ein Testausdruck werden ?
-In der for-Schleife sollte eine andere Schleifenvariable verwendet werden als das n, welches schon oben definiert ist

Am Besten Du führst eine zusätzliche Hilfsvariable ein und weist die Zwischenwerten aus While und for-Schleifen dieser Variable zu und gibst sie mit aus. Das haut zwar die Kurvenanzeige durcheinander, aber so siehst Du dann erst mal ob die Zwischenwerte die erwarteten Ergebnisse haben. Dann kommentierst Du die Ausgaben der Zwischenwerte schrittweise aus um zur Kurve zu gelangen.

Vielleicht hilft Dir das erst einmal einen Schritt weiter.

Hallo,

so funktioniert es…
du hast verschiedene kleine Fehler gemacht - vergleich mal hiermit:

#include 
#include 

int main()
{
 int B, Z, k = 0, i = 0, l = 0, j = 0, n = 0; /\*Deklarieren aller Variablen\*/
 double P,C,Y [200]={},A,S,F,X = 0; /\*B-Beenden, Z-Zahl der Schritte, Y-Ywerte\*/
 /\*P-Periode, C-Streckunsfaktor, A-Amplitude\*/
 const float PI = 3.1415926535; /\*S-Schrittweite, F-Frequenz, X-Xwert\*/

 printf("Beenden? 1 fuer JA, 0 fuer NEIN\n\n"); /\*Schleife zum Beenden\*/

 scanf("%d",&B);

 while ( B == 0 )
 {
 printf("\nWillkommen zum Sinuskurvengenetator!\n\nBitte geben Sie eine Amplitude zwischen 0 und 4 ein:\n");
 scanf("%lf",&A);
 printf("\nGeben Sie die Frequenz in PI Hz ein:\n");
 scanf("%lf",&F);
 printf("\nGeben Sie die Schrittweite ein: (ACHTUNG: Schrittweite = 0 && X 

Hi, vielen Dank für die Hilfe, dein Programm funktioniert bei mir aber nicht richtig sobald ich z.B für die Amplitude 2 eingebe. hab ich da was falsch abgeschrieben? Oder Funktionierr der Code nur bei den Standartwerten?
Vielen Dank noch mal das du dir die Zeit nimmst einem Anfänger wie mir zu helfen :smile:
Viele Grüße

Hi,

Was genau funktioniert denn nicht?

Viele Grüße,
Thomas

Versuch es mal hiermit, ich denke das ist besser.
Ich hab die Interpretertion der Parameter geändert.
Wenn die anders funktionieren sollen musst du die Formeln anpassen.

Amplitude 0-4 - 4 geht fast bis an den Rand.
Perioden - 1 = kompletter Sinus, 2 = 2 komplette Sinuskurven
Schrittweite (z.B. 0.1 ist die echte x-verschiebung in einem Schritt)
Den Stauch-/Streckfaktor C hab ich eigentlich überflüssig gemacht.
Die Stauchung ergibt sich eigentlich aus der Schrittweite.

#include 
#include 

int main()
{
 int B, Z, k, i, l, j, n; /\*Deklarieren aller Variablen\*/
 double P,C,A,S,F,X; /\*B-Beenden, Z-Zahl der Schritte, Y-Ywerte\*/
 /\*P-Periode, C-Streckunsfaktor, A-Amplitude\*/
 const float PI = 3.1415926535; /\*S-Schrittweite, F-Frequenz, X-Xwert\*/

 printf("Beenden? 1 fuer JA, 0 fuer NEIN\n\n"); /\*Schleife zum Beenden\*/

 scanf("%d",&B);

 while ( B == 0 )
 {
 X = k = i = l = j = n = 0;

 printf("\nWillkommen zum Sinuskurvengenetator!\n\nBitte geben Sie eine Amplitude zwischen 0 und 4 ein:\n");
 scanf("%lf",&A);
 printf("\nGeben Sie die Frequenz in PI Hz ein:\n");
 scanf("%lf",&F);
 printf("\nGeben Sie die Schrittweite ein: (ACHTUNG: Schrittweite = 0 && X 

Hallo Kev2709,

da kann ich leider im Moment nicht weiterhelfen.

Viele Grüße und noch einen schönen Abend

Benjamin

Na ja, es wäre wohl sehr net, wenn du auch schreiben würdest was für einen Fehler du hast und welchen Prozessor du verwendest.

Hab nur schnell mal überflogen…
du musst Z zum float machen und nach dem Dividieren manuell casten (int), das ist besser. Du soltest mal C-Bücher lesen. Der Code sieht zu stark nach ASCII aus… GOTO ist nogo in C etc… viel spass oldy