Výpočet kombinace – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Výpočet kombinace – C / C++ – Fórum – Programujte.comVýpočet kombinace – C / C++ – Fórum – Programujte.com

 

Aliande
~ Anonymní uživatel
18 příspěvků
11. 11. 2012   #1
-
0
-

Ahoj, píšu program pro výpočet kombinace. Uživatel napíše dvě čísla n, k. Program vypočítá dle vzorce n! / (k! * (n-k)!  a uloží do proměnné c.

Zatím jsem to sepsal takto, ale mám problém. Asi dělám nějaké hloupé chyby :-(

#include <iostream>
using namespace std;
int Faktorial(int n);
int KombinacniCislo(int n, int k);

int main()
{
    int a, b;
cin >> n, k;
cout << KombinacniCislo(int n, int k) << "\n";
    char reakce;
  cin >> reakce;
return 0;
}

int Faktorial(int n)
{
    if (n == 0)
        return 1;
   
    int vysledek = n;
    for (int i = n - 1; i > 0; i--)
    {
        vysledek *= i;
    }
    return vysledek;
}

int KombinacniCislo(int n, int k)
{   
    return Faktorial(n) / (Faktorial(k) * Faktorial(n-k));
}

Nahlásit jako SPAM
IP: 188.175.163.–
KIIV
~ Moderátor
+43
God of flame
11. 11. 2012   #2
-
0
-

co takhle napsat co ti na tom nefunguje?

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ingiraxo+15
Grafoman
11. 11. 2012   #3
-
0
-

já opravdu nechápu, jestli používáte notepad nebo IDE, co zvýrazdňuje (podtrhává) chyby, protože počet takových lidí co sem pástnout kód, kde jsou chyby co bijou přímo do očí není vyjmečný

např. se podívej na řádek s voláním funkce KombinacniCislo.. potom používáš úplně jiný proměnný, který tam nejsou ani deklarovaný

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Migiran
~ Anonymní uživatel
1 příspěvek
11. 11. 2012   #4
-
0
-

Řekl bych, že pán spíše obšlehl nějaký kód z internetu, zkusil jej upravit a dopadl takhle, že se ptá zde...

No, přidám jeden kód, který funguje

#include <iostream>
#include <string>

using namespace std;

int main () {
    
   
    float n, r;
    int   group, choose;
    long int result = 1;

    
  
    try {
        do {
            cout << endl;
            
            cout << "Size of the group (n): ";
            
            cin  >> n;
        } while (n < 0);
        
        do {
            cout << endl;
            
            cout << "Number of choices (r): ";
            
            cin  >> r;
        } while (r < 0);
        
        cout << endl;
        
        group  = (int)n;
        choose = (int)r;
    }
    catch (...) {
        cout << "Error: << Unexpected Input >>" << endl;
        return (-1);
    }
    
    if (choose > group) {
        cout << 0 << endl << endl;
        return (0);
    }
    
    for (int i = 1; i <= choose; ++i)
        result *= ((float)(group - choose + i)/i);
    
    cout << result << endl << endl;
     char reakce;
  cin >> reakce;
    return (0);
}

Nahlásit jako SPAM
IP: 188.175.163.–
Maty
~ Anonymní uživatel
93 příspěvků
11. 11. 2012   #5
-
0
-

Já to napsal celkem jinak :D Myslím, že by se daly využít i jiné postupy, třeba i kratší.

Když se pokouším udělat kód, abych mohl n i k (jak je ve vzorci v prvním příspěvku) - n! / (k! * (n-k)!

napsat do jednoho řádku, potvrdit enterem, tak mám jednu chybu po druhé. Jak z toho ven? Nedá se upravit ten kód nad mým příspěvkem k tomu? Taky by se mi to hodilo

Nahlásit jako SPAM
IP: 188.175.163.–
ingiraxo+15
Grafoman
11. 11. 2012   #6
-
0
-

nechte mě hádat.. opět se tu sešla celá třída nebo autor trpí roztrojenou osobností?   

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Rocky
~ Anonymní uživatel
2 příspěvky
11. 11. 2012   #7
-
0
-

Jasně že dal ;-)

#include <iostream>
#include <string>

using namespace std;

int main () {
   
  
    float n, r;
    int   group, choose;
    long int c = 1;

   
 
    try {
        do {
           
           
            cout << "Zadej n a k: ";
           
            cin  >> n >> r;
  
        } while (n < 0 && r < 0 );
       
       
        cout << endl;
       
        group  = (int)n;
        choose = (int)r;
    }
    catch (...) {
        cout << "Error: << Unexpected Input >>" << endl;
        return (-1);
    }
   
    if (choose > group) {
        cout << 0 << endl << endl;
        return (0);
    }
   
    for (int i = 1; i <= choose; ++i)
        c *= ((float)(group - choose + i)/i);
   
    cout << "\nC = " << c;
     char reakce;
  cin >> reakce;
    return (0);
}

Pak mi řekni/těte, jak můj domácí úkol pro vás dopadl :D

Nahlásit jako SPAM
IP: 188.175.163.–
Maty
~ Anonymní uživatel
93 příspěvků
11. 11. 2012   #8
-
0
-

Paráda! Ještě jedna věc - jak ošetřit nepovolené znaky? Když jsem to zkoušel, neustále to vypisuje "Zadej n a k:"

Nebo ještě hodnoty, ze kterých nejde kombinace spočítat, například n = 1 a k = 6...? Jak ošetřit, aby program vyhodil chybu a neukončil se jako v tomto případě?

Nahlásit jako SPAM
IP: 188.175.163.–
Rocky
~ Anonymní uživatel
2 příspěvky
11. 11. 2012   #9
-
0
-

V případě jiných znaků, než číslic by se to dalo ošetřit takto: if(cin.fail()){
cout << "Nespravny vstup." << endl;
return 1;

}

Ale nevím, jak to udělat v případě těch čísel, ze kterých není možné vypočítat kombinaci :-(

Zajímalo by mě to však a přemýšlím nad tím

Nahlásit jako SPAM
IP: 188.175.163.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 33 hostů

Podobná vlákna

Kombinace — založil fcelik

Kombinace — založil David

Kombinace prvku — založil zdravim

Kombinace cisel — založil Martin

Kombinace materiálů — založil marek321

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý