Forum » Programiranje » program c - help ;)
program c - help ;)
Nejcos ::
Jz upam da se bo kdo potrudil in mi pomagal.
Naloga se glasi:
Želiš voditi evidenco, koliko tečeš, kolesariš, plavaš... Za vsako dejavnost si vodi, koliko časa je trajala in razdaljo(km). Pogled mora bit omogočen na zaslon pa tudi zapis v datoteko, iz katere potem bereš zapise, da lahko izračunaš določen čas in km za celo leto ali pa le za en mesec (ker imaš lahko več vnosov v enem mesecu) za določen šport(še en if stavek moram not dat..). Recimo, zanima te kolk km si pretek v marcu. Pa gledaš, daje mesec=3, da je šport pod določeno cifro (npr 1-tek, 2-kolo, 3-plavanje),pa seštevaš v neko spr. km in v drugo čas.
Program še ni čist do konca napisan, ker se je zataknilo že pri tem, da v datoteko zapisuje kar neke znake, ven ne zna pa nič prebrat! Ko ponovno zaženeš program, je s kazalcem na koncu datoteke (ker mamo "a+"), ampak ne vemo pa, kako se premaknit na začetek. Smo mal sprobaval fseek(dat,0,0), pa ni nič pametnega ven prišlo;)
No, kakršnakoli pomoč bi bla dobrodošla. Bi v funkcijah vsota_km in vsota_cas morala definirat kak nov kazalec pa zanj spet rezervirat prostor. K ti kazalci so men kr neki...
Prosim za pomoč! :)
Naloga se glasi:
Želiš voditi evidenco, koliko tečeš, kolesariš, plavaš... Za vsako dejavnost si vodi, koliko časa je trajala in razdaljo(km). Pogled mora bit omogočen na zaslon pa tudi zapis v datoteko, iz katere potem bereš zapise, da lahko izračunaš določen čas in km za celo leto ali pa le za en mesec (ker imaš lahko več vnosov v enem mesecu) za določen šport(še en if stavek moram not dat..). Recimo, zanima te kolk km si pretek v marcu. Pa gledaš, daje mesec=3, da je šport pod določeno cifro (npr 1-tek, 2-kolo, 3-plavanje),pa seštevaš v neko spr. km in v drugo čas.
Program še ni čist do konca napisan, ker se je zataknilo že pri tem, da v datoteko zapisuje kar neke znake, ven ne zna pa nič prebrat! Ko ponovno zaženeš program, je s kazalcem na koncu datoteke (ker mamo "a+"), ampak ne vemo pa, kako se premaknit na začetek. Smo mal sprobaval fseek(dat,0,0), pa ni nič pametnega ven prišlo;)
No, kakršnakoli pomoč bi bla dobrodošla. Bi v funkcijah vsota_km in vsota_cas morala definirat kak nov kazalec pa zanj spet rezervirat prostor. K ti kazalci so men kr neki...
Prosim za pomoč! :)
FILE *dat; struct zapis { float cas; float km; int sport; int dan; int mesec; int leto; struct zapis *nasl; }; struct zapis *prvi; struct zapis *vnos(struct zapis *prvi) { int sport1,dan1,mesec1,leto1; float cas1,km1; struct zapis *pom=prvi; printf("cas:"); scanf("%f", &cas1); printf("km:"); scanf("%f", &km1); printf("sport(1,2,3):"); scanf("%d", &sport1); printf("dan:"); scanf("%d", &dan1); printf("mesec:"); scanf("%d", &mesec1); printf("leto:"); scanf("%d", &leto1); if (prvi != NULL) { while (prvi->nasl != NULL) prvi=prvi->nasl; prvi->nasl=(struct zapis*) malloc (sizeof(struct zapis)); prvi=prvi->nasl; prvi->nasl=NULL; prvi->cas=cas1; prvi->km=km1; prvi->sport=sport1; prvi->dan=dan1; prvi->mesec=mesec1; prvi->leto=leto1; fwrite(prvi, sizeof(struct zapis), 1, dat); return pom; } else { prvi=(struct zapis*) malloc (sizeof(struct zapis)); prvi->nasl=NULL; prvi->cas=cas1; prvi->km=km1; prvi->sport=sport1; prvi->dan=dan1; prvi->mesec=mesec1; prvi->leto=leto1; fwrite(prvi, sizeof(struct zapis), 1, dat); return prvi; } } void izpis(struct zapis *prvi){ if (prvi==NULL) printf("Seznam je prazen."); else while (prvi!=NULL) { printf("%f, ", prvi->cas); printf("%f, ", prvi->km); printf("%d, ", prvi->sport); printf("%d, ", prvi->dan); printf("%d, ", prvi->mesec); printf("%d\n\n", prvi->leto); prvi=prvi->nasl; } } float vsota_km(struct zapis *prvi) { int izbira_km; float vsota=0.0; prvi=NULL; printf("1:Celo leto\n"); printf("2:Po mesecih\n"); scanf("%d",&izbira_km); switch (izbira_km){ case 1: while (prvi->nasl !=NULL) { prvi=(struct zapis*) malloc (sizeof(struct zapis)); fread(prvi, sizeof(struct zapis), 1, dat); vsota+=prvi->km; free(prvi); prvi=prvi->nasl; } return (vsota); break; case 2: printf("Vpisi stevilko meseca:"); int st; scanf("%d",&st); while (prvi->nasl !=NULL) { prvi=(struct zapis*) malloc (sizeof(struct zapis)); fread(prvi, sizeof(struct zapis), 1, dat); if (prvi->mesec==st) vsota+=prvi->km; free(prvi); prvi=prvi->nasl; } return (vsota); break; } } float vsota_cas(struct zapis *PRVI) { int izbira_cas; float vsota=0.0; struct zapis *pom=PRVI; printf("1:Celo leto\n"); printf("2:Po mesecih\n"); scanf("%d",&izbira_cas); switch (izbira_cas){ case 1: while (pom->nasl !=NULL) { pom=(struct zapis*) malloc (sizeof(struct zapis)); fread(pom, sizeof(struct zapis), 1, dat); vsota+=pom->cas; free(pom); pom=pom->nasl; } return (vsota); break; case 2: printf("Vpisi stevilko meseca:"); int st; scanf("%d",&st); while (pom->nasl !=NULL) { pom=(struct zapis*) malloc (sizeof(struct zapis)); fread(pom, sizeof(struct zapis), 1, dat); if (pom->mesec==st) vsota+=pom->cas; free(pom); pom=pom->nasl; } return (vsota); break; } } int main(int argc, char *argv[]) { prvi=NULL; dat=fopen("rekreac.txt","a+"); int izbira; float vs_km,vs_cas; do { printf("\n1:Vnos podatkov\n"); printf("2:Izpis podatko\n"); printf("3:Kilometri\n"); printf("4:Cas\n"); printf("5:Izhod\n"); scanf("%d", &izbira); switch (izbira) { case 1: prvi=vnos(prvi); break; case 2: izpis(prvi); break; case 3: vs_km=vsota_km(prvi); printf("Vsota kilometrov=&f", vs_km); break; case 4: vs_cas=vsota_cas(prvi); printf("Cas rekreacije=%f",vs_cas); break; } } while (izbira!=5); fclose(dat); system("PAUSE"); return 0; }
- spremenil: Senitel ()
VASkO ::
v datoteko itak zapisuje kar neke znake, če vanjo zapisuješ strukture, ki se nehajajo v pomnilniku, poleg tega če hočeš serializirati strukture, kot to počneš ti, kar odpri binary file - parameter a+b
pa datoteko beres le v primeru, ce imas shranjen kak zapis v pomnilniku. ce vse zapise shranjujes v datoteko takoj ob kreiranju, rajsi preverjaj, ali datoteka ni prazna kot pogoj za izpis podatkov in potem nadaljujes z izpisom.
edit:
za pomik kazalca na zacetek datoteke imas funkcijo rewind(FILE* fp)
nekaj o tem, poglej se related examples
pa datoteko beres le v primeru, ce imas shranjen kak zapis v pomnilniku. ce vse zapise shranjujes v datoteko takoj ob kreiranju, rajsi preverjaj, ali datoteka ni prazna kot pogoj za izpis podatkov in potem nadaljujes z izpisom.
edit:
za pomik kazalca na zacetek datoteke imas funkcijo rewind(FILE* fp)
nekaj o tem, poglej se related examples
Zgodovina sprememb…
- spremenil: VASkO ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | enojno povezan seznam -izpis nazajOddelek: Programiranje | 3637 (3177) | Randomness |
» | [C] kazalčni seznamOddelek: Programiranje | 3101 (2915) | MrBrdo |
» | [C] Povezani seznami in kazalciOddelek: Programiranje | 2568 (2135) | Good Guy |
» | [C] Narascajoce sortiranje linearnega seznamaOddelek: Programiranje | 1862 (1751) | Jebiveter |
» | spet problem v Cju ... kazalciOddelek: Programiranje | 1053 (967) | hatch |