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 | 3987 (3527) | Randomness | 
| » | [C] kazalčni seznamOddelek: Programiranje | 3401 (3215) | MrBrdo | 
| » | [C] Povezani seznami in kazalciOddelek: Programiranje | 2719 (2286) | Good Guy | 
| » | [C] Narascajoce sortiranje linearnega seznamaOddelek: Programiranje | 1999 (1888) | Jebiveter | 
| » | spet problem v Cju ... kazalciOddelek: Programiranje | 1154 (1068) | hatch |