Prog2 DZ
Select messages from
# through # FAQ
[/[Print]\]
Idite na 1, 2, 3 ... 11, 12, 13  Sljedeće  :| |:
Forum@DeGiorgi -> Programiranje 1 i 2

#1: Prog2 DZ Autor/ica: gflegar PostPostano: 16:09 pon, 20. 2. 2012
    —
Moze objasnjenje zasto ovo ne radi Confused
Zadatak:
Napišite program koji čita datoteku "pgombiic.in", te ju prepisuje u datoteku "pgombiic.out" tako da u prepisivanju izostavi sve znakove 'a', 'c', 'g', 'o'.

Kod:
#include <stdio.h>

int main(void){
    FILE *fin, *fout;
    char c;
    fin = fopen("pgombiic.in", "rt");
    fout = fopen("pgombiic.out", "wt");

    while (fscanf(fin, "%c", &c) != EOF) {
        if (c != 'a' && c != 'c' && c != 'g' && c != 'o') {
            fprintf(fout, "%c", c);
        }
    }

    fclose(fin);
    fclose(fout);
    return 0;
}


Zadnja promjena: gflegar; 18:22 pon, 20. 2. 2012; ukupno mijenjano 1 put.

#2: Re: Prog2 DZ Autor/ica: fejky PostPostano: 16:41 pon, 20. 2. 2012
    —
Probaj
Kod:
fopen("pgombiic.in", "rt");

promjeniti u
Kod:
fopen("pgombiic.in", "r");


wt nije definirani u standardu http://www.open-std.org/JTC1/SC22/WG14/www/standards, pogledaj poglavlje 7.19.15.3 .

#3:  Autor/ica: gflegar PostPostano: 16:47 pon, 20. 2. 2012
    —
Probao to prije i nije radilo. Zbog toga sam i promijenio u "rt", ali nije pomoglo Smile

#4: Re: Prog2 DZ Autor/ica: mdokoLokacija: Heriot-Watt University, Edinburgh PostPostano: 16:53 pon, 20. 2. 2012
    —
Problem je ovdje:
Kod:
    while (fscanf(fin, "%c", &c) != EOF) { .... }

fscanf (kao i scanf i sscanf) vraća broj učitanih argumenata, dakle gornji poziv funkcije fscanf će vratiti 1 ako uspije učitati podatke u varijablu c, a u slučaju da to ne uspije, vratit će 0. S druge strane, konstanta EOF je uvijek definirana kao negativna integer konstanta (u većini implementacija -1).

Dakle, ono što se u gornjem kodu dogodi je beskonačna petlja, jer povratna vrijednost funkcije fscanf nikada ne može biti jednaka konstanti EOF.

#5:  Autor/ica: gflegar PostPostano: 17:39 pon, 20. 2. 2012
    —
Po standardu bi trebalo biti:
Citat:
The fscanf function returns the value of the macro EOF if an input failure occurs
before any conversion. Otherwise, the function returns the number of input items
assigned, which can be fewer than provided for, or even zero, in the event of an early
matching failure.

ili iz skripte vsege:
Citat:
Funkcija fscanf() vraca broj polja (formata) koji su prepoznati
i kojima je pridana vrijednost. Ukoliko je program dosao do kraja
datoteke koju cita, povratna vrijednost ce biti EOF (naziv iza kojeg se
“skriva” vrijednost −1).

A i kada bi bila beskonacna petlja onda bi aplikacija za zadace vratila Time Limit Exceeded, a ne Wrong Answer (da ne govorimo da bih i ja na svojem racunalu dobio beskonacnu petlju sto nije slucaj)

Ugl. niti kada se zamijeni
Kod:
while (fscanf(fin, "%c", &c) != EOF) { .... }

sa
Kod:
while (fscanf(fin, "%c", &c) > 0) { .... }

program ne prolazi.

#6:  Autor/ica: vsegoLokacija: /sbin/init PostPostano: 18:59 pon, 20. 2. 2012
    —
