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

Prakticni kolokvij, zadatak 42 (zadatak)
WWW:

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
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:56 uto, 19. 6. 2007    Naslov: Prakticni kolokvij, zadatak 42 Citirajte i odgovorite

Dakle, famozni zadatak 42, iz nekog razloga, zbunjuje narodne mase (iako, statisticki, nije najlosije rijeseni zadatak). :? Zadatak je glasio ovako (sada je malo izmijenjen, jer ne objavljujemo rjesenja aktualnih zadataka):

[quote="Zadatak 42"]Napišite program koji učitava prirodne brojeve m i n (m < n), te pomoću zvjezdica ispisuje cik-cak graf dimenzija m × n tako da “krene” iz gornjeg lijevog kuta, te se “spušta” dolje desno, zatim (nakon što dođe do dna) ide gore desno, zatim opet dolje desno i tako do desnog ruba.
Primjer (brojeve linija NE treba ispisati): m = 5 i n = 19
[code:1] 1: * * *
2: * * * * *
3: * * * * *
4: * * * *
5: * *[/code:1][/quote]

Ideju rjesenja sam opisao [url=http://degiorgi.math.hr/forum/viewtopic.php?p=77910#77910]ovdje[/url], a sada prilazem i rjesenje (nakucano iz glave u cca 5 minuta):

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

int main(void) {
char **mat;
int m, n, i, j, dir = -1;

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

mat = (char**)malloc(m * sizeof(char*));
for (i = 0; i < m; i++) {
mat[i] = (char*)malloc((n+1) * sizeof(char));
for (j = 0; j < n; j++)
mat[i][j] = ' ';
mat[i][n] = '\0';
}

i = 0;
j = 0;

while (j < n) {
mat[i][j++] = '*';
if (!i || i == m - 1) dir = -dir;
i += dir;
}

printf("\n");
for (i = 0; i < m; i++) {
printf("%s\n", mat[i]);
free(mat[i]);
}

free(mat);

return 0;
}[/code:1]

Rjesenje moze i bez stringova: treba samo
a) smanjiti dimenziju u drugom [tt]malloc()[/tt]-u
b) maknuti [tt]mat[i][n] = '\0';[/tt]
c) [tt]printf("%s\n", mat[i]);[/tt] zamijeniti s [tt]for()[/tt] petljom i dodatnim ispisom skoka u novi red.

Ako netko rijesi originalnu verziju (dakle ovu ovdje, a ne onu s weba) bez matrica (objasnih i to na onom linku), moze zalijepiti na ovaj topic. 8)

Inace, ovo je jedini "crtacki" zadatak (za sada :twisted:) koji je bitno laksi ako se koriste matrice... :g:

Podsjecam da objavljivanje rjesenja aktualnih zadataka i dalje nije dozvoljeno... :)
Dakle, famozni zadatak 42, iz nekog razloga, zbunjuje narodne mase (iako, statisticki, nije najlosije rijeseni zadatak). Confused Zadatak je glasio ovako (sada je malo izmijenjen, jer ne objavljujemo rjesenja aktualnih zadataka):

Zadatak 42 (napisa):
Napišite program koji učitava prirodne brojeve m i n (m < n), te pomoću zvjezdica ispisuje cik-cak graf dimenzija m × n tako da “krene” iz gornjeg lijevog kuta, te se “spušta” dolje desno, zatim (nakon što dođe do dna) ide gore desno, zatim opet dolje desno i tako do desnog ruba.
Primjer (brojeve linija NE treba ispisati): m = 5 i n = 19
Kod:
                        1: *       *       *
                        2:  *     * *     * *
                        3:   *   *   *   *   *
                        4:    * *     * *
                        5:     *       *


Ideju rjesenja sam opisao ovdje, a sada prilazem i rjesenje (nakucano iz glave u cca 5 minuta):

Kod:
#include <stdio.h>
#include <stdlib.h>

int main(void) {
  char **mat;
  int m, n, i, j, dir = -1;

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

  mat = (char**)malloc(m * sizeof(char*));
  for (i = 0; i < m; i++) {
    mat[i] = (char*)malloc((n+1) * sizeof(char));
    for (j = 0; j < n; j++)
      mat[i][j] = ' ';
    mat[i][n] = '\0';
  }

  i = 0;
  j = 0;

  while (j < n) {
    mat[i][j++] = '*';
    if (!i || i == m - 1) dir = -dir;
    i += dir;
  }

  printf("\n");
  for (i = 0; i < m; i++) {
    printf("%s\n", mat[i]);
    free(mat[i]);
  }

  free(mat);

  return 0;
}


Rjesenje moze i bez stringova: treba samo
a) smanjiti dimenziju u drugom malloc()-u
b) maknuti mat[i][n] = '\0';
c) printf("%s\n", mat[i]); zamijeniti s for() petljom i dodatnim ispisom skoka u novi red.

Ako netko rijesi originalnu verziju (dakle ovu ovdje, a ne onu s weba) bez matrica (objasnih i to na onom linku), moze zalijepiti na ovaj topic. Cool

Inace, ovo je jedini "crtacki" zadatak (za sada Twisted Evil) koji je bitno laksi ako se koriste matrice... Mr. Green

Podsjecam da objavljivanje rjesenja aktualnih zadataka i dalje nije dozvoljeno... 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


Zadnja promjena: vsego; 23:24 uto, 19. 6. 2007; ukupno mijenjano 1 put.
[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: 23:10 uto, 19. 6. 2007    Naslov: Citirajte i odgovorite

Samo jedno pitanje: zašto se program crasha nakon ispisa? dodao sam scanf("%%"); prije returna, dakle nakon svega, program napravi sve što treba, ali onda se javi onaj prozorčić da ima problem bla bla bla javit microsoftu...ne znam dal i drugima tako
radim u devcpp-u na windowsima

i vrlo zanimljiv pristup zadatku...
a zadatak nije sam po sebi težak, nego treba doć na ideju, pa sve to prebrojat, pa iskodirat sve te ideje itd...
Samo jedno pitanje: zašto se program crasha nakon ispisa? dodao sam scanf("%%"); prije returna, dakle nakon svega, program napravi sve što treba, ali onda se javi onaj prozorčić da ima problem bla bla bla javit microsoftu...ne znam dal i drugima tako
radim u devcpp-u na windowsima

i vrlo zanimljiv pristup zadatku...
a zadatak nije sam po sebi težak, nego treba doć na ideju, pa sve to prebrojat, pa iskodirat sve te ideje itd...



_________________
"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
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: 23:27 uto, 19. 6. 2007    Naslov: Citirajte i odgovorite

[quote="Luuka"]Samo jedno pitanje: zašto se program crasha nakon ispisa? dodao sam scanf("%%"); prije returna, dakle nakon svega, program napravi sve što treba, ali onda se javi onaj prozorčić da ima problem bla bla bla javit microsoftu...ne znam dal i drugima tako
radim u devcpp-u na windowsima[/quote]

Tip-feller: u zadnjem [tt]for()[/tt] je pisalo [tt]< n[/tt], umjesto [tt]< m[/tt], a u konzoli (radim, naravno, u Linuxu) nisam primijetio da kaze "Segmentation fault". :)

[quote="Luuka"]a zadatak nije sam po sebi težak, nego treba doć na ideju, pa sve to prebrojat, pa iskodirat sve te ideje itd...[/quote]

Ideje sam popisao na onom linku, a za slaganje koda ste imali vremena (doma), mada mislim da je pola sata sasvim dosta (na prakt.kol. imate sat i pol). :)
Luuka (napisa):
Samo jedno pitanje: zašto se program crasha nakon ispisa? dodao sam scanf("%%"); prije returna, dakle nakon svega, program napravi sve što treba, ali onda se javi onaj prozorčić da ima problem bla bla bla javit microsoftu...ne znam dal i drugima tako
radim u devcpp-u na windowsima


Tip-feller: u zadnjem for() je pisalo < n, umjesto < m, a u konzoli (radim, naravno, u Linuxu) nisam primijetio da kaze "Segmentation fault". Smile

Luuka (napisa):
a zadatak nije sam po sebi težak, nego treba doć na ideju, pa sve to prebrojat, pa iskodirat sve te ideje itd...


Ideje sam popisao na onom linku, a za slaganje koda ste imali vremena (doma), mada mislim da je pola sata sasvim dosta (na prakt.kol. imate sat i pol). 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
matmih
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 07. 12. 2006. (22:57:42)
Postovi: (1A4)16
Spol: muško
Sarma = la pohva - posuda
36 = 51 - 15
Lokacija: {Zg, De , Ri}

PostPostano: 23:31 uto, 19. 6. 2007    Naslov: Citirajte i odgovorite

E, da meni inače normalno radi program. Imam Devc 4.9.8.0 :)
E, da meni inače normalno radi program. Imam Devc 4.9.8.0 Smile


[Vrh]
Korisnički profil Pošaljite privatnu poruku MSNM
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: 23:38 uto, 19. 6. 2007    Naslov: Citirajte i odgovorite

Da, sad radi i meni...

a što se tiče tih ideja na onom linku, pomogle su jako malom broju ljudi...ipak većina nije nikad programirala pa im tak nešto ne dolazi baš intuitivno...nije baš sve sasvim jasno...
Da, sad radi i meni...

a što se tiče tih ideja na onom linku, pomogle su jako malom broju ljudi...ipak većina nije nikad programirala pa im tak nešto ne dolazi baš intuitivno...nije baš sve sasvim jasno...



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


Pridružen/a: 21. 01. 2006. (18:15:12)
Postovi: (73)16
Spol: žensko
Sarma = la pohva - posuda
24 = 28 - 4
Lokacija: ...evo mene među moje...

PostPostano: 0:07 sri, 20. 6. 2007    Naslov: Citirajte i odgovorite

Evo, "slučajno" san ovo nedavno rješavala pa da podilin s onima koje zanima (nije baš najelegantnije, al sad... :wink: )

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

int main(){
int m, n, i, j;
printf("Unesi brojeve m i n (m<n): ");
scanf("%d %d", &m, &n);
for (i=0; i<m; i++){ //Idemo po recima m x n (zamisljene) "matrice"
for (j=0; j<n; j++) //...za svaki redak po stupcima
/* Vidi se da je "graf" periodican, s periodom 2*m-2.
Znaci, dosta je gledati prvi dio (prvo slovo "V").
Da bi na neko mjesto stavili '*', indeks stupca pri dijeljenju s periodom mora davati ostatak
jednak indeksu retka ili -(indeks retka) zbog simetrije.
*/
if ((j-i)%(2*m-2)==0 || (j+i)%(2*m-2)==0) printf("*");
else printf(" ");
printf("\n"); // Dosli smo na kraj reda, prelazimo u novi i ponavljamo postupak (i tako sve dok ne prodemo sve redove)
}
return 0;
}
[/code:1]
Evo, "slučajno" san ovo nedavno rješavala pa da podilin s onima koje zanima (nije baš najelegantnije, al sad... Wink )

Kod:
#include <stdio.h>

int main(){
    int m, n, i, j;
    printf("Unesi brojeve m i n (m<n): ");
    scanf("%d %d", &m, &n);
    for (i=0; i<m; i++){ //Idemo po recima m x n (zamisljene) "matrice"
        for (j=0; j<n; j++) //...za svaki redak po stupcima
            /* Vidi se da je "graf" periodican, s periodom 2*m-2.
               Znaci, dosta je gledati prvi dio (prvo slovo "V").
               Da bi na neko mjesto stavili '*', indeks stupca pri dijeljenju s periodom mora davati ostatak
               jednak indeksu retka ili -(indeks retka) zbog simetrije.
            */
            if ((j-i)%(2*m-2)==0 || (j+i)%(2*m-2)==0) printf("*");
            else printf(" ");
        printf("\n"); // Dosli smo na kraj reda, prelazimo u novi i ponavljamo postupak (i tako sve dok ne prodemo sve redove)
        }
    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: 0:45 sri, 20. 6. 2007    Naslov: Citirajte i odgovorite

@Mala_022: :karma: Smijem ubaciti u neku buducu verziju vjezbi? :D Nije mi se dalo mozgati oko detalja i nastimavati formule... :oops:
@Mala_022: karma++ Smijem ubaciti u neku buducu verziju vjezbi? Very Happy Nije mi se dalo mozgati oko detalja i nastimavati formule... Embarassed



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


Pridružen/a: 21. 01. 2006. (18:15:12)
Postovi: (73)16
Spol: žensko
Sarma = la pohva - posuda
24 = 28 - 4
Lokacija: ...evo mene među moje...

PostPostano: 1:00 sri, 20. 6. 2007    Naslov: Citirajte i odgovorite

[quote="vsego"]Smijem ubaciti u neku buducu verziju vjezbi? :D Nije mi se dalo mozgati oko detalja i nastimavati formule... :oops:[/quote]
Slobodno, slobodno :)

[size=3]P.S. Najsmišnije je šta san ja iz C-a imala 3 ;-)[/size]
vsego (napisa):
Smijem ubaciti u neku buducu verziju vjezbi? Very Happy Nije mi se dalo mozgati oko detalja i nastimavati formule... Embarassed

Slobodno, slobodno Smile

P.S. Najsmišnije je šta san ja iz C-a imala 3 Wink


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


Pridružen/a: 26. 04. 2006. (10:35:00)
Postovi: (20B)16
Spol: muško
Sarma = la pohva - posuda
= 45 - 39
Lokacija: |R^3

PostPostano: 7:02 sri, 20. 6. 2007    Naslov: Citirajte i odgovorite

[i]Fatal teeth![/i] :mrgreen:

[i]Thnx for the elegant solution.[/i] :wink:
Fatal teeth! Mr. Green

Thnx for the elegant solution. Wink


[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.
Stranica 1 / 1.

 
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