Koordinatsystem

Tags:    c++

Hej alle
Jeg har fået til opgave at lave et, rent ud sagt, sindsygt program?
Jeg skal lave et program (hvor hovedfilen skal kaldes for ”visdata.c”) til at plotte et to-dimentionelt koordinat system på skærmen ved hjælp af ascii tegn. Programmet skal demonstreres til at kunne vise nedenstående output, hvor der (som eksempler) er tal værdier (x0,y0)= (5,10), (x1,y1) = (10,10), (x3,x4)=(15,20), etc. Koordiantsættene skal aflæses og bruges som data for programmet:

(man kan åbenbart ikke sætte koordinatsystemet ind på denne side, så hvis i ønsker at se koordinatsystemet skal i bare angive mail, så sender jeg den til jer.)

Der er følgende funktionelle krav til funktionerne i header filen:

a) Programmet skal kunne vise en string til hver af titlerne på de to akser. Ovenfor er der f.eks. brugt ”Temp (C)” til y-aksen.

b) Det skal kunne modtage en minimum værdi og en maksimum værdi for både x- og y-akserne. Ovenfor er der f.eks. brugt 0.0 og 100.0 til x-aksen.

c) Programmet skal selv kunne udregne og skrive intervalværdierne på akserne.

d) I programmet skal bruges følgende ting: const, extern, pointere, funktioner, headerfiler, #define, #ifndef, makefil, structs, switch, enumeration, typedef, den tertiere operator ”? :” og multidimensionelle arrays.

e) Der må ikke laves hardcoding i programmet. Mest muligt skal laves med ”#define”.

f) Programmet skal organiseres fornuftigt med header filer til forskellige formål, samt fornuftige funktioner til de ting programmet skal gøre.


Jeg synes altid det er lidt svært at komme igang med en opgave, og især når det er så svær en opagve. Jeg har startet med at lave et mini-program der indikerer hvordan man læser fra en fil og i dette tilfælde er det så kun de to første koordinatsæt:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define FILE_NAME "testdata.txt"

int main(void)
{
// Pointer til filen
FILE *fp;

// Variable til en tid og temperatur
double dv, dv1;

// Viser det aktuelle bibliotek hvor programmet ser efter koordinatsættene
printf("%s\n", getcwd(NULL, 0));

fp = fopen(FILE_NAME, "r");

if(fp == NULL)

{
printf("koordinatsættene.");
exit(EXIT_FAILURE);

}

fscanf(fp, "%lf %lf", &dv, &dv1);
printf("%.3lf %lf", dv, dv1);
fclose(fp);

return EXIT_SUCCESS;

}


Men nu er jeg gået i stå.. jeg aner ikke hvor jeg skal begynde.



85 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Okay så giver det mere mening. Jeg havde ellers tænkt mig at bruge strcpy, men du har jo ret angående brug af denne funktion.

Det jeg også undrer mig over er hvorfor du kun sætter y til int y;

hvorfor skal x ikke være integer??

det kan godt være det er et dumt spørgsmål,men jeg er ikke helt med.



Jeg forstår vist ikke:
Det jeg også undrer mig over er hvorfor du kun sætter y til int y;

hvorfor skal x ikke være integer??


Jeg har ikke nogen varibel x, jeg har ikke brug for en, da jeg udskriver en hel linje af gangen.



ahhhhh nu er jeg med.

Når man nu skal angive en min. og max. værdi for både x- og y-aksen kan man så godt benytte

#define min=0.0
#define max=100.0

eller kan man også bruge:

int min(int x=0.0 , int y=0.0)
int max(int x=100.0 , int y=100.0)



Du kan bruge en struct:
struct
{
int x;
int y;
}min = {0, 0};

Og bruge den med: min.x, men jeg synes ikke rigtigt det nogen god ide.

Jeg ville nok lave:
#define minX 0
#define maxX 100
#define minY 0
#define maxY 100

Der er ingen lighedstegn ved define
int kan kun indeholde helte, 100.0 og 0.0 er floating point



Når jeg prøver med en double siger den der er fejl:


double minX maxX minY maxY;
scanf("%ld, %ld, %ld, %ld", &minX,&maxX, &minY, &maxY);
printf("%f, %f, %f, %f", minX, maxX, minY, maxY);



Du skal bruge %lf i kaldet til scanf i stedet for %ld



den kommer stadigvæk ud med en fejl:

syntax error before numeric constant
error: invalid lvalue in unary `&'

ved scanf sætningen og ved double



Der mangler også nogle komma mellem dine variabler, det skal være:
double minX, maxX, minY, maxY;



Ja den fejl opdagede jeg også lige, men det hjalp ikke:

jeg tror der er noget galt med scanf sætningen da den ikke er blevet lilla som printf sætningen osv..

#include <stdio.h>
#include <string.h>

#define minX 0.0
#define maxX 100.0
#define minY 0.0
#define maxY 100.0

char xText[] = "Tid(sek)";
char yText[] = "Temp(C)";

char a[19][45] =
{
" ",
" ^ ",
" | ",
" | ",
" | ",
" | ",
" | ",
" | ",
" | ",
" | ",
" | ",
" | ",
" +---|---|---|---|---|->"
};

int main()
{
int s;
double minX, maxX, minY, maxY;

scanf("%lf, %lf, %lf, %lf", &minX, &maxX, &minY, &maxY);
printf("%f, %f, %f, %f", minX,maxX, minY, maxY);

//Så bruges funktionen memcpy der kopierer et antal bytes/chars fra et sted til et andet.
//Den første af de to memcpy i koden nedenunder skriver yText ind i 2D-arrayet, i første
//linje fra venstre. Den anden skriver xText ind på sidste linje, men højrestillet.

memcpy(a[0]+ 19 - strlen(yText), yText, strlen(yText));
memcpy(a[12] + 45 - strlen(xText), xText, strlen(xText));

for(s = 0; s < 14; s++)
printf("%s\n", a);
fflush(stdout);
return 0;
}




Du kan ikke både have:
#define minX 0.0
#define maxX 100.0
#define minY 0.0
#define maxY 100.0

Og:
double minX, maxX, minY, maxY;

Fjern dine #define's



t