it:informatica:linguaggio_c:funzioni_1
Return to Home page
If you found any error, or if you want to partecipate to the editing of this wiki, please contact: admin [at] skenz.it
You can reuse, distribute or modify the content of this page, but you must cite in any document (or webpage) this url: https://www.skenz.it/it/informatica/linguaggio_c/funzioni_1?do=diff&rev2%5B0%5D=1551188125&rev2%5B1%5D=1551188125&difftype=sidebyside
Differences
This shows you the differences between two versions of the page.
— | it:informatica:linguaggio_c:funzioni_1 [2024/04/08 22:35] (current) – created - external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Funzioni (Esempio 1) ====== | ||
+ | **Concetti: | ||
+ | Funzione non complessa con passaggio dei parametri per valore | ||
+ | **Testo: | ||
+ | * Si scriva una funzione che riceve in ingresso due numeri di tipo float (a e b), | ||
+ | li moltiplica e restituisce il risultato della moltiplicazione. | ||
+ | * Si applichi tale funzione ad un vettore di nome //vet// al fine di moltiplicare per 3 | ||
+ | ogni suo elemento. | ||
+ | * Il risultato della moltiplicazione dovrà essere salvato su un vettore //ris// di pari dimensione. | ||
+ | |||
+ | **Soluzione: | ||
+ | <file C funzioni_1.c> | ||
+ | /* | ||
+ | Si scriva una funzione che riceve in ingresso due numeri di tipo float (a e b), | ||
+ | li moltiplica e restituisce il risultato della moltiplicazione. | ||
+ | Si applichi tale funzione ad un vettore di nome vet al fine di moltiplicare per 3 | ||
+ | ogni suo elemento. | ||
+ | Il risultato della moltiplicazione dovrà essere salvato su un vettore ris di pari dimensione. | ||
+ | */ | ||
+ | |||
+ | |||
+ | #include < | ||
+ | #define SIZE 10 | ||
+ | |||
+ | /* Prototipo */ | ||
+ | float mul(float a, float b); | ||
+ | |||
+ | int main(){ | ||
+ | |||
+ | float vet[SIZE] = {1.0, 5.0, 3.0, 7.0, 10.0, 1.0, 2.0, 3.0, 4.0, 5.0}; | ||
+ | float ris[SIZE]; | ||
+ | int i; | ||
+ | |||
+ | /* Moltiplicazione degli elementi di vet per 3 e salvataggio in ris */ | ||
+ | for(i=0; i < SIZE; i++){ | ||
+ | ris[i] = mul(vet[i], 3.0); | ||
+ | } | ||
+ | |||
+ | /* Stampa del risultato */ | ||
+ | for(i=0; i < SIZE-1; i++){ | ||
+ | printf(" | ||
+ | } | ||
+ | printf(" | ||
+ | | ||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | |||
+ | /* Corpo della funzione: funzione mul, che esegue la moltiplicazione di due numeri (a e b). */ | ||
+ | float mul(float a, float b){ | ||
+ | float risul; | ||
+ | |||
+ | risul = a*b; | ||
+ | |||
+ | return risul; | ||
+ | } | ||
+ | |||
+ | /* La funzione mul poteva essere scritta nel seguente modo */ | ||
+ | /* | ||
+ | float mul(float a, float b){ | ||
+ | return a*b; | ||
+ | } | ||
+ | */ | ||
+ | </ | ||
+ | |||
+ | **Commenti: | ||
+ | * Durante il processo di compilazione il compilatore deve conoscere i prototipi di tutte le funzioni utilizzate all' | ||
+ | <code c> | ||
+ | /* Prototipo */ | ||
+ | float mul(float a, float b); | ||
+ | </ | ||
+ | indica che in seguito verrà utilizzata una funzione di nome //mul// che ha come parametri di ingresso due variabili di tipo //float// e come valore restituito una variabile di tipo //float//. Il nome dei parametri non è importante nel processo di compilazione, | ||
+ | <code c> | ||
+ | /* Prototipo */ | ||
+ | float mul(float, float); | ||
+ | </ | ||
+ | **Nota:** Se si scrive il //corpo// della funzione prima del utilizzo della funzione, la dichiarazione del prototipo non è più necessaria (con il termine //corpo// si intende l' | ||
+ | * Analizzando il programma: | ||
+ | <code c> | ||
+ | int main(){ | ||
+ | |||
+ | float vet[SIZE] = {1.0, 5.0, 3.0, 7.0, 10.0, 1.0, 2.0, 3.0, 4.0, 5.0}; | ||
+ | float ris[SIZE]; | ||
+ | int i; | ||
+ | |||
+ | /* Moltiplicazione degli elementi di vet per 3 e salvataggio in ris */ | ||
+ | for(i=0; i < SIZE; i++){ | ||
+ | ris[i] = mul(vet[i], 3.0); | ||
+ | } | ||
+ | |||
+ | /* Stampa del risultato */ | ||
+ | for(i=0; i < SIZE-1; i++){ | ||
+ | printf(" | ||
+ | } | ||
+ | printf(" | ||
+ | | ||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
+ | dopo aver dichiarato ed inizializzato il vettore //vet// e dichiarato tutte le altre variabili, il primo ciclo //for// esegue la moltiplicazione di tutti gli elementi del vettore //vet// per //3.0//, salvando i risultati nel vettore //ris//. | ||
+ | <code c> | ||
+ | ris[i] = mul(vet[i], 3.0); | ||
+ | </ | ||
+ | si noti che viene utilizzata la funzione //mul//, la quale moltiplica il primo parametro //ris[i]// per il secondo paramentro //3.0//, ottenendo come risultato della moltiplicazione un numero di tipo //float//. | ||
+ | La seguente linea di codice: | ||
+ | <code c> | ||
+ | ris[i] = mul(vet[i], 1.0+2); | ||
+ | </ | ||
+ | avrebbe fornito lo stesso risultato, così come anche la seguente riga di codice che non fa utilizzo della funzione //mul//: | ||
+ | <code c> | ||
+ | ris[i] = vet[i]*3.0; | ||
+ | </ | ||
+ | Il secondo ciclo //for// stampa invece il contenuto del vettore //ris//. | ||
+ | * Il corpo della funzione, cioè il codice che implementa (realizza) la funzione è invece il seguente: | ||
+ | < | ||
+ | /* Corpo della funzione: funzione mul, che esegue la moltiplicazione di due numeri (a e b). */ | ||
+ | float mul(float a, float b){ | ||
+ | float risul; | ||
+ | |||
+ | risul = a*b; | ||
+ | |||
+ | return risul; | ||
+ | } | ||
+ | </ | ||
+ | In pratica i valori passati alla funzione, cioè //ris[i]// e //3.0//, vengono copiati rispettivamente nella variabili //a// e //b//. Si noti che tutte le variabili interne alla funzione (cioè //a//, //b// e //risul//) sono locali alla funzione. Infatti, ogni volta che viene eseguita la funzione, lo spazio sufficiente a salvare le 3 variabili viene allocato nella memoria del calcolatore. Tali variabili possono essere usate all' | ||
+ | * La funzione //float mul(float a, float b)// può essere scritta equivalentemente nel seguente modo: | ||
+ | <code c> | ||
+ | float mul(float a, float b){ | ||
+ | return a*b; | ||
+ | } | ||
+ | </ | ||
+ | in tal caso non si fa uso della variabile //risul// per salvare il risultato della moltiplicazione tra //a// e //b//, ma si restituisce immediatamente il risultato di tale operazione (//return a*b;//). |
If you found any error, or if you want to partecipate to the editing of this wiki, please contact: admin [at] skenz.it
You can reuse, distribute or modify the content of this page, but you must cite in any document (or webpage) this url: https://www.skenz.it/it/informatica/linguaggio_c/funzioni_1?do=diff&rev2%5B0%5D=1551188125&rev2%5B1%5D=1551188125&difftype=sidebyside
/web/htdocs/www.skenz.it/home/data/pages/it/informatica/linguaggio_c/funzioni_1.txt · Last modified: 2024/04/08 22:35 by 127.0.0.1