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

zadaci za prvi kolokvij prog2 (zadatak)
WWW:
Idite na 1, 2, 3  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
jejo
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 28. 11. 2006. (19:25:36)
Postovi: (102)16
Spol: žensko
Sarma = la pohva - posuda
= 14 - 5

PostPostano: 22:10 pet, 24. 4. 2009    Naslov: zadaci za prvi kolokvij prog2 Citirajte i odgovorite

evo, rjesavam pomalo zadatke iz skripte pa me zanima ovaj zadatak:
Zadatak 3.10. Napisite program slican onom u prethodnom zadatku, ali umjesto horizontalne i vertikalne linije napravite “kriz” od linija paralelnih s glavnom i sporednom dijagonalom.

a taj prethodni zadatak je:
Zadatak 3.9. Napisite program koji ucitava cijele brojeve i, j E N0,
i, j < 10, te kreira i ispisuje tablicu m s 10 × 10 znakova koja na svim
mjestima ima tockice, osim na horizontalnoj i vertikalnoj liniji koje
prolaze elementom mi,j (na te linije treba staviti zvjezdice).

ja neznam kak bi trebao unos glasit za to..
moze neki mali hint ili nesto?
fala puno :)
evo, rjesavam pomalo zadatke iz skripte pa me zanima ovaj zadatak:
Zadatak 3.10. Napisite program slican onom u prethodnom zadatku, ali umjesto horizontalne i vertikalne linije napravite “kriz” od linija paralelnih s glavnom i sporednom dijagonalom.

a taj prethodni zadatak je:
Zadatak 3.9. Napisite program koji ucitava cijele brojeve i, j E N0,
i, j < 10, te kreira i ispisuje tablicu m s 10 × 10 znakova koja na svim
mjestima ima tockice, osim na horizontalnoj i vertikalnoj liniji koje
prolaze elementom mi,j (na te linije treba staviti zvjezdice).

ja neznam kak bi trebao unos glasit za to..
moze neki mali hint ili nesto?
fala puno Smile


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


Pridružen/a: 22. 11. 2007. (17:52:27)
Postovi: (12F)16
Spol: žensko
Sarma = la pohva - posuda
24 = 34 - 10

PostPostano: 22:28 pet, 24. 4. 2009    Naslov: Citirajte i odgovorite

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

int main( void )
{
int i, j, red, stup;
char tablica[ 10 ][ 10 ];

scanf( "%d%d", &i, &j );

for( red = 0; red < 10; ++red )
for( stup = 0; stup < 10; ++stup )
tablica[ red ][ stup ] = '.';

red = i; stup = 0;
while( red >= 0 )
{
tablica[ red ][ stup ] = '*';
--red; ++stup;
}

red = j; stup = 0;
while( red < 10 )
{
tablica[ red ][ stup ] = '*';
++red; ++stup;
}


for( red = 0; red < 10; ++red )
{
for( stup = 0; stup < 10; ++stup )
printf( "%c", tablica[ red ][ stup ] );

printf( "\n" );
}

return 0;
}
[/code:1]
Kod:

#include <stdio.h>

int main( void )
{
   int i, j, red, stup;
   char tablica[ 10 ][ 10 ];
   
   scanf( "%d%d", &i, &j );
   
   for( red = 0; red < 10; ++red )
       for( stup = 0; stup < 10; ++stup )
           tablica[ red ][ stup ] = '.';

   red = i; stup = 0;
   while( red >= 0 )
   {
      tablica[ red ][ stup ] = '*';
      --red; ++stup;
   }
   
   red = j; stup = 0;
   while( red < 10 )
   {
      tablica[ red ][ stup ] = '*';
      ++red; ++stup;
   }


   for( red = 0; red < 10; ++red )
   {
      for( stup = 0; stup < 10; ++stup )
          printf( "%c", tablica[ red ][ stup ] );
         
      printf( "\n" );
   }

   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: (3560)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 22:44 pet, 24. 4. 2009    Naslov: Citirajte i odgovorite

@lucika: Cijenim trud, ali isprobaj program... meni (copy/paste) ne radi ispravno. :?

Unos je [tt]scanf("%d %d", &i, &j);[/tt]. 8)

Hint za rjesavanje: "zraku" od mjesta (i, j) prema gore lijevo slozis ovako:

[code:1]k = i; l = j;
while (k > 0 && l > 0) {
a[k][l] = '*';
--k;
--l;
}[/code:1]

Sad to ponovis cetiri puta (ili, bolje, upetljas u pametno slozen u petlju/petlje) i stvar je rijesena. 8)

Moze se to, naravno, i daleko bolje rijesiti, no mislim da vam je ovako lakse. :)
@lucika: Cijenim trud, ali isprobaj program... meni (copy/paste) ne radi ispravno. Confused

Unos je scanf("%d %d", &i, &j);. Cool

Hint za rjesavanje: "zraku" od mjesta (i, j) prema gore lijevo slozis ovako:

Kod:
k = i; l = j;
while (k > 0 && l > 0) {
  a[k][l] = '*';
  --k;
  --l;
}


Sad to ponovis cetiri puta (ili, bolje, upetljas u pametno slozen u petlju/petlje) i stvar je rijesena. Cool

Moze se to, naravno, i daleko bolje rijesiti, no mislim da vam je ovako lakse. Smile



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Gino
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 11. 09. 2008. (10:54:06)
Postovi: (370)16
Sarma = la pohva - posuda
-29 = 108 - 137
Lokacija: Pula

PostPostano: 23:15 pet, 24. 4. 2009    Naslov: Citirajte i odgovorite

neznam dal sam shvatio dobro zadatak...
al valjda je ovako nekako
[code:1]#include <stdio.h>
int main(void){
int i,j,k,l;
char m[10][10];
scanf("%d %d",&i,&j);
for(k=0;k<10;k++)
for(l=0;l<10;l++)
m[k][l]='.';
m[i][j]='*';
for(k=1;k<10;k++){
if(i-k>=0 && j+k<10)m[i-k][j+k]='*';
if(i-k<10 && j+k<10)m[i+k][j+k]='*';
if(i-k>=0 && j-k>=0)m[i-k][j-k]='*';
if(i+k<10 && j-k>=0)m[i+k][j-k]='*';
}
for(i=0;i<10;i++){
for(j=0;j<10;j++)
printf("%c",m[i][j]);
printf("\n");
}
system("pause");
return 0;
}[/code:1]
neznam dal sam shvatio dobro zadatak...
al valjda je ovako nekako
Kod:
#include <stdio.h>
int main(void){
    int i,j,k,l;
    char m[10][10];
    scanf("%d %d",&i,&j);
    for(k=0;k<10;k++)
    for(l=0;l<10;l++)
    m[k][l]='.';
    m[i][j]='*';
    for(k=1;k<10;k++){
                      if(i-k>=0 && j+k<10)m[i-k][j+k]='*';
                      if(i-k<10 && j+k<10)m[i+k][j+k]='*';
                      if(i-k>=0 && j-k>=0)m[i-k][j-k]='*';
                      if(i+k<10 && j-k>=0)m[i+k][j-k]='*';
                      }
    for(i=0;i<10;i++){
                      for(j=0;j<10;j++)
                      printf("%c",m[i][j]);
                      printf("\n");
                      }
    system("pause");
    return 0;
    }



_________________
Mario Berljafa
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Milojko
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 07. 11. 2008. (14:57:52)
Postovi: (453)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
17 = 68 - 51
Lokacija: Hilbertov hotel

PostPostano: 0:20 sub, 25. 4. 2009    Naslov: Citirajte i odgovorite

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

int main() {
char a[10][10];
int i, j, k, l;
printf("Ukucaj i: "); scanf("%d", &i);
printf("Ukucaj j: "); scanf("%d", &j);
for (k = 0; k < 10; ++k) {
for (l = 0; l < 10; ++l) a[k][l] = '.';
}
for (k = 0; k < 10; ++k) {
if ((k+i) <= 10 && (9-k-j) >= 0){
a[k][k+i] = '*';
a[k][9-k-j] = '*';
}
}
for (k = 0; k < 10; ++k) {
for (l = 0; l < 10; ++l)
printf("%2c", a[k][l]);
printf("\n");
}
scanf("%%");
return 0;
}[/code:1]
mislim da valja.

