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

2. kolokvij (30.5.05.)
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
g o s t
Gost





PostPostano: 20:17 pon, 30. 5. 2005    Naslov: 2. kolokvij (30.5.05.) Citirajte i odgovorite

Postoji li [i]negdje[/i] rješenje današnjeg (30.5.) kolokvija iz programiranja [color=red]?[/color] gdje [color=red]:[/color] može li mi netko riješiti posljednji zadatak
[color=blue]/* unese se prirodan broj n, program ispiše sve podskupove skupa {1,2,..,n}, navodno ima veze s rekurzijama o kojima nažalost ne znam puno*/[/color]

[color=red]return[/color] hvala
Postoji li negdje rješenje današnjeg (30.5.) kolokvija iz programiranja ? gdje : može li mi netko riješiti posljednji zadatak
/* unese se prirodan broj n, program ispiše sve podskupove skupa {1,2,..,n}, navodno ima veze s rekurzijama o kojima nažalost ne znam puno*/

return hvala


[Vrh]
vsego
Site Admin
Site Admin


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

PostPostano: 1:12 uto, 31. 5. 2005    Naslov: Citirajte i odgovorite

Skolski primjer rekurzije. :) Ja bih to ovako rijesio:

[code:1]void subset(int *niz, int n, int k){
static int cnt = 0;
if (k == n) {
int i;
// Ispis s puno "kozmetike" (dakle, moze i daleko jednostavnije)
printf("Podskup #%d: {", ++cnt);
for (i = 0; (i < n) && !niz[i]; i++);
if (i < n) printf("%d", i + 1);
for (i++; i < n; i++) if (niz[i]) printf(", %d", i + 1);
printf("}\n");
} else {
niz[k] = 0;
subset(niz, n, k+1);
niz[k] = 1;
subset(niz, n, k+1);
}
}
main() {
int *niz, n;
scanf("%d", &n);
niz = (int *)malloc(n*sizeof(int));
subset(niz, n, 0);
free(niz);
}
[/code:1]

Btw, [b]moguce[/b] je i bez rekurzije, samo podosta teze (pogotovo za n>8*sizeof(int)). ;)
Skolski primjer rekurzije. Smile Ja bih to ovako rijesio:

Kod:
void subset(int *niz, int n, int k){
  static int cnt = 0;
  if (k == n) {
    int i;
    // Ispis s puno "kozmetike" (dakle, moze i daleko jednostavnije)
    printf("Podskup #%d: {", ++cnt);
    for (i = 0; (i < n) && !niz[i]; i++);
    if (i < n) printf("%d", i + 1);
    for (i++; i < n; i++) if (niz[i]) printf(", %d", i + 1);
    printf("}\n");
  } else {
    niz[k] = 0;
    subset(niz, n, k+1);
    niz[k] = 1;
    subset(niz, n, k+1);
  }
}
main() {
  int *niz, n;
  scanf("%d", &n);
  niz = (int *)malloc(n*sizeof(int));
  subset(niz, n, 0);
  free(niz);
}


Btw, moguce je i bez rekurzije, samo podosta teze (pogotovo za n>8*sizeof(int)). Wink



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


Pridružen/a: 01. 07. 2003. (13:09:44)
Postovi: (9D)16
Sarma = la pohva - posuda
67 = 74 - 7

PostPostano: 19:10 uto, 31. 5. 2005    Naslov: Citirajte i odgovorite

...ali ne i uzasno tesko:

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

int main ( void )
{
int n, total, j;

scanf ("%d", &n); total=1<<n;
while (printf ("\n"), total--)
for (j=0; j<n; j++)
if ((1<<j) & total)
printf ("%d ", j+1);


return 0;
}[/code:1]

Nije bas fancy ispis...
1<<n je pokrata za 2^n, & je bitovni AND, da ne razvlacimo petlje :)
To gore radi za n<32...sto je ok jer za vece n bi trebalo ispisati vise od 4 milijarde podskupova :)
...ali ne i uzasno tesko:

Kod:
#include <stdio.h>

int main ( void )
{
   int n, total, j;
   
   scanf ("%d", &n); total=1<<n;
   while (printf ("\n"), total--)
      for (j=0; j<n; j++)
         if ((1<<j) & total)
            printf ("%d ", j+1);
   
   
   return 0;
}


Nije bas fancy ispis...
1<<n je pokrata za 2^n, & je bitovni AND, da ne razvlacimo petlje Smile
To gore radi za n<32...sto je ok jer za vece n bi trebalo ispisati vise od 4 milijarde podskupova Smile


[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
g o s t
Gost





PostPostano: 17:25 sri, 1. 6. 2005    Naslov: Citirajte i odgovorite

Puno hvala obojici na odgovorima.

Možda sam slično pitanje trebao postaviti dan prije kolokvija jer sličan zadatak se pojavio i prošle godine...
Puno hvala obojici na odgovorima.

Možda sam slično pitanje trebao postaviti dan prije kolokvija jer sličan zadatak se pojavio i prošle godine...


[Vrh]
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