Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
|
[Vrh] |
|
kiara Forumaš(ica)

Pridružen/a: 15. 11. 2011. (23:22:57) Postovi: (55)16
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
|
[Vrh] |
|
kiara Forumaš(ica)

Pridružen/a: 15. 11. 2011. (23:22:57) Postovi: (55)16
|
Postano: 21:27 pet, 11. 5. 2012 Naslov: |
|
|
Haha, ok, hvala. Evo...
Napišite program koji čita datoteku "nehoai.in", te ju prepisuje u datoteku "nehoai.out" tako da u prepisivanju sva pojavljivanja stringa "boe" zamijeni stringom "vvrxrcr".
Napomena: Nemojte uvoditi ograničenja na duljinu datoteke i/ili pojedinih linija i riječi u datoteci.
Haha, ok, hvala. Evo...
Napišite program koji čita datoteku "nehoai.in", te ju prepisuje u datoteku "nehoai.out" tako da u prepisivanju sva pojavljivanja stringa "boe" zamijeni stringom "vvrxrcr".
Napomena: Nemojte uvoditi ograničenja na duljinu datoteke i/ili pojedinih linija i riječi u datoteci.
Description: |
|
 Download |
Filename: |
datoteke2.c |
Filesize: |
1.01 KB |
Downloaded: |
120 Time(s) |
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 22:18 pet, 11. 5. 2012 Naslov: |
|
|
Mislim da to ne uzrokuje gresku, ali otvaras file koji je vec otvoren (i to preko istog pointera!). Vracanje na pocetak filea se radi naredbom [tt]rewind()[/tt] (to je ili bude (not sure) radjeno na predavanju) ili prije drugog [tt]fopen[/tt]-a istog filea napravis prvo [tt]fclose[/tt].
Koliko vidim, ti pogubis razmake medju rijecima. Koliko se sjecam, verifikator tu nije cjepidlaka (sto se tice broja razmaka), ali ipak ne mozes sve rijeci spojiti u jednu.
Mislim da to ne uzrokuje gresku, ali otvaras file koji je vec otvoren (i to preko istog pointera!). Vracanje na pocetak filea se radi naredbom rewind() (to je ili bude (not sure) radjeno na predavanju) ili prije drugog fopen-a istog filea napravis prvo fclose.
Koliko vidim, ti pogubis razmake medju rijecima. Koliko se sjecam, verifikator tu nije cjepidlaka (sto se tice broja razmaka), ali ipak ne mozes sve rijeci spojiti u jednu.
_________________ 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] |
|
kiara Forumaš(ica)

Pridružen/a: 15. 11. 2011. (23:22:57) Postovi: (55)16
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 0:21 sub, 12. 5. 2012 Naslov: |
|
|
Ne vidim kako je moguce da ti ne spoji. Ucitavas rijec po rijec (s [tt]%s[/tt]) i onda ih nekako ispisujes, bez razmaka iza.
Vidim da ispisujes onaj [tt]\0[/tt] na kraju. :shock: Moguce se na Win to ponasa kao razmak... ali ne to raditi. Jednostavno, nakon svake rijeci zapisi razmak i ne idi po stringu do [tt]'\0'[/tt].
Usput, cemu uvjet [tt]... && i+1 < n && i+2 < n[/tt]? Valjda je prvi uvijek istina ako je i drugi istina. :)
Ne vidim kako je moguce da ti ne spoji. Ucitavas rijec po rijec (s %s) i onda ih nekako ispisujes, bez razmaka iza.
Vidim da ispisujes onaj \0 na kraju. Moguce se na Win to ponasa kao razmak... ali ne to raditi. Jednostavno, nakon svake rijeci zapisi razmak i ne idi po stringu do '\0'.
Usput, cemu uvjet ... && i+1 < n && i+2 < n? Valjda je prvi uvijek istina ako je i drugi istina.
_________________ 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] |
|
kiara Forumaš(ica)

