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

Zadatak iz praktičnog kolokvija (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
krilo
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 01. 11. 2016. (14:45:48)
Postovi: (4D)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 20:55 uto, 13. 12. 2016    Naslov: Zadatak iz praktičnog kolokvija Citirajte i odgovorite

Pozdrav, forumaši :)
Muči me jedna petlja sljedećeg zadatka:
Zadatak 107: Napišite program koji učitava prirodne brojeve n i d, te pomoću zvjezdica “crta” niz kvadrata, čije stranice imaju duljine n,
n−d, . . . , s tim da svaki kvadrat počinje u novom retku. Kvadrate treba ispuniti točkicama.
Primjer (brojeve linija NE treba ispisati): n = 5 i d = 2 (duljine stranica kvadrata su: 5, 3 i 1):
1: *****
2: *. . .*
3: *. . .*
4: *. . .*
5: *****
6: ***
7: *. *
9: ***
10: *

Program je napisan, s kodom niže. Problem je u prvoj "ružnoj" for petlji, kako mi kažu (iako petlje ne hodaju pistama pa mi nije jasno zašto :D ).
Program sasvim lijepo ispisuje pravokutnik ispunjen točkicama kada te petlje nema, a kad je ima, onda ispisuje točkice u beskonačnost.
Ako ima ideja kako taj problem riješiti, slušam :)

[code:1]
int main(void)
{
long unsigned n, tn, d, j=0, k=0;
printf ("Unesi n i d: ");
scanf("%lu%lu", &n, &d);

for (n; n-d>0; n-=d)
{
tn=n;
while (tn>0) /*red samo sa zvjezdicama*/
{printf ("*");
tn--;
}
printf("\n");

tn=n;
for (j=0; j<tn-2; j++) /*redovi s tockicama*/
{
printf ("*");
for (k=0; k<tn-2; k++)
{printf (".");}
printf ("*");
printf ("\n");
}

tn=n; /*while petlja ista kao gornja*/
while (tn>0)
{printf ("*");
tn--;
}

}

return 0;
} [/code:1]
Pozdrav, forumaši Smile
Muči me jedna petlja sljedećeg zadatka:
Zadatak 107: Napišite program koji učitava prirodne brojeve n i d, te pomoću zvjezdica “crta” niz kvadrata, čije stranice imaju duljine n,
n−d, . . . , s tim da svaki kvadrat počinje u novom retku. Kvadrate treba ispuniti točkicama.
Primjer (brojeve linija NE treba ispisati): n = 5 i d = 2 (duljine stranica kvadrata su: 5, 3 i 1):
1: *****
2: *. . .*
3: *. . .*
4: *. . .*
5: *****
6: ***
7: *. *
9: ***
10: *

Program je napisan, s kodom niže. Problem je u prvoj "ružnoj" for petlji, kako mi kažu (iako petlje ne hodaju pistama pa mi nije jasno zašto Very Happy ).
Program sasvim lijepo ispisuje pravokutnik ispunjen točkicama kada te petlje nema, a kad je ima, onda ispisuje točkice u beskonačnost.
Ako ima ideja kako taj problem riješiti, slušam Smile

Kod:

int main(void)
{
    long unsigned n, tn, d, j=0, k=0;
    printf ("Unesi n i d: ");
    scanf("%lu%lu", &n, &d);
   
    for (n; n-d>0; n-=d)
        {
            tn=n;
            while (tn>0)                /*red samo sa zvjezdicama*/
                {printf ("*");
                 tn--;
                }
            printf("\n");

            tn=n;
            for (j=0; j<tn-2; j++)          /*redovi s tockicama*/
                {
                    printf ("*");
                    for (k=0; k<tn-2; k++)
                        {printf (".");}
                    printf ("*");
                    printf ("\n");
                }

            tn=n;                                /*while petlja ista kao gornja*/
            while (tn>0)
                {printf ("*");
                    tn--;
                }

        }

return 0;
}


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


Pridružen/a: 03. 09. 2012. (15:59:06)
Postovi: (92)16
Sarma = la pohva - posuda
29 = 31 - 2

PostPostano: 22:20 uto, 13. 12. 2016    Naslov: Citirajte i odgovorite

"Greska" je opet izvan algoritma. :D Makni long unsigned (zasto ga uopce koristis?), stavi int i bit ce ok - onda samo jos na kraju te glavne petlje moras dodati prijelaz u novi red (jer ga nemas nakon zadnjeg crtanja zvjezdica).

Problem (long) unsigned brojeva je u tome sto kad jednom odes s "krive" strane nule, brojevi nisu negativni nego "jako veliki" (masem sad rukama da bude cim jasnije, izguglaj doticni tip za detalje ili, jos bolje, stavi pocetnu vrijednost na npr. 10 i zavrti beskonacnu petlju ispisivanja vrijednosti gdje je u svakom koraku smanjis za 1), sto im, u nekom smislu, i sam naziv govori. :D

Ergo, uopce nije stvar u "ruznoj" petlji, iako bi zbog preglednosti bilo bolje da umjesto tog [tt]n[/tt] prije glavne petlje stavis npr. [tt]int i = n[/tt] i onda u petlji smanjujes taj "brojac", a ulazni parametar ostavis netaknutim - u dosta zadataka ces ga ionako morati ispisati na kraju ili tako nesto.
"Greska" je opet izvan algoritma. Very Happy Makni long unsigned (zasto ga uopce koristis?), stavi int i bit ce ok - onda samo jos na kraju te glavne petlje moras dodati prijelaz u novi red (jer ga nemas nakon zadnjeg crtanja zvjezdica).

Problem (long) unsigned brojeva je u tome sto kad jednom odes s "krive" strane nule, brojevi nisu negativni nego "jako veliki" (masem sad rukama da bude cim jasnije, izguglaj doticni tip za detalje ili, jos bolje, stavi pocetnu vrijednost na npr. 10 i zavrti beskonacnu petlju ispisivanja vrijednosti gdje je u svakom koraku smanjis za 1), sto im, u nekom smislu, i sam naziv govori. Very Happy

Ergo, uopce nije stvar u "ruznoj" petlji, iako bi zbog preglednosti bilo bolje da umjesto tog n prije glavne petlje stavis npr. int i = n i onda u petlji smanjujes taj "brojac", a ulazni parametar ostavis netaknutim - u dosta zadataka ces ga ionako morati ispisati na kraju ili tako nesto.


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


Pridružen/a: 01. 11. 2016. (14:45:48)
Postovi: (4D)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 22:48 uto, 13. 12. 2016    Naslov: Citirajte i odgovorite

Napokon radi. Mislila sam da moram staviti long unsigned jer u zadatku traže unos prirodnog broja, ali vidim da to ipak nema veze. Hvala puno :) :) :)
Napokon radi. Mislila sam da moram staviti long unsigned jer u zadatku traže unos prirodnog broja, ali vidim da to ipak nema veze. Hvala puno Smile Smile Smile


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


Pridružen/a: 01. 11. 2016. (14:45:48)
Postovi: (4D)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 16:48 čet, 15. 12. 2016    Naslov: Citirajte i odgovorite