Skripta je malo neprecizna. Kako pise u man-u (ovo prvo sto si citirao), EOF vrati ako dodje do kraja datoteke prije prve konverzije. Ovdje je konverzija %c odmah na pocetku, pa bi ti trebao vratiti nulu.

Trenutno nesto ne stima s provjerom datoteka (ostalo, koliko vidim, ok radi). Ne stignem sada provjeravati sto, pa daj me please bocni maliom preko vikenda, ako do tada ne proradi.

#7:  Autor/ica: gflegar PostPostano: 19:47 pon, 20. 2. 2012
    —
vsego (napisa):
Skripta je malo neprecizna. Kako pise u man-u (ovo prvo sto si citirao), EOF vrati ako dodje do kraja datoteke prije prve konverzije. Ovdje je konverzija %c odmah na pocetku, pa bi ti trebao vratiti nulu.


Kako sam ja shvatio man trebao bi vratiti EOF a ne 0. Jer da bi se uopce dogodila ta konverzija prvo se nesto treba ucitati s datoteke, sto nije moguce ako je kursor na kraju datoteke.
Npr. ovaj kod se zavrti u beskonacnoj petlji:
Kod:
#include <stdio.h>

int main(void){
    FILE *fin;
    char c;
    int ret;
    fin = fopen("test.txt", "r");
    while (1) {
       printf("%d\n", ret = fscanf(fin, "%c", &c));
       if (ret == 0) break;
    }

    return 0;
}

(ispise jedinice i dalje nastavi ispisivati -1 iliti EOF)

dok se ovaj uredno izvrsi:
Kod:
#include <stdio.h>

int main(void){
    FILE *fin;
    char c;
    int ret;
    fin = fopen("test.txt", "r");
    while (1) {
       printf("%d\n", ret = fscanf(fin, "%c", &c));
       if (ret == EOF) break;
    }

    return 0;
}

#8:  Autor/ica: vsegoLokacija: /sbin/init PostPostano: 20:28 pon, 20. 2. 2012
    —
Obrni-okreni, >0 bi ti gore trebalo raditi. Wink

#9:  Autor/ica: gflegar PostPostano: 20:45 pon, 20. 2. 2012
    —
vsego (napisa):
Obrni-okreni, >0 bi ti gore trebalo raditi. Wink

Ma znam, poanta je bila da ipak ne vraca 0 Wink

#10:  Autor/ica: vsegoLokacija: /sbin/init PostPostano: 20:04 uto, 21. 2. 2012
    —
Ispravljeno. Cool Ukratko, kad sam aktivirao aplikaciju, bila je hrpa nasumicno pisanih rekurzija, pa sam ogranicio vrijeme izvrsavanja pojedinog programa na 2 sec, sto za tvoj prvi program iz Datoteka (ovaj gore) nije bilo dosta. Sad je stvar sredjena i rjesenje ti je proslo kao tocno. Drugi i treci program ti jednostavno nisu tocni (pregledah ih). Za sada te pustim da sam debuggiras, znam da to volis. Razz

#11:  Autor/ica: gflegar PostPostano: 15:42 sri, 22. 2. 2012
    —
Za treci i sam znam da nije tocan Smile. Jedino me za drugi zanima... kako treba izgledati .out datoteka za .in:
Kod:
dfdf
adfa df


Zadatak:Napišite program koji čita datoteku "wxwrpiqh.in", te ju prepisuje u datoteku "wxwrpiqh.out" tako da u prepisivanju sva pojavljivanja stringa "df" zamijeni stringom "ecucra".

#12:  Autor/ica: vsegoLokacija: /sbin/init PostPostano: 15:52 sri, 22. 2. 2012
    —
Ne razumijem sto nije jasno:

dfdf
adfa df
Arrow
ecucraecucra
aecucraa ecucra

Obicni Find/ReplaceAll.

Ako se dobro sjecam, kod tebe je problem ono sto mnogi pogrijese: ako nadjes "d" citas iduci znak. ako taj nije "f", zakljucis da ne valja i zapises oba. A sto ako je string "ddf"?