Pridružen/a: 15. 11. 2011. (23:22:57) Postovi: (55)16
|
|
[Vrh] |
|
chiko Forumaš(ica)


Pridružen/a: 14. 09. 2010. (17:43:27) Postovi: (E)16
Spol: 
|
Postano: 17:25 sub, 12. 5. 2012 Naslov: |
|
|
Nije mi jasno što mi je krivo u zadatku?Meni dobro ispada na kompjuteru ali verifikator nece da prihvati.
Zadatak 2:
Napišite program koji učitava jednu liniju teksta s najviše 20151 znakova. Tom tekstu treba izbrisati svaku 3. 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<ctype.h>
#include<string.h>
#include<stdlib.h>
int brojac( char s[], int i ){
while(1){
if(s[i]=='\0')
return i;
if(isblank(s[i])==1)
return i;
i++;
}
return i;
}
void zamjeni(char a[] ,int prvi_clan,int zadnji_clan){
char temp;
while(prvi_clan<zadnji_clan){
temp=a[prvi_clan];
a[prvi_clan]=a[zadnji_clan];
a[zadnji_clan]=temp;
prvi_clan+=1;
zadnji_clan-=1;
}
}
void makni_rijec(char a[], int prvi_clan, int j ){
while(a[j]!='\0'){
a[prvi_clan]=a[j];
prvi_clan++;
j++;
}
a[prvi_clan]='\0';
}
int main(){
int prvi_clan=0, zadnji_clan=0;
int i=0, br_rijeci=0, j;
char a[20151];
gets(a);
while ( a[i] != '\0'){
if(!isblank(a[i])){
br_rijeci++;
if(br_rijeci==3){
prvi_clan=i;
zadnji_clan=brojac(a,i);
makni_rijec(a , prvi_clan, zadnji_clan );
br_rijeci=0;
}
else{
prvi_clan=i;
zadnji_clan=brojac(a,i)-1;
zamjeni(a, prvi_clan, zadnji_clan);
i=zadnji_clan+1;
}
}
else
i++;
}
puts(a);
return 0;
}[/code:1]
Nije mi jasno što mi je krivo u zadatku?Meni dobro ispada na kompjuteru ali verifikator nece da prihvati.
Zadatak 2:
Napišite program koji učitava jednu liniju teksta s najviše 20151 znakova. Tom tekstu treba izbrisati svaku 3. 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<ctype.h>
#include<string.h>
#include<stdlib.h>
int brojac( char s[], int i ){
while(1){
if(s[i]=='\0')
return i;
if(isblank(s[i])==1)
return i;
i++;
}
return i;
}
void zamjeni(char a[] ,int prvi_clan,int zadnji_clan){
char temp;
while(prvi_clan<zadnji_clan){
temp=a[prvi_clan];
a[prvi_clan]=a[zadnji_clan];
a[zadnji_clan]=temp;
prvi_clan+=1;
zadnji_clan-=1;
}
}
void makni_rijec(char a[], int prvi_clan, int j ){
while(a[j]!='\0'){
a[prvi_clan]=a[j];
prvi_clan++;
j++;
}
a[prvi_clan]='\0';
}
int main(){
int prvi_clan=0, zadnji_clan=0;
int i=0, br_rijeci=0, j;
char a[20151];
gets(a);
while ( a[i] != '\0'){
if(!isblank(a[i])){
br_rijeci++;
if(br_rijeci==3){
prvi_clan=i;
zadnji_clan=brojac(a,i);
makni_rijec(a , prvi_clan, zadnji_clan );
br_rijeci=0;
}
else{
prvi_clan=i;
zadnji_clan=brojac(a,i)-1;
zamjeni(a, prvi_clan, zadnji_clan);
i=zadnji_clan+1;
}
}
else
i++;
}
puts(a);
return 0;
} |
_________________ Kake-Bake
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 17:40 sub, 12. 5. 2012 Naslov: |
|
|
Bez detaljnog proucavanja, zapele mi za oko ove dvije stvari:
1. [tt]if(isblank(s[i])==1)[/tt] -- nemas garanciju da za razmak vraca 1 (ovisi o compileru), samo da vraca ne-nulu.
2. U tvoj string stane najvise 20150 znakova, sto je jedan znak premalo (vjerojatno je ovo problem zbog kojeg ti verifikator odbija rjesenje).
Ostalo mi [b]izgleda[/b] O.K.
Bez detaljnog proucavanja, zapele mi za oko ove dvije stvari:
1. if(isblank(s[i])==1) – nemas garanciju da za razmak vraca 1 (ovisi o compileru), samo da vraca ne-nulu.
2. U tvoj string stane najvise 20150 znakova, sto je jedan znak premalo (vjerojatno je ovo problem zbog kojeg ti verifikator odbija rjesenje).
Ostalo mi izgleda O.K.
_________________ 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
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
|
[Vrh] |
|
chiko Forumaš(ica)


