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

Datoteke (zadatak)
WWW:
Idite na 1, 2  Sljedeće
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
nemanja065
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 05. 01. 2007. (22:48:40)
Postovi: (23)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 15:49 čet, 10. 9. 2009    Naslov: Datoteke Citirajte i odgovorite

Zadatak je sledeci:
U binarnoj datoteci REZULTATI upisani su sledeći podaci: IME, PREZIME, DISCIPLINA (jedna od sledećih disciplina: KLADIVO, DISK, KUGLA i KOPLJE) i REZULTAT (realni broj) koji su pojedini sportasi ostvarili na atletskom natjecanju. Čitanjem podataka iz datoteke REZULTATI treba formirati tekstualnu datoteku REKORDI.txt u koju će biti upisani podaci o onim sportasima koji imaju najbolji rezultat u pojedinim disciplinama. Program treba da sadrži i dio za formiranje binarne datoteke REZULTATI.

Moze li mi neko pomoci odraditi zadatak, jer neznam bas najbolje rad sa vise datoteke jos razlicitih.....Hvala unaprijed
Zadatak je sledeci:
U binarnoj datoteci REZULTATI upisani su sledeći podaci: IME, PREZIME, DISCIPLINA (jedna od sledećih disciplina: KLADIVO, DISK, KUGLA i KOPLJE) i REZULTAT (realni broj) koji su pojedini sportasi ostvarili na atletskom natjecanju. Čitanjem podataka iz datoteke REZULTATI treba formirati tekstualnu datoteku REKORDI.txt u koju će biti upisani podaci o onim sportasima koji imaju najbolji rezultat u pojedinim disciplinama. Program treba da sadrži i dio za formiranje binarne datoteke REZULTATI.

Moze li mi neko pomoci odraditi zadatak, jer neznam bas najbolje rad sa vise datoteke jos razlicitih.....Hvala unaprijed


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 23:27 čet, 10. 9. 2009    Naslov: Citirajte i odgovorite

Ako imas konkretno pitanje, pitaj... no sumnjam da ce ti netko rijesiti tvoj zadatak. :)
Ako imas konkretno pitanje, pitaj... no sumnjam da ce ti netko rijesiti tvoj zadatak. Smile



_________________
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.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
pajopatak
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 10. 2009. (22:20:04)
Postovi: (BE)16
Sarma = la pohva - posuda
= 3 - 0

PostPostano: 20:06 pet, 28. 5. 2010    Naslov: Citirajte i odgovorite

Evo par pitanja,vezana uz datoteke..
1. Kada otvorimo recimo datoteku za čitanje,dali smijemo u njoj recimo transponirati matricu,a unda ju u drugu datoteku za pisanje samo upisati takvu?
2. Zašto moramo alocirati memoriju kada recimo gledamo,jeli matrica simetrična,a kada se traži trag matrice ne moramo?
3. Dali je greška,ako se na kraju programa recimo ako imamo i matricu za ćitanje i pisanje, zatvore obje?
Evo par pitanja,vezana uz datoteke..
1. Kada otvorimo recimo datoteku za čitanje,dali smijemo u njoj recimo transponirati matricu,a unda ju u drugu datoteku za pisanje samo upisati takvu?
2. Zašto moramo alocirati memoriju kada recimo gledamo,jeli matrica simetrična,a kada se traži trag matrice ne moramo?
3. Dali je greška,ako se na kraju programa recimo ako imamo i matricu za ćitanje i pisanje, zatvore obje?


[Vrh]
Korisnički profil Pošaljite privatnu poruku
ante003
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 13. 10. 2008. (17:45:10)
Postovi: (3C5)16
Spol: muško
Sarma = la pohva - posuda
24 = 71 - 47

PostPostano: 20:22 pet, 28. 5. 2010    Naslov: Citirajte i odgovorite

[quote="pajopatak"]Evo par pitanja,vezana uz datoteke..
1. Kada otvorimo recimo datoteku za čitanje,dali smijemo u njoj recimo transponirati matricu,a unda ju u drugu datoteku za pisanje samo upisati takvu?
2. Zašto moramo alocirati memoriju kada recimo gledamo,jeli matrica simetrična,a kada se traži trag matrice ne moramo?
3. Dali je greška,ako se na kraju programa recimo ako imamo i matricu za ćitanje i pisanje, zatvore obje?[/quote]
odgovori :
1. ne. moras ju prvo snimit u memoriju racunala i tamo transponirat te ju takvu ispisat u file

2. jer nemozes baratati s citanjem elemenata kako bi trebao. nemozes mu reci : procitaj broj na mjestu 3,4 i sl. jer citanje ide po redu i kada mu zadas rewind vrati te na pocetak datoteke pa onda moras matricu prvo snimit u memoriju i tamo s njom radit dok su ti kod traga matrice bitni samo elementi na dijagonali i onda mu samo velis da napravi kaj god treba
3. naravno da da. ako si kod Sege na vjezbama bi cuo da nije bas pametno to radit jer neki manje "kvalitetni" OS-evi mogu napravit "cudo" od toga :)
kao sto si morao osloboditi alociranu memoriju prije koju si zauzeo zbog nekog niza, matrice, cega vec tako sad moras zatvoriti sve sto si otvorio i nema to veze jel pises, citas ili bilo kaj radis :)

