


Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Una spiegazione dei concetti di base sulle funzioni e procedure in linguaggio c, tra cui sottoprogrammi, parametri formali e attuali, istruzione return e l'uso di librerie come printf e scanf. Vengono inoltre illustrate le differenze tra dichiarazione e definizione della funzione e il meccanismo di passaggio di parametri per valore e per riferimento.
Tipologia: Appunti
1 / 4
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!



Cap 7 Funzioni e procedure SOTTOPROGRAMMA, PROCEDURE E FUNZIONI : può capitare che si renda necessario ripetere nel programma una sequenza di istruzioni ma non tutte di seguito. Quando succede questo invece che riscrivere quella sequenza di istruzioni in più parti differenti di programma può essere utili raggrupparli come blocco di istruzioni (nel linguaggio C in parentesi graffe) assegnandogli un nome in maniera tale che questo possa essere richiamato da più parti di programma semplicemente invocando l’etichetta/nome assegnato. Questo è il concetto di sottoprogramma. Il linguaggio C ha esteso il concetto di sottoprogramma. Il sottoprogramma di cui abbiamo parlato fino ad ora è detto procedura un sottoprogramma che non restituisce un valore. Poi c’è un estensione del sottoprogramma che è la funzione. Parliamo di estensione perché oltre a fare qualcosa il sottoprogramma se è una funzione è in grado di calcolare un qualche tipo di risultato che viene restituito dalla funzione. In ambito matematico la funzione è un espressione di calcoli matematici che agendo su una o piu variabili di ingresso produce un valore in uscita. Le funzioni in linguaggio C hanno lo stesso comportamento: hanno una o più variabili in ingresso che noi mettiamo tra parentesi tonde e fanno un qualche tipo di elaborazione su queste variabili di ingresso e restituiscono un risultato che può essere numerico oppure no. Pertanto le funzioni sono sottoprogrammi particolari in grado di restituire un valore sulla base del calcolo che fanno sui parametri che hanno in ingresso .I parametri dichiarati si chiamano parametri formali mentre i parametri che vengono forniti alla funzione quando questa viene richiamata si chiamano parametri attuali. I parametri attuali non devono avere necessariamente lo stesso nome di quelli formali, ma devono avere lo stesso tipo e dello stesso numero. Le funzioni vengono dichiarate nella parte dichiarativa del programma (dove si dichiarano le variabili) subito dopo la parte in cui ci sono le direttive per il compilatore. Funzione 2x che riceve in ingresso una variabile x di tipo intero e restituisce un valore di tipo intero. Questa funzione è cosi semplice che ha una sola riga di istruzione. L’istruzione return serve a una funzione per restituire un risultato. Quando io fra parentesi tonde nella istruzione return scrivo 2x restituirà 2 volte il valore di x che è il valore che gli ho dato in ingresso
Il programma dichiara una variabile di tipo intero e la chiama ingresso, poi stampa schermo scrivi un numero intero e va a capo, ricevi da tastiera un numero intero e lo mette nella variabile ingresso, dopodichè stampa a schermo il valore che viene restituito dalla funzione 2x quando le do come ingresso proprio la variabile che ho chiamato ingresso che ha ricevuto il valore da tastiera. Funzione (2x (x+y)): questa funzione fa il doppio della somma di x più y. Il programma sottolinea in rosso perché servono due numeri in ingresso. Quando io invoco la funzione la devo invocare esattamente con lo stesso numero di parametri che ha nella dichiarazione. Se io parto con una funzione dichiarata in un modo devo usarla esattamente com’è stata dichiarata. Diamo quindi due variabili INGRESSO A E INGRESSO B. Non vengono inizializzate perché li useremo soltanto dopo che le istruzioni scanf avranno inserito dei valori, quindi siamo sicuri che questi avranno dei valori prima di usarli per qualunque altro motivo. Il programma stampa per una prima volta SCRIVI UN ALTRO NUMERO INTERO (RICHIAMO LA FUNZIONE SCANF DANDO COME PARAMETRO ATTUALE INGRESSO A) poi stampa SCRIVI UN ALTRO NUMERO INTERO (RICHIAMO LA FUNZIONE SCANF DANDO COME PARAMETRO ATTUALE INGRESSO B) e poi stampa sullo schermo il risultato di a piu b per due dando come parametri attuali INGRESSO A E INGRESSO B Le variabili di ingresso sono i parametri formali. Formali perché sono quelli che abbiamo messo nella dichiarazione della funzione. Quando io invoco la funzione allora si chiameranno parametro attuale che deve essere coerente con il parametro formale (stesso numero, stesso tipo). Gran parte delle istruzioni in linguaggio C sono funzioni. Queste funzioni come per es printf e scanf sono funzioni di libreria la cui dichiarazione sta dentro il file “ standard.io.h” che viene linkato con il mio programma quando viene richiamato il linker. Esse sono funzioni di libreria che mi viene messa a disposizione quando istallo un compilatore del mio calcolatore e che mi rendono più semplice la programma in linguaggio C perché per esempio ho già pronte delle funzioni che sono già molto diffuse come stampare sullo schermo, ricevere un dato da tastiera. Se non metto questa direttiva possono succedere due cose: il compilatore è più intelligente e capisce comunque che le istruzioni printf e scanf le userò in qualunque programma e allora in automatico anche se non la metto il compilatore la metterà lui oppure il compilatore indica errore poiché si sta per usare l’istruzione printf e l’istruzione scanf senza averle dichiarate.
C’è un modo per consentire a una funzione di modificare il valore di una variabile ed è passare la variabile alla funzione per riferimento o per puntatore. Ciò significa che se io do alla funzione l’indirizzo del blocco di memoria che contiene la variabile da dentro la funzione posso andare direttamente a modificarla e non la sua copia. Il linguaggio C ha un meccanismo che consente di fare questo si basa su due operatori che sono l’operatore di referenziazione ( E commerciale &) che deve essere usato premettendolo al nome della variabile; da dentro la funzione si può utilizzare l’operatore di dereferenziazione ()* che serve per accedere alla variabile noto il suo indirizzo. Inoltre occorre avere un tipo di variabile chiamato tipo puntatore. Il tipo puntatore è il tipo di quelle variabili che puntano ad altre variabili cioè ne contengono l’indirizzo di memoria (%p significa guarda che stamperemo un puntatore) Normalmente una funzione riceve i suoi parametri sempre e soltanto per valore ne riceve una copia, cosicché quando la funzione termina qualunque modifica abbia tentato di fare sui parametri al di fuori della stessa non sarà visibile. Se invece passo a una funzione una variabile per riferimento allora da dentro la funzione ho la possibilità di modificare quella variabile e terminata la funzione gli effetti della modifica saranno visibili nel programma. Le variabili di tipo puntatore non sono usate soltanto per passare variabili per riferimento, ma sono usate anche in generale in qualunque programma. La funzione di libreria C che si chiama SCANF richiede che le venga dato un puntatore a una variabile perché questa funzione deve modificarla quella variabile, deve assegnare a questa il valore che l’utente digita da tastiera. Se non ricevesse un puntatore non avrebbe come modificarla. L’unico modo che abbiamo per far si che il dato che l’utente inserisce da tastiera vada a finire dentro una variabile è che passiamo alla SCANF un puntatore a variabile in maniera tale che SCANf trovandosi questa possa modificare quella variabile facendo in modo che la modifica stessa rimanga quando la funzione termina.