Novi problem:
Zadatak 70:
Kazemo da je niz cijelih brojeva a0, a1, . . . , an “fibonaccijevski” ako postoji neki [tex]\alpha[/tex] ∈ Z takav da za sve k, 2 ≤ k ≤ n, vrijedi [tex]a_{k}[/tex] = [tex]a_{k−1}[/tex] + [tex]\alpha[/tex] · [tex]a_{k−2}[/tex]. Pri tome, prva dva clana mogu biti proizvoljni cijeli brojevi.
Napisite program koji ucitava prirodni broj n < 20 koji predstavlja duljinu niza, te niz brojeva a0, a1, . . . , an. Program treba provjeriti je li ucitani niz brojeva fibonaccijevski, te ako jest, odrediti pripadni [tex]\alpha[/tex] i ispisati odgovarajucu poruku.
Na primjer, ako je n = 5, a ucitani niz brojeva je 1, 2, 4, 8, 16, 32, onda program treba ispisati poruku “Ucitani niz brojeva je fibonaccijevski s alfa = 2”. Napomena: uvijek ce biti a0 != 0.

Unatoč svim mogućim prepravcima koda, još uvijek dobivam za testni primjer da niz nije fibonaccijevski. :wall: Provjerila sam stoput jesam li dobro zadala i dodijelila [tex]a_{k-3}, a_{k-2}[/tex] i [tex]a_{k-1}[/tex], ali ne nalazim više grešaka :-k
Ako ima dobrovoljaca i prijedloga, slušam. Prilažem kod:

[code:1]
int main(void)
{
int n, i, ak, ak1, ak2, ak3, prvi, drugi, treci, fib=0, alfa, alfa_konst=0;
printf ("Unesi n kao duljinu niza (<20): ");
scanf ("%d", &n);
printf ("Unesi brojeve: ");

scanf ("%d%d%d", &prvi, &drugi, &treci);
ak3=prvi;
ak2=drugi;
ak1=treci;

for (i=0; i<n-2; i++) /*broj unosa je n-1 jer su prvi, drugi i treci 3 clana + (n-3 ostalih + a0)*/
{
fib=0;
scanf ("%d", &ak);

if (i==0)
{for (alfa=0; alfa<ak; alfa++)
{
if (ak1==((ak2)+(alfa*(ak3))))
{fib=1;
alfa_konst=alfa; /*zadaj alfa_konst samo ako postoji prvi put; ako ne postoji za prva tri clana, ne postoji ni za ostale*/
break;}
}
}

for (alfa=0; alfa<ak; alfa++)
{
if (ak==((ak1)+(alfa*(ak2))))
{fib=1;
break;}
}

if (alfa_konst!=alfa) {fib=0;} /*alfa uvijek mora ostati ista, i to kao pocetni alfa_konst*/

if (fib==0) {break;}

ak1=ak;
ak2=ak1;
}

if (fib==0) {printf ("Niz nije fibonaccijevski.\n");}
else {printf ("Ucitani niz brojeva je fibonaccijevski s alfa = %d", alfa_konst);}

return 0;
}
[/code:1]
Novi problem:
Zadatak 70:
Kazemo da je niz cijelih brojeva a0, a1, . . . , an “fibonaccijevski” ako postoji neki [tex]\alpha[/tex] ∈ Z takav da za sve k, 2 ≤ k ≤ n, vrijedi [tex]a_{k}[/tex] = [tex]a_{k−1}[/tex] + [tex]\alpha[/tex] · [tex]a_{k−2}[/tex]. Pri tome, prva dva clana mogu biti proizvoljni cijeli brojevi.
Napisite program koji ucitava prirodni broj n < 20 koji predstavlja duljinu niza, te niz brojeva a0, a1, . . . , an. Program treba provjeriti je li ucitani niz brojeva fibonaccijevski, te ako jest, odrediti pripadni [tex]\alpha[/tex] i ispisati odgovarajucu poruku.
Na primjer, ako je n = 5, a ucitani niz brojeva je 1, 2, 4, 8, 16, 32, onda program treba ispisati poruku “Ucitani niz brojeva je fibonaccijevski s alfa = 2”. Napomena: uvijek ce biti a0 != 0.

Unatoč svim mogućim prepravcima koda, još uvijek dobivam za testni primjer da niz nije fibonaccijevski. Brick wall Provjerila sam stoput jesam li dobro zadala i dodijelila [tex]a_{k-3}, a_{k-2}[/tex] i [tex]a_{k-1}[/tex], ali ne nalazim više grešaka Think
Ako ima dobrovoljaca i prijedloga, slušam. Prilažem kod:

Kod:

int main(void)
{
    int n, i, ak, ak1, ak2, ak3, prvi, drugi, treci, fib=0, alfa, alfa_konst=0;
    printf ("Unesi n kao duljinu niza (<20): ");
    scanf ("%d", &n);
    printf ("Unesi brojeve: ");

    scanf ("%d%d%d", &prvi, &drugi, &treci);
    ak3=prvi;
    ak2=drugi;
    ak1=treci;

    for (i=0; i<n-2; i++)                                       /*broj unosa je n-1 jer su prvi, drugi i treci 3 clana + (n-3 ostalih + a0)*/
        {
            fib=0;
            scanf ("%d", &ak);

            if (i==0)
                {for (alfa=0; alfa<ak; alfa++)
                    {
                        if (ak1==((ak2)+(alfa*(ak3))))
                            {fib=1;
                             alfa_konst=alfa;                    /*zadaj alfa_konst samo ako postoji prvi put; ako ne postoji za prva tri clana, ne postoji ni za ostale*/
                             break;}
                    }
                }

            for (alfa=0; alfa<ak; alfa++)
                {
                    if (ak==((ak1)+(alfa*(ak2))))
                        {fib=1;
                         break;}
                }

            if (alfa_konst!=alfa) {fib=0;}                         /*alfa uvijek mora ostati ista, i to kao pocetni alfa_konst*/

            if (fib==0) {break;}

            ak1=ak;
            ak2=ak1;
        }

    if (fib==0) {printf ("Niz nije fibonaccijevski.\n");}
        else {printf ("Ucitani niz brojeva je fibonaccijevski s alfa = %d", alfa_konst);}

return 0;
}


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


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (353A)16
Spol: zombi
Sarma = la pohva - posuda
849 = 1063 - 214
Lokacija: /sbin/init

PostPostano: 21:33 čet, 15. 12. 2016    Naslov: Citirajte i odgovorite

Mozda da ne kompliciramo: razmisli kako bi izracunala [tex]\alpha[/tex] na ruke?

Imas formulu za prva tri elementa, znas elemente, fali [tex]\alpha[/tex]... jedna jednadzba s jednom nepoznanicom. Dobijes [tex]\alpha[/tex] i samo provjeris valja li za ostatak niza, a ne svaki put racunati za sve moguce i nemoguce vrijednosti (i jos zaboravis negativne, plus ogranicis [tex]\alpha<a_k[/tex] za [tex]k>2[/tex]).
Mozda da ne kompliciramo: razmisli kako bi izracunala [tex]\alpha[/tex] na ruke?

Imas formulu za prva tri elementa, znas elemente, fali [tex]\alpha[/tex]... jedna jednadzba s jednom nepoznanicom. Dobijes [tex]\alpha[/tex] i samo provjeris valja li za ostatak niza, a ne svaki put racunati za sve moguce i nemoguce vrijednosti (i jos zaboravis negativne, plus ogranicis [tex]\alpha<a_k[/tex] za [tex]k>2[/tex]).



_________________
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
krilo
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 01. 11. 2016. (14:45:48)
Postovi: (4D)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 22:15 čet, 15. 12. 2016    Naslov: Citirajte i odgovorite

