Frage:
C-Programmierung:
Mein Code liest Daten aus einer Datei in einer Struktur. Die Daten enthalten x- und y-Koordinaten eines Autos, also den gefahrenen Weg. Der gefahrene weg wird in der Konsole ausgegebn mittels ASCII Zeichen, linkes Bild. Der Startpunkt des Pfades des Autos ist mit dem ASCII-Zeichen > markiert. Das funktioniert auch alles gut, aber ich möchte nun so einen rechteckigen Rahmen um den Plot zeichnen. Das wäre das rechte Bild. Aber wegen des rechteckigen Rahmens sind einige Daten abgeschnitten worden. Siehe das linke Bild ohne Rahmen, dort ist der Startpunkt mit > sichtbar. Im rechten Bild nicht. Ich habe versucht die Datenpunkte so zu ändern dass Sie in das Rechteck reinpassen, aber es werden immer einige Daten abgeschnitten. Hat jemand einen Tipp bzw. kann mir jemand helfen den Code so anzupassen dass alle Datenpunkte im rechteckigen Rahmen sind? Ich komme leider aktuell nicht weiter. Vielen Dank.
https://onlinegdb.com/aXnQmUs-y
Code:
#include <stdio.h>
#define MAX_DATA_POINTS 200
typedef struct {
int x;
int y;
} Point;
int main() {
FILE *file = fopen("data.txt", "r");
if (file == NULL) {
printf("Error opening file.\n");
return 1;
}
FILE *fpp = fopen("output.txt", "w");
if (fpp == NULL) {
printf("Error opening file.\n");
return 1;
}
Point data[MAX_DATA_POINTS];
int numPoints = 0;
int x, y;
while (fscanf(file, "%d,%d", &x, &y) == 2) {
data[numPoints].x = x;
data[numPoints].y = y;
numPoints++;
}
fclose(file);
// Find the maximum x and y values
int maxX = data[0].x;
int maxY = data[0].y;
for (int i = 1; i < numPoints; i++) {
if (data[i].x > maxX) {
maxX = data[i].x;
}
if (data[i].y < maxY) {
maxY = data[i].y;
}
}
// Scale the values to fit the console window
const int consoleWidth = 50;
const int consoleHeight = 20;
double scaleX = (float)consoleWidth / maxX;
double scaleY = (float)consoleHeight / maxY;
// Create a 2D array to represent the console window
char plot[consoleHeight][consoleWidth];
// Initialize the plot array with spaces
for (int i = 0; i < consoleHeight; i++) {
for (int j = 0; j < consoleWidth; j++) {
plot[i][j] = ' ';
}
}
// Plot the data points on the array
for (int i = 0; i < numPoints; i++) {
int xIndex = (int)(data[i].x * scaleX);
int yIndex = (int)(data[i].y * scaleY);
if (i == 0) {
plot[yIndex][xIndex] = '>';
} else {
plot[yIndex][xIndex] = '.';
}
}
// Add the rectangular border
for (int i = 0; i < consoleWidth; i++) {
plot[0][i] = '-';
plot[consoleHeight - 1][i] = '-';
}
for (int i = 0; i < consoleHeight; i++) {
plot[i][0] = '|';
plot[i][consoleWidth - 1] = '|';
}
// Print the plot array
for (int i = 0; i < consoleHeight; i++) {
for (int j = 0; j < consoleWidth; j++) {
printf("%c", plot[i][j]);
fprintf(fpp, "%c", plot[i][j]);
}
printf("\n");
fprintf(fpp, "\n");
}
fclose(fpp);
return 0;
}