#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main(){
int scelta,nElementi,nFat,i,x,nkElementi,nk,nkFat,risultato,kFat,nk1Fat,nk1,elementiRipetuti,frequenza,nFatFrequenza;
do
{
printf(" ************************** \n");
printf(" Programma di Calcolo \n");
printf(" ************************** \n\n");
printf("Premi 1 per calcolare le Permutazioni Semplici\n\n");
printf("Premi 2 per calcolare le Permutazioni con Ripetizione\n\n");
printf("Premi 3 per calcolare le Disposizioni Semplici\n\n");
printf("Premi 4 per calcolare le Disposizioni con Ripetizione\n\n");
printf("Premi 5 per calcolare le Combinazioni Semplici\n\n");
printf("Premi 6 per calcolare le Combinazioni con Ripetizione\n\n\n");
printf("Premi 7 per uscire\n\n\n");
scanf("%d",&scelta);
printf("Inserisci N: ");
scanf("%d",&nElementi);
if(scelta>2) {
printf("Inserisci K: ");
scanf("%d",&nkElementi);
}
if(scelta==1) { //Hai scelto di calcolare le 'Permutazioni Semplici'
if(nElementi!=0) {
nFat=nElementi;
while(--nElementi) nFat=nFat*nElementi;
}
else nFat=1;
printf("\nLe permutazioni semplici sono:");
printf("\n %d\n\n",nFat);
}
else if(scelta==2) { //Hai scelto di calcolare le 'Permutazioni con Ripetizione'
if(nElementi!=0) {
nFat=nElementi;
for(i=1; i<nElementi; i++) {
nFat=nFat*(nElementi-i);
}
}
else nFat=1;
printf("Quanti elementi sono ripetuti?: ");
scanf("%d",&elementiRipetuti);
while(elementiRipetuti>nElementi) {
printf("ERRORE! Il numero di elementi ripetuti %d supera il numero di elementi %d.\n",elementiRipetuti,nElementi);
printf("Ristabilisci quanti elementi sono ripetuti?: ");
scanf("%d",&elementiRipetuti);
}
risultato=1;
for(i=1;i<=elementiRipetuti;i++) {
printf("Dammi la frequenza del %d elemento: ",i);
scanf("%d",&frequenza);
if( frequenza!=0) {
nFatFrequenza=frequenza;
for(x=1; x<frequenza; x++) {
nFatFrequenza=nFatFrequenza*(frequenza-x);
}
}
else nFatFrequenza=1;
risultato=risultato*nFatFrequenza;
}
printf("\nLe permutazioni con ripetizioni dei dati inseriti sono:");
printf("\n%d\n\n",(nFat/risultato));
}
else if(scelta==3) { //Disposizioni semplici
if( nElementi!=0) {
nFat=nElementi;
// calcolo il fattoriale di n!
for(i=1; i<nElementi; i++) {
nFat=nFat*(nElementi-i);
}
}
else nFat=1;
nkFat=nk=nElementi-nkElementi;
if( nk!=0) {
//calcolo il fattoriale di (n-k)!
for(i=1; i<nk; i++) {
nkFat=nkFat*(nk-i);
}
}
else nkFat=1;
risultato=nFat/nkFat;
printf("\nLe disposizioni semplici sono:");
printf("\n %d\n\n",risultato);
}
else if(scelta==4) { //Disposizioni con ripetizione
// calcolo la potenza k di n.
nFat=nElementi;
for(i=1; i<nkElementi; i++) {
nFat=nFat*nElementi;
}
printf("\nLe disposizioni con ripetizioni sono:");
printf("\n %d\n\n",nFat);
}
else if(scelta==5) { //Combinazioni semplici
// calcolo il fattoriale di n!
if(nElementi!=0) {
nFat=nElementi;
for(i=1; i<nElementi; i++) {
nFat=nFat*(nElementi-i);
}
}
else nFat=1;
//calcolo il fattoriale di (n-k)!
nkFat=nk=nElementi-nkElementi;
if(nk!=0) {
for(i=1; i<nk; i++) {
nkFat=nkFat*(nk-i);
}
}
else nkFat=1;
//calcolo il fattoriale di k!
if(nkElementi!=0) {
kFat=nkElementi;
for(i=1; i<nkElementi; i++) {
kFat=kFat*(nkElementi-i);
}
}
else kFat=1;
risultato=nFat/(nkFat*kFat);
printf("\nLe combinazioni semplici dei dati inseriti sono:");
printf("\n %d\n\n",risultato);
}
else if(scelta==6) { //Combinazioni con ripetizione
// calcolo il fattoriale di (n+k-1)!
nk1Fat=nk1=(nElementi+nkElementi-1);
if(nk1Fat!=0) {
for(i=1; i<nk1; i++) {
nk1Fat=nk1Fat*(nk1-i);
}
}
else nk1Fat=1;
//calcolo il fattoriale di (n-k)!
if(nkFat!=0) {
nkFat=nk=nElementi-1;
for(i=1; i<nk; i++) {
nkFat=nkFat*(nk-i);
}
}
else nkFat=1;
//calcolo il fattoriale di k!
if(nkElementi!=0) {
kFat=nkElementi;
for(i=1; i<nkElementi; i++) {
kFat=kFat*(nkElementi-i);
}
}
else kFat=1;
risultato=nk1Fat/(nkFat*kFat);
printf("\nLe combinazioni con ripetizione dei dati inseriti sono:");
printf("\n %d\n\n",risultato);
}
}while(scelta != 7);
system("PAUSE");
return 0;
}
Ecco la modifica. Ti consiglio di rivedere tutto il codice cmq. Dividerlo in funzioni, mettere uno switch su scelta invece di if-else-if-else ecc.