Hvala vsego! Kod skratih za barem 20 redaka yesss
Hvala vsego! Kod skratih za barem 20 redaka Yes


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


Pridružen/a: 01. 11. 2016. (14:45:48)
Postovi: (4D)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 13:41 pet, 6. 1. 2017    Naslov: Citirajte i odgovorite

Pozdrav :)
Imam gotov program za najveću zajedničku mjeru (kod niže) i nije mi jasno zašto *radi* za brojeve 20 i 2.
S tim da je 20/2=10+0, tj. 20%2=0, nema smisla da se ulazi uopće u while petlju, a kamoli pridruži c-u broj 2.
Slušam ideje/rješenja problema, hvala :D

[code:1]
int main(void)
{
int a, b, c, t, ia, ib;
printf ("Unesi a i b: ");
scanf ("%d%d", &a, &b);

if (b>a) {t=a; a=b; b=t;}
if (b<0) b=-b;
if (a<0) a=-a;

ia=a; ib=b;
while (a%b!=0)
{
c=a%b;
a=b;
b=c;
}

printf ("GCD(%d,%d) = %d", ia, ib, c);

return 0; [/code:1]
Pozdrav Smile
Imam gotov program za najveću zajedničku mjeru (kod niže) i nije mi jasno zašto *radi* za brojeve 20 i 2.
S tim da je 20/2=10+0, tj. 20%2=0, nema smisla da se ulazi uopće u while petlju, a kamoli pridruži c-u broj 2.
Slušam ideje/rješenja problema, hvala Very Happy

Kod:

int main(void)
{
    int a, b, c, t, ia, ib;                                   
    printf ("Unesi a i b: ");
    scanf ("%d%d", &a, &b);

    if (b>a) {t=a; a=b; b=t;}
    if (b<0) b=-b;
    if (a<0) a=-a;

    ia=a; ib=b;
    while (a%b!=0)
        {
            c=a%b;
            a=b;
            b=c;
        }

    printf ("GCD(%d,%d) = %d", ia, ib, c);

return 0;


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


Pridružen/a: 07. 10. 2012. (14:09:25)
Postovi: (5E)16
Sarma = la pohva - posuda
13 = 14 - 1
Lokacija: Zagreb

PostPostano: 14:35 pet, 6. 1. 2017    Naslov: Citirajte i odgovorite

Koliko vidim, ne ulazi u petlju. Samo bi trebao prije petlje staviti c = b.
Koliko vidim, ne ulazi u petlju. Samo bi trebao prije petlje staviti c = b.


[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
krilo
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 01. 11. 2016. (14:45:48)
Postovi: (4D)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 21:19 pet, 6. 1. 2017    Naslov: Citirajte i odgovorite

Pa upravo to mi nije jasno... zašto program radi bez problema i izbacuje dobar rezultat za brojeve 20 i 2 ako uopće ne uđe u petlju? lol -k
Pa upravo to mi nije jasno... zašto program radi bez problema i izbacuje dobar rezultat za brojeve 20 i 2 ako uopće ne uđe u petlju? Laughing Think


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


Pridružen/a: 07. 10. 2012. (14:09:25)
Postovi: (5E)16
Sarma = la pohva - posuda
13 = 14 - 1
Lokacija: Zagreb

PostPostano: 0:36 sub, 7. 1. 2017    Naslov: Citirajte i odgovorite

Valjda slučajno, ja sam pokrenuo kod sebe i dobije se random broj (c nije inicijaliziran, pa ono što je bilo u memoriji).
Valjda slučajno, ja sam pokrenuo kod sebe i dobije se random broj (c nije inicijaliziran, pa ono što je bilo u memoriji).


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


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (353A)16
Spol: zombi
Sarma = la pohva - posuda
849 = 1063 - 214
Lokacija: /sbin/init

PostPostano: 11:28 sub, 7. 1. 2017    Naslov: Citirajte i odgovorite

Meni pod gcc/Linux izbaci [tt]GCD(20,2) = 0[/tt], a pod Code::Blocks/WinXP (pod VirtualBoxom na Linuxu) izbaci [tt]GCD(20,2) = 4200400[/tt], [tt]GCD(20,2) = 4200320[/tt],...

To sto daje dobar rezultat s jednim compilerom na jednom racunalu za jedan primjer, nije garancija da "radi dobro". Recimo, neki compileri inicijaliziraju varijable na nulu, no to nije standard i na to se ne mozes osloniti.

Dodatno, ako u petlju ubacis nekakav [tt]printf[/tt], vidjet ces da se to nece niti jednom izvrsiti (a mogao bi ti se i rezultat promijeniti), i.e., izvrsavanje ne ulazi u tu petlju.

Zasto je ispalo [tt]c == 2[/tt]? Vrlo je malo vjerojatno da bas tako pogodi, ali ne i nemoguce. Ne vidim bolje objasnjenje od "slucajnost", koliko god nevjerojatno zvucalo.

Ima li neki posebni razlog zasto zelis [tt]c[/tt], a ne [tt]b[/tt]?
Meni pod gcc/Linux izbaci GCD(20,2) = 0, a pod Code::Blocks/WinXP (pod VirtualBoxom na Linuxu) izbaci GCD(20,2) = 4200400, GCD(20,2) = 4200320,...

To sto daje dobar rezultat s jednim compilerom na jednom racunalu za jedan primjer, nije garancija da "radi dobro". Recimo, neki compileri inicijaliziraju varijable na nulu, no to nije standard i na to se ne mozes osloniti.

Dodatno, ako u petlju ubacis nekakav printf, vidjet ces da se to nece niti jednom izvrsiti (a mogao bi ti se i rezultat promijeniti), i.e., izvrsavanje ne ulazi u tu petlju.

Zasto je ispalo c == 2? Vrlo je malo vjerojatno da bas tako pogodi, ali ne i nemoguce. Ne vidim bolje objasnjenje od "slucajnost", koliko god nevjerojatno zvucalo.

Ima li neki posebni razlog zasto zelis c, a ne b?



_________________
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
krilo
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 01. 11. 2016. (14:45:48)
Postovi: (4D)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 13:50 sub, 7. 1. 2017    Naslov: Citirajte i odgovorite

Pa nema nikakvog posebnog razloga, samo mi nije bilo jasno u čem je stvar. ) Hvala puno na objašnjenju D
Pa nema nikakvog posebnog razloga, samo mi nije bilo jasno u čem je stvar. Smile Hvala puno na objašnjenju Very Happy


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


Pridružen/a: 01. 11. 2016. (14:45:48)
Postovi: (4D)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 13:50 ned, 5. 2. 2017    Naslov: Citirajte i odgovorite

Našao se jedan zadatak iz zadaće da mi nikako nije jasan...
Napisite program koji ucitava prirodne brojeve a i b, te u padajucem poretku ispisuje sve cijele brojeve koji se nalaze izmedju a i b (bez a i b), a u zapisu s bazom 6 imaju samo znamenke između 1 i 3 (ukljucivo i granice). Ispisane brojeve odvojite razmacima. Ako takvih brojeva nema, program ispisuje
poruku "Nema takvih brojeva.". Pazite da tekst bude naveden tocno kako piše (bez navodnika)! Oprez: može biti a<b ili a>b ili a=b!

Kod mi je (u najmanju ruku) šarolik. Da se objasnim ukratko, silne ekstra funkcije (zapisa broja u bazi 6, brojanja znamenaka u bazi 6 i 10) su tu jer se javio problem da je u zapisu broja npr. 6 prvotna funkcija izbacivala samo 1, a zapis je zapravo 10, pa sam morala dodavati određen broj nula na kraj kako bi int main mogao izbacivati brojeve u čijem zapisu nema nule na kraju. (Svjesna sam činjenice da funkcija za zapis broja u bazi 6 (bub6) ne izbacuje dobar zapis, ali znamenke su tu bitne, pa nisam pridavala poretku puno značaja.)

Konkretno, aplikacija kaže da je output krivi za input 911 i 377, ali sam provjeravala svaki treći broj i, zaista, svaki od njih sadrži samo brojeve od 1 do 3. Ne znam u čemu je onda problem :? Hvala unaprijed na odgovoru.

[code:1]
int bzub10(int x)
{
int brojac=0;
while (x>0) {x/=10; brojac++;}
return brojac;
}

int bzub6(int x)
{
int brojac=0;
while (x>0) {x/=6; brojac++;}
return brojac;
}

int bub6 (int x)
{
int broj=0, nbroj=0, znam, i;
int t=x;
if (x<0) t=-x;
while (t>0)
{
broj=broj*10+t%6;
t/=6;
}
if (bzub6(x)!=bzub10(broj))
{
while (bzub6(x)!=bzub10(broj)) broj*=10;
}

return broj;
}

int imazn(x)
{
int vr=1, nx;
nx=bub6(x);
for (nx; nx; nx/=10)
{
if (nx%10!=1 && nx%10!=2 && nx%10!=3) vr=0;
}
return vr;
}

int main(void)
{
int a, b, i, brojac=0;
scanf ("%d%d", &a, &b);

if (b>a) {int temp; temp=a; a=b; b=temp;}

for (i=a-1; i>b; i--)
{
if (imazn(i)) {printf ("%d ", i); brojac=1;}
}
if (brojac==0) printf ("Nema takvih brojeva.");

return 0;
}
[/code:1]
Našao se jedan zadatak iz zadaće da mi nikako nije jasan...
Napisite program koji ucitava prirodne brojeve a i b, te u padajucem poretku ispisuje sve cijele brojeve koji se nalaze izmedju a i b (bez a i b), a u zapisu s bazom 6 imaju samo znamenke između 1 i 3 (ukljucivo i granice). Ispisane brojeve odvojite razmacima. Ako takvih brojeva nema, program ispisuje
poruku "Nema takvih brojeva.". Pazite da tekst bude naveden tocno kako piše (bez navodnika)! Oprez: može biti a<b ili a>b ili a=b!

Kod mi je (u najmanju ruku) šarolik. Da se objasnim ukratko, silne ekstra funkcije (zapisa broja u bazi 6, brojanja znamenaka u bazi 6 i 10) su tu jer se javio problem da je u zapisu broja npr. 6 prvotna funkcija izbacivala samo 1, a zapis je zapravo 10, pa sam morala dodavati određen broj nula na kraj kako bi int main mogao izbacivati brojeve u čijem zapisu nema nule na kraju. (Svjesna sam činjenice da funkcija za zapis broja u bazi 6 (bub6) ne izbacuje dobar zapis, ali znamenke su tu bitne, pa nisam pridavala poretku puno značaja.)

Konkretno, aplikacija kaže da je output krivi za input 911 i 377, ali sam provjeravala svaki treći broj i, zaista, svaki od njih sadrži samo brojeve od 1 do 3. Ne znam u čemu je onda problem Confused Hvala unaprijed na odgovoru.

Kod:

int bzub10(int x)
{
    int brojac=0;
    while (x>0) {x/=10; brojac++;}
    return brojac;
}

int bzub6(int x)
{
    int brojac=0;
    while (x>0) {x/=6; brojac++;}
    return brojac;
}

int bub6 (int x)
    {
        int broj=0, nbroj=0, znam, i;
        int t=x;
        if (x<0) t=-x;
        while (t>0)
            {
                broj=broj*10+t%6;
                t/=6;
            }
        if (bzub6(x)!=bzub10(broj))
        {
            while (bzub6(x)!=bzub10(broj)) broj*=10;
        }

        return broj;
    }

int imazn(x)
    {
        int vr=1, nx;
        nx=bub6(x);
        for (nx; nx; nx/=10)
            {
                if (nx%10!=1 && nx%10!=2 && nx%10!=3) vr=0;
            }
        return vr;
    }

int main(void)
{
    int a, b, i, brojac=0;
    scanf ("%d%d", &a, &b);

    if (b>a) {int temp; temp=a; a=b; b=temp;}

    for (i=a-1; i>b; i--)
        {
            if (imazn(i)) {printf ("%d ", i); brojac=1;}
        }
    if (brojac==0) printf ("Nema takvih brojeva.");

return 0;
}


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


Pridružen/a: 30. 11. 2002. (22:17:12)
Postovi: (718)16
Spol: muško
Sarma = la pohva - posuda
199 = 237 - 38
Lokacija: MPI-SWS, Kaiserslautern

PostPostano: 14:40 ned, 5. 2. 2017    Naslov: Citirajte i odgovorite

Bez da ulazimo u detalje toga što se sve dogodilo, ajmo domah na očiti problem. Naime, čim kreneš pisati nešto ovakvo [quote="krilo"][code:1]int bub6 (int x)
{
int broj=0, nbroj=0, znam, i;
int t=x;
if (x<0) t=-x;
while (t>0)
{
broj=broj*10+t%6;
t/=6;
}
if (bzub6(x)!=bzub10(broj))
{
while (bzub6(x)!=bzub10(broj)) broj*=10;
}

return broj;
}[/code:1][/quote] odmah ti treba biti jasno da neće biti ništa od toga.

Najbolji način vidiš koliko ovo nema smisla je da probaš objasniti što točno ova funkcija radi.

Znam da ovaj post zvuči agresivno, ali radiš grešku koja se jako često ponavlja i vrlo je bitno da se toga riješiš što prije, a iskustvo mi govori da je najbolji način da shvatiš gdje griješiš ako pokušaš sama objasniti što ova funkcija radi i zašto ti treba.

Molim te, ako imaš vremena, probaj mi dati high-level objašnjenje što ova funkcija radi i zašto ti treba, pa ćemo zajedno analizirati što se tu zapravo događa.
Bez da ulazimo u detalje toga što se sve dogodilo, ajmo domah na očiti problem. Naime, čim kreneš pisati nešto ovakvo
krilo (napisa):
Kod:
int bub6 (int x)
    {
        int broj=0, nbroj=0, znam, i;
        int t=x;
        if (x<0) t=-x;
        while (t>0)
            {
                broj=broj*10+t%6;
                t/=6;
            }
        if (bzub6(x)!=bzub10(broj))
        {
            while (bzub6(x)!=bzub10(broj)) broj*=10;
        }

        return broj;
    }
odmah ti treba biti jasno da neće biti ništa od toga.

Najbolji način vidiš koliko ovo nema smisla je da probaš objasniti što točno ova funkcija radi.

Znam da ovaj post zvuči agresivno, ali radiš grešku koja se jako često ponavlja i vrlo je bitno da se toga riješiš što prije, a iskustvo mi govori da je najbolji način da shvatiš gdje griješiš ako pokušaš sama objasniti što ova funkcija radi i zašto ti treba.

Molim te, ako imaš vremena, probaj mi dati high-level objašnjenje što ova funkcija radi i zašto ti treba, pa ćemo zajedno analizirati što se tu zapravo događa.



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
krilo
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 01. 11. 2016. (14:45:48)
Postovi: (4D)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 15:36 ned, 5. 2. 2017    Naslov: Citirajte i odgovorite

Ta funkcija ne radi ništa, rekla bih, za čovjeka smisleno, ali služi svrsi zadatka. Zvuči glupo, ali konstruira obrnuti zapis broja u bazi 6, i dodaje nule na kraju, ako je to potrebno (jer su znamenke zapisa broja u bazi 6 bitne, ne njihov poredak). Treba mi da kasnije za funkciju koja će provjeriti ima li u tom zapisu drugih znamenaka osim 1, 2, 3. Po toj drugoj fukciji imam uvjet za if petlju koja će ispisati sve odgovarajuće brojeve. Otherwise, ne znam što podrazumijevaš pod high-level objašnjenje.

Bila sam napisala kompletnu funkciju koja ispisuje broj u bazi 6 (s pravilnim poretkom znamenaka), ali kada sam naišla na problem s nulom, činilo mi se praktičnije ostati s dobrim znamenkama na jednoj while petlji, nego praviti i drugu pa kompromitirati rješenje (bavim se programiranjem tek 3 mjeseca, pa nisam 100% sigurna da će se ono što kodiram realizirati u program koji će uvijek raditi). Ne zamjeram "agresivnost", razumljivo je. Nemam dovoljno iskustva da procijenim da funkcija ne valja, ako vidim da služi svrsi, ne nalazim problem.
Ta funkcija ne radi ništa, rekla bih, za čovjeka smisleno, ali služi svrsi zadatka. Zvuči glupo, ali konstruira obrnuti zapis broja u bazi 6, i dodaje nule na kraju, ako je to potrebno (jer su znamenke zapisa broja u bazi 6 bitne, ne njihov poredak). Treba mi da kasnije za funkciju koja će provjeriti ima li u tom zapisu drugih znamenaka osim 1, 2, 3. Po toj drugoj fukciji imam uvjet za if petlju koja će ispisati sve odgovarajuće brojeve. Otherwise, ne znam što podrazumijevaš pod high-level objašnjenje.

Bila sam napisala kompletnu funkciju koja ispisuje broj u bazi 6 (s pravilnim poretkom znamenaka), ali kada sam naišla na problem s nulom, činilo mi se praktičnije ostati s dobrim znamenkama na jednoj while petlji, nego praviti i drugu pa kompromitirati rješenje (bavim se programiranjem tek 3 mjeseca, pa nisam 100% sigurna da će se ono što kodiram realizirati u program koji će uvijek raditi). Ne zamjeram "agresivnost", razumljivo je. Nemam dovoljno iskustva da procijenim da funkcija ne valja, ako vidim da služi svrsi, ne nalazim problem.


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


Pridružen/a: 30. 11. 2002. (22:17:12)
Postovi: (718)16
Spol: muško
Sarma = la pohva - posuda
199 = 237 - 38
Lokacija: MPI-SWS, Kaiserslautern

PostPostano: 17:17 ned, 5. 2. 2017    Naslov: Citirajte i odgovorite

[quote="krilo"]Ta funkcija [b]ne radi ništa[/b], rekla bih, za čovjeka [b]smisleno[/b][/quote]
Ovo mora biti crvena lampica! Ako nema smisla, onda nema potrebe za pisanjem takve funkcije. Ključna stvar kod programiranja je natjerati kompjuter da rješava zadatak nizom jednostavnih i [u]smislenih[/u] instrukcija.

BTW, stvari mogu biti smislene samo za ljude [size=3](možda i za neke druge životinje, ali to ovdje nije bitno)[/size]. Za kompjuter nikad ništa nije smisleno. Kompjuter samo radi ono što mu ti kažeš da radi. Prema tome, ako mu ti daš da obavlja zadatak koji nema smisla, onda kompjuter radi besmislice.

[quote]ali služi svrsi zadatka.[/quote]
Meni se čini da služi kompliciranju zadatka. :wink:

[quote][b]Zvuči glupo[/b], ali konstruira obrnuti zapis broja u bazi 6[/quote]
Još jedna crvena lampica. Ako sama sebi zvučiš glupo, to je dobar signal da nešto kompliciraš, ili nešto krivo radiš, ili si oko nečega zbunjena. U svakom slučaju, ako nešto zvuči glupo, onda to uglavnom znači da nisi skroz iskristalizirala algoritam kojim se problem treba riješiti, nego pribjegavaš nekakvim ad-hoc rješenjima.

Sad promisli malo bolje što znači [i]"konstruira zapis broja u bazi 6"[/i].

Jedan broj ima različite zapise u različitm bazama. Ti, za zadani broj [i]x[/i], tražiš neki drugi broj [i]y[/i] koji [b]u bazi 10[/b] ima iste znamenke kao broj [i]x[/i] u bazi 6. Zašto?

Meni se čini da ti na neki način poistovjećuješ broj s njegovim zapisom u bazi 10. Nemoj to raditi. Broj je broj, a zapis je zapis. Bez obzira pisali mi [tex](1024)_{10}[/tex], [tex](10000000000)_2[/tex], [tex](2000)_8[/tex], [tex](400)_{16}[/tex], ili MXXIV, radi se o jednom te istom broju. Baza 10 nije ni po čemu specijalna, osim što ljudi imaju 10 prstiju, pa se nama ta baza jako sviđa.

Na kraju ovog dijela rasprave, promisli što bi se dogodilo da umjesto baze 6 trebaš raditi u bazi npr. 16. Tada ne bi mogla napraviti ovaj svoj manevar, jer ne možeš za baš svaki broj [i]x[/i] pronaći neki broj [i]y[/i] tako da [i]y[/i] u bazi 10 ima iste znamenke kao [i]x[/i] u bazi 16. Je li tako? (Vratit ćemo se na ovu diskusiju malo kasnije.)

[quote]Treba mi da kasnije za funkciju koja će provjeriti ima li u tom zapisu drugih znamenaka osim 1, 2, 3.[/quote]
Ali, ne treba ti! :wink:

Što će ti neki [i]y[/i] koji u bazi 10 ima iste znamenke kao [i]x[/i] u bazi 6, kad već imaš [i]x[/i]? Čim imaš [i]x[/i] odmah možeš vidjeti njegove znamenke u bazi 6 -- to su ostaci pri opetovanom dijeljenju s 6. Je li tako?

[quote]Otherwise, ne znam što podrazumijevaš pod high-level objašnjenje.[/quote]
Točno ovo što si napisala. Svaka čast na koncizno sročenom objašnjenju.

[quote]Bila sam napisala kompletnu funkciju koja ispisuje broj u bazi 6[/quote]
Zašto si uopće išla pisati tu funkciju? Zadatak ne traži da ispis bude u bazi 6. Jednostavno ispiši u bazi 10 i svi sretni i zadovoljni.

[quote]bavim se programiranjem tek 3 mjeseca, pa nisam 100% sigurna da će se ono što kodiram realizirati u program koji će uvijek raditi[/quote]
To je OK. Ja se bavim programiranjem 20 godina :djed:, pa još uvijek nisam 100% siguran da će ono što kodiram rezultirati točnim rješenjem problema na kojem radim. Bitno je da s vremenom dobiješ više samopouzdanja da se prihvatiš kompleksnijih problema, a oni jednostavni prestaju uzrokovati poteškoće.

[quote]Ne zamjeram "agresivnost", razumljivo je.[/quote]
Hvala na razumijevanju.

[quote]Nemam dovoljno iskustva da procijenim da funkcija ne valja[/quote]
Ne brini se, iskustvo dolazi s vremenom, ali sve se na kraju svodi na jednostavnu maksimu: ako "zvuči glupo" ili "ne radi ništa smisleno", onda vrlo vjerojatno ne valja.


[quote]ako vidim da služi svrsi, ne nalazim problem.[/quote]
Kada se o problemu ne promisli detaljno, onda čovjek često sam sebi zakomplicira život.

Ti si ovdje krenula nešto "prebacivati u bazu 6" na način da si tražila broj s istim znamenkama u bazi 10. Zanimljivo je da tvoj pristup radi baza koju promatraš (u konkretnom sučaju 6), nije veća od 10. Za baze veće od 10, tvoj pristup sigurno ne funkcionira iz razloga koji sam spomenuo nešto ranije.

Zar ti nije čudno da tvoj algoritam radi za baze 2, 3, 4, 5, 6, 7, 8, 9 i 10, ali kad naletimo na bazu 11, odjednom imamo problem? :? Pa nije valjda da je zadatak kompliciraniji kada je u pitanju baza 11 umjesto baze 6!

Ono što pokušavam reći je da je problem u tome što si krenula pisati program prije nego što si rješila zadatak!


Pogledaj kako to izgleda ako se ne zapetljaš u "pretvaranje broja u bazu 6":

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

/* Funkcija koja vraca 1 ako n u bazi 6 ima samo znamenke izmedju 1 i 3. U suprotnom vraca 0.
Funkcija pretpostavlja da je n > 0.
*/
int znamenke_u_bazi_6_samo_izmedju_1_i_3(int n) {
int znamenka;
/* U petlji provjeravamo sve znamenke od n. */
while (n > 0) {
znamenka = n % 6;
/* Ako znameka nije izmedju 1 i 3 mozemo odmah vratiti 0. */
if (znamenka < 1 || znamenka > 3) return 0;
/* Ako je ova znamenka bila ok, onda idemo provjeriti sljedecu. */
n = n / 6;
}
/* Ako smo izvrtili cijelu petlju bez da smo vratili 0, to znaci da su sve znamenke izmedju 1 i 3. */
return 1;
}


int main() {
int a, b, n;
int pronasao = 0; /* ovo cemo postaviti na 1 ako nadjemo neki broj s trazenim svojstvom */

scanf("%d%d", &a, &b);

/* Prvo osiguramo da bude a <= b. */
if (a > b) {
int t = a;
a = b;
b = t;
}

/* Sada ispisemo trazene brojeve. */
for (n = a + 1; n < b; n = n + 1) {
if (znamenke_u_bazi_6_samo_izmedju_1_i_3(n)) {
printf("%d ", n);
pronasao = 1;
}
}

/* Ako nismo pronasli nijedan broj, ispisujemo odgovarajucu poruku. */
if (!pronasao) {
printf("Nema takvih brojeva.");
}

return 0;
}[/code:1]
krilo (napisa):
Ta funkcija ne radi ništa, rekla bih, za čovjeka smisleno

Ovo mora biti crvena lampica! Ako nema smisla, onda nema potrebe za pisanjem takve funkcije. Ključna stvar kod programiranja je natjerati kompjuter da rješava zadatak nizom jednostavnih i smislenih instrukcija.

BTW, stvari mogu biti smislene samo za ljude (možda i za neke druge životinje, ali to ovdje nije bitno). Za kompjuter nikad ništa nije smisleno. Kompjuter samo radi ono što mu ti kažeš da radi. Prema tome, ako mu ti daš da obavlja zadatak koji nema smisla, onda kompjuter radi besmislice.

Citat:
ali služi svrsi zadatka.

Meni se čini da služi kompliciranju zadatka. Wink

Citat:
Zvuči glupo, ali konstruira obrnuti zapis broja u bazi 6

Još jedna crvena lampica. Ako sama sebi zvučiš glupo, to je dobar signal da nešto kompliciraš, ili nešto krivo radiš, ili si oko nečega zbunjena. U svakom slučaju, ako nešto zvuči glupo, onda to uglavnom znači da nisi skroz iskristalizirala algoritam kojim se problem treba riješiti, nego pribjegavaš nekakvim ad-hoc rješenjima.

Sad promisli malo bolje što znači "konstruira zapis broja u bazi 6".

Jedan broj ima različite zapise u različitm bazama. Ti, za zadani broj x, tražiš neki drugi broj y koji u bazi 10 ima iste znamenke kao broj x u bazi 6. Zašto?

Meni se čini da ti na neki način poistovjećuješ broj s njegovim zapisom u bazi 10. Nemoj to raditi. Broj je broj, a zapis je zapis. Bez obzira pisali mi [tex](1024)_{10}[/tex], [tex](10000000000)_2[/tex], [tex](2000)_8[/tex], [tex](400)_{16}[/tex], ili MXXIV, radi se o jednom te istom broju. Baza 10 nije ni po čemu specijalna, osim što ljudi imaju 10 prstiju, pa se nama ta baza jako sviđa.

Na kraju ovog dijela rasprave, promisli što bi se dogodilo da umjesto baze 6 trebaš raditi u bazi npr. 16. Tada ne bi mogla napraviti ovaj svoj manevar, jer ne možeš za baš svaki broj x pronaći neki broj y tako da y u bazi 10 ima iste znamenke kao x u bazi 16. Je li tako? (Vratit ćemo se na ovu diskusiju malo kasnije.)

Citat:
Treba mi da kasnije za funkciju koja će provjeriti ima li u tom zapisu drugih znamenaka osim 1, 2, 3.

Ali, ne treba ti! Wink

Što će ti neki y koji u bazi 10 ima iste znamenke kao x u bazi 6, kad već imaš x? Čim imaš x odmah možeš vidjeti njegove znamenke u bazi 6 – to su ostaci pri opetovanom dijeljenju s 6. Je li tako?

Citat:
Otherwise, ne znam što podrazumijevaš pod high-level objašnjenje.

Točno ovo što si napisala. Svaka čast na koncizno sročenom objašnjenju.

Citat:
Bila sam napisala kompletnu funkciju koja ispisuje broj u bazi 6

Zašto si uopće išla pisati tu funkciju? Zadatak ne traži da ispis bude u bazi 6. Jednostavno ispiši u bazi 10 i svi sretni i zadovoljni.

Citat:
bavim se programiranjem tek 3 mjeseca, pa nisam 100% sigurna da će se ono što kodiram realizirati u program koji će uvijek raditi

To je OK. Ja se bavim programiranjem 20 godina Sjecam se ja, bilo je to cetr'est pete..., pa još uvijek nisam 100% siguran da će ono što kodiram rezultirati točnim rješenjem problema na kojem radim. Bitno je da s vremenom dobiješ više samopouzdanja da se prihvatiš kompleksnijih problema, a oni jednostavni prestaju uzrokovati poteškoće.

Citat:
Ne zamjeram "agresivnost", razumljivo je.

Hvala na razumijevanju.

Citat:
Nemam dovoljno iskustva da procijenim da funkcija ne valja

Ne brini se, iskustvo dolazi s vremenom, ali sve se na kraju svodi na jednostavnu maksimu: ako "zvuči glupo" ili "ne radi ništa smisleno", onda vrlo vjerojatno ne valja.


Citat:
ako vidim da služi svrsi, ne nalazim problem.

Kada se o problemu ne promisli detaljno, onda čovjek često sam sebi zakomplicira život.

Ti si ovdje krenula nešto "prebacivati u bazu 6" na način da si tražila broj s istim znamenkama u bazi 10. Zanimljivo je da tvoj pristup radi baza koju promatraš (u konkretnom sučaju 6), nije veća od 10. Za baze veće od 10, tvoj pristup sigurno ne funkcionira iz razloga koji sam spomenuo nešto ranije.

Zar ti nije čudno da tvoj algoritam radi za baze 2, 3, 4, 5, 6, 7, 8, 9 i 10, ali kad naletimo na bazu 11, odjednom imamo problem? Confused Pa nije valjda da je zadatak kompliciraniji kada je u pitanju baza 11 umjesto baze 6!

Ono što pokušavam reći je da je problem u tome što si krenula pisati program prije nego što si rješila zadatak!


Pogledaj kako to izgleda ako se ne zapetljaš u "pretvaranje broja u bazu 6":

Kod:
#include <stdio.h>

/* Funkcija koja vraca 1 ako n u bazi 6 ima samo znamenke izmedju 1 i 3. U suprotnom vraca 0.
   Funkcija pretpostavlja da je n > 0.
*/
int znamenke_u_bazi_6_samo_izmedju_1_i_3(int n) {
  int znamenka;
  /* U petlji provjeravamo sve znamenke od n. */
  while (n > 0) {
    znamenka = n % 6;
    /* Ako znameka nije izmedju 1 i 3 mozemo odmah vratiti 0. */
    if (znamenka < 1 || znamenka > 3) return 0;
    /* Ako je ova znamenka bila ok, onda idemo provjeriti sljedecu. */
    n = n / 6;
  }
  /* Ako smo izvrtili cijelu petlju bez da smo vratili 0, to znaci da su sve znamenke izmedju 1 i 3. */
  return 1;
}


int main() {
  int a, b, n;
  int pronasao = 0; /* ovo cemo postaviti na 1 ako nadjemo neki broj s trazenim svojstvom */

  scanf("%d%d", &a, &b);

  /* Prvo osiguramo da bude a <= b. */
  if (a > b) {
    int t = a;
    a = b;
    b = t;
  }

  /* Sada ispisemo trazene brojeve. */
  for (n = a + 1; n < b; n = n + 1) {
    if (znamenke_u_bazi_6_samo_izmedju_1_i_3(n)) {
      printf("%d ", n);
      pronasao = 1;
    }
  }

  /* Ako nismo pronasli nijedan broj, ispisujemo odgovarajucu poruku. */
  if (!pronasao) {
    printf("Nema takvih brojeva.");
  }

  return 0;
}



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
hendrix
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 03. 09. 2012. (15:59:06)
Postovi: (92)16
Sarma = la pohva - posuda
29 = 31 - 2

PostPostano: 20:18 ned, 5. 2. 2017    Naslov: Citirajte i odgovorite

Lijepo je da se, za promjenu, i ovdje nešto rješava. :) Samo bih uputio krilo na [url=http://degiorgi.math.hr/forum/viewtopic.php?t=18497]ovaj[/url] topic, možda dodatno pomogne u shvaćanju zašto ono čarobiranje s bazama treba zaobići (iako je većina već objašnjena u prethodnim postovima).

Učinilo mi se zgodnim jer sam se, čitajući ovu vašu diskusijicu, sjetio posta koji je nastao taman negdje dok sam bio na Prog1, vjerojatno (zapravo, sigurno) zbog gomile sličnih pokušaja :D
Lijepo je da se, za promjenu, i ovdje nešto rješava. Smile Samo bih uputio krilo na ovaj topic, možda dodatno pomogne u shvaćanju zašto ono čarobiranje s bazama treba zaobići (iako je većina već objašnjena u prethodnim postovima).

Učinilo mi se zgodnim jer sam se, čitajući ovu vašu diskusijicu, sjetio posta koji je nastao taman negdje dok sam bio na Prog1, vjerojatno (zapravo, sigurno) zbog gomile sličnih pokušaja Very Happy


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


Pridružen/a: 30. 11. 2002. (22:17:12)
Postovi: (718)16
Spol: muško
Sarma = la pohva - posuda
199 = 237 - 38
Lokacija: MPI-SWS, Kaiserslautern

PostPostano: 22:04 ned, 5. 2. 2017    Naslov: Citirajte i odgovorite

[quote="hendrix"]Lijepo je da se, za promjenu, i ovdje nešto rješava. :)[/quote]
To se događa kad mi koji smo odavno nestali iz RH uhvatimo malo vremena. :)