Nadam se da sam ti odgovorio na pitanja :) Ako sam nesto fulao vici :)
pajopatak (napisa):
Evo par pitanja,vezana uz datoteke..
1. Kada otvorimo recimo datoteku za čitanje,dali smijemo u njoj recimo transponirati matricu,a unda ju u drugu datoteku za pisanje samo upisati takvu?
2. Zašto moramo alocirati memoriju kada recimo gledamo,jeli matrica simetrična,a kada se traži trag matrice ne moramo?
3. Dali je greška,ako se na kraju programa recimo ako imamo i matricu za ćitanje i pisanje, zatvore obje?

odgovori :
1. ne. moras ju prvo snimit u memoriju racunala i tamo transponirat te ju takvu ispisat u file

2. jer nemozes baratati s citanjem elemenata kako bi trebao. nemozes mu reci : procitaj broj na mjestu 3,4 i sl. jer citanje ide po redu i kada mu zadas rewind vrati te na pocetak datoteke pa onda moras matricu prvo snimit u memoriju i tamo s njom radit dok su ti kod traga matrice bitni samo elementi na dijagonali i onda mu samo velis da napravi kaj god treba
3. naravno da da. ako si kod Sege na vjezbama bi cuo da nije bas pametno to radit jer neki manje "kvalitetni" OS-evi mogu napravit "cudo" od toga Smile
kao sto si morao osloboditi alociranu memoriju prije koju si zauzeo zbog nekog niza, matrice, cega vec tako sad moras zatvoriti sve sto si otvorio i nema to veze jel pises, citas ili bilo kaj radis Smile

Nadam se da sam ti odgovorio na pitanja Smile Ako sam nesto fulao vici Smile



_________________
Ako ste previše otvorenog uma, ispast će vam mozak
------------------------------------------------------
Racunalo bez Windowsa je kao riba bez bicikla
[Vrh]
Korisnički profil Pošaljite privatnu poruku
pajopatak
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 10. 2009. (22:20:04)
Postovi: (BE)16
Sarma = la pohva - posuda
= 3 - 0

PostPostano: 20:27 pet, 28. 5. 2010    Naslov: Citirajte i odgovorite

Jesi,hvala :wink:
Jesi,hvala Wink


[Vrh]
Korisnički profil Pošaljite privatnu poruku
pajopatak
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 10. 2009. (22:20:04)
Postovi: (BE)16
Sarma = la pohva - posuda
= 3 - 0

PostPostano: 11:09 ned, 30. 5. 2010    Naslov: Citirajte i odgovorite

Još imam par pitanjaca:
1. Dali kada čitam datoteku onda recimo imam napisano u datoteci:

bl bla ,%/( /)) ovcs paij
uj989 e9diw96

Dali sada kada sam ju učitala u program dali kada želim ići pretraživati s[0]=b, s[1]=l, s[3]=b itd. jeli to tako funkcionira?

2.Sada kada ju želim prepisati mou neku drugu datoteku mogu li recimo imati neku for petlju i u njoj raditi neke izmjene na učitanim podatcima i onda u toj for petlji upisivati te podatke znak po znak u drugu npr:

for(i=0....){
....
char c=s[i];
fcanf(nešto.out,"%c",&c)
}

Hvala
Još imam par pitanjaca:
1. Dali kada čitam datoteku onda recimo imam napisano u datoteci:

bl bla ,%/( /)) ovcs paij
uj989 e9diw96

Dali sada kada sam ju učitala u program dali kada želim ići pretraživati s[0]=b, s[1]=l, s[3]=b itd. jeli to tako funkcionira?

2.Sada kada ju želim prepisati mou neku drugu datoteku mogu li recimo imati neku for petlju i u njoj raditi neke izmjene na učitanim podatcima i onda u toj for petlji upisivati te podatke znak po znak u drugu npr:

for(i=0....){
....
char c=s[i];
fcanf(nešto.out,"%c",&c)
}

Hvala


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Luuka
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 13. 02. 2007. (20:34:54)
Postovi: (925)16
Spol: muško
Sarma = la pohva - posuda
188 = 301 - 113
Lokacija: Hakuna Matata

PostPostano: 11:42 ned, 30. 5. 2010    Naslov: Citirajte i odgovorite

Kako sam na onom topicu napiso, nemoj ništa sejvat sa %s ili %[^\n], jer ne znaš koliko memorije zauzet za taj string. Učitavaj znak po znak i sa njima radi šta treba.

Ako recimo trebaš tražit string "bla" u ulaznoj datoteci, i zamijenit ga sa AAAA onda radiš recimo (pišem bez complilera, samo ideja):

[code:1]
fscanf(ulaz,"%c",&prvi);
fscanf(ulaz,"%c",&drugi);


while ( fscanf(ulaz,"%c",&treci) )
{
if (prvi=='b' && drugi=='l' && treci=='a' )
{
fprintf(izlaz,"AAAA");
//i sad tu ucitat novi prvi, drugi, treci, jer smo bla preskocili
}
else
fprintf(izlaz,"%c", prvi);

prvi=drugi; drugi=treci;
}
[/code:1]

