• Non ci sono risultati.

Procedure in C •

N/A
N/A
Protected

Academic year: 2021

Condividi "Procedure in C •"

Copied!
5
0
0

Testo completo

(1)

Elementi di Informatica 1 Prof. G. A. Di Lucca - Univ. del Sannio

Sottoprogrammi in C

• Un sottoprogramma in C viene definito nel seguente modo:

<tipo> nome_sottoprogramma ([<lista parametri formali>]) { sezione dichiarativa

corpo del sottoprogramma [return <espressione>;]

}

• Un sottoprogramma può avere o meno una lista di argomenti (parametri)

• Ogni funzione presenta un valore di ritorno che può essere di qualsiasi tipo predefinito o definito dall’utente.

• Se nella dichiarazione viene omesso il tipo ritornato, esso viene considerato automaticamente un intero.

Procedure in C

• In C non esistono le procedure

• Esso è definita come una funzione con il tipo predefinito void come valore di ritorno; ovvero non è ritornato alcun valore associato al nome di quella funzione (ma solo ai parametri passati per riferimento).

Funzioni in C

(2)

Elementi di Informatica 3 Prof. G. A. Di Lucca - Univ. del Sannio

Controllo dell’esecuzione

• All’atto della chiamata di una funzione, il controllo

dell’esecuzione viene passato alla prima istruzione del corpo della funzione stessa.

• Esistono due modi per restituire il controllo al programma chiamante:

– attraverso l’istruzione: return [<espressione>];

– termine dell’esecuzione della funzione (quando si incontra la “}” finale)

• E’ opportuno controllare sempre che la chiamata di una funzione ed il suo valore di ritorno siano consistenti.

Lista dei parametri formali

• La lista dei parametri è usata per passare dati ad una funzione chiamata. La lista può essere anche vuota.

• I parametri devono essere specificati tra parentesi e separati da virgole, dopo il nome della funzione.

• I parametri devono essere dichiarati con il loro tipo corrispondente.

• Esempio:

float Calcola ( int x, int y , int z) {

<parte dichiarativa>

<corpo della funzione >

[return <espressione>;]

}

(3)

Elementi di Informatica 5 Prof. G. A. Di Lucca - Univ. del Sannio

Esempio

#include <stdio.h>

// funzione che calcola il cubo di una variabile int cube(int x)

{

int a=x*x*x;

return a; //il valore di a è associato al nome ‘cube’

// della funzione e ‘ritornato’ al main

}

main () {

int I;

printf("Immetti numero per calcolarne il cubo ”);

scanf(“%d”, &I);

printf("Cubo = %d \n”, cube(I));

}

Parametri di una funzione

• Il metodo di passaggio dei parametri è, per default, per valore, (la funzione chiamata opererà su una copia locale dei parametri attuali passati e non ne modifica il loro valore globale

• è possibile passare i parametri per “riferimento”, utilizzando variabili di tipo puntatore

• E’ responsabilità del programmatore controllare che il numero ed il tipo degli argomenti passati ad una funzione corrisponda con quanto specificato nella dichiarazione della funzione stessa.

N.B. parametri di tipo array sono passati sempre per riferimento

(4)

Elementi di Informatica 7 Prof. G. A. Di Lucca - Univ. del Sannio

Notazione per scambio di parametri per riferimento

• Il meccanismo di scambio dei parametri per riferimento (per indirizzo) avviene tramite l’uso di variabili di tipo puntatore;

in tal caso la funzione chiamata sarà in grado di modificare il valore del parametro effettivo che riceve.

• Notazione nella dichiarazione di una funzione C di un argomento passato per riferimento:

<tipo> nome_funzione (*<nome_parametro1>)

Es:

void proc1(int *A, int B)

passato per riferimento passato per valore

• Anche i parametri effettivi nella chiamata alla funzione avranno una forma diversa se passati per valore o riferimento

• Passaggio per indirizzo:

nome_funzione_chiamata (&nome_parametro) Es.:

square(&numero); //chiamata della funzione square con parametro effettivo passato per riferimento */

riferendosi all’esempio precedente:

int x, y;

proc1(&y, x); //chiamata della funzione proc1 con y effettivo passato per riferimento e x per valore*/

Notazione per scambio di parametri per riferimento

(5)

Elementi di Informatica 9 Prof. G. A. Di Lucca - Univ. del Sannio

Esempio

#include <stdio.h>

void swap(int x, int y) { int temp;

temp = x;

x = y;

y = temp;

}

main() { int a = 3;

int b = 5;

swap(a,b);

printf(“a= %d b= %d\n”,a,b);

}

Un programma per effettuare lo scambio (swap) dei valori di due variabili

Qual’è l’output del programma ? a=3 b=5

ovvero nessuno scambio

Questo accade perché la funzione swap agisce solo su una copia delle variabili a e b (i parametri x e y sono passati per valore)

Per far sì che la funzione agisca sulle variabili stesse e non su delle copie occorre passare gli indirizzi delle variabili.

Esempio

#include <stdio.h>

void swap(int *x_ptr, int *y_ptr) { int temp;

temp = *x_ptr;

*x_ptr = *y_ptr;

*y_ptr = temp;

} main()

{ int a = 3;

int b = 5;

swap(&a, &b);

printf(“a= %d b= %d\n”,a,b);

}

Qual’è l’output del programma ? a=5 b=3

Ora x e y sono parametri formali passati per riferimento

Riferimenti

Documenti correlati

■ Quindi il vero argomento della prima funzione non é la seconda funzione, ma un normale valore, che può avere qualsiasi origine (variabile, espressione ecc...), e in particolare

Questo indi- ca cha la funzione, concava in un intorno di x = 2, deve necessariamente diventare convessa per x suffi- cientemente grande; perci´ o nell’intervallo ]2, +∞[ deve

“numero di palline bianche estratte” se ne determini la distribuzione di probabilità, il valore atteso, il coefficiente di variazione e

Per i punti in cui le regole di derivazione non sono applicabili, dire se la funzione `e derivabile o si tratta di punti angolosi, cuspidi o flessi a tangente verticale.. (c)

[r]

Da- re la condizione di convessit` a di f in termini di propriet` a delle rette tangenti

Risposte senza giustificazione non saranno ritenute valide. Prova scritta di Analisi Matematica 1

Spiegare perche’ si puo’ affermare che la funzione ammette massimo e minimo assoluti e