[quote]Samo bih uputio krilo na [url=http://degiorgi.math.hr/forum/viewtopic.php?t=18497]ovaj[/url] topic[/quote]
Wow! Potpuno sam zaboravio da to postoji!
hendrix (napisa):
Lijepo je da se, za promjenu, i ovdje nešto rješava. Smile

To se događa kad mi koji smo odavno nestali iz RH uhvatimo malo vremena. Smile


Citat:
Samo bih uputio krilo na ovaj topic

Wow! Potpuno sam zaboravio da to postoji!



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
krilo
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 01. 11. 2016. (14:45:48)
Postovi: (4D)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 23:17 ned, 5. 2. 2017    Naslov: Citirajte i odgovorite

[quote="mdoko"]U svakom slučaju, ako nešto zvuči glupo, onda to uglavnom znači da nisi skroz iskristalizirala algoritam kojim se problem treba riješiti, nego pribjegavaš nekakvim ad-hoc rješenjima. [/quote]

Moram ti priznati da je "algoritmiranje" jedna od najtežih stvari na prvoj godini za ljude (osobno, iz opće sam gimnazije) koji to nikad u životu nisu vidjeli... jednostavno naučiti razmišljati kao komp i pojednostavljivati programe na način na koji ti to radiš je meni prilično fascinantno :idea:

[quote]Meni se čini da ti na neki način poistovjećuješ broj s njegovim zapisom u bazi 10. Nemoj to raditi. [/quote]
Sorry, zapravo znam da nije isto :oops:


[quote]Točno ovo što si napisala. Svaka čast na koncizno sročenom objašnjenju.[/quote] Ne imah džaba 5 iz hrvatskog 8)