to je moja ideja, samo se mora pazit da se ne dođe do kraja datoteke pa da kod preskoka znakova nema kaj učitat. Ili taj dio drugačije riješit.
Kako sam na onom topicu napiso, nemoj ništa sejvat sa %s ili %[^\n], jer ne znaš koliko memorije zauzet za taj string. Učitavaj znak po znak i sa njima radi šta treba.

Ako recimo trebaš tražit string "bla" u ulaznoj datoteci, i zamijenit ga sa AAAA onda radiš recimo (pišem bez complilera, samo ideja):

Kod:

fscanf(ulaz,"%c",&prvi);
fscanf(ulaz,"%c",&drugi);


while ( fscanf(ulaz,"%c",&treci) )
{
     if (prvi=='b' && drugi=='l' && treci=='a' )
     {
         fprintf(izlaz,"AAAA");
         //i sad tu ucitat novi prvi, drugi, treci, jer smo bla preskocili
     }
    else
      fprintf(izlaz,"%c", prvi);

    prvi=drugi; drugi=treci;
}


to je moja ideja, samo se mora pazit da se ne dođe do kraja datoteke pa da kod preskoka znakova nema kaj učitat. Ili taj dio drugačije riješit.



_________________
"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 Very Happy
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
some_dude
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 08. 11. 2009. (16:23:13)
Postovi: (59)16
Spol: muško
Sarma = la pohva - posuda
17 = 17 - 0
Lokacija: Zd-Zg

PostPostano: 12:07 ned, 30. 5. 2010    Naslov: Citirajte i odgovorite

[quote="pajopatak"]Još imam par pitanjaca:
1. Dali kada čitam datoteku onda recimo imam napisano u datoteci:

bl bla ,%/( /)) ovcs paij
uj989 e9diw96

Dali sada kada sam ju učitala u program dali kada želim ići pretraživati s[0]=b, s[1]=l, s[3]=b itd. jeli to tako funkcionira?

2.Sada kada ju želim prepisati mou neku drugu datoteku mogu li recimo imati neku for petlju i u njoj raditi neke izmjene na učitanim podatcima i onda u toj for petlji upisivati te podatke znak po znak u drugu npr:

for(i=0....){
....
char c=s[i];
fcanf(nešto.out,"%c",&c)
}

Hvala[/quote]

Pa zašto ne ići znak po znak while petljom dok ne dođeš do kraja file-a, ići znak po znak i onda ako nađeš b, pogledaš koji je iduci ako je l, pogledaš još onaj treći, i ako je on a tada staviš taj string koji već treba. Moraš paziti i na slučajeve ako nađeš bl, ali nema a iza njih, pa moraš ispisati bl i taj koji već slijedi. I također na slučaj tipa bbbbla. Ovako to kod mene izgleda:
[size=7]#include <stdio.h>
int main(){

FILE* in=NULL;
FILE* out=NULL;
int c;

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

c = fgetc(in);
while(c != EOF){
if(c == 'q') {
c = fgetc(in);
if(c == 'y') {
c = fgetc(in);

if (c == 'v') {
fputs("tfkbsa", out);
}
else if (c != EOF) {
fputc('q', out);
fputc('y', out);
continue;
}
}
else if(c != EOF) {
fputc('q', out);
continue;
}
}
else {
fputc(c, out);
}
c = fgetc(in);
}

fclose(in);
fclose(out);

return 0;

}[/size]
pajopatak (napisa):
Još imam par pitanjaca:
1. Dali kada čitam datoteku onda recimo imam napisano u datoteci:

bl bla ,%/( /)) ovcs paij
uj989 e9diw96

Dali sada kada sam ju učitala u program dali kada želim ići pretraživati s[0]=b, s[1]=l, s[3]=b itd. jeli to tako funkcionira?

2.Sada kada ju želim prepisati mou neku drugu datoteku mogu li recimo imati neku for petlju i u njoj raditi neke izmjene na učitanim podatcima i onda u toj for petlji upisivati te podatke znak po znak u drugu npr:

for(i=0....){
....
char c=s[i];
fcanf(nešto.out,"%c",&c)
}

Hvala


Pa zašto ne ići znak po znak while petljom dok ne dođeš do kraja file-a, ići znak po znak i onda ako nađeš b, pogledaš koji je iduci ako je l, pogledaš još onaj treći, i ako je on a tada staviš taj string koji već treba. Moraš paziti i na slučajeve ako nađeš bl, ali nema a iza njih, pa moraš ispisati bl i taj koji već slijedi. I također na slučaj tipa bbbbla. Ovako to kod mene izgleda:
#include <stdio.h>
int main(){

FILE* in=NULL;
FILE* out=NULL;
int c;

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

c = fgetc(in);
while(c != EOF){
if(c == 'q') {
c = fgetc(in);
if(c == 'y') {
c = fgetc(in);

if (c == 'v') {
fputs("tfkbsa", out);
}
else if (c != EOF) {
fputc('q', out);
fputc('y', out);
continue;
}
}
else if(c != EOF) {
fputc('q', out);
continue;
}
}
else {
fputc(c, out);
}
c = fgetc(in);
}

fclose(in);
fclose(out);

return 0;

}


[Vrh]
Korisnički profil Pošaljite privatnu poruku
pajopatak
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 10. 2009. (22:20:04)
Postovi: (BE)16
Sarma = la pohva - posuda
= 3 - 0

PostPostano: 12:42 ned, 30. 5. 2010    Naslov: Citirajte i odgovorite

Ok,sad kužim ja mislim, znači on zapravo učitava znak po znak iz ulauzne datoteke i provjerava i onda ako su sva 3 znaka tamo,on upiše čitav string taj koji već treba,i nastavlja dalje učitavati slovo poslovo,jel tako?
Hoće li mi onda upisati i razmak iz izlazne u ulaznu?
Ok,sad kužim ja mislim, znači on zapravo učitava znak po znak iz ulauzne datoteke i provjerava i onda ako su sva 3 znaka tamo,on upiše čitav string taj koji već treba,i nastavlja dalje učitavati slovo poslovo,jel tako?
Hoće li mi onda upisati i razmak iz izlazne u ulaznu?


[Vrh]
Korisnički profil Pošaljite privatnu poruku
some_dude
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 08. 11. 2009. (16:23:13)
Postovi: (59)16
Spol: muško
Sarma = la pohva - posuda
17 = 17 - 0
Lokacija: Zd-Zg

PostPostano: 13:17 ned, 30. 5. 2010    Naslov: Citirajte i odgovorite

[quote="pajopatak"]Ok,sad kužim ja mislim, znači on zapravo učitava znak po znak iz ulauzne datoteke i provjerava i onda ako su sva 3 znaka tamo,on upiše čitav string taj koji već treba,i nastavlja dalje učitavati slovo poslovo,jel tako?
Hoće li mi onda upisati i razmak iz izlazne u ulaznu?[/quote]

Naravno, prepisati će čitav tekst iz izlazne u ulaznu jednako osim što će kada naiđe na na taj string qyv zamijeniti sa onim tbrsk (ili čime već) u mom primjeru.
pajopatak (napisa):
Ok,sad kužim ja mislim, znači on zapravo učitava znak po znak iz ulauzne datoteke i provjerava i onda ako su sva 3 znaka tamo,on upiše čitav string taj koji već treba,i nastavlja dalje učitavati slovo poslovo,jel tako?
Hoće li mi onda upisati i razmak iz izlazne u ulaznu?


Naravno, prepisati će čitav tekst iz izlazne u ulaznu jednako osim što će kada naiđe na na taj string qyv zamijeniti sa onim tbrsk (ili čime već) u mom primjeru.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
.anchy.
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 14. 11. 2007. (20:03:46)
Postovi: (1BC)16
Sarma = la pohva - posuda
= 15 - 11
Lokacija: Zgb

PostPostano: 17:21 pon, 31. 5. 2010    Naslov: Citirajte i odgovorite

može netko napisati rješenje zadatka 8.13(Napisite funkciju koja kao argumente prima sljedece file-pointere: in koji pokazuje na datoteku otvorenu za citanje i out koji pokazuje na datoteku otvorenu za pisanje. Funkcija treba procitati datoteku in i njen sadrzaj prepisati u datoteku out na nacin da linije idu obrnutim redoslijedom.)

ili ako može objašnjenje kako da riješim?
uputa koja je u skripti:
Nemojte postavljati ogranicenja na duljine linija, ali mozete pretpostaviti da su sve rijeci u datoteci duge najvise 30 znakova i odvojene tocno jednim razmakom ili skokom u novi red.
Uputa. Linije citajte rijec po rijec (format %s), te ih spremajte u
string koji ce, po potrebi, “rasti” (pomocu realloc()). Takve stringove spremajte u vezanu listu, dodavanjem na pocetak liste. Na kraju je potrebno samo ispisati stringove u izlaznu datoteku i osloboditi alociranu memoriju (i onu za stringove i onu za cvorove liste).

Neznam kako da spremam u listu kada neznam koliko ce mi rečenica biti dugačka..mislila sam da lista treba biti rečenica,tj.oblika

[code:1]typedef struct _recenica{
char rijeci[?];
_recenica *next;
}recenica;[/code:1]

ali neznam što staviti umjesto ?

i još jedno pitanje,ako tako radim,kako da znam da sam na kraju rečenice?budući da učitavam riječi,a ne znakove?
može netko napisati rješenje zadatka 8.13(Napisite funkciju koja kao argumente prima sljedece file-pointere: in koji pokazuje na datoteku otvorenu za citanje i out koji pokazuje na datoteku otvorenu za pisanje. Funkcija treba procitati datoteku in i njen sadrzaj prepisati u datoteku out na nacin da linije idu obrnutim redoslijedom.)

