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;
}