[size=9][color=#999999]Added after 7 minutes:[/color][/size]

@Gino: [tt]stdlib[/tt] :p

e, a men nije posve jasno pitanje zadatka. jel to mora bit baš križ, il mora, npr, kad [tt]k+i[/tt] postane veći ili jednak od deset, a [tt]9-k-j[/tt] još nije spalo na nulu, dalje crtati zvjezdice u pravcu kak je počeo? mislim, pitanje je malo glupo formulirano, al, probajte pokrenti. moj ga nacrta dok može crtat križ, Ginov je ova druga verzija, čini mi se
Kod:
#include <stdio.h>

int main() {
    char a[10][10];
    int i, j, k, l;
    printf("Ukucaj i: "); scanf("%d", &i);
    printf("Ukucaj j: "); scanf("%d", &j);
    for (k = 0; k < 10; ++k) {
        for (l = 0; l < 10; ++l) a[k][l] = '.';
        }
    for (k = 0; k < 10; ++k) {
        if ((k+i) <= 10 && (9-k-j) >= 0){
                  a[k][k+i] = '*';
                  a[k][9-k-j] = '*';
                  }
        }
    for (k = 0; k < 10; ++k) {
        for (l = 0; l < 10; ++l)
            printf("%2c", a[k][l]);
        printf("\n");
        }
    scanf("%%");
    return 0;
}

mislim da valja.

Added after 7 minutes:

@Gino: stdlib :p

e, a men nije posve jasno pitanje zadatka. jel to mora bit baš križ, il mora, npr, kad k+i postane veći ili jednak od deset, a 9-k-j još nije spalo na nulu, dalje crtati zvjezdice u pravcu kak je počeo? mislim, pitanje je malo glupo formulirano, al, probajte pokrenti. moj ga nacrta dok može crtat križ, Ginov je ova druga verzija, čini mi se



_________________
Sedam je prost broj Smile

Bolonja je smeće i to pod hitno treba mijenjat
[Vrh]
Korisnički profil Pošaljite privatnu poruku MSNM
vsego
Site Admin
Site Admin


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

PostPostano: 1:52 sub, 25. 4. 2009    Naslov: Citirajte i odgovorite

Ovo sto je Gino napravio, meni padne sa "segementation fault" za i = 5, j = 2. :? Za i = 2, j = 5 radi dobro. :)

Ovo od Milojka niti za jedan od ta dva primjera ne radi dobro. :(

Evo vam program koji radi, da mozete usporedjivati:

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

int main() {
char a[10][10];
int i, j, k, l, smjer;
scanf("%d %d", &i, &j);
for (k = 0; k < 10; ++k)
for (l = 0; l < 10; ++l)
a[k][l] = '.';
for (smjer = 0; smjer < 4; ++smjer) {
k = i;
l = j;
while (k >= 0 && l >= 0 && k < 10 && l < 10) {
a[k][l] = '*';
k += 1 - 2 * (smjer / 2);
l += 1 - 2 * (smjer % 2);
}
}
for (k = 0; k < 10; ++k) {
for (l = 0; l < 10; ++l)
printf("%c", a[k][l]);
printf("\n");
}

return 0;
}[/code:1]

Isprobah za navedene primjere, no solidno sam uvjeren da je i inace dobar. :)

Da objasnim eskapadu sa smjerom: varijabla [tt]smjer[/tt] poprima vrijednosti 0, 1, 2, 3; binarno, to je 00, 01, 10 i 11, pa kad gledamo izraze [tt]smjer / 2[/tt] i [tt]smjer % 2[/tt] dobijemo sva cetiri uredjena para nula i jedinica, a od toga onda dobijamo sve moguce parove -1 i +1:

[table][tt]smjer[/tt] [tt]smjer / 2[/tt] [tt]smjer % 2[/tt] [tt]2 * (smjer / 2)[/tt] [tt]2 * (smjer % 2)[/tt] [tt]1 - 2 * (smjer / 2)[/tt] [tt]1 - 2 * (smjer % 2)[/tt]
0 0 0 0 0 1 1
1 1 0 2 0 -1 1
2 0 1 0 2 1 -1
3 1 1 2 2 -1 -1[/table]

Kao sto gore rekoh, ovo je simpaticno, ali i nepotrebno... moze se jednostavno [tt]while()[/tt] petlju napisati 4 puta, varirajuci [tt]++[/tt] i [tt]--[/tt], te uvjete u petlji. 8)

Inace, ako se sjetite price o glavnoj i sporednoj dijagonali (kod prve je [tt]k - l[/tt] konstantan, a kod druge je to [tt]k + l[/tt]), program mozete i ovako napisati:

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

int main() {
char a[10][10];
int i, j, k, l;
scanf("%d %d", &i, &j);
for (k = 0; k < 10; ++k)
for (l = 0; l < 10; ++l)
a[k][l] = (k + l == i + j || k - l == i - j ? '*' : '.');
for (k = 0; k < 10; ++k) {
for (l = 0; l < 10; ++l)
printf("%c", a[k][l]);
printf("\n");
}

return 0;
}[/code:1]

Naravno, matrica vise uopce nije potrebna (no, treba ju sloziti jer to zadatak trazi!) i ispis bi se mogao i direktno napraviti. :D
Ovo sto je Gino napravio, meni padne sa "segementation fault" za i = 5, j = 2. Confused Za i = 2, j = 5 radi dobro. Smile

Ovo od Milojka niti za jedan od ta dva primjera ne radi dobro. Sad

Evo vam program koji radi, da mozete usporedjivati:

Kod:
#include <stdio.h>

int main() {
  char a[10][10];
  int i, j, k, l, smjer;
  scanf("%d %d", &i, &j);
  for (k = 0; k < 10; ++k)
    for (l = 0; l < 10; ++l)
      a[k][l] = '.';
  for (smjer = 0; smjer < 4; ++smjer) {
    k = i;
    l = j;
    while (k >= 0 && l >= 0 && k < 10 && l < 10) {
      a[k][l] = '*';
      k += 1 - 2 * (smjer / 2);
      l += 1 - 2 * (smjer % 2);
    }
  }
  for (k = 0; k < 10; ++k) {
    for (l = 0; l < 10; ++l)
      printf("%c", a[k][l]);
    printf("\n");
  }

  return 0;
}


Isprobah za navedene primjere, no solidno sam uvjeren da je i inace dobar. Smile

Da objasnim eskapadu sa smjerom: varijabla smjer poprima vrijednosti 0, 1, 2, 3; binarno, to je 00, 01, 10 i 11, pa kad gledamo izraze smjer / 2 i smjer % 2 dobijemo sva cetiri uredjena para nula i jedinica, a od toga onda dobijamo sve moguce parove -1 i +1:

smjersmjer / 2smjer % 22 * (smjer / 2)2 * (smjer % 2)1 - 2 * (smjer / 2)1 - 2 * (smjer % 2)
0000011
11020-11
201021-1
31122-1-1


Kao sto gore rekoh, ovo je simpaticno, ali i nepotrebno... moze se jednostavno while() petlju napisati 4 puta, varirajuci ++ i , te uvjete u petlji. Cool

Inace, ako se sjetite price o glavnoj i sporednoj dijagonali (kod prve je k - l konstantan, a kod druge je to k + l), program mozete i ovako napisati:

Kod:
#include <stdio.h>

int main() {
  char a[10][10];
  int i, j, k, l;
  scanf("%d %d", &i, &j);
  for (k = 0; k < 10; ++k)
    for (l = 0; l < 10; ++l)
      a[k][l] = (k + l == i + j || k - l == i - j ? '*' : '.');
  for (k = 0; k < 10; ++k) {
    for (l = 0; l < 10; ++l)
      printf("%c", a[k][l]);
    printf("\n");
  }

  return 0;
}


Naravno, matrica vise uopce nije potrebna (no, treba ju sloziti jer to zadatak trazi!) i ispis bi se mogao i direktno napraviti. Very Happy



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


Pridružen/a: 11. 09. 2008. (10:54:06)
Postovi: (370)16
Sarma = la pohva - posuda
-29 = 108 - 137
Lokacija: Pula

PostPostano: 7:32 sub, 25. 4. 2009    Naslov: Citirajte i odgovorite

[quote="vsego"]Ovo sto je Gino napravio, meni padne sa "segementation fault" za i = 5, j = 2. :? [/quote]
neznam sta bi to znacilo, ali meni radi kako treba, usporeden rezultat s programom koji radi (onako vizualno...) :D :D
vsego (napisa):
Ovo sto je Gino napravio, meni padne sa "segementation fault" za i = 5, j = 2. Confused

neznam sta bi to znacilo, ali meni radi kako treba, usporeden rezultat s programom koji radi (onako vizualno...) Very Happy Very Happy



_________________
Mario Berljafa
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Bubba
Forumaš s poteškoćama u pisanju
Forumaš s poteškoćama u pisanju


Pridružen/a: 17. 11. 2006. (18:09:12)
Postovi: (53)16
Spol: muško
Sarma = la pohva - posuda
10 = 27 - 17

PostPostano: 10:51 sub, 25. 4. 2009    Naslov: Citirajte i odgovorite

[quote="vsego"]Ovo sto je Gino napravio, meni padne sa "segementation fault" za i = 5, j = 2. :? Za i = 2, j = 5 radi dobro. :)[/quote][code:1] for(k=1;k<10;++k){
if(i-k>=0 && j+k<10)
m[i-k][j+k]='*';
if(i-k<10 && j+k<10)
m[i+k][j+k]='*';
if(i-k>=0 && j-k>=0)
m[i-k][j-k]='*';
if(i+k<10 && j-k>=0)
m[i+k][j-k]='*';
}[/code:1]Kada je I = 5 a j = 2 te k > 5, jasno je zasto dolazi do [i]segmentation faulta[/i] (drugi [i]if[/i]) - pristupa se nealociranom dijelu dvodimenzionalnog polja.

@gino - Koristi malloc(); ili dovoljno veliku konstantu pri deklariranju polja. Ovo su ozbiljne greske u C na relativno trivijalnom primjeru; pripazi na njih...

Takodjer, imaj na umu da system(); funkcija obicno znaci neportabilnost, a u ovom slucaju ti je bespotrebna. Ako vec nemozes bez nje, napravi nesto ovako:

[code:1] #ifdef _WIN32
system ("pause");
#endif[/code:1]

pa ce se tvoj kod bez problema kompajlirati i na newindows platformama.
vsego (napisa):
Ovo sto je Gino napravio, meni padne sa "segementation fault" za i = 5, j = 2. Confused Za i = 2, j = 5 radi dobro. Smile
Kod:
    for(k=1;k<10;++k){
                      if(i-k>=0 && j+k<10)
                    m[i-k][j+k]='*';
                      if(i-k<10 && j+k<10)
                    m[i+k][j+k]='*';
                      if(i-k>=0 && j-k>=0)
                    m[i-k][j-k]='*';
                      if(i+k<10 && j-k>=0)
                    m[i+k][j-k]='*';
                      }
Kada je I = 5 a j = 2 te k > 5, jasno je zasto dolazi do segmentation faulta (drugi if) - pristupa se nealociranom dijelu dvodimenzionalnog polja.

@gino - Koristi malloc(); ili dovoljno veliku konstantu pri deklariranju polja. Ovo su ozbiljne greske u C na relativno trivijalnom primjeru; pripazi na njih...

Takodjer, imaj na umu da system(); funkcija obicno znaci neportabilnost, a u ovom slucaju ti je bespotrebna. Ako vec nemozes bez nje, napravi nesto ovako:

Kod:
   #ifdef _WIN32
   system ("pause");
   #endif


pa ce se tvoj kod bez problema kompajlirati i na newindows platformama.



_________________
Biolozi misle da su kemičari. Kemičari misle da su fizičari. Fizičari misle da su bogovi. A Bog misli da je matematičar...
§ http://math2.ath.cx §
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
Gino
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 11. 09. 2008. (10:54:06)
Postovi: (370)16
Sarma = la pohva - posuda
-29 = 108 - 137
Lokacija: Pula

PostPostano: 11:14 sub, 25. 4. 2009    Naslov: Citirajte i odgovorite

[quote="Bubba"]@gino - Koristi malloc(); ili dovoljno veliku konstantu pri deklariranju polja. Ovo su ozbiljne greske u C na relativno trivijalnom primjeru; pripazi na njih...[/quote]
ne ovo su glupe greske, oni if-ovi su mi bas posluzili da se ne pristupi 'nealociranom dijelu dvodimenzionalnog polja'
tamo je umjesto - trebalo pisat + dakle
ne
[code:1]if(i-k<10 && j+k<10)[/code:1]
nego
[code:1]if(i+k<10 && j+k<10)[/code:1]
Bubba (napisa):
@gino - Koristi malloc(); ili dovoljno veliku konstantu pri deklariranju polja. Ovo su ozbiljne greske u C na relativno trivijalnom primjeru; pripazi na njih...

ne ovo su glupe greske, oni if-ovi su mi bas posluzili da se ne pristupi 'nealociranom dijelu dvodimenzionalnog polja'
tamo je umjesto - trebalo pisat + dakle
ne
Kod:
if(i-k<10 && j+k<10)

nego
Kod:
if(i+k<10 && j+k<10)



_________________
Mario Berljafa
[Vrh]
Korisnički profil Pošaljite privatnu poruku
moi
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 21. 02. 2007. (13:39:09)
Postovi: (26)16
Spol: žensko
Sarma = la pohva - posuda
= 2 - 1

PostPostano: 17:58 pon, 27. 4. 2009    Naslov: Citirajte i odgovorite

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

int f(int x){
int i,b,br=0;

if (x<0) return f(-x);

for(i=2;i<10;i++){
while(x){
b=x%i;
x=x/i;
br++;
}
if(br==2)
return i;
}
if(x==0)return 0;
return f(x/5);
}

int main(){

int n;

printf("n=\n");
scanf("%d", &n);

printf("Poziv fje je %d\n",f(n));

system("pause");
return 0;
}
[/code:1]
Može li mi netko objasniti zašto ovaj program ne radi dobro, odnosno ispisuje "Poziv fje je 0 " za svaki broj koji unesem. To je 1. zadatak sa popravnog kolokvija od prošle godine.
Kod:
#include<stdio.h>
#include<stdlib.h>

int f(int x){
    int i,b,br=0;
   
    if (x<0) return f(-x);

    for(i=2;i<10;i++){
                        while(x){
                               b=x%i;
                               x=x/i;
                               br++;
                               }
                               if(br==2)
                               return i;
                               }
    if(x==0)return 0;
    return f(x/5);
}

int main(){
   
    int n;
   
    printf("n=\n");
    scanf("%d", &n);
   
    printf("Poziv fje je %d\n",f(n));
   
    system("pause");
    return 0;
}

Može li mi netko objasniti zašto ovaj program ne radi dobro, odnosno ispisuje "Poziv fje je 0 " za svaki broj koji unesem. To je 1. zadatak sa popravnog kolokvija od prošle godine.


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


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

PostPostano: 18:05 pon, 27. 4. 2009    Naslov: Citirajte i odgovorite

Pretpostavljam da ti gornja fja pocijepa x do te mjere da je x<5. I onda imaš cjelobrojno dijeljenje ( x/5 ) koje u tom slučaju vrati 0... a što bi program trebao radit?
Pretpostavljam da ti gornja fja pocijepa x do te mjere da je x<5. I onda imaš cjelobrojno dijeljenje ( x/5 ) koje u tom slučaju vrati 0... a što bi program trebao radit?



_________________
"Bolje bi prolazio na faxu da sam na drogama nego na netu" - by a friend of mine
"Poslije spavanja doma spavanje bilo di mi je najdraža stvar" - by the same guy Very Happy
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
moi
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 21. 02. 2007. (13:39:09)
Postovi: (26)16
Spol: žensko
Sarma = la pohva - posuda
= 2 - 1

PostPostano: 18:16 pon, 27. 4. 2009    Naslov: Citirajte i odgovorite

1. Napisite funkciju f : Z ->Z, koja je zadana sa:
f(−x) , ako je x < 0
b , gdje je b najmanja baza manja od 10 u kojoj je x dvoznamenkast; ako takav b postoji
0 ako je x = 0
f([x/5]) inače, [] mi označava najveće cijelo

te napisite kako se funkcija poziva s argumentom 1717.
1. Napisite funkciju f : Z →Z, koja je zadana sa:
f(−x) , ako je x < 0
b , gdje je b najmanja baza manja od 10 u kojoj je x dvoznamenkast; ako takav b postoji
0 ako je x = 0
f([x/5]) inače, [] mi označava najveće cijelo

te napisite kako se funkcija poziva s argumentom 1717.


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


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

PostPostano: 18:32 pon, 27. 4. 2009    Naslov: Citirajte i odgovorite

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

int f(int x)
{
int i,br=0,temp;

if (x<0) return f(-x);
if(x==0)return 0;


for(i=2;i<10;i++)
{
temp=x;
br=0;
while(temp){
temp/=i;
br++;
}
if(br==2)
return i;
}

return f(x/5);
}

int main(){

int n;

printf("n= ");
scanf("%d", &n);

printf("Poziv fje je %d\n",f(n));

system("pause");
return 0;
} [/code:1]

Ovo bi trebalo bit bolje... dakle greška ti je bila što si cijepala x, pa ti za iduću bazu ostao na nuli... i nisi brojač stavila na nulu za svaku bazu... i uvjet x==0 je najbolje provjerit odmah, jer ovo kasnije je suvišno za taj slučaj... sad je valjda to to... :D
Kod:
#include<stdio.h>
#include<stdlib.h>

int f(int x)
{
    int i,br=0,temp;
   
    if (x<0) return f(-x);
    if(x==0)return 0;

   
    for(i=2;i<10;i++)
    {
      temp=x;
      br=0;
      while(temp){
                 temp/=i;
                 br++;
               }
               if(br==2)
                return i;
    }
   
    return f(x/5);
}

int main(){
   
    int n;
   
    printf("n= ");
    scanf("%d", &n);
   
    printf("Poziv fje je %d\n",f(n));
   
    system("pause");
    return 0;
}


Ovo bi trebalo bit bolje... dakle greška ti je bila što si cijepala x, pa ti za iduću bazu ostao na nuli... i nisi brojač stavila na nulu za svaku bazu... i uvjet x==0 je najbolje provjerit odmah, jer ovo kasnije je suvišno za taj slučaj... sad je valjda to to... Very Happy



_________________
"Bolje bi prolazio na faxu da sam na drogama nego na netu" - by a friend of mine
"Poslije spavanja doma spavanje bilo di mi je najdraža stvar" - by the same guy Very Happy
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
moi
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 21. 02. 2007. (13:39:09)
Postovi: (26)16
Spol: žensko
Sarma = la pohva - posuda
= 2 - 1

PostPostano: 19:20 pon, 27. 4. 2009    Naslov: Citirajte i odgovorite

Puno hvala! :D
Puno hvala! Very Happy


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


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

PostPostano: 21:15 pon, 27. 4. 2009    Naslov: Citirajte i odgovorite

Ajme, sto ga komplicirate. :shock:

Najmanja baza b u kojoj je broj x dvoznamenkast
znaci
Najmanji b takav da je [latex]b \leq x < b^2[/latex]. 8)

Sto ce vam brojanje znamenaka?! :joooj:
Ajme, sto ga komplicirate. Shocked

Najmanja baza b u kojoj je broj x dvoznamenkast
znaci
Najmanji b takav da je . Cool

Sto ce vam brojanje znamenaka?! Joj, joj, joj,... JOOOJ!



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


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

PostPostano: 21:17 pon, 27. 4. 2009    Naslov: Citirajte i odgovorite

[quote="vsego"]Ajme, sto ga komplicirate. :shock:

Najmanja baza b u kojoj je broj x dvoznamenkast
znaci
Najmanji b takav da je [latex]b \leq x < b^2[/latex]. 8)

Sto ce vam brojanje znamenaka?! :joooj:[/quote]

Ah da, to je pametnije... ja automatski samo išo popravit kod, ne dirajući orginalnu ideju :D
vsego (napisa):
Ajme, sto ga komplicirate. Shocked

Najmanja baza b u kojoj je broj x dvoznamenkast
znaci
Najmanji b takav da je . Cool

Sto ce vam brojanje znamenaka?! Joj, joj, joj,... JOOOJ!


Ah da, to je pametnije... ja automatski samo išo popravit kod, ne dirajući orginalnu ideju Very Happy



_________________
"Bolje bi prolazio na faxu da sam na drogama nego na netu" - by a friend of mine
"Poslije spavanja doma spavanje bilo di mi je najdraža stvar" - by the same guy Very Happy
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
Gino
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 11. 09. 2008. (10:54:06)
Postovi: (370)16
Sarma = la pohva - posuda
-29 = 108 - 137
Lokacija: Pula

PostPostano: 21:36 pon, 27. 4. 2009    Naslov: Citirajte i odgovorite

ja sam ovako...
[code:1]int b(int x){
int i,tmp;
tmp=x;
for(i=2;i<10;i++){
x/=i;x/=i;
if(x==0) return i;
x=tmp;
}
return 0;
}

int f(int x){
if(x<0) return f(-x);
if(b(x)) return b(x);
if(x==0) return 0;
return f(x/5);
}[/code:1]
isto mi se ne cini komplicirano...
ja sam ovako...
Kod:
int b(int x){
    int i,tmp;
    tmp=x;
    for(i=2;i<10;i++){
    x/=i;x/=i;
    if(x==0) return i;
    x=tmp;
    }
    return 0;
}

int f(int x){
    if(x<0) return f(-x);
    if(b(x)) return b(x);
    if(x==0) return 0;
    return f(x/5);
    }

isto mi se ne cini komplicirano...



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


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

PostPostano: 22:40 pon, 27. 4. 2009    Naslov: Citirajte i odgovorite

Gino, za [tt]x = 0[/tt] i [tt]x = 1[/tt] ti tvrdis da su dvoznamenkasti u bazi 2. :shock:
Gino, za x = 0 i x = 1 ti tvrdis da su dvoznamenkasti u bazi 2. Shocked



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


Pridružen/a: 11. 09. 2008. (10:54:06)
Postovi: (370)16
Sarma = la pohva - posuda
-29 = 108 - 137
Lokacija: Pula

PostPostano: 22:54 pon, 27. 4. 2009    Naslov: Citirajte i odgovorite

izgleda :lol:
izgleda Laughing



_________________
Mario Berljafa
[Vrh]
Korisnički profil Pošaljite privatnu poruku
lucika
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 22. 11. 2007. (17:52:27)
Postovi: (12F)16
Spol: žensko
Sarma = la pohva - posuda
24 = 34 - 10

PostPostano: 13:15 uto, 28. 4. 2009    Naslov: Citirajte i odgovorite

Zadatak 2.5 (pismeni ispit, 28.11.2005). Napišite rekurzivnu funk-
ciju koja uzima barem jedan argument x ∈ N. Funkcija treba vratiti broj
na koliko različitih načina se x može prikazati kao suma brojeva 2, 3 i
5, neovisno o redoslijedu sumanada (tj. 2 + 3 + 3 je isto što i 3 + 2 + 3
i 3 + 3 + 2, pa se to broji samo kao jedan način).

i sad, u 4.liniji koda piše:

i f ( x == 0) return 1 ;

zašto???jel to znači da se 0 može na jedan način prikazati kao suma brojeva 2, 3 i 5 :?:
Zadatak 2.5 (pismeni ispit, 28.11.2005). Napišite rekurzivnu funk-
ciju koja uzima barem jedan argument x ∈ N. Funkcija treba vratiti broj
na koliko različitih načina se x može prikazati kao suma brojeva 2, 3 i
5, neovisno o redoslijedu sumanada (tj. 2 + 3 + 3 je isto što i 3 + 2 + 3
i 3 + 3 + 2, pa se to broji samo kao jedan način).

i sad, u 4.liniji koda piše:

i f ( x == 0) return 1 ;

zašto???jel to znači da se 0 može na jedan način prikazati kao suma brojeva 2, 3 i 5 Question


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Idite na 1, 2, 3  Sljedeće
Stranica 1 / 3.

 
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