Ciao!
Starei provando a scrivere un software per il calcolo combinatorio, ma non so come implementare le permutazioni con ripetizione, ottengo risultati scorretti e strani errori con le combinazioni semplici e con ripetizioni e temo di aver fatto qualche errore concettuale.
Ci date un'occhiata?
Grazie mille
codice:#include <iostream> #include <cmath> using namespace std; int fattoriale(int numero){ if (numero == 1) { return 1; } if (numero == 0) { return 1; } int i; int f=1; for (i=1;i<=numero;i++){ f=f*i; } return f; } int Permuta(int elementi){ int ris; ris = fattoriale(elementi); cout <<" = " << ris << "\n\n"; } int Disponi(int n, int k){ int ris =1; for (int i=k;i>0;i--){ ris=ris *n; k--; n--; } cout <<" = " << ris << "\n\n"; } int DisponiR(int n, int k){ int ris; ris=pow(n,k); // pow(base, esponente)=base^esponente cout <<" = " << ris << "\n\n"; } int Combina(int n, int k){ //da rivedere int ris; ris = (fattoriale(n))/(fattoriale(n-k)*fattoriale(k)); cout <<" = " << ris << "\n\n"; } int CombinaR(int n, int k){ int ris; ris = (fattoriale(n-k+1))/(fattoriale(n-2*k+1)*fattoriale(k)); cout <<" = " << ris << "\n\n"; } int main() { int elementi; int gruppi; char permutazioni; char ripeti; char disposizioni; char combinazioni; char ordine; cout << "Software base di calcolo combinatorio - Colleoni Alessandro\n"; cout << "Quanti elementi desideri considerare? "; cin >> elementi; cout << "I gruppi di elementi sono dello stesso numero di elementi del totale? [s/n] "; cin >> permutazioni; if(permutazioni == 'n') { cout << "Allora i gruppi saranno formati da quanti elementi? "; cin >> gruppi; cout << "L'ordine ha importanza? [s/n] "; cin >> ordine; } cout << "Ci possono essere ripetizioni? [s/n] "; cin >> ripeti; if(permutazioni == 's' && ripeti == 's'){ cout << "Quante volte si ripetono quali elementi? (se si ripetono 2 volte un elemento e 3 volte un altro scrivi 2,3)"; //cin??? cout << "Permutazioni con ripetizione di " << elementi; // PermutaR(elementi); return 0; } if(permutazioni == 's' && ripeti == 'n'){ cout << "Permutazioni di " << elementi; Permuta(elementi); return 0; } if(ordine == 'n' && ripeti=='s') { cout << "Combinazioni con ripetizione di " << elementi << " elementi di classe "<< gruppi; CombinaR(elementi, gruppi); return 0; } if(ordine == 'n' && ripeti=='n') { cout << "Combinazioni di " << elementi << " elementi di classe "<< gruppi; Combina(elementi, gruppi); return 0; } if(ordine == 's' && ripeti=='s') { cout << "Disposizioni con ripetizione di " << elementi << " elementi di classe "<< gruppi; DisponiR(elementi, gruppi); return 0; } if(ordine == 's' && ripeti=='n') { cout << "Distribuzioni di " << elementi << " elementi di classe "<< gruppi; Disponi(elementi, gruppi); return 0; } cout << "Se leggi questo messaggio probabilmente qualcosa non ha funzionato"; return 0; }

Rispondi quotando
