Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Flame Forumaš(ica)
Pridružen/a: 12. 08. 2009. (02:14:39) Postovi: (53)16
Spol:
|
Postano: 15:47 uto, 1. 6. 2010 Naslov: |
|
|
Ako ima koja dobra dusa da bi htjela pregledati kod, buduci da ja stvarno ne vidim gresku. Ispricavam se ako je netko vec pitao u vezi tog zadatka, ne stignem citati 13 stranica foruma.
Zadatak glasi:
Zadatak 3:
Zadana je datoteka "nnfhmc.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 "nnfhmc.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.
Uputa: Ovaj zadatak najlakše je riješiti upotrebom dinamički alociranog polja struct-ova.
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.
[code:1]#include<stdio.h>
#include<stdlib.h>
struct datum {int d; int m; int g;};
int usporedi(struct datum dat1, struct datum dat2)
{
if(dat1.g < dat2.g) return 2;
if(dat1.g > dat2.g) return 1;
if(dat1.m < dat2.m) return 2;
if(dat1.m > dat2.m) return 1;
if(dat1.d < dat2.d) return 2;
if(dat1.d > dat2.d) return 1;
return 0;
}
struct lista
{
struct datum dat;
int koliko;
struct lista *next;
}*pocetak = 0;
void ubaci(struct datum dat_)
{
struct lista *p = pocetak, *pp = p, *novi;
novi = (struct lista*) malloc(sizeof(struct lista));
novi->dat = dat_;
novi->koliko = 1;
if(usporedi(novi->dat,pocetak->dat) == 2)
{
pocetak = novi;
novi->next = p;
return;
}
while(usporedi(novi->dat,p->dat) == 1)
{
pp = p;
p = p->next;
if(!p)
{
pp->next = novi;
novi->next = 0;
return;
}
}
if(!usporedi(novi->dat,p->dat))
{
(p->koliko)++;
return;
}
pp->next = novi;
novi->next = p;
return;
}
int main(void)
{
FILE *fi = fopen("nnfhmc.in","r");
FILE *fo = fopen("nnfhmc.out","w");
struct datum input;
struct lista *p;
fscanf(fi,"%d");
fscanf(fi, "%d.%d.%d.", &input.d, &input.m, &input.g);
pocetak = (struct lista *) malloc(sizeof(struct lista));
pocetak->dat = input;
pocetak->next = 0;
pocetak->koliko = 1;
while(fscanf(fi,"%d.%d.%d.",&input.d, &input.m, &input.g) + 1)
ubaci(input);
for(p = pocetak; p; p = p->next)
fprintf(fo,"%d:%d.%d.%d.\n",p->koliko,p->dat.d,p->dat.m,p->dat.g);
return 0;
}[/code:1]
HVala unaprijed.
Ako ima koja dobra dusa da bi htjela pregledati kod, buduci da ja stvarno ne vidim gresku. Ispricavam se ako je netko vec pitao u vezi tog zadatka, ne stignem citati 13 stranica foruma.
Zadatak glasi:
Zadatak 3:
Zadana je datoteka "nnfhmc.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 "nnfhmc.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.
Uputa: Ovaj zadatak najlakše je riješiti upotrebom dinamički alociranog polja struct-ova.
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.
Kod: | #include<stdio.h>
#include<stdlib.h>
struct datum {int d; int m; int g;};
int usporedi(struct datum dat1, struct datum dat2)
{
if(dat1.g < dat2.g) return 2;
if(dat1.g > dat2.g) return 1;
if(dat1.m < dat2.m) return 2;
if(dat1.m > dat2.m) return 1;
if(dat1.d < dat2.d) return 2;
if(dat1.d > dat2.d) return 1;
return 0;
}
struct lista
{
struct datum dat;
int koliko;
struct lista *next;
}*pocetak = 0;
void ubaci(struct datum dat_)
{
struct lista *p = pocetak, *pp = p, *novi;
novi = (struct lista*) malloc(sizeof(struct lista));
novi->dat = dat_;
novi->koliko = 1;
if(usporedi(novi->dat,pocetak->dat) == 2)
{
pocetak = novi;
novi->next = p;
return;
}
while(usporedi(novi->dat,p->dat) == 1)
{
pp = p;
p = p->next;
if(!p)
{
pp->next = novi;
novi->next = 0;
return;
}
}
if(!usporedi(novi->dat,p->dat))
{
(p->koliko)++;
return;
}
pp->next = novi;
novi->next = p;
return;
}
int main(void)
{
FILE *fi = fopen("nnfhmc.in","r");
FILE *fo = fopen("nnfhmc.out","w");
struct datum input;
struct lista *p;
fscanf(fi,"%d");
fscanf(fi, "%d.%d.%d.", &input.d, &input.m, &input.g);
pocetak = (struct lista *) malloc(sizeof(struct lista));
pocetak->dat = input;
pocetak->next = 0;
pocetak->koliko = 1;
while(fscanf(fi,"%d.%d.%d.",&input.d, &input.m, &input.g) + 1)
ubaci(input);
for(p = pocetak; p; p = p->next)
fprintf(fo,"%d:%d.%d.%d.\n",p->koliko,p->dat.d,p->dat.m,p->dat.g);
return 0;
} |
HVala unaprijed.
|
|
[Vrh] |
|
Redeemer Forumaš(ica)
Pridružen/a: 12. 06. 2006. (21:57:04) Postovi: (B9)16
Spol:
Lokacija: Wo'liegt'dieses'verdammte'dorf
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
|
[Vrh] |
|
Redeemer Forumaš(ica)
Pridružen/a: 12. 06. 2006. (21:57:04) Postovi: (B9)16
Spol:
Lokacija: Wo'liegt'dieses'verdammte'dorf
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
|
[Vrh] |
|
Redeemer Forumaš(ica)
Pridružen/a: 12. 06. 2006. (21:57:04) Postovi: (B9)16
Spol:
Lokacija: Wo'liegt'dieses'verdammte'dorf
|
|
[Vrh] |
|
Tomy007 Forumaš(ica)
Pridružen/a: 08. 11. 2009. (19:45:28) Postovi: (94)16
|
Postano: 0:06 sri, 2. 6. 2010 Naslov: |
|
|
Znam da je kasno, ali možda netko ipak ujutro gleda forum. Napisao sam sljedeća dva programa iz datoteka i kriva su mi. Ne znam u čemu griješim i bio bi jako zahvalan kad bi netko našao grešku tako da mi se slično ne dogodi i na kolokviju :
Zadatak 2:
Napišite program koji čita datoteku "oxuseq.in", te ju prepisuje u datoteku "oxuseq.out" tako da u prepisivanju sva pojavljivanja stringa "zwd" zamijeni stringom "nblxr".
Napomena: Nemojte uvoditi ograničenja na duljinu datoteke i/ili pojedinih linija i riječi u datoteci.
[code:1]
#include <stdio.h>
int main (void) {
FILE *in, *out;
char c;
in=fopen ("oxuseq.in", "rt");
if (in==NULL) exit (1);
out=fopen ("oxuseq.out", "wt");
if (out==NULL) {
fclose (in);
exit (2);
}
while ((fscanf (in, "%c", &c))>0) {
if (c!='z')
fprintf(out, "%c", &c);
else {
if (fscanf (in, "%c", &c)<0) {
fprintf(out, "z");
break;
}
else {
if (c!='w')
fprintf(out, "z%c", c);
else {
if (fscanf (in, "%c", &c)<0) {
fprintf(out, "zw");
break;
}
else {
if (c!='d')
fprintf(out, "zw%c", c);
else
fprintf(out, "nblxr");
}
}
}
}
}
fclose (in);
fclose (out);
return 0;
}
[/code:1]
Zadatak 3:
Zadana je datoteka "ssdcdgks.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 "ssdcdgks.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.
Uputa: Ovaj zadatak najlakše je riješiti upotrebom dinamički alociranog polja struct-ova.
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.
[code:1]
# include <stdio.h>
typedef struct _datum {
int koliko;
int dan;
int mjesec;
int godina;
} datum;
int main (void) {
FILE *in, *out;
int n, i, j, k;
datum *d, tmp;
in=fopen ("ssdcdgks.in", "rt");
if (in==NULL)
exit (1);
out=fopen ("ssdcdgks.out", "wt");
if (out==NULL) {
fclose (in);
exit (2);
}
fscanf (in, "%d", &n);
d=(datum*)malloc(n*sizeof(datum));
k=-1;
for (i=0; i<n; ++i) {
++k;
fscanf (in, "%d.%d.%d.", &d[k].dan, &d[k].mjesec, &d[k].godina);
if (i==0)
d[k].koliko=1;
else {
for(j=0; j<i; j++)
if ((d[j].dan==d[i].dan) && (d[j].mjesec==d[i].mjesec) && (d[j].godina==d[i].godina)){
++d[j].koliko;
--k;
}
else
d[k].koliko=1;
}
}
for (i=0; i<k-1; ++i)
for (j=i+1; j<k; ++j)
if (d[i].koliko<d[j].koliko) {
tmp=d[i];
d[i]=d[j];
d[j]=tmp;
}
for (i=0; i<k; ++i)
fprintf(out, "%d|%d.%d.%d.\n", d[i].koliko, d[i].dan, d[i].mjesec, d[i].godina);
fclose (in);
fclose (out);
free (d);
return 0;
}
[/code:1]
Znam da je kasno, ali možda netko ipak ujutro gleda forum. Napisao sam sljedeća dva programa iz datoteka i kriva su mi. Ne znam u čemu griješim i bio bi jako zahvalan kad bi netko našao grešku tako da mi se slično ne dogodi i na kolokviju :
Zadatak 2:
Napišite program koji čita datoteku "oxuseq.in", te ju prepisuje u datoteku "oxuseq.out" tako da u prepisivanju sva pojavljivanja stringa "zwd" zamijeni stringom "nblxr".
Napomena: Nemojte uvoditi ograničenja na duljinu datoteke i/ili pojedinih linija i riječi u datoteci.
Kod: |
#include <stdio.h>
int main (void) {
FILE *in, *out;
char c;
in=fopen ("oxuseq.in", "rt");
if (in==NULL) exit (1);
out=fopen ("oxuseq.out", "wt");
if (out==NULL) {
fclose (in);
exit (2);
}
while ((fscanf (in, "%c", &c))>0) {
if (c!='z')
fprintf(out, "%c", &c);
else {
if (fscanf (in, "%c", &c)<0) {
fprintf(out, "z");
break;
}
else {
if (c!='w')
fprintf(out, "z%c", c);
else {
if (fscanf (in, "%c", &c)<0) {
fprintf(out, "zw");
break;
}
else {
if (c!='d')
fprintf(out, "zw%c", c);
else
fprintf(out, "nblxr");
}
}
}
}
}
fclose (in);
fclose (out);
return 0;
}
|
Zadatak 3:
Zadana je datoteka "ssdcdgks.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 "ssdcdgks.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.
Uputa: Ovaj zadatak najlakše je riješiti upotrebom dinamički alociranog polja struct-ova.
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.
Kod: |
# include <stdio.h>
typedef struct _datum {
int koliko;
int dan;
int mjesec;
int godina;
} datum;
int main (void) {
FILE *in, *out;
int n, i, j, k;
datum *d, tmp;
in=fopen ("ssdcdgks.in", "rt");
if (in==NULL)
exit (1);
out=fopen ("ssdcdgks.out", "wt");
if (out==NULL) {
fclose (in);
exit (2);
}
fscanf (in, "%d", &n);
d=(datum*)malloc(n*sizeof(datum));
k=-1;
for (i=0; i<n; ++i) {
++k;
fscanf (in, "%d.%d.%d.", &d[k].dan, &d[k].mjesec, &d[k].godina);
if (i==0)
d[k].koliko=1;
else {
for(j=0; j<i; j++)
if ((d[j].dan==d[i].dan) && (d[j].mjesec==d[i].mjesec) && (d[j].godina==d[i].godina)){
++d[j].koliko;
--k;
}
else
d[k].koliko=1;
}
}
for (i=0; i<k-1; ++i)
for (j=i+1; j<k; ++j)
if (d[i].koliko<d[j].koliko) {
tmp=d[i];
d[i]=d[j];
d[j]=tmp;
}
for (i=0; i<k; ++i)
fprintf(out, "%d|%d.%d.%d.\n", d[i].koliko, d[i].dan, d[i].mjesec, d[i].godina);
fclose (in);
fclose (out);
free (d);
return 0;
}
|
|
|
[Vrh] |
|
ante003 Forumaš(ica)
Pridružen/a: 13. 10. 2008. (17:45:10) Postovi: (3C5)16
Spol:
|
|
[Vrh] |
|
Tomy007 Forumaš(ica)
Pridružen/a: 08. 11. 2009. (19:45:28) Postovi: (94)16
|
Postano: 0:42 sri, 2. 6. 2010 Naslov: |
|
|
[quote="ante003"]neda mi se prckat po tvom kodu sad jer idem spavat ali samo da te pitam nesto.
jesi ti uopce to kompajlirao ? meni u oba zadatka pri kompajliranju izbaci errore.[/quote]
Meni se normalno kompajlira, moraš napraviti datoteku u mapi u kojoj je program da bi uopće radilo.
Ajme našao sam jednu užasnu grešku u 2. lol lol lol, valjda sam zbog umora bio napravio ovaj lapsus
[code:1]
if (c!='z')
fprintf(out, "%c", &c);
[/code:1]
Ma nije mi se više dalo zezati sa tim malim charovima, prebacio sam cijelu datoteku u 1 string preko relokacije i onda na tom stringu izvršio zamjenu i prepisao ga u drugu datoteku, sad je 2. točan.
U 3. sam primjetio da sam sortirao po krivom kriteriju pa sam to promjenio.
I da, 4:28 je, vrijeme brzo prođe kad se zabavljaš :D , napravio sam valjda već pet promjena ovog posta :P
ante003 (napisa): | neda mi se prckat po tvom kodu sad jer idem spavat ali samo da te pitam nesto.
jesi ti uopce to kompajlirao ? meni u oba zadatka pri kompajliranju izbaci errore. |
Meni se normalno kompajlira, moraš napraviti datoteku u mapi u kojoj je program da bi uopće radilo.
Ajme našao sam jednu užasnu grešku u 2. lol lol lol, valjda sam zbog umora bio napravio ovaj lapsus
Kod: |
if (c!='z')
fprintf(out, "%c", &c);
|
Ma nije mi se više dalo zezati sa tim malim charovima, prebacio sam cijelu datoteku u 1 string preko relokacije i onda na tom stringu izvršio zamjenu i prepisao ga u drugu datoteku, sad je 2. točan.
U 3. sam primjetio da sam sortirao po krivom kriteriju pa sam to promjenio.
I da, 4:28 je, vrijeme brzo prođe kad se zabavljaš , napravio sam valjda već pet promjena ovog posta
|
|
[Vrh] |
|
kre5o Forumaš(ica)
Pridružen/a: 14. 09. 2009. (22:20:52) Postovi: (32)16
|
Postano: 7:46 sri, 2. 6. 2010 Naslov: |
|
|
blic pitanje :)
[i]Napišite program koji učitava prirodni broj n ≤ 17 i niz od n cijelih brojeva. Program treba kreirati donjetrokutastu matricu M reda n kojoj se učitani brojevi nalaze na dijagonali (redom kojim su učitani), a za elemente ispod dijagonale vrijedi:
Mij=(2Mi−1j−6Mij+1) mod 7606307
gdje mod označava ostatak pri dijeljenju lijevog broja s desnim.
Program treba ispisati elemente posljednjeg retka matrice M (ispisane brojeve odvojite razmakom)[/i]
moje rješenje glasi
[code:1]#include <stdio.h>
int main(){
int n, d[18], i, j, k;
double m[18][18];
scanf("%d", &n);
for(i=1; i<=n; ++i) scanf("%d", &d[i]);
for(i=1;i<=n;++i) {
for(j=n;j>=1;--j) {
if (i==j) m[i][j]=d[i];
if (i>j) {
k=(2*m[i-1][j]-6*m[i][j+1]);
if (k<0) k=-k;
m[i][j]=k%7606307;
}
}
}
for(i=1; i<=n; ++i) printf("%g ", m[n][i]);
return 0;
}[/code:1]
(netočno za input: 17 -69 -42 72 -19 -59 -11 0 58 65 5 -12 47
-52 37 -59 -9 -15)
prilično jednostavan zadatak, jednostavno rješenje, al zašto je krivo :S
jel sam možda u krivom formatu ispiso
naravno da za takav input dođu lude brojke i decimale
btw znam da moraju biti 0 na i<j al to nema veze za ispis, ili?
edit: ma mozda sam samo trebao %d ispisat xD
edit2: probao sam sa %d i ne radi
blic pitanje
Napišite program koji učitava prirodni broj n ≤ 17 i niz od n cijelih brojeva. Program treba kreirati donjetrokutastu matricu M reda n kojoj se učitani brojevi nalaze na dijagonali (redom kojim su učitani), a za elemente ispod dijagonale vrijedi:
Mij=(2Mi−1j−6Mij+1) mod 7606307
gdje mod označava ostatak pri dijeljenju lijevog broja s desnim.
Program treba ispisati elemente posljednjeg retka matrice M (ispisane brojeve odvojite razmakom)
moje rješenje glasi
Kod: | #include <stdio.h>
int main(){
int n, d[18], i, j, k;
double m[18][18];
scanf("%d", &n);
for(i=1; i<=n; ++i) scanf("%d", &d[i]);
for(i=1;i<=n;++i) {
for(j=n;j>=1;--j) {
if (i==j) m[i][j]=d[i];
if (i>j) {
k=(2*m[i-1][j]-6*m[i][j+1]);
if (k<0) k=-k;
m[i][j]=k%7606307;
}
}
}
for(i=1; i<=n; ++i) printf("%g ", m[n][i]);
return 0;
} |
(netočno za input: 17 -69 -42 72 -19 -59 -11 0 58 65 5 -12 47
-52 37 -59 -9 -15)
prilično jednostavan zadatak, jednostavno rješenje, al zašto je krivo :S
jel sam možda u krivom formatu ispiso
naravno da za takav input dođu lude brojke i decimale
btw znam da moraju biti 0 na i<j al to nema veze za ispis, ili?
edit: ma mozda sam samo trebao %d ispisat xD
edit2: probao sam sa %d i ne radi
Zadnja promjena: kre5o; 8:45 sri, 2. 6. 2010; ukupno mijenjano 2 put/a.
|
|
[Vrh] |
|
Tomy007 Forumaš(ica)
Pridružen/a: 08. 11. 2009. (19:45:28) Postovi: (94)16
|
Postano: 8:22 sri, 2. 6. 2010 Naslov: |
|
|
Za 3. mi i dalje javlja da je krivo. Popravio sam sort, testirao na dosta primjere i zbilja ne razumijem zbog kakve sitnice sada ne radi :
[code:1]
# include <stdio.h>
typedef struct _datum {
int koliko;
int dan;
int mjesec;
int godina;
} datum;
int main (void) {
FILE *in, *out;
int n, i, j, k;
datum *d, tmp;
in=fopen ("ssdcdgks.in", "rt");
if (in==NULL)
exit (1);
out=fopen ("ssdcdgks.out", "wt");
if (out==NULL) {
fclose (in);
exit (2);
}
fscanf (in, "%d", &n);
d=(datum*)malloc(n*sizeof(datum));
k=-1;
for (i=0; i<n; ++i) {
++k;
fscanf (in, "%d.%d.%d.", &d[k].dan, &d[k].mjesec, &d[k].godina);
if (i==0)
d[k].koliko=1;
else {
for(j=0; j<k; j++)
if ((d[j].dan==d[k].dan) && (d[j].mjesec==d[k].mjesec) && (d[j].godina==d[k].godina)){
++d[j].koliko;
--k;
}
else
d[k].koliko=1;
}
}
for (i=0; i<k; ++i)
for (j=i+1; j<=k; ++j) {
if (d[i].godina>d[j].godina) {
tmp=d[i];
d[i]=d[j];
d[j]=tmp;
}
else if ((d[i].godina==d[j].godina) && (d[i].mjesec>d[j].mjesec))
{
tmp=d[i];
d[i]=d[j];
d[j]=tmp;
}
else if ((d[i].godina==d[j].godina) && (d[i].mjesec==d[j].mjesec) && (d[i].dan>d[j].dan))
{
tmp=d[i];
d[i]=d[j];
d[j]=tmp;
}
}
for (i=0; i<=k; ++i)
if (i<k)
fprintf(out, "%d|%d.%d.%d.\n", d[i].koliko, d[i].dan, d[i].mjesec, d[i].godina);
else
fprintf(out, "%d|%d.%d.%d.", d[i].koliko, d[i].dan, d[i].mjesec, d[i].godina);
fclose (in);
fclose (out);
free (d);
return 0;
}
[/code:1]
[size=9][color=#999999]Added after 34 minutes:[/color][/size]
Za 3. mi i dalje javlja da je krivo. Popravio sam sort, testirao na dosta primjere i zbilja ne razumijem zbog kakve sitnice sada ne radi :
Kod: |
# include <stdio.h>
typedef struct _datum {
int koliko;
int dan;
int mjesec;
int godina;
} datum;
int main (void) {
FILE *in, *out;
int n, i, j, k;
datum *d, tmp;
in=fopen ("ssdcdgks.in", "rt");
if (in==NULL)
exit (1);
out=fopen ("ssdcdgks.out", "wt");
if (out==NULL) {
fclose (in);
exit (2);
}
fscanf (in, "%d", &n);
d=(datum*)malloc(n*sizeof(datum));
k=-1;
for (i=0; i<n; ++i) {
++k;
fscanf (in, "%d.%d.%d.", &d[k].dan, &d[k].mjesec, &d[k].godina);
if (i==0)
d[k].koliko=1;
else {
for(j=0; j<k; j++)
if ((d[j].dan==d[k].dan) && (d[j].mjesec==d[k].mjesec) && (d[j].godina==d[k].godina)){
++d[j].koliko;
--k;
}
else
d[k].koliko=1;
}
}
for (i=0; i<k; ++i)
for (j=i+1; j<=k; ++j) {
if (d[i].godina>d[j].godina) {
tmp=d[i];
d[i]=d[j];
d[j]=tmp;
}
else if ((d[i].godina==d[j].godina) && (d[i].mjesec>d[j].mjesec))
{
tmp=d[i];
d[i]=d[j];
d[j]=tmp;
}
else if ((d[i].godina==d[j].godina) && (d[i].mjesec==d[j].mjesec) && (d[i].dan>d[j].dan))
{
tmp=d[i];
d[i]=d[j];
d[j]=tmp;
}
}
for (i=0; i<=k; ++i)
if (i<k)
fprintf(out, "%d|%d.%d.%d.\n", d[i].koliko, d[i].dan, d[i].mjesec, d[i].godina);
else
fprintf(out, "%d|%d.%d.%d.", d[i].koliko, d[i].dan, d[i].mjesec, d[i].godina);
fclose (in);
fclose (out);
free (d);
return 0;
}
|
Added after 34 minutes:
|
|
[Vrh] |
|
Tomy007 Forumaš(ica)
Pridružen/a: 08. 11. 2009. (19:45:28) Postovi: (94)16
|
|
[Vrh] |
|
Redeemer Forumaš(ica)
Pridružen/a: 12. 06. 2006. (21:57:04) Postovi: (B9)16
Spol:
Lokacija: Wo'liegt'dieses'verdammte'dorf
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
Postano: 11:15 sri, 2. 6. 2010 Naslov: |
|
|
@Tomi Najvjerojatnije si nešto zeznuo kod spremanja u polje. Ono kako bi ja to riješio je :
pročitao novu liniju iz datoteke, i podatke spremio u neki pomoćni datum.
pogledao da li taj već postoji u polj:
ako postoji, samo povećao brojač,
ako ne dodao u polje (i povećao onaj k kojim brojiš koliko ih ima).
nakon što je sve učitano, imaš k različitih datuma u polju i onda svaka petlja ide do k, sortiraš i šta već treba.
Ti se vjerojatno pogubiš negdje sa k-om :D
[size=9][color=#999999]Added after 56 minutes:[/color][/size]
@kre5o Zašto uzimanje apsolutne vrijednosti od k? operacija % je definirana i za negativne brojeve :D A daje različit rezutat za poz i neg broj, npr:
1%3=1
-1%3=(-1+3)%3=2
;)
@Tomi Najvjerojatnije si nešto zeznuo kod spremanja u polje. Ono kako bi ja to riješio je :
pročitao novu liniju iz datoteke, i podatke spremio u neki pomoćni datum.
pogledao da li taj već postoji u polj:
ako postoji, samo povećao brojač,
ako ne dodao u polje (i povećao onaj k kojim brojiš koliko ih ima).
nakon što je sve učitano, imaš k različitih datuma u polju i onda svaka petlja ide do k, sortiraš i šta već treba.
Ti se vjerojatno pogubiš negdje sa k-om
Added after 56 minutes:
@kre5o Zašto uzimanje apsolutne vrijednosti od k? operacija % je definirana i za negativne brojeve A daje različit rezutat za poz i neg broj, npr:
1%3=1
-1%3=(-1+3)%3=2
_________________ "Bolje bi prolazio na faxu da sam na drogama nego na netu" - by a friend of mine
"Poslije spavanja doma spavanje bilo di mi je najdraža stvar" - by the same guy
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 19:05 sri, 2. 6. 2010 Naslov: |
|
|
@Tomi:
[code:1] for(j=0; j<k; j++)
if ((d[j].dan==d[k].dan) && (d[j].mjesec==d[k].mjesec) && (d[j].godina==d[k].godina)){
++d[j].koliko;
--k;
}
else
d[k].koliko=1;
}[/code:1]
Kad god uvjet od [tt]if()[/tt] nije istinit, izvodi se [tt]else[/tt]. Gradivo prvog semestra: kako se provjerava "postoji li nesto"?
Ono sto se tebi desi kad nadjes duplica:
1. smanjis [tt]k[/tt] za 1,
2. u iducem koraku postavis [tt]d[k].koliko=1;[/tt] [b]za taj prethodni [tt]k[/tt][/b] :!:
[quote="Luuka"]@kre5o Zašto uzimanje apsolutne vrijednosti od k? operacija % je definirana i za negativne brojeve :D A daje različit rezutat za poz i neg broj, npr:
1%3=1
[color=red]-1%3=(-1+3)%3=2[/color][/quote]
Jesi li siguran?
[code:1]$ cat t.c; gcc t.c && ./a.out
#include <stdio.h>
int main () {
printf("1 % 2 = %d\n-1 % 2 = %d\n", 1 % 2, -1 % 2);
return 0;
}
1 % 2 = 1
-1 % 2 = -1[/code:1]
;)
@Tomi:
Kod: | for(j=0; j<k; j++)
if ((d[j].dan==d[k].dan) && (d[j].mjesec==d[k].mjesec) && (d[j].godina==d[k].godina)){
++d[j].koliko;
--k;
}
else
d[k].koliko=1;
} |
Kad god uvjet od if() nije istinit, izvodi se else. Gradivo prvog semestra: kako se provjerava "postoji li nesto"?
Ono sto se tebi desi kad nadjes duplica:
1. smanjis k za 1,
2. u iducem koraku postavis d[k].koliko=1; za taj prethodni k
Luuka (napisa): | @kre5o Zašto uzimanje apsolutne vrijednosti od k? operacija % je definirana i za negativne brojeve A daje različit rezutat za poz i neg broj, npr:
1%3=1
-1%3=(-1+3)%3=2 |
Jesi li siguran?
Kod: | $ cat t.c; gcc t.c && ./a.out
#include <stdio.h>
int main () {
printf("1 % 2 = %d\n-1 % 2 = %d\n", 1 % 2, -1 % 2);
return 0;
}
1 % 2 = 1
-1 % 2 = -1 |
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
|
|
[Vrh] |
|
Redeemer Forumaš(ica)
Pridružen/a: 12. 06. 2006. (21:57:04) Postovi: (B9)16
Spol:
Lokacija: Wo'liegt'dieses'verdammte'dorf
|
Postano: 19:33 sri, 2. 6. 2010 Naslov: |
|
|
[code:1]#include <stdio.h>
#include <stdlib.h>
typedef struct var {
int dan;
int mjesec;
int godina;
int vrijednost;
int broj;
} datum;
int main(void){
datum *x;
int koliko;
char c='a';
int j=0;
int i=-1;
int min;
FILE *fp,*fo;
fp=fopen("ykdha.in", "r");
fo=fopen("ykdha.out", "w");
if( (fp = fopen( "ykdha.in", "r")) == NULL)
{
printf("Ulazna datoteka nije dobra");
exit (1);
}
if( (fo = fopen ("ykdha.out", "w")) == NULL)
{
printf ("Izlazna datoteka nije dobra");
exit (2);
}
fscanf(fp,"%d",&koliko);
x=(datum*)malloc(koliko*sizeof(datum));
for (i=0; i<koliko; i++) {
fscanf(fp,"%d.%d.%d.",&x[i].dan,&x[i].mjesec,&x[i].godina);
if (i==0) min = x[i].dan+(x[i].mjesec-1)*40+(x[i].godina-1)*500;
}
for(i=0;i<koliko;i++)
{
x[i].vrijednost=x[i].dan+(x[i].mjesec-1)*40+(x[i].godina-1)*500;
x[i].broj=1;
if (x[i].vrijednost<min) min=x[i].vrijednost;
}
for(i=0;i<koliko-1;i++)
{
for(j=i+1;j<koliko;j++)
{
if (x[i].vrijednost==x[j].vrijednost)
{
x[j].vrijednost=0;
x[i].broj++;
}
}
}
for(i=0;i<koliko-1;i++)
{
for(j=i+1;j<koliko;j++)
{
if(x[i].vrijednost>x[j].vrijednost)
{
datum temp = x[i];
x[i]=x[j];
x[j]=temp;
}
}
}
for(i=0;i<koliko;i++)
{
if(x[i].vrijednost)
{
if (x[i].vrijednost!=min) fprintf (fo, "\n");
fprintf(fo,"%d|%d.%d.%d.\n",x[i].broj,x[i].dan,x[i].mjesec,x[i].godina);
}
}
free(x);
fclose(fp);
fclose(fo);
return 0;
}
[/code:1]
gdje moj kod šteka?
Kod: | #include <stdio.h>
#include <stdlib.h>
typedef struct var {
int dan;
int mjesec;
int godina;
int vrijednost;
int broj;
} datum;
int main(void){
datum *x;
int koliko;
char c='a';
int j=0;
int i=-1;
int min;
FILE *fp,*fo;
fp=fopen("ykdha.in", "r");
fo=fopen("ykdha.out", "w");
if( (fp = fopen( "ykdha.in", "r")) == NULL)
{
printf("Ulazna datoteka nije dobra");
exit (1);
}
if( (fo = fopen ("ykdha.out", "w")) == NULL)
{
printf ("Izlazna datoteka nije dobra");
exit (2);
}
fscanf(fp,"%d",&koliko);
x=(datum*)malloc(koliko*sizeof(datum));
for (i=0; i<koliko; i++) {
fscanf(fp,"%d.%d.%d.",&x[i].dan,&x[i].mjesec,&x[i].godina);
if (i==0) min = x[i].dan+(x[i].mjesec-1)*40+(x[i].godina-1)*500;
}
for(i=0;i<koliko;i++)
{
x[i].vrijednost=x[i].dan+(x[i].mjesec-1)*40+(x[i].godina-1)*500;
x[i].broj=1;
if (x[i].vrijednost<min) min=x[i].vrijednost;
}
for(i=0;i<koliko-1;i++)
{
for(j=i+1;j<koliko;j++)
{
if (x[i].vrijednost==x[j].vrijednost)
{
x[j].vrijednost=0;
x[i].broj++;
}
}
}
for(i=0;i<koliko-1;i++)
{
for(j=i+1;j<koliko;j++)
{
if(x[i].vrijednost>x[j].vrijednost)
{
datum temp = x[i];
x[i]=x[j];
x[j]=temp;
}
}
}
for(i=0;i<koliko;i++)
{
if(x[i].vrijednost)
{
if (x[i].vrijednost!=min) fprintf (fo, "\n");
fprintf(fo,"%d|%d.%d.%d.\n",x[i].broj,x[i].dan,x[i].mjesec,x[i].godina);
}
}
free(x);
fclose(fp);
fclose(fo);
return 0;
}
|
gdje moj kod šteka?
_________________ Nigdje ne piše da morate studirati ovdje.
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
|
[Vrh] |
|
Redeemer Forumaš(ica)
Pridružen/a: 12. 06. 2006. (21:57:04) Postovi: (B9)16
Spol:
Lokacija: Wo'liegt'dieses'verdammte'dorf
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
|
[Vrh] |
|
BlameGame Forumaš(ica)
Pridružen/a: 14. 09. 2011. (19:17:53) Postovi: (6C)16
|
Postano: 16:17 uto, 19. 3. 2013 Naslov: |
|
|
3. zadaca-visedimenzionalna polja
1.zadatak
[/code]
sto ne valja
3. zadaca-visedimenzionalna polja
1.zadatak
[/code]
sto ne valja
Description: |
|
Download |
Filename: |
polje1.c |
Filesize: |
576 Bytes |
Downloaded: |
133 Time(s) |
|
|
[Vrh] |
|
|