PDA

Visualizza la versione completa : [C] Programma di calcolo permutazioni, disposizioni e combinazioni


TheJokerCastold
15-12-2010, 15:41
Ciao a tutti questa è la prima volta che scrivo in questo forum e spero di riceve un vostro aiuto.
Per domani dovrei fare un programma in C che calcoli le permutazioni, le disposizioni e combinazioni, inserendo n e k. In un secondo momento devo chiedere se si vogliono effettuare le permutazioni, le disposizioni e combinazioni con permutazioni. Io ho fatto così però non mi funziona e sto per entrare in tilt!!!!!
In pratica dove aver chiesto cosa si vuole calcolare si chiude il programma, e non so come risolvere!! Vi prego aiutatemiii


#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
main(){
int n,k,p,c,d,pr,fn,fk,fkn,fkn1,fn1,pow,b,i,cr;
char a,risp,si,no,ff,fnk,nk,dr,potenza,fnk1;
printf("Inserisci n");
scanf("%d",&n);
printf("Inserisci k");
scanf("%d",&k);
if(n>k){
printf("Quale operazione vuoi effettuare?\n");
printf("Premi 'p' per calcolare le permutazioni");
printf("\nPremi 'd' per calcolare le disposizioni");
printf("\nPremi 'c' per calcolare le combinazioni\n");
getch ();
if(a=='p'){
fn=1;
for(i=1;i<=n;i++){
fn=i*n;
}
printf("vuoi calcolare anche le permutazioni con ripetizioni? si/no");
scanf("%c",risp);
if (risp==si){
fn=1;
for(i=1;i<=n;i++){
fn=i*n;}
"ff";
pr=fn/ff;
}

else if (a=='d'){
fn=i;
for(i=1;i<=n;i++){
fn=i*n;}
fnk=1;
for(i=1;i<=nk;i++){
fnk=i*nk;}
d=fn/fnk;}
printf("vuoi calcolare anche le disposizioni con ripetizione? si/no");
scanf("%c",risp);
if (risp==si)
{
dr=n*k;
}
else if (a=='c') {
fn=1;
for(i=1;i<=n;i++) {
fn=i*n;}
fnk=1;
for(i=1;i<=nk;i++){
nk=(i*nk);}
fk=1;
for(i=1;i<=k;i++){
fk=i*k;}
c=fn/(fnk*fk);}
printf("vuoi calcolare anche le combinazioni con ripetizioni? si/no");
scanf("%c",risp);
if (risp==si)
{
b=n+k-1;
fnk1=1;
for(i=1;i<=b;i++){
fnk1=i*fnk1;}
fk=1;
for(i=1;i<=fk;i++){
fk=i*fk;}
fn1=1;
for(i=1;i<=fn1;i++){
fn1=i*fn1;}
cr=fnk1/(fk*fn1);}
getch();
}
}
}

alka
15-12-2010, 15:46
Usa il tag [CODE] per riportare il codice, come indicato nel Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887).

TheJokerCastold
15-12-2010, 15:51
fatto ^^

torn24
15-12-2010, 16:02
hai un getch ma non assegni il carattere letto alla variabile a.


Sai cosa credo , credo che hai appositamente postato il codice con quell'errore non so per
quale motivo!


non vuoi stampare i risultati in output ?

qualche correzione