ili ako može objašnjenje kako da riješim?
uputa koja je u skripti:
Nemojte postavljati ogranicenja na duljine linija, ali mozete pretpostaviti da su sve rijeci u datoteci duge najvise 30 znakova i odvojene tocno jednim razmakom ili skokom u novi red.
Uputa. Linije citajte rijec po rijec (format %s), te ih spremajte u
string koji ce, po potrebi, “rasti” (pomocu realloc()). Takve stringove spremajte u vezanu listu, dodavanjem na pocetak liste. Na kraju je potrebno samo ispisati stringove u izlaznu datoteku i osloboditi alociranu memoriju (i onu za stringove i onu za cvorove liste).

Neznam kako da spremam u listu kada neznam koliko ce mi rečenica biti dugačka..mislila sam da lista treba biti rečenica,tj.oblika

Kod:
typedef struct _recenica{
             char rijeci[?];
             _recenica *next;
}recenica;


ali neznam što staviti umjesto ?

i još jedno pitanje,ako tako radim,kako da znam da sam na kraju rečenice?budući da učitavam riječi,a ne znakove?


[Vrh]
Korisnički profil Pošaljite privatnu poruku
pbakic
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 05. 10. 2009. (17:48:30)
Postovi: (143)16
Spol: muško
Sarma = la pohva - posuda
83 = 86 - 3

PostPostano: 17:31 pon, 31. 5. 2010    Naslov: Citirajte i odgovorite

Pa cini se ok ovaj struct koji imas, ofc mozes stavit ogranicenje char rijeci[31] (jer tako kaze zadatak; jedan dodatni za \0)
Rijeci se iz filea citaju po uputi, al je pritom korisna sitnica da fscanf [b]vraca[/b] int koji iznosi 1 kad je uspjesno obavljeno ucitavanje, a 0 kad nije. Dakle radis sa while (fscanf(... ) ==1)
Pa cini se ok ovaj struct koji imas, ofc mozes stavit ogranicenje char rijeci[31] (jer tako kaze zadatak; jedan dodatni za \0)
Rijeci se iz filea citaju po uputi, al je pritom korisna sitnica da fscanf vraca int koji iznosi 1 kad je uspjesno obavljeno ucitavanje, a 0 kad nije. Dakle radis sa while (fscanf(... ) ==1)


[Vrh]
Korisnički profil Pošaljite privatnu poruku
.anchy.
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 14. 11. 2007. (20:03:46)
Postovi: (1BC)16
Sarma = la pohva - posuda
= 15 - 11
Lokacija: Zgb

PostPostano: 18:23 pon, 31. 5. 2010    Naslov: Citirajte i odgovorite

a nije li to način kada trebam poredak riječi izokrenuti,a ne linije?
pretpostavljam da linija sama po sebi treba ostati nepromjenjena.

mislila sam u strukturu spremati cijelu liniju,a to se nezna koliko je dugačko,pa me to buni..
a nije li to način kada trebam poredak riječi izokrenuti,a ne linije?
pretpostavljam da linija sama po sebi treba ostati nepromjenjena.

mislila sam u strukturu spremati cijelu liniju,a to se nezna koliko je dugačko,pa me to buni..


[Vrh]
Korisnički profil Pošaljite privatnu poruku
spot137
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 02. 11. 2009. (13:33:18)
Postovi: (55)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
-1 = 4 - 5

PostPostano: 18:32 pon, 31. 5. 2010    Naslov: Citirajte i odgovorite

Može li mi netko objasniti kada se točno u datotekama koristi naredba continue?
Može li mi netko objasniti kada se točno u datotekama koristi naredba continue?


[Vrh]
Korisnički profil Pošaljite privatnu poruku
pbakic
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 05. 10. 2009. (17:48:30)
Postovi: (143)16
Spol: muško
Sarma = la pohva - posuda
83 = 86 - 3

PostPostano: 23:14 pon, 31. 5. 2010    Naslov: Citirajte i odgovorite

[quote=".anchy."]a nije li to način kada trebam poredak riječi izokrenuti,a ne linije?
pretpostavljam da linija sama po sebi treba ostati nepromjenjena.

mislila sam u strukturu spremati cijelu liniju,a to se nezna koliko je dugačko,pa me to buni..[/quote]

Ma sori, krivo citam zadatak a i tvoj post, treba stvarno samo linije zamijenit...
Uglavnom, tu je onda uputa korisna: struct bi trebao izgledati kao
[code:1]typedef struct _recenica{
char* linija;
_recenica *next;
}recenica;[/code:1]

Sad recimo udjes u file ne sluteci nista, radis fscanf sa formatom %[^ \n]
i poslije svakog fscanfa jos recimo c=fgetc(file);
ako c nije znak za novi red ( '\n' ), onda samo realloc primijeni na ovaj string koji se zove linija (povecat za 30 je ok) i baci neki strcat
ako je c znak za novi red, znaci da moras dodavati novi element vezane liste (i to je to)
.anchy. (napisa):
a nije li to način kada trebam poredak riječi izokrenuti,a ne linije?
pretpostavljam da linija sama po sebi treba ostati nepromjenjena.

mislila sam u strukturu spremati cijelu liniju,a to se nezna koliko je dugačko,pa me to buni..


