Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
Postano: 19:42 ned, 15. 4. 2007 Naslov: Zadatak 2.6 |
|
|
Hej ljudi....jel ima tko volje napisati ovaj programčić....mučim se već neko vrijeme al stalno je nešt krivo...ponestalo mi ideja....hvala
Hej ljudi....jel ima tko volje napisati ovaj programčić....mučim se već neko vrijeme al stalno je nešt krivo...ponestalo mi ideja....hvala
_________________ "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
|
|
[Vrh] |
|
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
Postano: 21:20 ned, 15. 4. 2007 Naslov: |
|
|
#include <stdio.h>
void f(int x,int min,int a[]){
int i;
if (x<0) a[0]=a[1]=a[2]=0;
if (x==0) {for (i=1;i<=a[0];i++) printf("2 ");
for (i=1;i<=a[1];i++) printf("3 ");
for (i=1;i<=a[2];i++) printf("5 ");
scanf("%%");};
if (min<=2) {a[0]++; f(x-2,2,a);};
if (min<=3) {a[1]++; f(x-3,3,a);};
if (min<=5) {a[2]++; f(x-5,5,a);};
}
int main (){
int x,a[2];
printf("Ucitaj broj: ");
scanf("%d",&x);
a[0]=a[1]=a[2]=0;
printf("%d je jednako: ",x);
f(x,2,a);
return 0;
}
To je moj program (hvala za hint),ali mi fja ne ulazi za 3jku i 5icu, i ako ubacim neki neparni broj onda se odmah gasi program. Gdje griješim??? Zašto radi samo za dvojku kao minimalni?
#include <stdio.h>
void f(int x,int min,int a[]){
int i;
if (x<0) a[0]=a[1]=a[2]=0;
if (x==0) {for (i=1;i⇐a[0];i++) printf("2 ");
for (i=1;i⇐a[1];i++) printf("3 ");
for (i=1;i⇐a[2];i++) printf("5 ");
scanf("%%");};
if (min⇐2) {a[0]++; f(x-2,2,a);};
if (min⇐3) {a[1]++; f(x-3,3,a);};
if (min⇐5) {a[2]++; f(x-5,5,a);};
}
int main (){
int x,a[2];
printf("Ucitaj broj: ");
scanf("%d",&x);
a[0]=a[1]=a[2]=0;
printf("%d je jednako: ",x);
f(x,2,a);
return 0;
}
To je moj program (hvala za hint),ali mi fja ne ulazi za 3jku i 5icu, i ako ubacim neki neparni broj onda se odmah gasi program. Gdje griješim??? Zašto radi samo za dvojku kao minimalni?
_________________ "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
|
|
[Vrh] |
|
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
|
[Vrh] |
|
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
Postano: 22:19 ned, 15. 4. 2007 Naslov: |
|
|
[quote="Luuka"]A ideja onoga je bila da sve brojače stavi na nulu i krene opet ali nije uspjelo. Trebalo bi ih stavit na nulu, ili bar umanjit kad god broj prijeđe u negativu. Kak to izvest :?: :?: :?:[/quote]
To je najjednostavnije izvest tako da stvari ne pamtis u polju nego u tri varijable, dakle da ti funkcija ima sljedeci prototip:
[code:1]void f(int x, int min, int count2, int count3, int count5);[/code:1]
Na pocetku pozoves: [tt]f(x,2,0,0,0);[/tt]
Kad malo bolje pogledas, ovaj pristup ti cak omogucava da izbjegnes koristenje parametra [tt]min[/tt].
Luuka (napisa): | A ideja onoga je bila da sve brojače stavi na nulu i krene opet ali nije uspjelo. Trebalo bi ih stavit na nulu, ili bar umanjit kad god broj prijeđe u negativu. Kak to izvest |
To je najjednostavnije izvest tako da stvari ne pamtis u polju nego u tri varijable, dakle da ti funkcija ima sljedeci prototip:
Kod: | void f(int x, int min, int count2, int count3, int count5); |
Na pocetku pozoves: f(x,2,0,0,0);
Kad malo bolje pogledas, ovaj pristup ti cak omogucava da izbjegnes koristenje parametra min.
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
Postano: 23:13 ned, 15. 4. 2007 Naslov: |
|
|
Stavio sam ovako kod rekurzivnog poziva fje:
[code:1]if (min<=2) {if (x-2>=0) { br2++;f(x-2,2,br2,br3,br5);} else br2--;};
if (min<=3) {if (x-3>=0) { br3++;f(x-3,3,br2,br3,br5);} else br3--;};
if (min<=5) {if (x-5>=0) { br5++;f(x-5,5,br2,br3,br5);} else br5--;};[/code:1]
ali još uvijek ispisuje onog prethodno korištenog jedanput previše...može još koji hint? Mala korekcija if else-a recimo...
Stavio sam ovako kod rekurzivnog poziva fje:
Kod: | if (min<=2) {if (x-2>=0) { br2++;f(x-2,2,br2,br3,br5);} else br2--;};
if (min<=3) {if (x-3>=0) { br3++;f(x-3,3,br2,br3,br5);} else br3--;};
if (min<=5) {if (x-5>=0) { br5++;f(x-5,5,br2,br3,br5);} else br5--;}; |
ali još uvijek ispisuje onog prethodno korištenog jedanput previše...može još koji hint? Mala korekcija if else-a recimo...
_________________ "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
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
Postano: 23:33 ned, 15. 4. 2007 Naslov: |
|
|
[code:1]#include <stdio.h>
void f(int x,int min,int br2,int br3,int br5){
int i;
if (x<0) return;
if (x==0) {for (i=0;i<br2;i++) printf("2 ");
for (i=0;i<br3;i++) printf("3 ");
for (i=0;i<br5;i++) printf("5 ");
printf("\n");};
if (min<=2) {if (x-2>=0) { br2++;f(x-2,2,br2,br3,br5);} else br2--;};
if (min<=3) {if (x-3>=0) { br3++;f(x-3,3,br2,br3,br5);} else br3--;};
if (min<=5) {if (x-5>=0) { br5++;f(x-5,5,br2,br3,br5);} else br5--;};
}
int main (){
int x;
printf("Ucitaj broj: ");
scanf("%d",&x);
printf("Rastav od %d : \n",x);
f(x,2,0,0,0);
scanf("%%");
return 0;
}[/code:1]
Eto ga. Mislim da mi je greška u pokojem znakiću al je ne vidim. Help!!!
Kod: | #include <stdio.h>
void f(int x,int min,int br2,int br3,int br5){
int i;
if (x<0) return;
if (x==0) {for (i=0;i<br2;i++) printf("2 ");
for (i=0;i<br3;i++) printf("3 ");
for (i=0;i<br5;i++) printf("5 ");
printf("\n");};
if (min<=2) {if (x-2>=0) { br2++;f(x-2,2,br2,br3,br5);} else br2--;};
if (min<=3) {if (x-3>=0) { br3++;f(x-3,3,br2,br3,br5);} else br3--;};
if (min<=5) {if (x-5>=0) { br5++;f(x-5,5,br2,br3,br5);} else br5--;};
}
int main (){
int x;
printf("Ucitaj broj: ");
scanf("%d",&x);
printf("Rastav od %d : \n",x);
f(x,2,0,0,0);
scanf("%%");
return 0;
} |
Eto ga. Mislim da mi je greška u pokojem znakiću al je ne vidim. Help!!!
_________________ "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
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 0:51 pon, 16. 4. 2007 Naslov: |
|
|
Sto ce ti oni [tt]if()...else[/tt]-ovi?! :shock: Situaciju "premali broj" sprjecavas s onim [tt]if (x<0)[/tt]. 8) Inace, nije krivo ostaviti [tt]if()...else[/tt]-ove kod rekurzivnih poziva, ali [tt]brx--[/tt] mora biti u istom bloku gdje i [tt]brx++[/tt] (a ne u [tt]else[/tt]-u). ;)
Dakle:
[code:1]if (min<=2) { br2++;f(x-2,2,br2,br3,br5); br2--;}
if (min<=3) { br3++;f(x-3,3,br2,br3,br5); br3--;}
if (min<=5) { br5++;f(x-5,5,br2,br3,br5); br5--;}[/code:1]
Inace, bolji nacin je:
[code:1]if (min<=2) f(x-2,2,br2+1,br3,br5);
if (min<=3) f(x-3,3,br2,br3+1,br5);
if (min<=5) f(x-5,5,br2,br3,br5+1);[/code:1]
:w
Sto ce ti oni if()...else-ovi?! Situaciju "premali broj" sprjecavas s onim if (x<0). Inace, nije krivo ostaviti if()...else-ove kod rekurzivnih poziva, ali brx– mora biti u istom bloku gdje i brx++ (a ne u else-u).
Dakle:
Kod: | if (min<=2) { br2++;f(x-2,2,br2,br3,br5); br2--;}
if (min<=3) { br3++;f(x-3,3,br2,br3,br5); br3--;}
if (min<=5) { br5++;f(x-5,5,br2,br3,br5); br5--;} |
Inace, bolji nacin je:
Kod: | if (min<=2) f(x-2,2,br2+1,br3,br5);
if (min<=3) f(x-3,3,br2,br3+1,br5);
if (min<=5) f(x-5,5,br2,br3,br5+1); |
_________________ 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.
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
Postano: 7:42 pon, 16. 4. 2007 Naslov: |
|
|
Hvala puno vsego!!!!
Pokušo sam nešto slično, ali sa br2++ a ne br2+1 al nije išlo...
Ovo radi, and once again vsego has saved the day....olakšao si muke meni i još jednoj kolegici koju je to 'mučilo'...
Hvala puno vsego!!!!
Pokušo sam nešto slično, ali sa br2++ a ne br2+1 al nije išlo...
Ovo radi, and once again vsego has saved the day....olakšao si muke meni i još jednoj kolegici koju je to 'mučilo'...
_________________ "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
|
|
[Vrh] |
|
matmih Forumaš(ica)
Pridružen/a: 07. 12. 2006. (22:57:42) Postovi: (1A4)16
Spol:
Lokacija: {Zg, De , Ri}
|
Postano: 14:22 čet, 19. 4. 2007 Naslov: |
|
|
Imam jedno pitanje:
Kako da modificiram ovaj program da mi ispisuje sve podskupove koji su djeljivi sa 17, a ne samo njihov broj?
[code:1] #include <stdio.h>
int rek(int niz[], int n,int suma){
if (n)return
rek(niz,n-1,suma+niz[n-1])+rek(niz,n-1,suma);
return (suma %17 ? 0: 1);
}
int main(void){
int niz[100],i,n;
printf("Ucitaj broj elemenata skupa:\n");
scanf("%d",&n);
printf("Ucitaj elemente skupa:\n");
for (i=0;i<n;i++)
scanf("%d",&niz[i]);
printf("Broj podskupova cija suma je djeljiva sa 17 je: %d",rek(niz,n,0));
scanf("%%");
return 0;
}
[/code:1]
Imam jedno pitanje:
Kako da modificiram ovaj program da mi ispisuje sve podskupove koji su djeljivi sa 17, a ne samo njihov broj?
Kod: | #include <stdio.h>
int rek(int niz[], int n,int suma){
if (n)return
rek(niz,n-1,suma+niz[n-1])+rek(niz,n-1,suma);
return (suma %17 ? 0: 1);
}
int main(void){
int niz[100],i,n;
printf("Ucitaj broj elemenata skupa:\n");
scanf("%d",&n);
printf("Ucitaj elemente skupa:\n");
for (i=0;i<n;i++)
scanf("%d",&niz[i]);
printf("Broj podskupova cija suma je djeljiva sa 17 je: %d",rek(niz,n,0));
scanf("%%");
return 0;
}
|
|
|
[Vrh] |
|
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
Postano: 15:09 čet, 19. 4. 2007 Naslov: |
|
|
[quote="matmih"]
Kako da modificiram ovaj program da mi ispisuje sve podskupove koji su djeljivi sa 17, a ne samo njihov broj?
[/quote]
Ne bas skroz jednostavno. Mozes npr. ovako:
[code:1]
#include <stdio.h>
void rek(int niz[], int karakt_fja[], int n, int remaining){
if(remaining > 0){
karakt_fja[n - remaining] = 0;
rek(niz, karakt_fja, n, remaining - 1);
karakt_fja[n - remaining] = 1;
rek(niz, karakt_fja, n, remaining - 1);
}
else{ /* remaining == 0 */
int suma = 0;
int i;
for(i = 0; i < n; ++i) if(karakt_fja[i]) suma += niz[i];
if(suma % 17 == 0){
printf("{");
for(i = 0; i < n; ++i){
if(karakt_fja[i]) printf(" %d", niz[i]);
}
printf(" }\n");
}
}
}
int main(void){
int niz[100], kf[100], i, n;
printf("Ucitaj broj elemenata skupa:\n");
scanf("%d",&n);
printf("Ucitaj elemente skupa:\n");
for (i=0;i<n;i++)
scanf("%d",&niz[i]);
printf("Podskupovi cija suma je djeljiva sa 17 su:\n");
rek(niz, kf, n, n);
return 0;
}
[/code:1]
Ideja je da pogledas sve podskupove gledas tako sto ces unutar polja [tt]karakt_fja[/tt] rekurzivno izgraditi sve karakteristicne funkcije promatranog skupa.
matmih (napisa): |
Kako da modificiram ovaj program da mi ispisuje sve podskupove koji su djeljivi sa 17, a ne samo njihov broj?
|
Ne bas skroz jednostavno. Mozes npr. ovako:
Kod: |
#include <stdio.h>
void rek(int niz[], int karakt_fja[], int n, int remaining){
if(remaining > 0){
karakt_fja[n - remaining] = 0;
rek(niz, karakt_fja, n, remaining - 1);
karakt_fja[n - remaining] = 1;
rek(niz, karakt_fja, n, remaining - 1);
}
else{ /* remaining == 0 */
int suma = 0;
int i;
for(i = 0; i < n; ++i) if(karakt_fja[i]) suma += niz[i];
if(suma % 17 == 0){
printf("{");
for(i = 0; i < n; ++i){
if(karakt_fja[i]) printf(" %d", niz[i]);
}
printf(" }\n");
}
}
}
int main(void){
int niz[100], kf[100], i, n;
printf("Ucitaj broj elemenata skupa:\n");
scanf("%d",&n);
printf("Ucitaj elemente skupa:\n");
for (i=0;i<n;i++)
scanf("%d",&niz[i]);
printf("Podskupovi cija suma je djeljiva sa 17 su:\n");
rek(niz, kf, n, n);
return 0;
}
|
Ideja je da pogledas sve podskupove gledas tako sto ces unutar polja karakt_fja rekurzivno izgraditi sve karakteristicne funkcije promatranog skupa.
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
matmih Forumaš(ica)
Pridružen/a: 07. 12. 2006. (22:57:42) Postovi: (1A4)16
Spol:
Lokacija: {Zg, De , Ri}
|
|
[Vrh] |
|
|