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
0
Jeg ville nok lave et 2D arrray af char:
char screen[40][20];
Hvor 40 er bredden og 20 er højden.
Så kan jeg sætte punkterne, akserne, osv. i arrayet og derpå udskrive arrayet til skærmen.
int x, y;
for(y = 0; y < 20; y++)
{
for(x = 0; x < 40; x++)
{
if(screen[x][y] != 0)
putch(screen[x][y]);
}
putch('n');
}
Det er nok lidt lettere at holde styr på det hele på den måde. Man kan springe i array'et, men ikke på skærmen.
0
kan man gøre det på følgende måde:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
int x, y, a[12][23]={^|,|,|,|,|,|,|,|,|,|,|,-,-,-,-,|,-,-,-,|,-,-,-,|,-,-,-,|,-,-,-,|->};
for(y = 0; y < 23; y++)
{
for(x = 0; x < 12; x++)
{
if(screen[x][y] != 0)
putch(screen[x][y]);
printf("a[%d][%d] = %d ", x, y, a[x][y]);
fflush(stdout);
}
}
}
hvad gør funktionen putch egentlig????
det jeg har svært ved at forstå er hvordan man kan få selve koordinatsystemet printet:
Temp(c)
^
|
|
|
|
|
|
|
|
|
|
+---|---|---|---|---|->
0
Du kunne starte med:
#include <stdio.h>
char Coord[21][41] =
{
" | ",
" | ",
" | ",
" | ",
" | ",
" | ",
" | ",
" | ",
" | ",
" | ",
"----------------------------------------",
" | ",
" | ",
" | ",
" | ",
" | ",
" | ",
" | ",
" | ",
" | ",
" | "
};
int main()
{
int y;
for(y = 0; y < 21; y++)
printf("%s\n", Coord[y]);
return 0;
}
0
Det var jeg slet ikke klar over man måtte
Hvorfor bruger du kun int y; (hvorfor ikke for x???)
når jeg prøver at angive akserne vha. string siger den der er fejl:
int main()
{
char x[7] = "Temp(C)", y[8] = "Tid(sek)";
printf("Temp(C),Tid(sek)", x[7],y[8]);
int y;
for(y = 0; y < 12; y++)
printf("%s\n", a[y]);
fflush(stdout);
return 0;
}
0
okay nu har jeg fået den til at virke med x aksen, men den printer ikke noget ud ved y aksen:
#include <stdio.h>
char x[7] = "Temp(C)";
char y[8] = "Tid(sek)";
char a[13][23] =
{
" ",
"^ ",
"| ",
"| ",
"| ",
"| ",
"| ",
"| ",
"| ",
"| ",
"| ",
"| ",
"+---|---|---|---|---|->"
};
int main()
{
printf("Temp(C)");
fflush(stdout);
int y;
for(y = 0; y < 13; y++)
printf("%s\n", a[y]);
return 0;
}
hvordan kan det lade sig gøre???
0
Hvis det er C (og ikke C++) skal du have:
int main()
{
int y;
printf("Temp(C)");
fflush(stdout);
for(y = 0; y < 13; y++)
printf("%s\n", a[y]);
return 0;
}
Bemærk at du har to objekter der hedder y, dels en streng og dels en int.
0
Ja det er nemlig også det programmet angiver fejl ved, at jeg allerede har brugt y en gang.
Jeg skal nemlig lave programmet således at det skal kunne vise en string til hver af titlerne på de to akser. Problemet opstår så på x aksen.
0
Du kan gøre noget som følgende:
#include <stdio.h>
#include <string.h>
char xText[] = "Temp(C)";
char yText[] = "Tid(sek)";
char a[14][24] =
{
" ",
"^ ",
"| ",
"| ",
"| ",
"| ",
"| ",
"| ",
"| ",
"| ",
"| ",
"| ",
"+---|---|---|---|---|->",
" "
};
int main()
{
int y;
memcpy(a[0], yText, strlen(yText));
memcpy(a[13] + 23 - strlen(xText), xText, strlen(xText));
for(y = 0; y < 14; y++)
printf("%s\n", a[y]);
return 0;
}
Bemærk at længderne til strengene skal give plads til den afsluttende nul karakter.
0
hvad er det funktionen "memcpy" gør???. det er nemlig første gang jeg ser den.
0
memcpy kopierer et antal bytes/chars fra et sted til et andet.
Den første af de to memcpy i koden ovenfor skriver yText ind i 2D-arryet, i første linje fra venstre. Den anden skriver xText ind på sidste linje, men højrestillet.
Grunden til at jeg ikke bruger strcpy, selv om det er strenge, er at nul-termineringen ikke skal kopieres med.