Ma sori, krivo citam zadatak a i tvoj post, treba stvarno samo linije zamijenit...
Uglavnom, tu je onda uputa korisna: struct bi trebao izgledati kao
Kod:
typedef struct _recenica{
             char* linija;
             _recenica *next;
}recenica;


Sad recimo udjes u file ne sluteci nista, radis fscanf sa formatom %[^ \n]
i poslije svakog fscanfa jos recimo c=fgetc(file);
ako c nije znak za novi red ( '\n' ), onda samo realloc primijeni na ovaj string koji se zove linija (povecat za 30 je ok) i baci neki strcat
ako je c znak za novi red, znaci da moras dodavati novi element vezane liste (i to je to)


[Vrh]
Korisnički profil Pošaljite privatnu poruku
some_dude
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 08. 11. 2009. (16:23:13)
Postovi: (59)16
Spol: muško
Sarma = la pohva - posuda
17 = 17 - 0
Lokacija: Zd-Zg

PostPostano: 23:34 pon, 31. 5. 2010    Naslov: Citirajte i odgovorite

[quote=".anchy."]može netko napisati rješenje zadatka 8.13(Napisite funkciju koja kao argumente prima sljedece file-pointere: in koji pokazuje na datoteku otvorenu za citanje i out koji pokazuje na datoteku otvorenu za pisanje. Funkcija treba procitati datoteku in i njen sadrzaj prepisati u datoteku out na nacin da linije idu obrnutim redoslijedom.)

ili ako može objašnjenje kako da riješim?
uputa koja je u skripti:
Nemojte postavljati ogranicenja na duljine linija, ali mozete pretpostaviti da su sve rijeci u datoteci duge najvise 30 znakova i odvojene tocno jednim razmakom ili skokom u novi red.
Uputa. Linije citajte rijec po rijec (format %s), te ih spremajte u
string koji ce, po potrebi, “rasti” (pomocu realloc()). Takve stringove spremajte u vezanu listu, dodavanjem na pocetak liste. Na kraju je potrebno samo ispisati stringove u izlaznu datoteku i osloboditi alociranu memoriju (i onu za stringove i onu za cvorove liste).

Neznam kako da spremam u listu kada neznam koliko ce mi rečenica biti dugačka..mislila sam da lista treba biti rečenica,tj.oblika

[code:1]typedef struct _recenica{
char rijeci[?];
_recenica *next;
}recenica;[/code:1]

ali neznam što staviti umjesto ?

i još jedno pitanje,ako tako radim,kako da znam da sam na kraju rečenice?budući da učitavam riječi,a ne znakove?[/quote]

Evo kako je to rješeno kod nas na vježbama:

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

typedef char *mojString;

void naopako( FILE *fin, FILE *fout ) {

mojString *polje = NULL;
int brojLinija = 0, i;
mojString s = NULL;
int duljina = 0;

s = (char *) malloc( 1 * sizeof( char ) );
s[ 0 ] = '\0';
while( 1 ) {

char znak;
if( fscanf( fin, "%c", &znak ) != 1 )
break;
if( znak != '\n' )
{
// zalijepi znak na kraj stringa s
++duljina;
s = (char *) realloc( s, (duljina+1) * sizeof( char ) );
s[ duljina-1 ] = znak;
s[ duljina ] = '\0';
}
else
{
++brojLinija;
polje = (mojString *) realloc( polje, brojLinija * sizeof( mojString ) );
polje[ brojLinija-1 ] = s;

s = (char *) malloc( 1 * sizeof( char ) );

s[ 0 ] = '\0';

duljina = 0;
}
}
for( i = brojLinija-1; i >= 0; --i )

fprintf( fout, "%s\n", polje[ i ] );
for( i = 0; i < brojLinija; ++i )
free( polje[ i ] );
free( polje );
}

int main( void ) {
FILE *fin, *fout;

if( ( fin = fopen( "8.13.in", "rt" ) ) == NULL ) {
printf( "Ne mogu otvoriti 8.13.in za citanje.\n" );
exit( 0 );
}



if( ( fout = fopen( "8.13.out", "wt" ) ) == NULL ) {
printf( "Ne mogu otvoriti 8.13.out za pisanje.\n" );
exit( 0 );
}
naopako( fin, fout );
fclose( fin ); fclose( fout );

return 0;

} [/code:1]
.anchy. (napisa):
može netko napisati rješenje zadatka 8.13(Napisite funkciju koja kao argumente prima sljedece file-pointere: in koji pokazuje na datoteku otvorenu za citanje i out koji pokazuje na datoteku otvorenu za pisanje. Funkcija treba procitati datoteku in i njen sadrzaj prepisati u datoteku out na nacin da linije idu obrnutim redoslijedom.)

ili ako može objašnjenje kako da riješim?
uputa koja je u skripti:
Nemojte postavljati ogranicenja na duljine linija, ali mozete pretpostaviti da su sve rijeci u datoteci duge najvise 30 znakova i odvojene tocno jednim razmakom ili skokom u novi red.
Uputa. Linije citajte rijec po rijec (format %s), te ih spremajte u
string koji ce, po potrebi, “rasti” (pomocu realloc()). Takve stringove spremajte u vezanu listu, dodavanjem na pocetak liste. Na kraju je potrebno samo ispisati stringove u izlaznu datoteku i osloboditi alociranu memoriju (i onu za stringove i onu za cvorove liste).