Pridružen/a: 14. 09. 2010. (17:43:27) Postovi: (E)16
Spol: 
|
|
[Vrh] |
|
kiara Forumaš(ica)

Pridružen/a: 15. 11. 2011. (23:22:57) Postovi: (55)16
|
Postano: 14:27 ned, 13. 5. 2012 Naslov: |
|
|
Opet mi ne priznaje kao tocno, nisam ogranicila, napravila sam pravilno razmake i sve mi radi kako treba, ne znam sta da jos ispravim :(
[code:1]#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
FILE *in, *out;
int i,n,max;
char c;
char *stringi, *stringo={"vvrxrcr"};
in=fopen ("nehoai.in", "rt" );
out=fopen ("nehoai.out", "wt" );
max=-1;
i=0;
while ((c=fgetc(in))!= EOF)
{
if (c!='\t' && c!='\n' && c!=' ') i=i+1;
else i=0;
if (i>max) max=i;
}
stringi=(char*)malloc((max+1)*sizeof(char));
fclose (in);
in=fopen("nehoai.in", "rt" );
while (fscanf(in, "%s", stringi) > 0)
{
n=strlen(stringi);
i=0;
while (i<n)
{
if (stringi[i] == 'b' && stringi[i+1] == 'o' && stringi[i+2] == 'e' && i+2 < n)
{
fprintf (out, "%s", stringo);
i=i+3;
}
else
{
fprintf (out, "%c", stringi[i]);
i=i+1;
}
}
fprintf(out, " ");
}
fclose (in);
fclose (out);
return 0;
}[/code:1]
Opet mi ne priznaje kao tocno, nisam ogranicila, napravila sam pravilno razmake i sve mi radi kako treba, ne znam sta da jos ispravim
Kod: | #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
FILE *in, *out;
int i,n,max;
char c;
char *stringi, *stringo={"vvrxrcr"};
in=fopen ("nehoai.in", "rt" );
out=fopen ("nehoai.out", "wt" );
max=-1;
i=0;
while ((c=fgetc(in))!= EOF)
{
if (c!='\t' && c!='\n' && c!=' ') i=i+1;
else i=0;
if (i>max) max=i;
}
stringi=(char*)malloc((max+1)*sizeof(char));
fclose (in);
in=fopen("nehoai.in", "rt" );
while (fscanf(in, "%s", stringi) > 0)
{
n=strlen(stringi);
i=0;
while (i<n)
{
if (stringi[i] == 'b' && stringi[i+1] == 'o' && stringi[i+2] == 'e' && i+2 < n)
{
fprintf (out, "%s", stringo);
i=i+3;
}
else
{
fprintf (out, "%c", stringi[i]);
i=i+1;
}
}
fprintf(out, " ");
}
fclose (in);
fclose (out);
return 0;
} |
|
|
[Vrh] |
|
frutabella Forumaš(ica)

Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16
|
Postano: 16:44 ned, 13. 5. 2012 Naslov: |
|
|
Napišite program koji učitava jednu riječ s najviše 19509 znakova, te ispisuje koliko se puta u toj riječi pojavljuje podstring "bx".
[code:1]#include<stdio.h>
int main (void){
char rijec[19510];
int br=0, i, j;
scanf("%s", rijec);
j=0;
for(i=0; rijec[i]!='\0'; i++)
{
if(rijec[i]=='b' && (rijec[j++]!='\0' && rijec[j]=='x'))
{
br++;
++i;
}
++j;
}
printf("%d", br);
return 0;
}
[/code:1]
Ne razumijem zasto mi verifikator ne prihvaca. :S
Meni radi na kompjuteru. :D
Napišite program koji učitava jednu riječ s najviše 19509 znakova, te ispisuje koliko se puta u toj riječi pojavljuje podstring "bx".
Kod: | #include<stdio.h>
int main (void){
char rijec[19510];
int br=0, i, j;
scanf("%s", rijec);
j=0;
for(i=0; rijec[i]!='\0'; i++)
{
if(rijec[i]=='b' && (rijec[j++]!='\0' && rijec[j]=='x'))
{
br++;
++i;
}
++j;
}
printf("%d", br);
return 0;
}
|
Ne razumijem zasto mi verifikator ne prihvaca. :S
Meni radi na kompjuteru.
|
|
[Vrh] |
|
mdoko Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol: 
Lokacija: Heriot-Watt University, Edinburgh
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 19:44 ned, 13. 5. 2012 Naslov: |
|
|
@frutabella: [tt]if(rijec[i]=='b' && (rijec[j++]!='\0' && rijec[j]=='x'))[/tt] :shock:
1. U istom izrazu [b]ne smije[/b] biti [tt]++j[/tt], [tt]j++[/tt] ili ista stvar s minusima, zajedno s drugim [tt]j[/tt]-ovima, jer rezultat nije definiran i stvarno se razlikuje od compilera do compilera (predavanja iz prvog semestra, tamo gdje smo radili izraze).
2. Kako prvo slovo gledas s indeksom [tt]i[/tt], a drugo s indeksom [tt]j[/tt]? Prvi put kad uvjet u [tt]if[/tt] bude istina, [tt]i[/tt] ce "prestici" [tt]j[/tt].
@kiara: Provjerih u verifikatoru: ovdje broj razmaka treba ostati kakav je i bio (sto i ima smisla, za obicni find/replace).
@frutabella: if(rijec[i]=='b' && (rijec[j++]!='\0' && rijec[j]=='x'))
1. U istom izrazu ne smije biti ++j, j++ ili ista stvar s minusima, zajedno s drugim j-ovima, jer rezultat nije definiran i stvarno se razlikuje od compilera do compilera (predavanja iz prvog semestra, tamo gdje smo radili izraze).
2. Kako prvo slovo gledas s indeksom i, a drugo s indeksom j? Prvi put kad uvjet u if bude istina, i ce "prestici" j.
@kiara: Provjerih u verifikatoru: ovdje broj razmaka treba ostati kakav je i bio (sto i ima smisla, za obicni find/replace).
_________________ 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: 2:17 pon, 14. 5. 2012 Naslov: |
|
|
[quote="vsego"]@frutabella: [tt]if(rijec[i]=='b' && (rijec[j++]!='\0' && rijec[j]=='x'))[/tt] :shock:
1. U istom izrazu [b]ne smije[/b] biti [tt]++j[/tt], [tt]j++[/tt] ili ista stvar s minusima, zajedno s drugim [tt]j[/tt]-ovima, jer rezultat nije definiran i stvarno se razlikuje od compilera do compilera (predavanja iz prvog semestra, tamo gdje smo radili izraze).[/quote]
Ako malo bolje pogledaš, ovo je ipak posebni slučaj zbog lijenog izvršavanja logičkih operatora, pa se točno zna kojim redom će se izvrijednjavati izrazi.
vsego (napisa): | @frutabella: if(rijec[i]=='b' && (rijec[j++]!='\0' && rijec[j]=='x'))
1. U istom izrazu ne smije biti ++j, j++ ili ista stvar s minusima, zajedno s drugim j-ovima, jer rezultat nije definiran i stvarno se razlikuje od compilera do compilera (predavanja iz prvog semestra, tamo gdje smo radili izraze). |
Ako malo bolje pogledaš, ovo je ipak posebni slučaj zbog lijenog izvršavanja logičkih operatora, pa se točno zna kojim redom će se izvrijednjavati izrazi.
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 2:38 pon, 14. 5. 2012 Naslov: |
|
|
Mozda grijesim, ali cini mi se da standard i dalje ne propisuje kad ce se desiti inkrement/dekrement, sto znaci da nemas garanciju kako ce se pojedini compiler (tj. njegova verzija) ponasati. U svakom slucaju, onim studentima koji nemaju namjeru duboko analizirati ponasanje C-a i raznih compilera preporucam da se klone takvih konstrukcija, bez da se bavimo time kad bi to mozda i moglo raditi.
Inace, objasnjenje u tocki 2 mi je krivo. Prvi put kad [tt]rijec[i]=='b'[/tt] bude istina, ali ostatak [tt]if[/tt]-a bude laz, [tt]j[/tt] ce narasti za 2, a [tt]i[/tt] samo za 1, i eto problema. Semanticki je besmisleno dva uzastopna znaka indeksirati razlicitim varijablama.
Mozda grijesim, ali cini mi se da standard i dalje ne propisuje kad ce se desiti inkrement/dekrement, sto znaci da nemas garanciju kako ce se pojedini compiler (tj. njegova verzija) ponasati. U svakom slucaju, onim studentima koji nemaju namjeru duboko analizirati ponasanje C-a i raznih compilera preporucam da se klone takvih konstrukcija, bez da se bavimo time kad bi to mozda i moglo raditi.
Inace, objasnjenje u tocki 2 mi je krivo. Prvi put kad rijec[i]=='b' bude istina, ali ostatak if-a bude laz, j ce narasti za 2, a i samo za 1, i eto problema. Semanticki je besmisleno dva uzastopna znaka indeksirati razlicitim varijablama.
_________________ 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: 2:56 pon, 14. 5. 2012 Naslov: |
|
|
[quote="vsego"]Mozda grijesim, ali cini mi se da standard i dalje ne propisuje kad ce se desiti inkrement/dekrement, sto znaci da nemas garanciju kako ce se pojedini compiler (tj. njegova verzija) ponasati.
[/quote]
Nisam ni ja u potpunosti siguran i ne da mi se sada tražiti, ali čini mi se da sam negdje vidio da standard precizira što se događa kod evaluacije logičkih operatora.
[quote]U svakom slucaju, onim studentima koji nemaju namjeru duboko analizirati ponasanje C-a i raznih compilera preporucam da se klone takvih konstrukcija, bez da se bavimo time kad bi to mozda i moglo raditi.[/quote]
Rekao bih i ne samo studentima. Pisati kod koji nije čitljiv bez kopanja po zabačenim dijelovima standarda nikako nije dobra ideja. Naravno, osim ako se radi o nečemu za [url=http://ioccc.org/]IOCCC[/url]. :wink:
vsego (napisa): | Mozda grijesim, ali cini mi se da standard i dalje ne propisuje kad ce se desiti inkrement/dekrement, sto znaci da nemas garanciju kako ce se pojedini compiler (tj. njegova verzija) ponasati.
|
Nisam ni ja u potpunosti siguran i ne da mi se sada tražiti, ali čini mi se da sam negdje vidio da standard precizira što se događa kod evaluacije logičkih operatora.
Citat: | U svakom slucaju, onim studentima koji nemaju namjeru duboko analizirati ponasanje C-a i raznih compilera preporucam da se klone takvih konstrukcija, bez da se bavimo time kad bi to mozda i moglo raditi. |
Rekao bih i ne samo studentima. Pisati kod koji nije čitljiv bez kopanja po zabačenim dijelovima standarda nikako nije dobra ideja. Naravno, osim ako se radi o nečemu za IOCCC.
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
|