|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jan 2011
Città: lecce
Messaggi: 198
|
Algoritmi
Salve ragazzi mi sto cimentando nella risoluzione di alcuni algoritmi elementari, ma vista la mia incompetenza in materia, non riesco a capirne il funzionamento.
Per iniziare a capire qualcosa volevo provare con la formulazione di un algoritmo che mi dia il fattoriale di un numero n, ed anche con la formulazione dell'algoritmo di un numero x elevato ad n (x^n). Conoscendo il procedimento matematico, non riesco a trovare il nesso logico con il ciclo di ripetizione finchè, e nemmeno con quello PER, e non avendo le basi necessarie mi blocco ripetutamente ad una non soluzione.
__________________
Hwuprage better than facebook, just enjoy the fun 2k shit you suck ![]() Ho concluso positivamente con spl |
|
|
|
|
|
#2 | |
|
Member
Iscritto dal: Dec 2005
Messaggi: 37
|
Quote:
x^2 = x * X x^3 = x * x * x ecc. Per X^n devi fare un ciclo di n-1 volte dove moltiplichi X * X Ad esempio Codice:
<?php
function esponente($x , $n){
$ris = 1;
for($i=1;$i<=$n ; $i++){
$ris = $ris * $x;
}
return $ris;
}
echo esponente(3,3);
?>
|
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
|
Invece di darti un esempio proverò a scriverti quello che è il mio usuale approccio ad un problema.
Il punto uno è un piccolo mondo a se in caso di grandi problemi, praticamente si dovrebbe cercare di suddividere l'algoritmo richiesto in un insieme di problemi più piccoli, chiari e più semplici da risolvere, che si risolveranno separatamente e verranno poi combinati per dare una soluzione completa. Uno strumento che permette di rappresentare efficacemente un algoritmo è il diagramma di flusso, ti consiglierei di provare a disegnarli perché credo permettano di assimilare meglio il metodo.
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Feb 2011
Messaggi: 2013
|
Quote:
__________________
CPU: Intel i5 2500k; GPU: Asus GTX 970 ; Scheda audio: Asus Xonar U7; RAM: 16GB DDR3; Storage: HD 750GB+SSD Samsung 840 (128GB); OS: Arch Linux | Linux Mint 18 | Win 7 (gaming) Thread ufficiali |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jan 2011
Città: lecce
Messaggi: 198
|
Visto che lo devo fare a mano, se scrivo in questo modo è coretto?
inizio leggi n Se (n=0) allora msg: "il fattoriale di 0 è 1"; fine allora altrimenti fatt(n)=1 finchè (n>0) fatt(n)=n*fatt (n-1) fine finchè stampa: fatt(n) fine allora fine se fine
__________________
Hwuprage better than facebook, just enjoy the fun 2k shit you suck ![]() Ho concluso positivamente con spl |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
|
L'elaborazione del fattoriale è l'esempio principe per la programmazione ricorsiva (in soldoni una funzione che richiama se stessa passandosi le variabili aggiornate e ritornando il risultato parzialmente calcolato).
Il metodo ricorsivo non è però l'unico approccio, è possibile risolvere il problema comodamente anche in modo iterativo (cioè con un semplice ciclo). La tua soluzione, così com'è scritta, è una via di mezzo tra soluzione ricorsiva ed iterativa. Non avendo definito una funzione, fatt(n) sembra un improprio nome di variabile (l'hai anche inizializzato). È presente il test per il termine dell'elaborazione ricorsiva (serve per la soluzione iterativa?). Mettiamo un paio di paletti:
Codice:
Inizio
leggi n ;
Se (n = 0)
Allora
msg: "il fattoriale di 0 è 1" ;
fine Allora
Altrimenti
fatt_n = 1 ;
Finchè (n > 0)
fatt_n = n * fatt_n ;
***devi fare qualcos'altro***
fine Finchè
Stampa: fatt_n ;
fine Altrimenti
fine Se
fine
Se hai già affrontato l'argomento funzioni potresti modificare il codice in modo da renderlo correttamente ricorsivo (anche in questo caso la tua proposta di soluzione non era molto distante dall'essere corretta).
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:01.




















