Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


INFORMATICA-LE FUNZIONI IN C, Appunti di Informatica

Riassunto sulle funzioni in linguaggio di programmazione c. Teoria e esercizi esempio. Accenni a array e strighe.

Tipologia: Appunti

2020/2021

Caricato il 09/04/2021

giuliaallegretti2323
giuliaallegretti2323 🇮🇹

5

(1)

1 documento

1 / 8

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Appunti di Informatica
FUNZIONI
Programmazione modulare
NORMALI
prototipo → dichiarazione -->Introduce il nome della funzione
sintassi prototyping: tiporitorno nomefunz (tipopar1,.....,tipo parN)
es: double cubo(float,float,float);
si potebbero scirvere i par. formali ma sarebbe
superfluo
invocazione → chiamata ( parametri attuali )
si fa riferimento al nome e passando una lista di parametri conformi in tipo
numero e ordine
es: a= cubo ( a , b, c );
definizione (parametri formali) →Stabilisce il nome di una funzione, il valore
in ingresso su cui agisce(parametri formali), il blocco di instruzioni(contenuto)
e il valore di ritorno.
tipoRitorno nomefunz (prototyping:tipopar1 par1,.....,tipoparN parN)
es: double cubo (float a, float b, float c){ (funzione)}
parametri attuali = parametri inseriti nel main dall’utente.
vengono passati alla funzione al momento della chiamata
parametri formali = parametri che fanno riferimento ai parametri attuali, utilizzati
dentro la funzione
funzione che viene copiato dentro il parametro attuale
sono dichiarati per:
tipo
numero
ordine
Non è consentito il passaggio di parametri di tipo ARRAY
Include math.h (pow)
Passaggio di parametri
ESPLICITO:In c il passaggio di parametri avviene sempre per valore, ogni par. formale è
inizalizzato con il suo par. attuale.Non è necessaria una perfetta corrispondenza Il
passaggio dei parametri puo essere effettuato tra FLOAT DOUBLE e tra
Char/shortINT
IMPLICITO:definire una var globale sia alla funzione chiamante che a quella chiamata
Gli array non possono effettuare il passaggio di parametri (troppo lunga, troppi dati)
VARIABILI LOCALI
Sono utilizzabili solo all’interno della funzione in cui sono state dichiarate
! VARIABILI GLOBALI !
Definibili in un file al di fuori di ogni funzione,possiamo leggerlo e scriverlo da qualsiasi funzione.
Non bisogna usarle perchè tolgono la possibilità di modificare il valore di una
variabile
pf3
pf4
pf5
pf8

Anteprima parziale del testo

Scarica INFORMATICA-LE FUNZIONI IN C e più Appunti in PDF di Informatica solo su Docsity!

Appunti di Informatica

FUNZIONI

Programmazione modulare

NORMALI

 prototipo → dichiarazione -->Introduce il nome della funzione

sintassi prototyping: tiporitorno nomefunz (tipopar1,.....,tipo parN)

es: double cubo(float,float,float);

si potebbero scirvere i par. formali ma sarebbe

superfluo

 invocazione → chiamata ( parametri attuali )

si fa riferimento al nome e passando una lista di parametri conformi in tipo

numero e ordine

es: a= cubo ( a , b, c );

 definizione (parametri formali) →Stabilisce il nome di una funzione, il valore

in ingresso su cui agisce(parametri formali), il blocco di instruzioni(contenuto)

e il valore di ritorno.

tipoRitorno nomefunz (prototyping:tipopar1 par1,.....,tipoparN parN)

es: double cubo (float a, float b, float c){ (funzione)}

parametri attuali = parametri inseriti nel main dall’utente.

vengono passati alla funzione al momento della chiamata

parametri formali = parametri che fanno riferimento ai parametri attuali, utilizzati

dentro la funzione

funzione che viene copiato dentro il parametro attuale

sono dichiarati per:

 tipo

 numero

 ordine

Non è consentito il passaggio di parametri di tipo ARRAY

Include math.h (pow) Passaggio di parametri ESPLICITO:In c il passaggio di parametri avviene sempre per valore, ogni par. formale è inizalizzato con il suo par. attuale.Non è necessaria una perfetta corrispondenza Il passaggio dei parametri puo essere effettuato tra FLOAT  DOUBLE e tra Char/shortINT IMPLICITO:definire una var globale sia alla funzione chiamante che a quella chiamata Gli array non possono effettuare il passaggio di parametri (troppo lunga, troppi dati)

VARIABILI LOCALI

Sono utilizzabili solo all’interno della funzione in cui sono state dichiarate

! VARIABILI GLOBALI!

Definibili in un file al di fuori di ogni funzione,possiamo leggerlo e scriverlo da qualsiasi funzione.

Non bisogna usarle perchè tolgono la possibilità di modificare il valore di una

variabile

⇒ RETURN = valore di ritorno della funzione

Al termine dell’esecuzione restituisce il controllo (o a volte un valore )della funzione

chiamata

return (espressione);

ex : return c;

ex2: return (ccc);

Nel caso non sia definito il tipo di ritorno, si sottintende che sia INT

⇒ VOID lavandino(sink)

Le funzioni void sono funzioni che non restituiscono alcun valore,

vengono gestite come quelle normali apparte che per:

-Dichiarazione es:

void stampaBin( int );

-Definizione es:

void stampBin( int v );

Le funzioni void non vogliono la funzione return

Es per chi non usa nessun parametro messerr(visualizzare un mess)

