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
Hvor mange gange kører denne løkke?
for(n = 0; n < 1; n++)

På en skala fra 1 til 10, hvor smart er det så at bruge maxx til at angive værdier på x-aksen, inden brugeren har haft chancen for at fortælle hvad maxx skal være?

Er du 100% sikker på at 3 er nok i denne linje?
char s[3];



Ja selvfølgelig skal løkken ikke kører 1 gang, men derimod 6 gange.
og char stringen skal jo læses 32 da den er så lang.

Men der er stadigvæk noget galt med kode:

Fold kodeboks ind/udKode 


output:

Fold kodeboks ind/udKode 






Prøv lige at overveje denne én gang mere:

På en skala fra 1 til 10, hvor smart er det så at bruge maxx til at angive værdier på x-aksen, inden brugeren har haft chancen for at fortælle hvad maxx skal være?



Det må jeg indrømme jeg ikke er helt med på.

Angiver jeg double max=50; for jeg:

Fold kodeboks ind/udKode 







Lad os en gang kikke på nogle udvalgte dele af dit program.

Du har et sted, inden i main:
double max;
Her opretter du en lokal variabel kaldet max, af typen double, du initialiserer den ikke til noget, værdien kan være hvad som helst, i nogle tilfælde vil den være 0

Nogle få linjer senere bruger du denne variabel:
sprintf(s, "%.1f", (max/6)*n);
Problemet er her at du ikke ved hvad max er, den har aldrig fået nogen værdi, så det der bliver skrevet i s er fuldstændig tilfældig....


Et andet problem:
I main har du også:
double minx;
double maxx;
Dvs. to andre variabler, kaldet minx og maxx, disse er begge af typen double.

Lidt senere i main har du:
printf("Minimums og maksimums værdi på x-aksen: ");
fflush(stdout);
scanf("%lf, %lf", &minx, &maxx);
Dvs. du beder brugeren om to værdier, som man godt kunne tro skulle være hhv min og max værdierne på x-aksen. Men du bruger aldrig det brugeren indtaster til noget...

Et tredie problem:

I main har du:
Fold kodeboks ind/udKode 


Her kører du en løkke igennem 6 gange (fra n = 0 til n = 6). For hvert gennemløb af løkken har du 6 gange udskrivning af intervaller til x-aksen, dvs. at du i alt får udskrevet 36 værdier på x-aksen, det synes at være en anelse i overkanten...

Prøv i stedet at nøjes med en enkelt udskrivning for hvert gennemløb af løkken. Og få x og y værdierne til at være lidt mere rigtige.



Ja det er virkelig forvirende med alle de minx, maxx, miny, maxy. Jeg kan ikke engang selv finde rundt i dem. Og ja du har jo ret angående at jeg beder brugeren om at taste maksimum og minimum for både y og x-aksen, men jeg bruger aldrig det brugeren indtaster til noget. Jeg ved nemlig ikke hvordan man kan binde de to led sammen.

Her er koden indtil videre:
Fold kodeboks ind/udKode 


kan du hjælpe mig med at at få styr på alle mine angivelser double værdier. Kan slet ikke finde rundt i dem.




Jeg tror ikke rigtigt jeg kan hjælpe dig yderligere.

Der er jo absolut igen fremdrift i dette spørgsmå/dit program, så vi spilder blot din og min tid.

Jeg kan kun anbefale dig at sætte dig foran din computer og bruge en del tid og hjernekraft på at finde ud af hvordan det kode du har nu virker, og hvad der skal til for at få det til at gøre det du vil.

Hvis du, efter at have bruget adskillige timer på programmet, har konkrete spørgsmål, hjælper jeg dig gerne.



Okay nu virker programmet som det skal:

Fold kodeboks ind/udKode 


Men det jeg vil høre er om du har en ide på hvordan jeg kan lave Løkkerne om så de fylder mindre. Jeg tænkte måske at gøre det på følgende måde:

Fold kodeboks ind/udKode 




Det er jo ikke mening at der skal skrives ud 6*6 gange.

Så du kan enten lave det sådan:
Fold kodeboks ind/udKode 


Eller sådan:
Fold kodeboks ind/udKode 


Den sidste metode synes at være lidt kortere...



Okay jeg har nu følgende kode:

Fold kodeboks ind/udKode 


men den regner ikke rigitg ud for y-aksen. Grunden til at jeg ikke har brugt den kort loop som i x-aksen er fordi jeg ønsker 0 til at starte med istedet for 0.0



t