Neznam kako da spremam u listu kada neznam koliko ce mi rečenica biti dugačka..mislila sam da lista treba biti rečenica,tj.oblika

Kod:
typedef struct _recenica{
             char rijeci[?];
             _recenica *next;
}recenica;


ali neznam što staviti umjesto ?

i još jedno pitanje,ako tako radim,kako da znam da sam na kraju rečenice?budući da učitavam riječi,a ne znakove?


Evo kako je to rješeno kod nas na vježbama:

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

typedef char *mojString;

void naopako( FILE *fin, FILE *fout ) {

        mojString *polje = NULL;
   int brojLinija = 0, i;
   mojString s = NULL;
   int duljina = 0;

   s = (char *) malloc( 1 * sizeof( char ) );
   s[ 0 ] = '\0';
   while( 1 ) {

      char znak;
      if( fscanf( fin, "%c", &znak ) != 1 )
         break;
      if( znak != '\n' )
      {
         // zalijepi znak na kraj stringa s
         ++duljina;
         s = (char *) realloc( s, (duljina+1) * sizeof( char ) );
         s[ duljina-1 ] = znak;
         s[ duljina ] = '\0';
      }   
      else
      {
         ++brojLinija;
         polje = (mojString *) realloc( polje, brojLinija * sizeof( mojString ) );
         polje[ brojLinija-1 ] = s;

         s = (char *) malloc( 1 * sizeof( char ) );

         s[ 0 ] = '\0';

         duljina = 0;
      }
   }
   for( i = brojLinija-1; i >= 0; --i )

      fprintf( fout, "%s\n", polje[ i ] );   
   for( i = 0; i < brojLinija; ++i )
      free( polje[ i ] );
   free( polje );
}

int main( void ) {
   FILE *fin, *fout;

   if( ( fin = fopen( "8.13.in", "rt" ) ) == NULL ) {
      printf( "Ne mogu otvoriti 8.13.in za citanje.\n" );
      exit( 0 );
   }



   if( ( fout = fopen( "8.13.out", "wt" ) ) == NULL ) {
      printf( "Ne mogu otvoriti 8.13.out za pisanje.\n" );
      exit( 0 );
   }
   naopako( fin, fout );
   fclose( fin ); fclose( fout );
   
        return 0;   

}




Zadnja promjena: some_dude; 23:38 pon, 31. 5. 2010; ukupno mijenjano 4 put/a.
[Vrh]
Korisnički profil Pošaljite privatnu poruku
ante003
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 13. 10. 2008. (17:45:10)
Postovi: (3C5)16
Spol: muško
Sarma = la pohva - posuda
24 = 71 - 47

PostPostano: 23:36 pon, 31. 5. 2010    Naslov: Citirajte i odgovorite

daj stavi to u [ code ][ /code ] blokove.
daj stavi to u [ code ][ /code ] blokove.



_________________
Ako ste previše otvorenog uma, ispast će vam mozak
------------------------------------------------------
Racunalo bez Windowsa je kao riba bez bicikla
[Vrh]
Korisnički profil Pošaljite privatnu poruku
.anchy.
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 14. 11. 2007. (20:03:46)
Postovi: (1BC)16
Sarma = la pohva - posuda
= 15 - 11
Lokacija: Zgb

PostPostano: 7:13 uto, 1. 6. 2010    Naslov: Citirajte i odgovorite

hvala!!
jedno pitanje, što mi radi taj c=fgetc(file)?
vidjela sam ga već,al neznam čemu služi...

i kada radim sa fscanf %[^\n], u kaj ga spremam,kada neznam kolko je dugačko?
i za koliko onda realociram liniju?

i neće li fscanf %[^\n] sam pročitati sve do skoka u novi red?

uf,kolko pitanja... :D
hvala!!
jedno pitanje, što mi radi taj c=fgetc(file)?
vidjela sam ga već,al neznam čemu služi...

i kada radim sa fscanf %[^\n], u kaj ga spremam,kada neznam kolko je dugačko?
i za koliko onda realociram liniju?

i neće li fscanf %[^\n] sam pročitati sve do skoka u novi red?

uf,kolko pitanja... Very Happy


[Vrh]
Korisnički profil Pošaljite privatnu poruku
pajopatak
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 10. 2009. (22:20:04)
Postovi: (BE)16
Sarma = la pohva - posuda
= 3 - 0

PostPostano: 9:12 uto, 1. 6. 2010    Naslov: Citirajte i odgovorite

Dali bi ovo bilo dobro rješenje 2.zadatka prošlogodišnjeg kolokvija?

[code:1]char*noviFile(char*ime) {
char*novi;
int i;

for(i=0;ime[i]!='.';i++);
ime[i]='\0';

novi=(char*)sizeof((strlen(ime)+5)*(char));
novi[0]='\0';
strcpy(novi,ime);
strcat(novi,".out");
return novi;
}