Cosa succede quando c’è un doppio click

 carica l’eseguibile in ram

 la cpu preleva dalla ram le istruzioni e le esegue

Gestione RAM

-heap → memoria dinamica

-stack → variabili locali

-data segment → variabili globali

-code segment → istruzioni linguaggio macchina

Percorso del file

main.c→ compilatore (controlla la sintassi e traduce parzialmente in linguaggio

macchina)

compilatore→ main.o/main.obj

main.o/main.obj→ linker

Linker riceve un file oggetto traduce IN CODICE MACCHINA riceve i file di libreria

( .a / .lib )

linker→ main.exe

PUNTATORI:variabili con un indirizzo di memoria

Se una funzione in c restituisce piu di un valore o si usano le variabil globali o si rende nota alla funzione le locazioni in cui andare a depositare le sue uscite.

ad ogni variabile corrisponde:

 nome

ESERCIZIOESEMPIO

#include <stdio.h> #include <stdlib.h> //parametri attuali e formali devono essere dello stesso numero e tipo //il prototipo serve per dichiarare una funzione all'interno del programma, x decidere se la chiamata è fatta in modo corretto int annobisestile (int a); int main() { int anno=2000; if (annobisestile (anno)==1) //chiamata parametri attuali () printf ("l'anno è bisestile"); else printf ("l'anno non è bisestile"); } int annobisestile(int a){ //parametro formale () if (a%400==0||(a%4==0 && a%100!=0)) return 1; else return 0; } libro p 74- sorgente ->pre processore/header->sorgente modificato->compilatore->file oggetto->linker/librerie-

applicazione compilatore controlla la sintassi genera il file oggetto nel linguaggio macchina le funzioni non vengono tradotte fino a che il linker non le traduce tramite le librerie(contengono codice macchina delle funzioni) FUNZIONE CHE RESTITUISCE IL DATO VOID #include <stdio.h> #include <stdlib.h> void stampa_min_e_max(int a,int b,int c); int main() { stampa_min_e_max (10,3,18); } void stampa_min_e_max(int a,int b,int c) { int min,max; min=max=a; if (a>b) min=b; else max=b; if(min>c) printf ("%d e' il minimo\n",c); else

printf("%d e' il minimo\n",min); if(max>c) printf ("%d e' il massimo\n",max); else printf("%d e' il massimo\n",c); } ESERCIZIO CAPITO Realizzare un programma, organizzato in funzioni, per la risoluzione degli esercizi a pag 185 n.1, 11, 14, 15. Per ogni esercizio va sviluppata una funzione. Si precisa che tutte le funzioni devono acquisire e restituire i dati da e verso il main, solo nel caso degli esercizi 14 e 15 è consentito effettuare l'output direttamente dalle stesse. Si richiede anche lo sviluppo di un menù (esso stesso sarà una funzione con eventuale autonomia per l'input o l'output dei dati) che metta a disposizione le scelte legate all'esecuzione delle funzioni di risoluzione degli esercizi e che prende in input la scelta restituendola al programma principale #include <stdlib.h> #define DIM 20 void menu(int); void elementi(int); void inizializza(int[],int); int azzera(int[],int,int); int Cerca(int[],int,int); int main() { int n,ch,arr[DIM],pos,num,in=0; elementi(&n); do{ menu(&ch); switch(ch){ case 1: inizializza(arr,n); for(int i=0;i<n;i++){ printf("Elemento %d: %d\n",i+1,arr[i]); } in=1; break; case 2: if(in){ printf("Che elemento vuoi azzerare del vettore? "); scanf("%d",&pos); pos--; if(azzera(arr,n,pos)) printf("Elemento %d azzerato\n",pos+1);

srand(time(NULL)); for(int i=0;i<n;i++){ arr[i]=rand()%100; } } int azzera(int arr[],int n,int pos) { if(pos>=0 && pos<n){ arr[pos]=0; return 1; } return 0; } int Cerca(int arr[],int n,int num) { for(int i=0;i<n;i++){ if(arr[i]==num) return 1; } return 0; } ESERCIZIO GESTIONE STRINGHE #include <stdio.h> #include <stdlib.h> #define DIM 50 int lunghezzaparola (char *parola1); int vocali (char parola2[DIM]); int confrontoparole (char *parola1, char *parola2); int main() { char parola1[DIM], parola2[DIM]; printf("Inserisci la prima stringa\n"); scanf("%s",&parola1); printf("Inserisci la seconda stringa\n"); scanf("%s",&parola2); printf("La lunghezza della prima parola e': %d \n",lunghezzaparola(parola1)); printf("La lunghezza della seconda parola e': %d \n",lunghezzaparola(parola2)); printf("sono le vocali presenti in parola2,numero: %d \n", vocali(parola2)); if (confrontoparole(parola1, parola2)== 1) printf("Le parole sono uguali\n"); else

printf("Le parole sono diverse\n"); return 0; } int lunghezzaparola(char parola1) { int i=0; while(parola1++){ i++; } return i; } int vocali (char parola2[DIM]) { int i=0, num=0; for(i=0; parola2[i]!='\0'; i++) { if (parola2[i]=='a'||parola2[i]=='e'||parola2[i]=='i'||parola2[i]=='o'||parola2[i]=='u'){ num++; printf ("'%c'",parola2[i]);} } return num; } int confrontoparole (char *parola1, char *parola2) { int i = 0, n = 0; while( *parola1++ && *parola2++ ){ if(parola1[i]!= parola2[i]){ n = 1; } i++; if(n>=1) return 0; else return 1; } }