Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

Zadnji zadatak iz aplikacije za zadaće
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
krcko
Forumaš nagrađen za životno djelo
Forumaš nagrađen za životno djelo


Pridružen/a: 07. 10. 2002. (15:57:59)
Postovi: (1892)16
Sarma = la pohva - posuda
655 = 759 - 104

PostPostano: 15:47 čet, 12. 6. 2014    Naslov: Zadnji zadatak iz aplikacije za zadaće Citirajte i odgovorite

Na zadnjem predavanju 2013./14. pripremali smo se za kolokvij rjesavajuci zadnji zadatak iz aplikacije za zadace. Rjesenje ilustrira strukture, vezane liste i datoteke, dakle tocno gradivo koje ulazi u drugi kolokvij. Evo teksta zadatka:

[quote]Zadana je datoteka "datumi.in" u kojoj se u prvoj liniji nalazi prirodni broj n, a u idućih n redaka zapisani su datumi u formatu
d.m.g.
(po jedan u svakom retku). Datume treba prepisati u datoteku "datumi.out" u formatu
koliko;d.m.g.
pri čemu je koliko broj pojavljivanja datuma u datoteci, a datumi trebaju biti sortirani od najstarijeg prema najnovijem.
Napomena: Datumi u ulaznoj datoteci bit će ispravni, tj. ne treba provjeravati da su korektni.

Primjer: Ako ulazna datoteka sadrži

5
1.1.1.
2.2.2.
13.1.2010.
1.1.1.
6.6.666.

onda izlazna treba biti

2;1.1.1.
1;2.2.2.
1;6.6.666.
1;13.1.2010.[/quote]

U originalnom zadatku bila je uputa da se rijesi s dinamicki alociranim poljem struct-ova. Moje rjesenje je s vezanom listom u koju se datumi ubacuju "na pravo mjesto", tako da se izbjegne sortiranje. Evo koda skrpanog pred malobrojnom, ali vjernom publikom u 003. Zahvaljujem Dori i ostalima na pomoci pri ispravljanju pogresaka :naklon:

[code:1]#include <stdio.h>
#include <stdlib.h>

typedef struct { int d; int m; int g;} datum;

struct list { datum t; int br; struct list *next; };

void ispisd(datum t, FILE *out)
{ fprintf(out,"%d.%d.%d.\n",t.d,t.m,t.g);
}

void ispisl(struct list *e, FILE *out)
{ if (e==NULL) return ;
fprintf(out,"%d;",e->br);
ispisd(e->t,out);
ispisl(e->next,out);
return ;
}

int usporedi(datum a, datum b)
{ if (a.g!=b.g) return b.g-a.g;
if (a.m!=b.m) return b.m-a.m;
return b.d-a.d;
}

int main()
{ FILE *in, *out;
int n,i,j;
char s[256];
datum a;

struct list *head=NULL, *c, *d;

in = fopen("datumi.in","r");
out = fopen("datumi.out","w");

fgets(s,256,in);
sscanf(s,"%d",&n);

for (i=0; i<n; ++i)
{ fgets(s,256,in);
sscanf(s,"%d",&a.d);
j=0;
while (s[j]!='.') ++j;
++j;
sscanf(&s[j],"%d",&a.m);
while (s[j]!='.') ++j;
++j;
sscanf(&s[j],"%d",&a.g);

if (head==NULL || usporedi(a,head->t)>0)
{ c = (struct list *)malloc(sizeof(struct list));
c->t = a;
c->br = 1;
c->next = head;
head = c;
}
else
{ c = head;
while (c!=NULL)
{ if (usporedi(a,c->t)==0)
{ (c->br)++;
c=NULL;
}
else
{ if (c->next==NULL || usporedi(a,c->next->t)>0)
{ d = (struct list *)malloc(sizeof(struct list));
d->t = a;
d->br = 1;
d->next = c->next;
c->next = d;
c = NULL;
}
else c = c->next;

}
} }
}

ispisl(head,out);


fclose(in);
fclose(out);

return 0;
}
[/code:1]
Na zadnjem predavanju 2013./14. pripremali smo se za kolokvij rjesavajuci zadnji zadatak iz aplikacije za zadace. Rjesenje ilustrira strukture, vezane liste i datoteke, dakle tocno gradivo koje ulazi u drugi kolokvij. Evo teksta zadatka:

Citat:
Zadana je datoteka "datumi.in" u kojoj se u prvoj liniji nalazi prirodni broj n, a u idućih n redaka zapisani su datumi u formatu
d.m.g.
(po jedan u svakom retku). Datume treba prepisati u datoteku "datumi.out" u formatu
koliko;d.m.g.
pri čemu je koliko broj pojavljivanja datuma u datoteci, a datumi trebaju biti sortirani od najstarijeg prema najnovijem.
Napomena: Datumi u ulaznoj datoteci bit će ispravni, tj. ne treba provjeravati da su korektni.

Primjer: Ako ulazna datoteka sadrži

5
1.1.1.
2.2.2.
13.1.2010.
1.1.1.
6.6.666.

onda izlazna treba biti

2;1.1.1.
1;2.2.2.
1;6.6.666.
1;13.1.2010.


U originalnom zadatku bila je uputa da se rijesi s dinamicki alociranim poljem struct-ova. Moje rjesenje je s vezanom listom u koju se datumi ubacuju "na pravo mjesto", tako da se izbjegne sortiranje. Evo koda skrpanog pred malobrojnom, ali vjernom publikom u 003. Zahvaljujem Dori i ostalima na pomoci pri ispravljanju pogresaka Zahvaljujem, postovani kolega!

Kod:
#include <stdio.h>
#include <stdlib.h>

typedef struct { int d; int m; int g;} datum;

struct list { datum t; int br; struct list *next; };

void ispisd(datum t, FILE *out)
{ fprintf(out,"%d.%d.%d.\n",t.d,t.m,t.g);
}

void ispisl(struct list *e, FILE *out)
{ if (e==NULL) return ;
  fprintf(out,"%d;",e->br);
  ispisd(e->t,out);
  ispisl(e->next,out);
  return ;
}

int usporedi(datum a, datum b)
{ if (a.g!=b.g) return b.g-a.g;
  if (a.m!=b.m) return b.m-a.m;
  return b.d-a.d;
}

int main()
{  FILE *in, *out;
   int n,i,j;
   char s[256];
   datum a;

   struct list *head=NULL, *c, *d;

   in = fopen("datumi.in","r");
   out = fopen("datumi.out","w");

   fgets(s,256,in);
   sscanf(s,"%d",&n);

   for (i=0; i<n; ++i)
   { fgets(s,256,in);
     sscanf(s,"%d",&a.d);
     j=0;
     while (s[j]!='.') ++j;
     ++j;
     sscanf(&s[j],"%d",&a.m);
     while (s[j]!='.') ++j;
     ++j;
     sscanf(&s[j],"%d",&a.g);

     if (head==NULL || usporedi(a,head->t)>0)
     { c = (struct list *)malloc(sizeof(struct list));
       c->t = a;
       c->br = 1;
       c->next = head;
       head = c;
     }
     else
     { c = head;
       while (c!=NULL)
       { if (usporedi(a,c->t)==0)
         { (c->br)++;
           c=NULL;
         }
         else
         { if (c->next==NULL || usporedi(a,c->next->t)>0)
           { d = (struct list *)malloc(sizeof(struct list));
             d->t = a;
             d->br = 1;
             d->next = c->next;
             c->next = d;
             c = NULL;
           }
           else c = c->next;

         }
     } }
   }

   ispisl(head,out);


   fclose(in);
   fclose(out);

   return 0;
}



_________________
Vedran Krcadinac

Ljudi su razliciti, a nula je paran broj.
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail Posjetite Web stranice
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan