Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Zadatak] Binomni obrazac

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Binomni obrazac

[ Pregleda: 4045 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Kushwais

Član broj: 160006
Poruke: 30
*.6.11.vie.surfer.at.



Profil

icon [Zadatak] Binomni obrazac12.11.2007. u 22:38 - pre 200 meseci
Dobro vece :)

Treba mi program koji ce ovo da odradi , a pri tom moram koristiti funkciju

int Binomial (int n, int k)

za faktorial moram ili pozeljno je koristiti

int fkt(int x){

if(x==0)

return (1);

else

return (x*fkt(x-1));}

progg


Code:
#include<iostream>
using namespace std; 
int Binomial (int n,int k);
int fkt(int x){
if(x==0)
return (1);
else
return (x*fkt(x-1));}


int main()

    int n, k,x, test;
while(test){
cout<< " Geben sie Zahl n ein " << endl;
cin>> n ;
cout<<" Geben sie  Zahl k ein"<< endl;
cin>> k;
if (n>=k)

x= fkt(n)/(fkt(k)*fkt(n-k));
}
cout<< x << endl;
cout<<" Wiederhollen? 1-ja , 0-nein"<< endl;
cin>>test;
}
return 0;

}


Program mi odradi zadatak, znaci resenje je tacno . Nisam siguran u vezi int Binomial (int n,int k) malo me to buni , da li sam to dobro odradio???

I drugi probllem sto napisati u slucaju n manje od k pa da me vrati na pocetak programa !! probao sam sa if , else .. ali mi nenako izbaci nesto napamet "x"!

Hvala unapred pozz

 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
212.200.239.*

ICQ: 208550327


+14 Profil

icon Re: [Zadatak] Binomni obrazac13.11.2007. u 14:02 - pre 200 meseci
Najlaksi nacin da te vrati "gore" kod while:

[code]

if (n>=k)
{
x= fkt(n)/(fkt(k)*fkt(n-k));
}
else
continue;

Sve ostalo je isto...

EOF
 
Odgovor na temu

Nemanja.Ciric
web dizajner/programer, Niteoweb
Novi Sad/Subotica

Član broj: 163398
Poruke: 63
*.dynamic.sbb.co.yu.

Jabber: serj.cobain@gmail.com


Profil

icon Re: [Zadatak] Binomni obrazac20.11.2007. u 01:43 - pre 200 meseci
Zar je tako teško napisati smislen naziv teme (npr. Binomni obrazac)? Nije jasno šta ovaj program treba da radi (iz naslova teme, tvog opisa i čitanja poruka koje program ispisuje na ekran sa cout). Tekst zadatka je nekompletan! Da li treba da NAPIŠEŠ funkciju koja računa binomni obrazac ili da je UPOTREBIŠ za nešto?

Iz koda kontam da je zadatak ono prvo, što skoro pa postižeš ako izostaviš red "int Binomial (int n, int k)". Međutim ako je zadatak napisati funkciju čija je deklaracija data sa int Binomial (int n, int k) onda to ovaj program NE RADI. Ovaj program ispisuje svojevrsni meni koji korisnika (valjda, slabo divanim nemački, to jest ne znam ga u opšte, ako izuzmemo par samoukih fraza) pita da unese koeficijente n i k, zatim razvije binomni obrazac i pita ga da li želi da računa binomni obrazac sa nekim drugim koeficijentima i tako u krug dokle god korisnik ne unese 0 (što signalizira kraj rada).

Uz to, napravio si seriju grešaka ovde. Ako korisnik izabere da radi više od jednom zateće jedan estetski problem - nigde nisi brisao ekran! Takođe, nisi koristio novi red posle cin. Fali ti tačkazarez iza "return (x*fkt(x-1));}". Najveća greška je što proveravaš da li je n veće od k, ali NIŠTA NE RADIŠ AKO NIJE!!! Dolaziš u situaciju da ispišeš x kojem nigde nije dodeljena vrednost! Pardon, to nije najveća greška, ta čast pripada činjenici da si koristio while petlju umesto do..while petlju - vrlo lako može da ti se desi a ti se vrednost promenjive test inicijalizuje na nulu, i da ti se while petlja NI JEDNOM NE IZVRŠI (jer će odmah da proveri da li je test različit od nule, i ako jeste, ne radi dalje ništa).Dakle kada bi ja hteo da razvijem binomni obrazac tri puta, jednom sa koeficijentima (3,2), drugi put sa koeficijentima (4,3) a treći put sa koeficijentima (2,3) pomoću ovog programa, moj ekran bi izgledao ovako:

Citat:

Geben sie Zahl n ein
3 Geben sie Zahl k ein
23
Wiederhollen? 1-ja , 0-nein
1 Geben sie Zahl n ein
4 Geben sie Zahl k ein
34
Wiederhollen? 1-ja , 0-nein
1 Geben sie Zahl n ein
2 Geben sie Zahl k ein
34 294 967 290
Wiederhollen? 1-ja , 0-nein
0

(a to što nisi nazubio kod da bude pregledniji ti nikada neću oprostiti :))

Pretpostavljam da je zadatak ipak bio da se napiše funkcija koja odgovara pomenutoj deklaraciji, što ovo nije. Ovo nije funkcija, ovo je gotov program, koji ne može biti pozvan u sklopu nekog drugog programa. Razlika je VELIKA. Ovo što si pokušao da napišeš je program koji zahteva od korisnika da iščita poruke i unese vrednosti ručno i onda iščita rezultat. Kompjuter ne može sa rezultatom vršenja ovog programa da uradi AMA BAŠ NIŠTA. Ne bih mogao da izračunam neku verovatnoću pomoću ovog programa tako što ću ukucati "p=Binomial(3,2)+Binomial(4,2)+Binomial(5,2);" u nekom programu. Da bi to postigao program bi morao da izgleda ovako:

Code:

#include<iostream>
using namespace std; 

int fkt(int x){ 
  if(x==0){
    return (1);
  }else{
    return (x*fkt(x-1));}
  }; //ovde se definiše funkcija faktorijel, ali to već znaš, nema velikih promena, samo
     //sam nazubio kod da bude pregledniji i dodao tačku zarez na kraju, i dodao par 
    //zagrada "{}" da bi kod bio onakav kakav sam ja (a i mnogi drugi) navikao da čitam


int Binomial (int n,int k){ 
  int x;
  if (n>=k){ 
    x= fkt(n)/(fkt(k)*fkt(n-k)); // ako je n>=k onda ce se racunati obrazac po 
                                         //  datoj formuli
  }else{
    x=-1; 
// ako je n<k, onda je rezultat -1 (u programu koji koristi ovu funkciju treba
// proveriti da li je rezultat -1, i ako jeste reći da je došlo do greške, ili još bolje 
// nikada ne proslediti funkciji binomial pogrešne vrednosti. Ja bih ovde još 
// ubacio proveru da li su n i k negativni brojevi, jer koliko ja znam binomni obrazac 
// nije definisan za negativne koeficijente, ali mrzelo me da i to napišem :)
  };
  return x; 
}


Ako ovaj fajl sačuvaš kao "binomialc.h" i na početku nekog programa ga include-uješ (kako bi se ovo pravilno reklo na srpskom jeziku???) pretprocesorksom direktivom #include "binomialc.h" funkciju Binomial(n,k) možeš da koristiš u tom programu koliko god puta poželiš. Ovime su zadovoljena dva važna imperativa programiranja: REUSABILITY i MODULARITY, odnosno mogućnost ponovnog korišćenja tvog koda i modularnost. Za kraj evo malog test programa:

Code:

// Paskalov trougao - http://en.wikipedia.org/wiki/Pascal%27s_triangle je 
//trougao koji od vrha, gde se nalazi jedan ceo broj, ka dnu, gde se nalazi n+1 
// brojeva sadrži koeficijente polinoma koji se dobija stepenovanjem binoma 
// oblika a+b stepenom n. Dakle, u prvom redu je broj 1 pošto je (a+b)^0=1, 
// u drugom redu su brojevi 1 i 1, pošto je (a+b)^1=a+b. U trećem su brojevi 
// 1 2 1, potšo je (a+b)^2 = 1*a^2*b^0 + 2*a^1*b^1 + 1*a^0*b^2. Dakle
// i-ti koeficijent iz n-tog reda paskalovog trougla govori o tome koji broj množi 
// proizvod a^(n-i)*b^i. Ovaj program ispisuje n-ti red paskalovog trougla.

#include <iostream.h> // osnovne ulazno/izlazne operacije sa monitorom
#include <conio.h> // clrscr();
#include <> // Binomial(int n, int k);

void main(){
  int n;
  
  do{
    clrscr();
    cout<<"Molim vas, unesite redni broj vrste Paskalovog trougla koji vas interesuje";
    cout<< "(ceo, nenegativan broj!) ";
    cin<<n;
    clrscr();
  }while (n<0); // petlja se vrti dokle god korisnik ne unese pravilnu vrednost
  
  for (i=0;i<n+1;i++){
    cout<<Binomial(n,i)<<" ";
  };

  cout<<endl<<"Pritisnite bilo koji taster za prekid programa ";
  cin<<n;
}



Nadam se da ti je programiranje u C-u (da, ovo sve je C, a ne C++, nema ni traga Objektima ili barem radu sa izuzecima - tako da ovo nije na pravom mestu (treba da bude C za početnike a ne c++), mada neki kursevi iz objektno orijentisanog programiranja u kojima se praktikuje C++ počinju sa nekim uvodom u C) ipak malo bliže posle cele ove priče. Nemoj da doživljavaš teško to što imaš mnogo grešaka, uz malo (više) razmišljanja i nešto (samostalnog) rada, sve ovo se da shvatiti.

P.S. Da li se to meni čini ili se na ovom (pod)forumu masovno rešavaju domaći zadaci našim studentima na austrijskim fakultetima? Mislim, konstatacija nije sporna (kog vraga bi inače pisali tekst korisniku na nemačkom) ono što jeste je da li oni u opšte pokušavaju sami da urade...

P.P.S. glorius šta tačno radi kod koji si ti izmenio?
NĆirić
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
212.200.234.*

ICQ: 208550327


+14 Profil

icon Re: [Zadatak] Binomni obrazac20.11.2007. u 03:03 - pre 200 meseci
Moj post je odgovor na pitanje coveka, kako da se vrati na pocetak while petlje ako uslov ne zadovoljava ( sto sam i naglasio ).... A tu su ostali da uvide ostale greske u programu...

Svaka cast na uocavanju gresaka...
EOF
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Binomni obrazac

[ Pregleda: 4045 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.