Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
jema Forumaš(ica)
Pridružen/a: 29. 09. 2011. (15:56:35) Postovi: (52)16
|
Postano: 9:00 pon, 14. 5. 2012 Naslov: |
|
|
ja opet imam problema sa citanjem zadataka iz zadace...znaci meni pise ovako zadaca Za $n \in \mathbb{N}_0$ definiramo $C_n$ na sljedeći način$$C_n = \begin{cases}6,&n=0,\\ \frac{5 n + 6}{2 n + 2}C_{n-1},&n>0.\end{cases}$$Napišite program koji učitava prirodni broj $n$ i, koristeći format %g, ispisuje vrijednost $C_n$.
pa ako mi opet neko moze napisat kako da ovo 'normalno' procitam? ne mislim da mi neko prevede ovo, vec da mi kaze sta da uradim da bude normalan tekst... XD hvala!!
ja opet imam problema sa citanjem zadataka iz zadace...znaci meni pise ovako zadaca: Za $n \in \mathbb{N}_0$ definiramo $C_n$ na sljedeći način:$$C_n = \begin{cases}6,&n=0,\\ \frac{5 n + 6}{2 n + 2}C_{n-1},&n>0.\end{cases}$$Napišite program koji učitava prirodni broj $n$ i, koristeći format %g, ispisuje vrijednost $C_n$.
pa ako mi opet neko moze napisat kako da ovo 'normalno' procitam? ne mislim da mi neko prevede ovo, vec da mi kaze sta da uradim da bude normalan tekst... XD hvala!!
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 10:08 pon, 14. 5. 2012 Naslov: |
|
|
Na to pitanje sam ti vec odgovorio [url=http://degiorgi.math.hr/forum/viewtopic.php?p=169108#169108]ovdje[/url]. Nista se od tada nije promijenilo. Ako ne vidis formule na webu od zadaca i Forumu, treba ti netko da ti sredi browser(e) ili te stvari moras citati u praktikumima. Ovako napamet nitko nece znati sto kod tebe doma ne valja da ti se ne izvrsava vrlo standardni komad softwarea.
Napominjem, rijec je o webu aplikacije za zadace. Ono sto dobijes mailom, ponekad je bas u toj formi koju opisujes i malo je teze pregledno zapisati u plain-textu.
Na to pitanje sam ti vec odgovorio ovdje. Nista se od tada nije promijenilo. Ako ne vidis formule na webu od zadaca i Forumu, treba ti netko da ti sredi browser(e) ili te stvari moras citati u praktikumima. Ovako napamet nitko nece znati sto kod tebe doma ne valja da ti se ne izvrsava vrlo standardni komad softwarea.
Napominjem, rijec je o webu aplikacije za zadace. Ono sto dobijes mailom, ponekad je bas u toj formi koju opisujes i malo je teze pregledno zapisati u plain-textu.
_________________ 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] |
|
Lux86 Forumaš(ica)
Pridružen/a: 11. 09. 2011. (23:38:43) Postovi: (1D)16
Spol:
|
Postano: 12:26 ned, 20. 5. 2012 Naslov: |
|
|
isprobala sam program i čini se da radi, ali očito se varam :roll:
Napišite program koji čita datoteku "lgsvn.in", te ju prepisuje u datoteku "lgsvn.out" tako da u prepisivanju sva pojavljivanja stringa "dhe" zamijeni stringom "eifge".
[code:1]#include <stdio.h>
#include <stdlib.h>
int main(void) {
FILE *in, *out;
char c1, c2, c3;
int t;
if((in = fopen("lgsvn.in", "r")) == NULL)
{
exit(1);
}
if((out = fopen("lgsvn.out", "w")) == NULL)
{
exit(2);
}
while((t=fscanf(in, "%c%c%c", &c1, &c2, &c3)) == 3) {
if(c1=='d' && c2=='h' && c3=='e') {
fprintf(out, "%s", "eifge");
}
else fprintf(out, "%c%c%c", c1, c2, c3);
}
if(t==2) fprintf(out, "%c%c", c1, c2);
if(t==1) fprintf(out, "%c", c1);
fclose(in); fclose(out);
return 0;
}
[/code:1]
je li while((t=fscanf(in, "%c%c%c", &c1, &c2, &c3)) == 3) "legalan" način za provjeru jesu li učitana 3 znaka?
isprobala sam program i čini se da radi, ali očito se varam
Napišite program koji čita datoteku "lgsvn.in", te ju prepisuje u datoteku "lgsvn.out" tako da u prepisivanju sva pojavljivanja stringa "dhe" zamijeni stringom "eifge".
Kod: | #include <stdio.h>
#include <stdlib.h>
int main(void) {
FILE *in, *out;
char c1, c2, c3;
int t;
if((in = fopen("lgsvn.in", "r")) == NULL)
{
exit(1);
}
if((out = fopen("lgsvn.out", "w")) == NULL)
{
exit(2);
}
while((t=fscanf(in, "%c%c%c", &c1, &c2, &c3)) == 3) {
if(c1=='d' && c2=='h' && c3=='e') {
fprintf(out, "%s", "eifge");
}
else fprintf(out, "%c%c%c", c1, c2, c3);
}
if(t==2) fprintf(out, "%c%c", c1, c2);
if(t==1) fprintf(out, "%c", c1);
fclose(in); fclose(out);
return 0;
}
|
je li while((t=fscanf(in, "%c%c%c", &c1, &c2, &c3)) == 3) "legalan" način za provjeru jesu li učitana 3 znaka?
|
|
[Vrh] |
|
Gino Forumaš(ica)
Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16
Lokacija: Pula
|
|
[Vrh] |
|
Lux86 Forumaš(ica)
Pridružen/a: 11. 09. 2011. (23:38:43) Postovi: (1D)16
Spol:
|
Postano: 13:11 ned, 20. 5. 2012 Naslov: |
|
|
[quote="Gino"]rekao bih da je, ali sto se desava ako ti je u datoteci zapisano "*dhe" :?:
ucitas tri znaka, nisu jednaka 'd', 'h', 'e' pa ih prepises i onda ucitas zadnjeg i tako nikad ne zamijenis "dhe" sa cim vec treba u konkretnom primjeru[/quote]
istina, to mi je promaknulo! a i činilo mi se da je kod nekako prejednostavan.
hvala :)
Gino (napisa): | rekao bih da je, ali sto se desava ako ti je u datoteci zapisano "*dhe"
ucitas tri znaka, nisu jednaka 'd', 'h', 'e' pa ih prepises i onda ucitas zadnjeg i tako nikad ne zamijenis "dhe" sa cim vec treba u konkretnom primjeru |
istina, to mi je promaknulo! a i činilo mi se da je kod nekako prejednostavan.
hvala
|
|
[Vrh] |
|
Lux86 Forumaš(ica)
Pridružen/a: 11. 09. 2011. (23:38:43) Postovi: (1D)16
Spol:
|
Postano: 15:43 ned, 20. 5. 2012 Naslov: |
|
|
još jedan koji "radi"
Zadana je datoteka "byytwyp.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 "byytwyp.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.
[code:1]#include <stdio.h>
#include <stdlib.h>
typedef struct _datum{
int koliko, d, m, g;
} datum;
int isti(datum d1, datum d2) {
if(d1.d == d2.d && d1.m == d2.m && d1.g == d2.g) return 1;
return 0;
}
int main(void)
{
FILE *in, *out;
datum *datumi;
int n, i, j;
if((in = fopen("byytwyp.in", "r")) == NULL) exit(1);
if((out = fopen("byytwyp.out", "w")) == NULL) exit(2);
fscanf(in, "%d", &n);
datumi = (datum*)malloc(n*sizeof(datum));
for(i=0; i<n; i++){
fscanf(in, " %d.%d.%d.", &datumi[i].d, &datumi[i].m, &datumi[i].g);
datumi[i].koliko = 1;
}
fclose(in);
for(i=0; i<n; i++)
for(j=i+1; j<n; j++)
{
if(datumi[i].g > datumi[j].g ||
(datumi[i].g == datumi[j].g && datumi[i].m > datumi[j].m) ||
(datumi[i].g == datumi[j].g && datumi[i].m == datumi[j].m && datumi[i].d > datumi[j].d)) {
datum tmp = datumi[i];
datumi[i] = datumi[j];
datumi[j] = tmp;
}
if(isti(datumi[i], datumi[j])) ++(datumi[i].koliko);
}
for(i=0; i<n; i++)
{
if(i==0 || !isti(datumi[i], datumi[i-1]))
fprintf(out, "%d:%d.%d.%d.\n", datumi[i].koliko, datumi[i].d, datumi[i].m, datumi[i].g);
}
fclose(out);
free(datumi);
return 0;
}[/code:1][/table]
još jedan koji "radi"
Zadana je datoteka "byytwyp.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 "byytwyp.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.
Kod: | #include <stdio.h>
#include <stdlib.h>
typedef struct _datum{
int koliko, d, m, g;
} datum;
int isti(datum d1, datum d2) {
if(d1.d == d2.d && d1.m == d2.m && d1.g == d2.g) return 1;
return 0;
}
int main(void)
{
FILE *in, *out;
datum *datumi;
int n, i, j;
if((in = fopen("byytwyp.in", "r")) == NULL) exit(1);
if((out = fopen("byytwyp.out", "w")) == NULL) exit(2);
fscanf(in, "%d", &n);
datumi = (datum*)malloc(n*sizeof(datum));
for(i=0; i<n; i++){
fscanf(in, " %d.%d.%d.", &datumi[i].d, &datumi[i].m, &datumi[i].g);
datumi[i].koliko = 1;
}
fclose(in);
for(i=0; i<n; i++)
for(j=i+1; j<n; j++)
{
if(datumi[i].g > datumi[j].g ||
(datumi[i].g == datumi[j].g && datumi[i].m > datumi[j].m) ||
(datumi[i].g == datumi[j].g && datumi[i].m == datumi[j].m && datumi[i].d > datumi[j].d)) {
datum tmp = datumi[i];
datumi[i] = datumi[j];
datumi[j] = tmp;
}
if(isti(datumi[i], datumi[j])) ++(datumi[i].koliko);
}
for(i=0; i<n; i++)
{
if(i==0 || !isti(datumi[i], datumi[i-1]))
fprintf(out, "%d:%d.%d.%d.\n", datumi[i].koliko, datumi[i].d, datumi[i].m, datumi[i].g);
}
fclose(out);
free(datumi);
return 0;
} | [/table]
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 20:01 ned, 20. 5. 2012 Naslov: |
|
|
Zbog jednostavnosti, recimo da imas brojeve, a ne datume (ista stvar):
[table]broj koliko [tt]i[/tt],[tt]j[/tt]
2 1
2 1
0 1
2 1
1 1[/table]
Nakon prvog koraka petlje (ali prije nego udjes u tijelo petlje), imas ovo:
[table]broj koliko [tt]i[/tt],[tt]j[/tt]
2 2 [tt]i = 0[/tt]
2 1
0 1 [tt]j = 2[/tt]
2 1
1 1[/table]
jer si nasao dva koji su isti prvom. Zatim, u tijelu petlje, imas zamjenu, pa dobijes:
[table]broj koliko [tt]i[/tt],[tt]j[/tt]
0 1 [tt]i = 0[/tt]
2 1
2 2 [tt]j = 2[/tt]
2 1
1 1[/table]
Sad nastavis dalje. Nekoliko koraka dalje, imat ces:
[table]broj koliko [tt]i[/tt],[tt]j[/tt]
0 1
2 3 [tt]i = 1[/tt]
2 2
2 1
1 1 [tt]j = 4[/tt][/table]
i sada ide zamjena, pa imas:
[table]broj koliko [tt]i[/tt],[tt]j[/tt]
0 1
1 1 [tt]i = 1[/tt]
2 2
2 1
2 3 [tt]j = 4[/tt][/table]
Konacno, iduci korak vanjske petlje zapocinje s:
[table]broj koliko [tt]i[/tt],[tt]j[/tt]
0 1
1 1
2 2 [tt]i = 2[/tt]
2 1
2 3[/table]
Sada ces [tt]i[/tt]-tom brojati dva "ista", pa ces dobiti da ih ima 2+1+1 = 4, sto je krivo. Desilo se da si zadnjeg brojao i sada i dok je bio drugi.
Preporuka: "istost" provjeravaj u jednoj petlji (linearna slozenost) nakon sorta, a ne kao dio sorta.
Alternativno, mozes svakom "istom" staviti [tt]koliko[/tt] na nulu, ali onda moras paziti da povecanje ide za vrijednost polja [tt]koliko[/tt] ([tt]datumi[i].koliko += datumi[j].koliko; datumi[j].koliko = 0;[/tt]) i da ispisujes samo one kojima je [tt]koliko != 0[/tt].
Zbog jednostavnosti, recimo da imas brojeve, a ne datume (ista stvar):
broj | koliko | i,j |
---|
2 | 1 | | 2 | 1 | | 0 | 1 | | 2 | 1 | | 1 | 1 | |
Nakon prvog koraka petlje (ali prije nego udjes u tijelo petlje), imas ovo:
broj | koliko | i,j |
---|
2 | 2 | i = 0 | 2 | 1 | | 0 | 1 | j = 2 | 2 | 1 | | 1 | 1 | |
jer si nasao dva koji su isti prvom. Zatim, u tijelu petlje, imas zamjenu, pa dobijes:
broj | koliko | i,j |
---|
0 | 1 | i = 0 | 2 | 1 | | 2 | 2 | j = 2 | 2 | 1 | | 1 | 1 | |
Sad nastavis dalje. Nekoliko koraka dalje, imat ces:
broj | koliko | i,j |
---|
0 | 1 | | 2 | 3 | i = 1 | 2 | 2 | | 2 | 1 | | 1 | 1 | j = 4 |
i sada ide zamjena, pa imas:
broj | koliko | i,j |
---|
0 | 1 | | 1 | 1 | i = 1 | 2 | 2 | | 2 | 1 | | 2 | 3 | j = 4 |
Konacno, iduci korak vanjske petlje zapocinje s:
broj | koliko | i,j |
---|
0 | 1 | | 1 | 1 | | 2 | 2 | i = 2 | 2 | 1 | | 2 | 3 | |
Sada ces i-tom brojati dva "ista", pa ces dobiti da ih ima 2+1+1 = 4, sto je krivo. Desilo se da si zadnjeg brojao i sada i dok je bio drugi.
Preporuka: "istost" provjeravaj u jednoj petlji (linearna slozenost) nakon sorta, a ne kao dio sorta.
Alternativno, mozes svakom "istom" staviti koliko na nulu, ali onda moras paziti da povecanje ide za vrijednost polja koliko (datumi[i].koliko += datumi[j].koliko; datumi[j].koliko = 0;) i da ispisujes samo one kojima je koliko != 0.
_________________ 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] |
|
Lux86 Forumaš(ica)
Pridružen/a: 11. 09. 2011. (23:38:43) Postovi: (1D)16
Spol:
|
|
[Vrh] |
|
boksi Forumaš(ica)
Pridružen/a: 02. 09. 2011. (16:37:55) Postovi: (44)16
Spol:
|
Postano: 20:25 pon, 21. 5. 2012 Naslov: |
|
|
ne znam je li razmišljanje kojim sam se povela uopće ok, ali za moje primjere je čak davalo dobro rezultate.
zadatak je: Napišite program koji čita datoteku "saazjq.in", te ju prepisuje u datoteku "saazjq.out" tako da u prepisivanju sva pojavljivanja stringa "tcj" zamijeni stringom "fnqfmoz".
[code:1]
#include <stdio.h>
#include <stdlib.h>
int main(void) {
FILE *in, *out;
char c1, c2, c3;
int t, k, s;
if((in = fopen("saazjq.in", "r")) == NULL)
{
exit(-1);
}
if((out = fopen("saazjq.out", "w")) == NULL)
{
exit(-2);
}
prva: while((t=fscanf(in, "%c", &c1) == 1)) {
duga: if(c1!='t')
{
fprintf(out, "%c", c1);
goto prva;
} /*ako je c1=t preci ce na sljedecu naredbu*/
while((k=fscanf(in, "%c", &c2) == 1)) {
if(c2!='c')
{
fprintf(out, "%c", c1);
c1=c2;
goto duga;
}
while((s=fscanf(in, "%c", &c3) == 1)) {
if(c3!='j') {
fprintf(out, "%c%c", c1, c2);
c1=c3;
goto prva;
}
fprintf(out, "%s", "fnqfmoz");
goto prva;
}
}
}
fclose(in); fclose(out);
return 0;
}
[/code:1]
ne znam je li razmišljanje kojim sam se povela uopće ok, ali za moje primjere je čak davalo dobro rezultate.
zadatak je: Napišite program koji čita datoteku "saazjq.in", te ju prepisuje u datoteku "saazjq.out" tako da u prepisivanju sva pojavljivanja stringa "tcj" zamijeni stringom "fnqfmoz".
Kod: |
#include <stdio.h>
#include <stdlib.h>
int main(void) {
FILE *in, *out;
char c1, c2, c3;
int t, k, s;
if((in = fopen("saazjq.in", "r")) == NULL)
{
exit(-1);
}
if((out = fopen("saazjq.out", "w")) == NULL)
{
exit(-2);
}
prva: while((t=fscanf(in, "%c", &c1) == 1)) {
duga: if(c1!='t')
{
fprintf(out, "%c", c1);
goto prva;
} /*ako je c1=t preci ce na sljedecu naredbu*/
while((k=fscanf(in, "%c", &c2) == 1)) {
if(c2!='c')
{
fprintf(out, "%c", c1);
c1=c2;
goto duga;
}
while((s=fscanf(in, "%c", &c3) == 1)) {
if(c3!='j') {
fprintf(out, "%c%c", c1, c2);
c1=c3;
goto prva;
}
fprintf(out, "%s", "fnqfmoz");
goto prva;
}
}
}
fclose(in); fclose(out);
return 0;
}
|
Zadnja promjena: boksi; 18:42 uto, 22. 5. 2012; ukupno mijenjano 1 put.
|
|
[Vrh] |
|
Gino Forumaš(ica)
Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16
Lokacija: Pula
|
Postano: 23:05 pon, 21. 5. 2012 Naslov: |
|
|
[quote="boksi"]ne znam je li razmišljanje kojim sam se povela uopće ok, ali za moje primjere je čak davalo dobro rezultate.
zadatak je: Napišite program koji čita datoteku "saazjq.in", te ju prepisuje u datoteku "saazjq.out" tako da u prepisivanju sva pojavljivanja stringa "tcj" zamijeni stringom "fnqfmoz".
[/quote]
Kod je bas koma, i to ne zbog [tt]goto[/tt], ja osobno nemam nista protiv [tt]goto[/tt]-a, mislim da ga i moje rjesenje koristi :D
Ne kuzim tocno zasto se koristi [tt]while[/tt] umjesto [tt]if[/tt], i ne znam cemu sluze varijable [tt]t, k,s[/tt].
Cini mi se da ti nebi radilo za dototeku sadrzaja [tt]ttcj[/tt].
boksi (napisa): | ne znam je li razmišljanje kojim sam se povela uopće ok, ali za moje primjere je čak davalo dobro rezultate.
zadatak je: Napišite program koji čita datoteku "saazjq.in", te ju prepisuje u datoteku "saazjq.out" tako da u prepisivanju sva pojavljivanja stringa "tcj" zamijeni stringom "fnqfmoz".
|
Kod je bas koma, i to ne zbog goto, ja osobno nemam nista protiv goto-a, mislim da ga i moje rjesenje koristi
Ne kuzim tocno zasto se koristi while umjesto if, i ne znam cemu sluze varijable t, k,s.
Cini mi se da ti nebi radilo za dototeku sadrzaja ttcj.
_________________ Mario Berljafa
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
|
[Vrh] |
|
boksi Forumaš(ica)
Pridružen/a: 02. 09. 2011. (16:37:55) Postovi: (44)16
Spol:
|
Postano: 18:40 uto, 22. 5. 2012 Naslov: |
|
|
ah, znam da je koma, programiranje i ja, ja i programiranje :oops:
sad mi radi za ttcj, i slične primjere, ali je neprihvaćen, ništa, treba mi nova ideja i mnogo strpljenja i rada :?
ah, znam da je koma, programiranje i ja, ja i programiranje
sad mi radi za ttcj, i slične primjere, ali je neprihvaćen, ništa, treba mi nova ideja i mnogo strpljenja i rada
|
|
[Vrh] |
|
quark Forumaš(ica)
Pridružen/a: 22. 10. 2011. (16:47:39) Postovi: (DA)16
Spol:
|
Postano: 19:09 uto, 22. 5. 2012 Naslov: |
|
|
[quote="boksi"]ah, znam da je koma, programiranje i ja, ja i programiranje :oops:
sad mi radi za ttcj, i slične primjere, ali je neprihvaćen, ništa, treba mi nova ideja i mnogo strpljenja i rada :?[/quote]
Za razliku od unosa preko tipkovnice, u datotekama imaš sačuvane podatke, iskoristi to :wink:
Na što mislim, mislim na "resetiranje" učitavanja podatka; provjeriš neki string, a onda ponovno učitavaš samo bez prvog elementa tog stringa (to možeš realizirati pomoću funkcije [tt]ungets[/tt], ali i pomoću [tt]fscanf[/tt] otvaranjem i zatvaranjem datoteke te pamćenjem mjesta) i onda dalje provjeravaš.
To je jedna ideja koja nije toliko teška za iskodirati, a meni prva pada napamet :D
boksi (napisa): | ah, znam da je koma, programiranje i ja, ja i programiranje
sad mi radi za ttcj, i slične primjere, ali je neprihvaćen, ništa, treba mi nova ideja i mnogo strpljenja i rada |
Za razliku od unosa preko tipkovnice, u datotekama imaš sačuvane podatke, iskoristi to
Na što mislim, mislim na "resetiranje" učitavanja podatka; provjeriš neki string, a onda ponovno učitavaš samo bez prvog elementa tog stringa (to možeš realizirati pomoću funkcije ungets, ali i pomoću fscanf otvaranjem i zatvaranjem datoteke te pamćenjem mjesta) i onda dalje provjeravaš.
To je jedna ideja koja nije toliko teška za iskodirati, a meni prva pada napamet
|
|
[Vrh] |
|
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
|
[Vrh] |
|
quark Forumaš(ica)
Pridružen/a: 22. 10. 2011. (16:47:39) Postovi: (DA)16
Spol:
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 22:57 uto, 22. 5. 2012 Naslov: |
|
|
[quote="mdoko"][quote="quark"]otvaranjem i zatvaranjem datoteke te pamćenjem mjesta[/quote]
Nije dobra ideja repetitivno otvarati i zatvarati datoteku, pogotovo ako se to radi isključivo radi repozicioniranja. Za to služe funkcije [tt]ftell[/tt] i [tt]fseek[/tt].[/quote]
Ili [tt]rewind()[/tt]. :)
Za konkretni zadatak, dosta je pamcenje zadnja 3 ucitana znaka u stringu ([tt]char[4][/tt]). Krecemo s praznim stringom i onda u petlji novoprocitani znak dodamo na kraj tog stringa, pa imamo slucajeve:
1. string je kraci od 3 znaka :arrow: nista,
2. string ima 3 znaka i jednak je [tt]"tcj"[/tt] :arrow: zapisi [tt]"fnqfmoz"[/tt],
2. string ima 3 znaka i nije jednak je [tt]"tcj"[/tt] :arrow: zapisi njegov prvi znak, a ostale (ukljucivo i nul-znak!) pomakni za jedno mjesto u lijevo (tj. izbrisi taj prvi znak iz stringa).
Nakon petlje, zapisati stogod da je ostalo u stringu (max. dva znaka, no zapise se s obicnim [tt]%s[/tt]). Simple. 8)
mdoko (napisa): | quark (napisa): | otvaranjem i zatvaranjem datoteke te pamćenjem mjesta |
Nije dobra ideja repetitivno otvarati i zatvarati datoteku, pogotovo ako se to radi isključivo radi repozicioniranja. Za to služe funkcije ftell i fseek. |
Ili rewind().
Za konkretni zadatak, dosta je pamcenje zadnja 3 ucitana znaka u stringu (char[4]). Krecemo s praznim stringom i onda u petlji novoprocitani znak dodamo na kraj tog stringa, pa imamo slucajeve:
1. string je kraci od 3 znaka nista,
2. string ima 3 znaka i jednak je "tcj" zapisi "fnqfmoz",
2. string ima 3 znaka i nije jednak je "tcj" zapisi njegov prvi znak, a ostale (ukljucivo i nul-znak!) pomakni za jedno mjesto u lijevo (tj. izbrisi taj prvi znak iz stringa).
Nakon petlje, zapisati stogod da je ostalo u stringu (max. dva znaka, no zapise se s obicnim %s). Simple.
_________________ 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] |
|
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
Postano: 0:34 sri, 23. 5. 2012 Naslov: |
|
|
[quote="quark"]
Logično mi je da je loše stalno otvarati i zatvarati datoteke (naročito ako se može izbjeći), ali što bi se eventualno moglo dogoditi? Oštećenje podataka?[/quote]
Moglo bi se dogoditi da program radi užasno sporo, jer pri svakom otvaranju treba dio datoteke učitati u buffer u RAM-u, pa onda pri zatvaranju sve eventualne izmjene zapisati na disk i izvršiti dealokaciju. Ako se to često ponavlja, može postati čupavo. (Naravno, ne na ovim uvodnim primjerima, ali nikako nije dobro steći takvu naviku.)
[quote="vsego"][quote="mdoko"]
Nije dobra ideja repetitivno otvarati i zatvarati datoteku, pogotovo ako se to radi isključivo radi repozicioniranja. Za to služe funkcije [tt]ftell[/tt] i [tt]fseek[/tt].[/quote]
Ili [tt]rewind()[/tt]. :)[/quote]
[tt]rewind(fp)[/tt] je isto što i [tt]fseek(fp, 0, SEEK_SET)[/tt], pa mi se nije baš dalo posebno navoditi tu funkciju ;)
quark (napisa): |
Logično mi je da je loše stalno otvarati i zatvarati datoteke (naročito ako se može izbjeći), ali što bi se eventualno moglo dogoditi? Oštećenje podataka? |
Moglo bi se dogoditi da program radi užasno sporo, jer pri svakom otvaranju treba dio datoteke učitati u buffer u RAM-u, pa onda pri zatvaranju sve eventualne izmjene zapisati na disk i izvršiti dealokaciju. Ako se to često ponavlja, može postati čupavo. (Naravno, ne na ovim uvodnim primjerima, ali nikako nije dobro steći takvu naviku.)
vsego (napisa): | mdoko (napisa): |
Nije dobra ideja repetitivno otvarati i zatvarati datoteku, pogotovo ako se to radi isključivo radi repozicioniranja. Za to služe funkcije ftell i fseek. |
Ili rewind(). |
rewind(fp) je isto što i fseek(fp, 0, SEEK_SET), pa mi se nije baš dalo posebno navoditi tu funkciju
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 2:14 sri, 23. 5. 2012 Naslov: |
|
|
[quote="mdoko"][tt]rewind(fp)[/tt] je isto što i [tt]fseek(fp, 0, SEEK_SET)[/tt], pa mi se nije baš dalo posebno navoditi tu funkciju ;)[/quote]
Nije. [tt]rewind()[/tt] pocisti EOF i err flagove (sto je obicno pozeljno ako kreces od pocetka datoteke). Za [tt]fseek()[/tt] nije definirano standardom. Experiment je pokazao da na Win (XP, gcc od nekog Code::Blocks-a) [tt]fseek()[/tt] ne resetira nista, a na Lin (F16, gcc 4.6.3 20120306) resetira EOF, ali ne i err.
mdoko (napisa): | rewind(fp) je isto što i fseek(fp, 0, SEEK_SET), pa mi se nije baš dalo posebno navoditi tu funkciju |
Nije. rewind() pocisti EOF i err flagove (sto je obicno pozeljno ako kreces od pocetka datoteke). Za fseek() nije definirano standardom. Experiment je pokazao da na Win (XP, gcc od nekog Code::Blocks-a) fseek() ne resetira nista, a na Lin (F16, gcc 4.6.3 20120306) resetira EOF, ali ne i err.
_________________ 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] |
|
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
Postano: 13:41 sri, 23. 5. 2012 Naslov: |
|
|
[quote="vsego"][quote="mdoko"][tt]rewind(fp)[/tt] je isto što i [tt]fseek(fp, 0, SEEK_SET)[/tt], pa mi se nije baš dalo posebno navoditi tu funkciju ;)[/quote]
Nije. [tt]rewind()[/tt] pocisti EOF i err flagove (sto je obicno pozeljno ako kreces od pocetka datoteke). Za [tt]fseek()[/tt] nije definirano standardom. Experiment je pokazao da na Win (XP, gcc od nekog Code::Blocks-a) [tt]fseek()[/tt] ne resetira nista, a na Lin (F16, gcc 4.6.3 20120306) resetira EOF, ali ne i err.[/quote]
U pravu si. Nisam o tome razmišljao.
vsego (napisa): | mdoko (napisa): | rewind(fp) je isto što i fseek(fp, 0, SEEK_SET), pa mi se nije baš dalo posebno navoditi tu funkciju |
Nije. rewind() pocisti EOF i err flagove (sto je obicno pozeljno ako kreces od pocetka datoteke). Za fseek() nije definirano standardom. Experiment je pokazao da na Win (XP, gcc od nekog Code::Blocks-a) fseek() ne resetira nista, a na Lin (F16, gcc 4.6.3 20120306) resetira EOF, ali ne i err. |
U pravu si. Nisam o tome razmišljao.
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
piccola Forumaš(ica)
Pridružen/a: 30. 11. 2009. (15:39:50) Postovi: (D7)16
|
Postano: 18:39 sri, 23. 5. 2012 Naslov: |
|
|
Napišite program koji učitava jednu liniju teksta s najviše 18450 znakova. Tom tekstu treba izbrisati svaku 4. riječ, a ostalima izokrenuti redoslijed slova (same riječi ostaju u originalnom poretku). Tako dobiveni tekst treba ispisati.
Možete pretpostaviti da tekst sadrži samo slova i razmake.
[code:1]#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int main()
{
int i, l, d, br = 0, brisi;
char temp,s[18451];
scanf("%[^\n]", s);
if(s[0]==' ')
{
for(i=0; s[i] != '\0'; i++ )
{
if(br%4 == 0 )
while(isalpha(s[i]))
{
s[i]=s[i-1];
i++;
}
if(s[i]==' ' && isalpha(s[i+1]))
br++;
}
}
else
{
for(i=0; s[i] != '\0'; i++ )
{
if((br+1)%4 == 0 )
while(isalpha(s[i]))
{
s[i]=s[i-1];
i++;
}
if(s[i]==' ' && isalpha(s[i+1]))
br++;
}
}
for (i = 0; s[i] != '\0'; i++)
{
if (isspace(s[i]))
{
i++;
if (isalpha(s[i]))
{
l = i;
i++;
while (isalpha(s[i]))
{
d = i;
i++;
}
br++;
while (l < d)
{
temp = s[l];
s[l] = s[d];
s[d] = temp;
l++;
d--;
}
}
}
else
{
if (isalpha(s[i]))
{
l = i;
i++;
while (isalpha(s[i]))
{
d = i;
i++;
}
while (l < d)
{
temp = s[l];
s[l] = s[d];
s[d] = temp;
l++;
d--;
}
}
}
i--;
}
printf("%s", s);
system("pause");
}
[/code:1]
Može pomoć? Nisam baš na ti s programiranjem pa mi nije jasno u čemu bi mogao bit problem u ovom zadatku jer meni program za velik komad teksta radi dobro. Znam da nije baš najjednostavnije rješenje, al muči me što ne kužim u čemu je greška :?
Napišite program koji učitava jednu liniju teksta s najviše 18450 znakova. Tom tekstu treba izbrisati svaku 4. riječ, a ostalima izokrenuti redoslijed slova (same riječi ostaju u originalnom poretku). Tako dobiveni tekst treba ispisati.
Možete pretpostaviti da tekst sadrži samo slova i razmake.
Kod: | #include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int main()
{
int i, l, d, br = 0, brisi;
char temp,s[18451];
scanf("%[^\n]", s);
if(s[0]==' ')
{
for(i=0; s[i] != '\0'; i++ )
{
if(br%4 == 0 )
while(isalpha(s[i]))
{
s[i]=s[i-1];
i++;
}
if(s[i]==' ' && isalpha(s[i+1]))
br++;
}
}
else
{
for(i=0; s[i] != '\0'; i++ )
{
if((br+1)%4 == 0 )
while(isalpha(s[i]))
{
s[i]=s[i-1];
i++;
}
if(s[i]==' ' && isalpha(s[i+1]))
br++;
}
}
for (i = 0; s[i] != '\0'; i++)
{
if (isspace(s[i]))
{
i++;
if (isalpha(s[i]))
{
l = i;
i++;
while (isalpha(s[i]))
{
d = i;
i++;
}
br++;
while (l < d)
{
temp = s[l];
s[l] = s[d];
s[d] = temp;
l++;
d--;
}
}
}
else
{
if (isalpha(s[i]))
{
l = i;
i++;
while (isalpha(s[i]))
{
d = i;
i++;
}
while (l < d)
{
temp = s[l];
s[l] = s[d];
s[d] = temp;
l++;
d--;
}
}
}
i--;
}
printf("%s", s);
system("pause");
}
|
Može pomoć? Nisam baš na ti s programiranjem pa mi nije jasno u čemu bi mogao bit problem u ovom zadatku jer meni program za velik komad teksta radi dobro. Znam da nije baš najjednostavnije rješenje, al muči me što ne kužim u čemu je greška
|
|
[Vrh] |
|
|