#13:  Autor/ica: mdokoLokacija: Heriot-Watt University, Edinburgh PostPostano: 15:54 sri, 22. 2. 2012
    —
gflegar (napisa):
kako treba izgledati .out datoteka za .in:
Kod:
dfdf
adfa df


Zadatak:Napišite program koji čita datoteku "wxwrpiqh.in", te ju prepisuje u datoteku "wxwrpiqh.out" tako da u prepisivanju sva pojavljivanja stringa "df" zamijeni stringom "ecucra".


Kod:
$ cat wxwrpiqh.in
dfdf
adfa df

$ sed 's/df/ecucra/g' wxwrpiqh.in
ecucraecucra
aecucraa ecucra

#14:  Autor/ica: gflegar PostPostano: 16:06 sri, 22. 2. 2012
    —
U jednom trenutku sam posumnjao da je u ovom zadatku "string" sinonim za "rijec", pa ustvari niti nisam debagirao prvi kod nego odmah napisao novi uz ovakvu pretpostavku Embarassed
... potaknut cudnim iskustvom iz 3. zadace u kojoj je -5 mod 7 = -5, a ne 2.

Ugl. proslo je sve sad Cool Zahvaljujem.

#15:  Autor/ica: malalodacha PostPostano: 18:35 ned, 4. 3. 2012
    —
Napišite program koji učitava prirodni broj k < 9, te niz od k različitih dekadskih znamenaka. Ukoliko učitane znamenke nisu različite, program treba ispisati poruku "Greska!" (bez navodnika).
Program treba ispisati sumu svih prirodnih brojeva čije su znamenke iz učitanog niza, te se ne ponavljaju unutar jednog broja.

Na primjer, za k = 2 i učitane brojeve 1 i 3, program ispisuje "48" (jer je 1+3+13+31=4Cool.

Može pomoć ili hint u vezi funkcijskog dijela rješenja.

#16:  Autor/ica: GinoLokacija: Pula PostPostano: 20:25 ned, 4. 3. 2012
    —
ideja je da se s tim zadatkom malo vjezbaju rekurzije, bar mi se cini (iako se stvar moze rijesiti i bez njih)

trebalo bi naci sve podskupove tog skupa, i za svaki od njih naci sve permutacije, permutacija predstavlja broj i suma svih tih brojeva jest rjesenje

#17:  Autor/ica: vsegoLokacija: /sbin/init PostPostano: 21:40 ned, 4. 3. 2012
    —
Nije li lakse samo traziti "uredjene podskupove", dakle kao podskupovi, ali bez da se uvodi uredjaj medju elementima? Smile

#18:  Autor/ica: GinoLokacija: Pula PostPostano: 9:34 pon, 5. 3. 2012
    —
nije li poanta zadace maksimalnio si otezat? Very Happy
ali da, vjerojatno je (malo) jednostavnije Very Happy

#19:  Autor/ica: vsegoLokacija: /sbin/init PostPostano: 10:01 pon, 5. 3. 2012
    —
Gino (napisa):
nije li poanta zadace maksimalnio si otezat? Very Happy


Ne, poanta je ucenje gradiva. Wink

#20:  Autor/ica: Namdev PostPostano: 12:46 pon, 5. 3. 2012
    —
Ja sam napisao funkciju koja prima neki broj te tom broju dodaje članove niza kao zadnju znamenku, ako naravno to zadovoljava zadane uvjete, dodajem taj broj u sumu i ponovno pozivam funkciju koja sada prima taj dobiveni broj.

To je više kao hint, da ne napišem cijelu funkciju i što ona vraća, ako vraća, što prima na početku, uvjete, pomoćne funkcije, itd.



Forum@DeGiorgi -> Programiranje 1 i 2


output generated using printer-friendly topic mod. Vremenska zona: GMT + 01:00.

Idite na 1, 2, 3 ... 11, 12, 13  Sljedeće  :| |:
Stranica 1 / 13.

Powered by phpBB © 2001,2002 phpBB Group
Theme created by Vjacheslav Trushkin