void Sara(char*ime){

char dokaz[30];
int *brojac;
int i;

in=fopen("ime","r");
if(in==NULL){
printf("Greska");
exit(1);
}

out=fopen("noviFile(ime","w");
if(out==NULL){
printf("Greska");
exit(1);
}

brojac=(int*)malloc(5*sizeof(int));

while( fscanf(in,"%[^\n] % %d",dokaz,& vaznost)>=3) {

for(i=1;i<=5;i++)
fprintf(out,"%d : %d",i,brojac[i]);

free(brojac);
fclose(in); fclose(out);

}

int main(int argc,char*ime) {

if(argc[1]==NULL) printf("Ne postoji");

in=fopen("ime","r");
if(in==NULL) {
printf("Greska");
exit(1);
}

printf("Unesite ime datoteke:");
scanf("%[^\n],ime);
Sara(ime);

fclose(in);
return 0;
}[/code:1]
[/quote][/code]
Dali bi ovo bilo dobro rješenje 2.zadatka prošlogodišnjeg kolokvija?

Kod:
char*noviFile(char*ime) {
char*novi;
int i;

for(i=0;ime[i]!='.';i++);
ime[i]='\0';

novi=(char*)sizeof((strlen(ime)+5)*(char));
novi[0]='\0';
strcpy(novi,ime);
strcat(novi,".out");
return novi;
}

void Sara(char*ime){

char dokaz[30];
int *brojac;
int i;

in=fopen("ime","r");
if(in==NULL){
printf("Greska");
exit(1);
}

out=fopen("noviFile(ime","w");
if(out==NULL){
printf("Greska");
exit(1);
}

brojac=(int*)malloc(5*sizeof(int));

while( fscanf(in,"%[^\n] % %d",dokaz,& vaznost)>=3) {

for(i=1;i<=5;i++)
fprintf(out,"%d : %d",i,brojac[i]);

free(brojac);
fclose(in); fclose(out);

}

int main(int argc,char*ime) {

if(argc[1]==NULL) printf("Ne postoji");

in=fopen("ime","r");
if(in==NULL) {
printf("Greska");
exit(1);
}

printf("Unesite ime datoteke:");
scanf("%[^\n],ime);
Sara(ime);

fclose(in);
return 0;
}

[/quote][/code]


[Vrh]
Korisnički profil Pošaljite privatnu poruku
.anchy.
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 14. 11. 2007. (20:03:46)
Postovi: (1BC)16
Sarma = la pohva - posuda
= 15 - 11
Lokacija: Zgb

PostPostano: 12:34 uto, 1. 6. 2010    Naslov: Citirajte i odgovorite

zašto mi se program ruši? :(
[code:1]#include <stdio.h>
#include <stdlib.h>

typedef struct _recenica{
char* linija;
_recenica *next;
}recenica;

int main(){
FILE *in,*out;
int i=0;
in=fopen("zad8.13in.txt", "r");
out=fopen("zad8.13out.txt", "w");
char x, *lin;
recenica *first=NULL,*pom2, *zadnji,*pom;
while(fscanf(in, "%c", &x)==1){
lin=NULL;
while(x!='\n' && fscanf(in, "%c", &x)==1 ){
lin=(char*)realloc(lin, sizeof(char));
lin[i++]=x;
}
recenica *novi;
novi=(recenica*)malloc(sizeof(recenica));
novi->linija=lin;
if(!first) first=zadnji=novi;
else{
zadnji->next=novi;
zadnji=novi;
}
}
for(pom=first;pom;pom=pom->next)
fprintf(out, "%s\n", pom->linija);
for(pom=first;pom;pom=pom2){
pom2=pom->next;
free(pom->linija);
free(pom);
}
return 0;
}

[/code:1]
i bi li to bilo dobro rješenje?
zašto mi se program ruši? Sad
Kod:
#include <stdio.h>
#include <stdlib.h>

typedef struct _recenica{
             char* linija;
             _recenica *next;
}recenica;

int main(){
    FILE *in,*out;
    int i=0;
    in=fopen("zad8.13in.txt", "r");
    out=fopen("zad8.13out.txt", "w");
    char x, *lin;
    recenica *first=NULL,*pom2, *zadnji,*pom;
    while(fscanf(in, "%c", &x)==1){
                     lin=NULL;
                     while(x!='\n' && fscanf(in, "%c", &x)==1 ){
                                 lin=(char*)realloc(lin, sizeof(char));
                                 lin[i++]=x;
                     }
                     recenica *novi;
                     novi=(recenica*)malloc(sizeof(recenica));
                     novi->linija=lin;
                     if(!first) first=zadnji=novi;
                     else{
                          zadnji->next=novi;
                          zadnji=novi;
                     }
    }           
    for(pom=first;pom;pom=pom->next)
      fprintf(out, "%s\n", pom->linija);
    for(pom=first;pom;pom=pom2){
          pom2=pom->next;
          free(pom->linija);
          free(pom);
    }
    return 0;
}


i bi li to bilo dobro rješenje?


[Vrh]
Korisnički profil Pošaljite privatnu poruku
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.
Idite na 1, 2  Sljedeće
Stranica 1 / 2.

 
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