[quote]Zašto si uopće išla pisati tu funkciju?[/quote]
Zato što gospodična, otkad je otkrila funkcije, voli sve preko njih raditi jer su nekako... [i]elegantne.[/i] (Sviđa mi se ideja da se u glavnoj funkciji sve može skratiti samo na pozivanje funkcija bez puno žongliranja petljama i sličnim.)

[quote]Ja se bavim programiranjem 20 godina :djed:, pa još uvijek nisam 100% siguran da će ono što kodiram rezultirati točnim rješenjem problema na kojem radim.[/quote] 20? :bigshock: Ajde, nalazim malo utjehe u tome. :pray:


[quote]Zar ti nije čudno da tvoj algoritam radi za baze 2, 3, 4, 5, 6, 7, 8, 9 i 10, ali kad naletimo na bazu 11, odjednom imamo problem? :? [/quote]
Actually, na taj sam problem naletjela na praktičnom kolokviju jer je u testnom primjeru bio najveći prikazivi broj (pa je funkcija pošandrcala), zbog čega sam bila primorana napisati program na način na koji si ti raspisao.

[quote]Lijepo je da se, za promjenu, i ovdje nešto rješava. [/quote]
Pričaj mi o tome... postaje mi neugodno što ja tu (valjda jedina od svoje generacije?) pišem i maltretiram dobre ljude za objašnjenja :oops:

hendrix, hvala na uputi. Bila sam zapravo i prošla ([i]odokativno[/i]) kroz taj dokument, ali sad ga budem dobro proučila. :idea: Hvala obojici :)


Ustvari, još jedno pitanjce: Kolko god moj kod bio bedast, zakaj ne radi? :-k
mdoko (napisa):
U svakom slučaju, ako nešto zvuči glupo, onda to uglavnom znači da nisi skroz iskristalizirala algoritam kojim se problem treba riješiti, nego pribjegavaš nekakvim ad-hoc rješenjima.


Moram ti priznati da je "algoritmiranje" jedna od najtežih stvari na prvoj godini za ljude (osobno, iz opće sam gimnazije) koji to nikad u životu nisu vidjeli... jednostavno naučiti razmišljati kao komp i pojednostavljivati programe na način na koji ti to radiš je meni prilično fascinantno Idea

Citat:
Meni se čini da ti na neki način poistovjećuješ broj s njegovim zapisom u bazi 10. Nemoj to raditi.

Sorry, zapravo znam da nije isto Embarassed


Citat:
Točno ovo što si napisala. Svaka čast na koncizno sročenom objašnjenju.
Ne imah džaba 5 iz hrvatskog Cool


Citat:
Zašto si uopće išla pisati tu funkciju?