#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
main(){
int n,k,p,c,d,pr,fn,fk,fkn,fkn1,fn1,pow,b,i,cr;
char a,risp,si,no,ff,fnk,nk,dr,potenza,fnk1;
printf("Inserisci n");
scanf("%d",&n);
printf("Inserisci k");
scanf("%d",&k);
if(n>k){
printf("Quale operazione vuoi effettuare?\n");
printf("Premi 'p' per calcolare le permutazioni");
printf("\nPremi 'd' per calcolare le disposizioni");
printf("\nPremi 'c' per calcolare le combinazioni\n");

fflush(stdin); // meglio metterlo
scanf("%1s",&a); // non mi funzionava con getch()

if(a=='p'){
fn=1;
for(i=1;i<=n;i++){
fn=i*n;
}
printf("vuoi calcolare anche le permutazioni con ripetizioni? si/no");
fflush(stdin);
scanf("%c",&risp);// mancava &
if (risp=='s'){
fn=1;
for(i=1;i<=n;i++){
fn=i*n;}
"ff";
pr=fn/ff;
}

else if (a=='d'){
fn=i;
for(i=1;i<=n;i++){
fn=i*n;}
fnk=1;
for(i=1;i<=nk;i++){
fnk=i*nk;}
d=fn/fnk;}
printf("vuoi calcolare anche le disposizioni con ripetizione? si/no");
fflush(stdin);
scanf("%c",&risp);// mancava &
if (risp=='s')
{
dr=n*k;
}
else if (a=='c') {
fn=1;
for(i=1;i<=n;i++) {
fn=i*n;}
fnk=1;
for(i=1;i<=nk;i++){
nk=(i*nk);}
fk=1;
for(i=1;i<=k;i++){
fk=i*k;}
c=fn/(fnk*fk);}
printf("vuoi calcolare anche le combinazioni con ripetizioni? si/no");
fflush(stdin);
scanf("%c",&risp); //manca &
if (risp=='s) // prima cera si non puoi confrontare due stringhe con ==
{
b=n+k-1;
fnk1=1;
for(i=1;i<=b;i++){
fnk1=i*fnk1;}
fk=1;
for(i=1;i<=fk;i++){
fk=i*fk;}
fn1=1;
for(i=1;i<=fn1;i++){
fn1=i*fn1;}
cr=fnk1/(fk*fn1);}
getch();
}
}
}






SPERO CHE LA TUA NON SIA STATA UNA PRESA PER I FONDELLI ma il sospetto ce lo

TheJokerCastold
08-01-2011, 20:33
non sto prendendo per i fondelli nessuno anche perchè ci lavoro da settimane, e comunque ancora il programma non funziona cioè non mi da il risultato

MItaly
08-01-2011, 20:45
Il programma allo stato attuale è illeggibile, difficile che qualcuno si prenda la briga di cercare di capire cosa fa. Qualche consiglio:
1. indenta il codice


#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>

int main()
{
int n,k,p,c,d,pr,fn,fk,fkn,fkn1,fn1,pow,b,i,cr;
char a,risp,si,no,ff,fnk,nk,dr,potenza,fnk1;
printf("Inserisci n");
scanf("%d",&n);
printf("Inserisci k");
scanf("%d",&k);
if(n>k)
{
printf("Quale operazione vuoi effettuare?\n");
printf("Premi 'p' per calcolare le permutazioni");
printf("\nPremi 'd' per calcolare le disposizioni");
printf("\nPremi 'c' per calcolare le combinazioni\n");
getch ();
if(a=='p')
{
fn=1;
for(i=1; i<=n; i++)
{
fn=i*n;
}
printf("vuoi calcolare anche le permutazioni con ripetizioni? si/no");
scanf("%c",risp);
if (risp==si)
{
fn=1;
for(i=1; i<=n; i++)
{
fn=i*n;
}
"ff";
pr=fn/ff;
}

else if (a=='d')
{
fn=i;
for(i=1; i<=n; i++)
{
fn=i*n;
}
fnk=1;
for(i=1; i<=nk; i++)
{
fnk=i*nk;
}
d=fn/fnk;
}
printf("vuoi calcolare anche le disposizioni con ripetizione? si/no");
scanf("%c",risp);
if (risp==si)
{
dr=n*k;
}
else if (a=='c')
{
fn=1;
for(i=1; i<=n; i++)
{
fn=i*n;
}
fnk=1;
for(i=1; i<=nk; i++)
{
nk=(i*nk);
}
fk=1;
for(i=1; i<=k; i++)
{
fk=i*k;
}
c=fn/(fnk*fk);
}
printf("vuoi calcolare anche le combinazioni con ripetizioni? si/no");
scanf("%c",risp);
if (risp==si)
{
b=n+k-1;
fnk1=1;
for(i=1; i<=b; i++)
{
fnk1=i*fnk1;
}
fk=1;
for(i=1; i<=fk; i++)
{
fk=i*fk;
}
fn1=1;
for(i=1; i<=fn1; i++)
{
fn1=i*fn1;
}
cr=fnk1/(fk*fn1);
}
getch();
}
}
}
2. spezzalo in procedure separate;
3. aggiungi commenti;
4. usa nomi sensati per le variabili.

ramy89
08-01-2011, 20:53
Scusate,su c++ reference non trovo i prototipi delle funzioni di conio.h,trovo solo esempi già fatti.
Qual' è il prototipo di una funzione come getch?

MItaly
08-01-2011, 20:58
Originariamente inviato da ramy89
Scusate,su c++ reference non trovo i prototipi delle funzioni di conio.h,trovo solo esempi già fatti.
Qual' è il prototipo di una funzione come getch?
conio.h non è standard, se il tuo compilatore lo fornisce dovresti trovarlo nella sua documentazione.

ramy89
08-01-2011, 22:55
Ho provato ad eseguirlo semplicemente,beh è un nuovo metodo per bloccare in flusso delle istruzioni.Basta premere un tasto e il programma riparte.
Lo potrei scrivere anche con windows.h:



cout <<"Premere F12 per terminare";
for(;; )
{
Sleep(250);
if(GetAsyncKeyState(WK_F12));
}


Con Sleep durante 250 cicli di clock si interrompe il programma e si affida la cpu agli altri processi.
Direi che per chi usa windows va bene,o no? :confused:

MItaly
08-01-2011, 23:06
GetAsyncKeyState in linea di massima non andrebbe mai usata; per fare una cosa del genere andrebbero usate le API della console (nello specifico ReadConsoleInput), se hai installato VC++ puoi vedere la sua implementazione di _getch nella cartella dei sorgenti della CRT.

Loading