Oppure

Loading
13/11/09 19:04
Mahat89
Ciao a tutti,
ho un problema che per voi è probabilmente abbastanza semplice: devo creare un programma ( in c o in pascal) che calcoli diverse cose, io mi sono fermato alla prima :rotfl: , cioè il calcolo disposizioni semplici. Il programma NON deve stampare le varie combinazioni, ma solo il risultato
nDisposizionik= n*(n-1)...(n-k+1)

quindi calcolca il fattoriale, fino a n-k+1...


Esempio: se abbiamo 6Disposizioni4
n=6
k=4
n-k+1= 6-4+1 = 3
DISPOSIZIONI SEMPLICI= 6*4*5*3 = 360
il programma mi deve stampare solo 360

io ho pensato a qualcosa del genere, ma mi sembra scorretto

leggi n;
leggi k;
temp=n-k+1 \metto il (n-k+1) in una variabile
repeat
risultato=n*(n-1);
until (n-1)=temp;


Premetto che non devo usare stringhe ( anche perchè non servono :P ) o puntatori ( anche perchè non li abbiamo ancora fatti e non so manco cosa siano)...devo solo trovare un modo, una regola matematica,o un ciclo adatto per effettuare quel calcolo... La soluzione piu' è semplice (anche se piu' lunga) meglio è ( mi interessa capire il funzionamento, non fare copia-incolla)), se è un po' complicata o ricorsiva vi prego di spiegare passo passo quello che fa :)
Per domande sono quì, spero di essere stato chiaro!!
Vi ringrazio in anticipo

Ps: va bene sia pseudo linguaggio, pascal, o c, altri non ne conosco XD
aaa
13/11/09 20:14
giuseppe93
ciao! io farei così:
leggi k e n, salvi n in un altra varibiabile ad esempio temp e anche nella variabile risultato e poi fai un ciclo in questo modo: mentre temp-1>k fai: temp=temp-1, risultato=risultato*temp
tradotto in c diventa
int n,k,risulatt, temp;
//acquisisci n e k
temp=n;
risultao=n;
while(temp-1>k){
temp=temp-1;
risultato=risultato*temp
}


fammi sapere se ti va bene!
aaa
14/11/09 14:12
Mahat89
Temo che non vada bene :(
Ho provato prima in pascal, poi sulla carta e abbiamo ottenuto lo stesso risultato, purtroppo, sbagliato.

Ho provato con 6 Disposizioni 4

quindi:

n=6;
k=4;
temp=n; // 6
risultao=n; // 6
while(temp-1>k){
temp=temp-1; //5
risultato=risultato*temp // 30
}

e il ciclo si interrompe al primo giro in quanto temp ora è 5 e non si verifica piu' la condizione del while (temp-1>k)

invece il risultato da ottenere è
n=6
k=4
n-k+1= 6-4+1 = 3
6Disposizioni4 = 6*5*4*3 = 360

Comunque grazie mille per il tentativo :)
aaa
14/11/09 14:43
Mahat89
Ho fatto qualche prova e con qualche modifica ora funziona, ho aggiunto una variabile che contenesse (n-k+1) e ho cambiato la condizione del while :)

ecco la soluzione:

int n,k,risulatt, temp;
//acquisisci n e k
temp=n;
risultao=n;
comodo=(n-k)+1;
while(temp>comodo){
temp=temp-1;
risultato=risultato*temp
}
aaa
14/11/09 14:51
giuseppe93
:k:
aaa