Zato što gospodična, otkad je otkrila funkcije, voli sve preko njih raditi jer su nekako... elegantne. (Sviđa mi se ideja da se u glavnoj funkciji sve može skratiti samo na pozivanje funkcija bez puno žongliranja petljama i sličnim.)

Citat:
Ja se bavim programiranjem 20 godina Sjecam se ja, bilo je to cetr'est pete..., pa još uvijek nisam 100% siguran da će ono što kodiram rezultirati točnim rješenjem problema na kojem radim.
20? Jako shokiran! Ajde, nalazim malo utjehe u tome. Pray


Citat:
Zar ti nije čudno da tvoj algoritam radi za baze 2, 3, 4, 5, 6, 7, 8, 9 i 10, ali kad naletimo na bazu 11, odjednom imamo problem? Confused

Actually, na taj sam problem naletjela na praktičnom kolokviju jer je u testnom primjeru bio najveći prikazivi broj (pa je funkcija pošandrcala), zbog čega sam bila primorana napisati program na način na koji si ti raspisao.

Citat:
Lijepo je da se, za promjenu, i ovdje nešto rješava.

Pričaj mi o tome... postaje mi neugodno što ja tu (valjda jedina od svoje generacije?) pišem i maltretiram dobre ljude za objašnjenja Embarassed

