C Programm für Parabel
-
Steht im C-Buch im Kapitel über Vektoren/Arrays und Felder.
char plot[25][80]; int x,y for (y=0;y<25;y++) { for(x=0;x<79;x++) { plot[y][x] = ' '; // Leerzeichen einstellen } plot[y][79] = '\0'; // Damit es ein String wird } // Hier wird ein '*' in das Feld geschrieben plot[12][40] = '*'; for (y=0;y<25;y++) puts(plot[y]);
Du musst jetzt nur dafür sorgen, dass deine Bereiche auf 0-24
bzw. 0-78 (x) abgebildet werden.
-
Uiii, dankeschön.
Wenn ich eingebe ->ergebniss = (f(x) = (x*x)*a + a*x - a);
Dann bringt er mir kein richgites Ergebniss raus. Auch wenn ich den Inhalt von a Fülle.
-
ender schrieb:
Uiii, dankeschön.
Wenn ich eingebe ->ergebniss = (f(x) = (x*x)*a + a*x - a);
Dann bringt er mir kein richgites Ergebniss raus. Auch wenn ich den Inhalt von a Fülle.
blah = x*x*a + x*b + c
-
Bei der Normalparabel ist a = 1; b=0; c= 0;
Und a, b, c und x müssen vor der ersten Benutzung "gefüllt" werden.
-
Was hast du denn derzeit für einen Code?
-
Bis jetzt habe ich es geschafft ein Koordinatensystem zu kreiren, nur
irgendwie klappt das nicht, den Inhalt eines Integers zu ploten...
Man beachte dabei Zeile 21#include <stdio.h> #include <stdlib.h> int main() { char plot[25][80]; int x,y; int p, f, s; for (y=0;y<25;y++) { for(x=0;x<79;x++) { plot[y][x] = ' '; // Leerzeichen einstellen } plot[y][79] = '\0'; // Damit es ein String wird } p=0; s=22; // Koordinatensystem for(f=25; p < f; p++, s--) { //plot[p][6] = s ; //Koordinatenzahlen plot[p][7] = '|'; } f=0; for(p=80; f < p; f++) plot[23][f] = '_'; for (y=0;y<25;y++){ puts(plot[y]);} getchar(); return(EXIT_SUCCESS); }
Bin außerdem immernoch am grübeln wie die Abfragen für die Parabeln lauten sollen.
-
Ich kann nicht so richtig nachvollziehen, dass dir das Schwierigkeiten bereitet. Wie der C-Code aussieht weißt du ja jetzt. Wie man eine Formel richtig in C umsetzt hat man dir auch gezeigt. Der Rest ist genau das selbe, was du sonst auch auf dem Papier machen würdest. Du hast doch schon mal selber Graphen in ein Koordinatensystem eingetragen?
Vielleicht hapert es aber auch nur am Verständnis für C-Strings oder Felder im Allgemeinen? Wenn ich mir deine Zeile 21 ansehe, scheinst du den Zusammenhang wirklich nicht verstanden zu haben. Schau dir noch mal den Post (15:17:35 18.01.2011) von DirkB genauer an. Besonders die Dimensionen des Arrays, bzw. deines Koordinatensystems. Vielleicht führst du den Code auch einfach mal aus, wenn du es dir nicht vorstellen kannst.
-
Ja schon, aber dennoch weiß ich nicht wie man einen Inhalt von einem Integer ploten lässt. muss man dabei 's' schreiben oder '%d', s;
Habe ja danach auch schon gegoogelt, aber dabei rausgekommen ist nur Müll.
-
Muss ich 'x' dann eigentlich auch deklarieren?, weil das Programm kann
ja 'x' nicht auflösen.
-
#include <stdio.h> int main() { int i = 5; printf("i = %d\n", i); }
-
Dieselbe schreibweise für das ploten? Also wenn ich das so eingebe:
plot[p][6] = ("%d", s); //Koordinatenzahlen
Kommt nur Datenmüll dabei raus, sowas wie
oder
...
-
Nein, schau dir an, was X und was Y ist. Schau es dir länger als nur ein paar Sekunden an, der Zusammenhang sollte offensichtlich sein. Hast du auch mal den codepad-Link angesehen?
Auf deinem Papier schreibst du doch auch nicht die Zahlen an eine Stelle im Koordinatensystem, sondern markierst die Punkte.plot
ist dein Koordinatensystem auf dem Papier. Die zwei eckigen Klammern geben dabei die Zeile und die Spalte auf dem Karo-Muster an.
-
ja, kla natürlich. Aber ich muss ja mit dem Plot nicht nur 2 Punkte machen, sondern die ganze Parabel.
-
Bei den Koordinatenzahlen solltest du aufpassen. "10" braucht schon mal 2 Felder, also kannst du nicht jede Zahl drucken. Außerdem willst du die Parabel ja nicht von 0 bis 24 zeichnen sondern von 0 bis + 100.0 (oder so).
Zum Umwandeln von Zahlen in Strings kannst du sprintf nehmen. sprintf erwartet als erstes Argument eine Adresse auf ein char.
char tmpstr[80]; sprintf(tmpstr,"%d",s); // String mit Zahl erzeugen memcpy(&plot[p][6],tmpstr,strlen(tmpstr)); // memcpy, damit die '\0' aus tempstr nicht mitgenommen wird
Du musst aufpassen, das du nicht über das Stringende schreibst
-
plot[y][x] = '*';
y ist der Funktionswert von x, oder anders ausgedrückt y=f(x)=ax²+bx+c
Ich weiß nicht wie ich das noch deutlicher formulieren soll? P.S. Der Stern ist einfach nur eine Markierung des Funtkionswertes im Koordinatensystem. So wie du auf dem Blatt ein Kreuz oder einen Punkt einzeichnest.
-
Ich würde schon lieber weiter zeichnen können als 24, nur leider ist das
Konsolenfenster nicht groß genug und man kann es auch nicht breiter ziehen.
-
Daran ist die Windows-Konsole schuld. Es gibt aber auch Ersatz-Konsolen wie Console2, die sind wesentlich flexibler. Falls du dein Programm aber mit dem Debugger aufrufst, könnte die Verwendung einer alternativen Konsole recht kompliziert werden.
-
Dann musst du skalieren (die Koordinaten umrechnen / Maßstab ändern).
#define ANZ_X 79 char plot[25][ANZ_X+1]; double x_min = -10.0; double x_max = +10.0; double x; int xi; xi = (x-x_min) * ANZ_X /(x_max-x_min);
Für y genauso.
ANZ_X gibt die Breite deines Plotfeldes an. Für Y wäre das dann 25.
Pass auf, das deine xi nicht größer als ANZ_X und kleiner als 0 werden.
-
Gott, ich stell mich blöd. Ich hab so das Gefühl als wäre das letzte mal
richtige Parabelnrechnen schon Jahre her. Also rein theorethisch y = (f(x) = y) ?
-
xi = (x-x_min) * ANZ_X /(x_max-x_min);
Steht hier dann nicht theorethisch:
xi = (1+10.0) * 1 / (+10.0+10.0) ?