C Programm für Parabel
-
Was ich aber noch gerne wissen würde ist, warum steht bei
for (x = 0; x <= 10; ++x) { y = x * x; // Funktionswert für y berechnen x = x - c; plot[y][x] = '*'; // im Koordinatensystem markieren }
dass immer soweit links auf der Konsole?
-
#define ANZ_X 79 #define ANZ_Y 25 // und überall wo 79 steht schreibst du ab hier ANZ_X und bei 25 ANZ_Y ... char plot[ANZ_Y][ANZ_X+1]; ... for (y=0;y<ANZ_Y;y++) { for(x=0;x<ANZ_X;x++) { plot[y][x] = ' '; // Leerzeichen einstellen } plot[y][ANZ_X] = '\0'; // Damit es ein String wird }
Das xi = (x-x_min) * ANZ_X /(x_max-x_min); musst du für jedes x natürlich neu berechnen (yi auch).
// koordinatensystem for(x=x_min;x<x_max;x+=0.5) { y = 0; xi = (x-x_min) * ANZ_X /(x_max-x_min); yi = (y-y_min) * ANZ_Y /(y_max-y_min); if(xi >= 0 && xi < ANZ_X && yi >= 0 && yi < ANZ_Y) plot[yi][xi] = '-'; } for(y=y_min;y<y_max;y+=0.5) { x = 0; xi = (x-x_min) * ANZ_X /(x_max-x_min); yi = (y-y_min) * ANZ_Y /(y_max-y_min); if(xi >= 0 && xi < ANZ_X && yi >= 0 && yi < ANZ_Y) plot[yi][xi] = '|'; } // alle Funktionswerte von y für x von x_min bis x_max zeichnen for(x=x_min;x<x_max;x+=0.5) { y = a*x*x + b*x + c; xi = (x-x_min) * ANZ_X /(x_max-x_min); yi = (y-y_min) * ANZ_Y /(y_max-y_min); if(xi >= 0 && xi < ANZ_X && yi >= 0 && yi < ANZ_Y) plot[yi][xi] = '*'; }
Ich hoffe es funktioniert.
-
Naja, nicht ganz.
#include <stdio.h> #include <stdlib.h> int main() { #define ANZ_X 79 #define ANZ_Y 25 double x_min = -10.0; double x_max = +10.0; double x; double xi; double y_min = -10.0; double y_max = +10.0; double y; double yi; char plot[ANZ_Y][ANZ_X+1] int p, f; double a, b, c; for (y=0;y<ANZ_Y;y++) { for(x=0;x<ANZ_X;x++) { plot[y][x] = ' '; // Leerzeichen einstellen } plot[y][ANZ_X] = '\0'; // Damit es ein String wird } // koordinatensystem for(x=x_min;x<x_max;x+=0.5) { y = 0; xi = (x-x_min) * ANZ_X /(x_max-x_min); yi = (y-y_min) * ANZ_Y /(y_max-y_min); if(xi >= 0 && xi < ANZ_X && yi >= 0 && yi < ANZ_Y) plot[yi][xi] = '-'; } for(y=y_min;y<y_max;y+=0.5) { x = 0; xi = (x-x_min) * ANZ_X /(x_max-x_min); yi = (y-y_min) * ANZ_Y /(y_max-y_min); if(xi >= 0 && xi < ANZ_X && yi >= 0 && yi < ANZ_Y) plot[yi][xi] = '|'; } // alle Funktionswerte von y für x von x_min bis x_max zeichnen for(x=x_min;x<x_max;x+=0.5) { y = a*x*x + b*x + c; xi = (x-x_min) * ANZ_X /(x_max-x_min); yi = (y-y_min) * ANZ_Y /(y_max-y_min); if(xi >= 0 && xi < ANZ_X && yi >= 0 && yi < ANZ_Y) plot[yi][xi] = '*'; } for (y=0;y<25;y++){ puts(plot[y]);} getchar(); return(EXIT_SUCCESS); }
-
Zeile 20 Syntaxfehler
ich bin so doof, dennoch
kommen diese Kompilierfehler:graphi.c:30: error: array subscript is not an integer
graphi.c:32: error: array subscript is not an integer
graphi.c:44: error: array subscript is not an integer
graphi.c:52: error: array subscript is not an integer
graphi.c:61: error: array subscript is not an integer
graphi.c:99: error: array subscript is not an integer
-
In function 'main':
Line 27: error: array subscript is not an integer
Line 29: error: array subscript is not an integer
Line 40: error: array subscript is not an integer
Line 48: error: array subscript is not an integer
Line 57: error: array subscript is not an integer
Line 61: error: array subscript is not an integerDas sind die richtigen Zeilen sorry.
-
Nimm mal xi und yi als index für plot. Das müssen int sein.
int xi; int yi; ... for (yi=0;y<ANZ_Y;yi++) { for(xi=0;x<ANZ_X;xi++) { plot[yi][xi] = ' '; // Leerzeichen einstellen } plot[y][ANZ_X] = '\0'; // Damit es ein String wird } ..... for (yi=0;yi<25;yi++){ puts(plot[yi]);}
-
Auf meinem Rechner psiert nichts, außer eine sehr lange Ladezeit.
Und so sieht es hier aus: http://codepad.org/jYBVA3m7
-
Was mich noch wundert ist: Wie man Das Ergebniss von 2 Double-Werten in einem Integer Speichern kann.
xi = (x-x_min) * ANZ_X /(x_max-x_min);
-
Hier mal ein funktionierendes Beispiel. Du solltest aber unbedingt vergleichen, was du anders machst.
-
Meine x_skaliert Funktion ist offensichtlich fehlerhaft. Der Rest sollte aber wie die Ausgabe passen.
-
Ein Fehler ist beim befüllen:
//for (yi=0;y<ANZ_Y;yi++) FEHLER da steht y< statt yi kleiner for (yi=0;yi<ANZ_Y;yi++) { //for(xi=0;x<ANZ_X;xi++) dito for(xi=0;xi<ANZ_X;xi++) { plot[yi][xi] = ' '; // Leerzeichen einstellen } plot[yi][ANZ_X] = '\0'; // Damit es ein String wird }
Hab ich auch nicht gleich gesehen
-
Also bei Pauls programm kommt ein "STATUS_ACCESS_VIOLATION" Fehler
@Dirk.B das ist ja jetzt das Koordinatensystem oder?
An welcher Stelle hast du denn geplant wo der Teil mit der Parabel hinkommen soll?
-
Der Quellcode von euren Programmen sehen mir ziemlich "Profimäßig" aus.
Wenn es dir hilft @Paul, es wird jedenfalls bei mir einfach nur ein "Stackdump" erstellt
und anschließend das Programm beendet, und das liegt an der funktion x_skaliert?
-
Nein, das ist der Teil der die Leerzeichen einsetzt. (Bei dir Zeile 26 - 31)
Für die Parabel musst du noch a, b und c mit werten besetzen.
Z.B.: a = 1.0; b = 0.0; c = -8.0;Die Parabel wird in den Zeilen 54 - 61 berechnet
-
Das Problem ist schon längst gefixt.
int x_skaliert(int x, int min, int max) { int offset = min < 0 ? min : 0; /* Offset verschiebt den Ursprung */ x -= offset; /* Betrag von offset addieren */ min -= offset; max -= offset; x = (x - min) * (X_MAX-1) / (max - min); return x; }
-
1. Dasselbe auch bei y_skaliert?
2. Wow, danke für eure tolle Hilfe / Unterstützung und Arbeit
-
Ich hab nun noch etwas dazugeschrieben für die Eingabe von a, b und c
printf("\nGeben Sie a ein: "); scanf("%d\0", &a); printf("\nGeben Sie b ein: "); scanf("%d\0", &b); printf("\nGeben Sie c ein: "); scanf("%d\0", &c);
-
Nein y_skaliert ist so in Ordnung. Da wird kein Offset berechnet, weil mit der gegebenen Funktion kein negativer Funktionswert raus kommen kann.
Allgemein ist mein Programm auf x² spezialisiert. Für eine Verallgemeinerung müsstest du die min- und max-Parameter für y_skaliert vorher richtig ermitteln und auch die Offset-Funktionalität von x_skaliert mit übernehmen. Momentan vereinfache ich die Wertwahl durch mein Wissen, dass keine negativen Werte raus kommen können und die größten Funktionswerte bei x_min und x_max liegen müssen.
Bis auf die Parameter für die Y-Skalierung ist es aber flexibel gestaltet und sollte auch mit anderen Funktionen funktionieren.
-
Danke für die Infos und die Unterstützung von euch.
-
Codepad findet doch noch Fehler ^^
Line 16: error: unterminated comment
In function 'main':
Line 43: error: expected declaration or statement at end of input
Line 43: error: expected declaration or statement at end of input