» »

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č! :)

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

Zgodovina sprememb…

  • spremenil: VASkO ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

enojno povezan seznam -izpis nazaj

Oddelek: Programiranje
243637 (3177) Randomness
»

[C] kazalčni seznam

Oddelek: Programiranje
123101 (2915) MrBrdo
»

[C] Povezani seznami in kazalci

Oddelek: Programiranje
242568 (2135) Good Guy
»

[C] Narascajoce sortiranje linearnega seznama

Oddelek: Programiranje
71862 (1751) Jebiveter
»

spet problem v Cju ... kazalci

Oddelek: Programiranje
61053 (967) hatch

Več podobnih tem