hendrix, hvala na uputi. Bila sam zapravo i prošla (odokativno) kroz taj dokument, ali sad ga budem dobro proučila. Idea Hvala obojici Smile


Ustvari, još jedno pitanjce: Kolko god moj kod bio bedast, zakaj ne radi? Think


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


Pridružen/a: 30. 11. 2002. (22:17:12)
Postovi: (718)16
Spol: muško
Sarma = la pohva - posuda
199 = 237 - 38
Lokacija: MPI-SWS, Kaiserslautern

PostPostano: 3:23 pon, 6. 2. 2017    Naslov: Citirajte i odgovorite

[quote="krilo"]Moram ti priznati da je "algoritmiranje" jedna od najtežih stvari na prvoj godini za ljude koji to nikad u životu nisu vidjeli...[/quote]
Znam. Zato i je bitno prisiliti se stvari riješiti kako treba a ne po principu "ma nema veze šta je brljavo, samo neka radi".

[quote](osobno, iz opće sam gimnazije)[/quote]
I ja. Ne brini, nije to nikakav hendikep.

[quote]jednostavno naučiti razmišljati kao komp i pojednostavljivati programe na način na koji ti to radiš je meni prilično fascinantno :idea:[/quote]

Pokušaš li razmišljati kao kompjuter, nećeš daleko dogurati. Zapamti, kompjuteri ne razmišljaju, nego samo rade što im kažeš.

Kad pokušavaš smisliti algoritam, sve što trebaš napraviti je do u detalje osvijestiti proces kojim ti sama rješvaš problem. Jednom kad ti je potpuno jasno kako se problem rješava, onda je to lako pretočiti u program.


[quote][quote]Zašto si uopće išla pisati tu funkciju?[/quote]
Zato što gospodična, otkad je otkrila funkcije, voli sve preko njih raditi jer su nekako... [i]elegantne.[/i] (Sviđa mi se ideja da se u glavnoj funkciji sve može skratiti samo na pozivanje funkcija bez puno žongliranja petljama i sličnim.)[/quote]

E, super. Shvatila si pravi smisao funkcija. Samo tako nastavi. Jedina greška ti je bila što si krenila pisati funkciju koja ti ne treba i onda je sve krenilo nizbrdo.


[quote]Ustvari, još jedno pitanjce: Kolko god moj kod bio bedast, zakaj ne radi? :-k[/quote]

E, sad, kad se napiše prekompliciran program, onda je dosta nezgodno tražiti bugove. Nemam sad baš vremena za igrati se s tim. Sorry.
krilo (napisa):
Moram ti priznati da je "algoritmiranje" jedna od najtežih stvari na prvoj godini za ljude koji to nikad u životu nisu vidjeli...

Znam. Zato i je bitno prisiliti se stvari riješiti kako treba a ne po principu "ma nema veze šta je brljavo, samo neka radi".

Citat:
(osobno, iz opće sam gimnazije)

I ja. Ne brini, nije to nikakav hendikep.

Citat:
jednostavno naučiti razmišljati kao komp i pojednostavljivati programe na način na koji ti to radiš je meni prilično fascinantno Idea


Pokušaš li razmišljati kao kompjuter, nećeš daleko dogurati. Zapamti, kompjuteri ne razmišljaju, nego samo rade što im kažeš.

Kad pokušavaš smisliti algoritam, sve što trebaš napraviti je do u detalje osvijestiti proces kojim ti sama rješvaš problem. Jednom kad ti je potpuno jasno kako se problem rješava, onda je to lako pretočiti u program.


Citat:
Citat:
Zašto si uopće išla pisati tu funkciju?

Zato što gospodična, otkad je otkrila funkcije, voli sve preko njih raditi jer su nekako... elegantne. (Sviđa mi se ideja da se u glavnoj funkciji sve može skratiti samo na pozivanje funkcija bez puno žongliranja petljama i sličnim.)


E, super. Shvatila si pravi smisao funkcija. Samo tako nastavi. Jedina greška ti je bila što si krenila pisati funkciju koja ti ne treba i onda je sve krenilo nizbrdo.


Citat:
Ustvari, još jedno pitanjce: Kolko god moj kod bio bedast, zakaj ne radi? Think


E, sad, kad se napiše prekompliciran program, onda je dosta nezgodno tražiti bugove. Nemam sad baš vremena za igrati se s tim. Sorry.



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
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