APPUNTI SUL LINGUAGGIO C

Slides:



Advertisements
Presentazioni simili
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Advertisements

Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente –la loro esistenza deve essere prevista e.
Script bash I file di comandi in Linux. BASH  Bourne Again Shell  Modalità interattiva o batch (file di comandi)  Ambiente di programmazione “completo”
Le funzioni in C++. Introduzione  Spesso alcuni gruppi di operazioni vengono ripetute in diverse parti all’interno del medesimo programma  Si pensi.
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Fondamenti di Informatica A - Massimo Bertozzi LE FUNZIONI.
Fondamenti di Informatica A - Massimo Bertozzi I PUNTATORI.
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Un semplice programma C /* Programma che stampa un saluto */ #include main() { printf(“Hello World!\n”); }
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
Introduzione alla programmazione MIDI
Sistemi e Applicazioni per l’Amministrazione Digitale
Introduzione al linguaggio C
Gli array Moreno Marzolla
Struct, enum, Puntatori e Array dinamici
Il linguaggio C Strutture Moreno Marzolla
10. Programmazione Ricorsiva Ing. Simona Colucci
Process synchronization
I FILES AD ACCESSO SEQUENZIALE
Ambienti di Programmazione per il Software di Base
Vettori dinamici Definiremo la classe vector.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Classe III A A.s – 2012 Programma di Informatica
Programmazione e Laboratorio di Programmazione
Programmare.
Programmazione e Laboratorio di Programmazione
Esercitazioni di C++ 31 dicembre 2018 Claudio Rocchini IGMI.
Programmazione e Laboratorio di Programmazione
Copia di oggetti il costruttore di copia ha le stesse particolarità della signature di un costruttore ordinario; il primo parametro è una reference ad.
Fondamenti di Informatica
Ricorsione 16/01/2019 package.
Programmazione e Laboratorio di Programmazione
© 2007 SEI-Società Editrice Internazionale, Apogeo
I SOTTOPROGRAMMI.
Definizione di linguaggio di programmazione
Alberi n-ary Lezioni di C.
APPUNTI SUL LINGUAGGIO C
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Process synchronization
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
APPUNTI SUL LINGUAGGIO C
Algoritmi e strutture dati APPUNTI SUL LINGUAGGIO C
La struttura dei primi programma in C
APPUNTI SUL LINGUAGGIO C Esercizi su File e Alberi Binari
Lucidi della Pof.ssa Pazienza
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C Allocazione dinamica della memoria
Programmazione e Laboratorio di Programmazione
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Unità 1 Programmi base.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
UML Diagramma statico di una classe
Programmazione e Laboratorio di Programmazione
Passaggio di parametri per indirizzo
Programmazione e Laboratorio di Programmazione
Array e Stringhe Linguaggio C.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

APPUNTI SUL LINGUAGGIO C Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Le funzioni in C Lezione II

Funzioni in C Una funzione è un blocco di istruzioni, che ha parametri in ingresso (parametri formali) e restituisce un risultato. <tipo> <Nome funzione> (lista parametri) { … blocco istruzioni return <risultato> } Lista parametri: (<tipo> <nome>, <tipo> <nome>, …)

Funzioni in C Es. int Fatt(int n) { int i,j,k; int ris; ris = 1; while (n>=1) { ris = ris*n; n--; } return ris; int i,j,k; … i = Fatt(4); scanf(“%d”,&k); j = Fatt(K); Una funzione viene attivata mediante una chiamata nella quale vengono passati i parametri attuali che devono corrispondere in numero, ordine e tipo ai parametri formali.

Funzioni in C ATTENZIONE: non è possibile nidificare funzioni; int Fatt(int n) { int Fatt2(int n2) { non è possibile passare parametri per riferimento; int Fatt(int& n) { non esistono procedure (solo funzioni) Fatt(int n) {

Definizione e implementazione In C si distingue tra definizione e implementazione di una funzione. Una definizione specifica la struttura della funzione: numero, ordine e tipo dei parametri di ingresso/uscita. La definizione di una funzione è detta in C prototipo o header. /* prototipi di funzioni */ int Fatt(int); float radice(int); int somma(int, int); char primo(int);

Definizione e implementazione Una implementazione comporta invece la specifica completa della funzione. /* implementazione della funzione somma */ int somma(int a, int b) { int sum; sum = a+b; return sum; } Il compilatore C permette l’uso di una funzione solo se ha già incontrato (almeno) la sua definizione.

Organizzazione dei programmi C La programmazione C è strutturata: un programma complesso (e quindi modulare) è generalmente distribuito su più file. Per includere un file in un altro si usa, per file nel direttorio di sistema (librerie standard), la direttiva di compilazione: #include <..> oppure per file nel direttorio corrente: #include “..”

Organizzazione dei programmi C L’organizzazione standard è la seguente: Le definizioni vengono poste in file detti header che hanno estensione .h Le implementazioni vengono poste in file che hanno estensione .c Quando si vuole usare in un programma P dati e/o funzioni memorizzate altrove, si includono nel file che contiene P le loro definizioni (contenute nei file header) e si rendono così visibili al programma P. Questo permette la compilazione separata. Il linker ha poi il compito di associare nella maniera corretta le definizioni alle invocazioni.

Struttura di un file header // File nomefile.h #ifndef NOMEFILE_H #define NOMEFILE_H <sequenza di definizioni di costanti> <sequenza di definizioni di tipi> <sequenza di definizioni di variabili> <sequenza di definizioni di funzioni> #endif L’identificazione NOMEFILE_H è solo un nome che associamo alle definizioni contenute nel file e, insieme alle direttive condizionali, serve a impedire che qualche oggetto sia definito più di una volta.

Organizzazione di programmi su più file // operazioni.h #ifndef OPERAZIONI_H #define OPERAZIONI_H … /* definizione di f */ int f(char); #endif // operazioni.c #include “operazioni.h” … /* implementazione di f */ int f(char a) { } // main.c #include <iostream.h> #include “operazioni.h” … main() { a=f(b); /* uso di f */ }

main funzione principale #include <iostream.h> /*dichiarazioni funzioni*/ … main() { /* applicazioni funzioni */ } <tipo> main (<parametri formali>)

main di un programma Java import java.*; public class prova3 { public static void main(String[] args) { … }

Programma Java Oggetto Software Oggetto Software Classe Principale Oggetto Software Oggetto Software

Modularità Riusabilità

Puntatori Permettono la gestione di strutture dinamiche (create e distrutte sotto il controllo dell’utente). Un puntatore è una variabile che contiene l’indirizzo di memoria di un’altra variabile. Dichiarazione: in C un puntatore si dichiara anteponendo al nome di una variabile il simbolo *. int *i; char *c; float *n;

Operazioni sui Puntatori l’operatore & applicato ad una variabile restituisce il puntatore ad essa; l’operatore * applicato a un puntatore restituisce la variabile puntata int i,j; int *k,*l; … k = &i; /* k punta alla variabile i */ *l = j; /* nella variabile puntata da l va il contenuto di j */ *k = *l; /* nella variabile puntata da k va il contenuto della variabile puntata da l */ k = l; /* k e l puntano alla stessa variabile */

Operazioni sui Puntatori l j *l = j; k i k = &i; *k = *l; l k l k k = l;

Come ovviare ai limiti delle funzioni Procedure: le definiamo come funzioni che restituiscono il tipo void void PariDispari(int i) { if ((i%2) == 0) printf(“%d è un numero pari”,i); else printf(“%d è un numero dispari”,i); } Passaggi per riferimento: non passiamo la variabile da modificare ma il suo puntatore. void SommaProd(int i, int j, int *s, int *p) { *s = i+j; *p = i*j;

Gestione della memoria Durante l’esecuzione di un programma C la memoria viene gestita in due maniere. Gestione statica: viene allocata dal sistema operativo un’area di memoria fissa per tutta l’esecuzione del programma. Gestione dinamica: vengono allocate due aree di memoria che vengono usate quando necessario e rese disponibili per succesivi usi: 1) lo stack: quando una funzione viene invocata vengono allocate automaticamente tutte le variabili locali e i parametri attuali sullo stack in un record di attivazione; successivamente, quando l’esecuzione della funzione termina, il record di attivazione viene cancellato e lo stack viene riportato nella situazione in cui era prima dell’invocazione; 2) lo heap: la gestione viene lasciata al programmatore mediante creazione e distruzione dinamica di variabili (tramite puntatori).

heap stack … Gestito (dinamicamente) dall’utente Gestito (dinamicamente) dall’elaboratore stack

heap stack … … void Esempio (int x) { int y; } main() { float f = -12,3; Esempio(90); stack

heap stack … … void Esempio (int x) { int y; } main() { float f = -12,3; Esempio(90); stack -12,3

heap stack … … void Esempio (int x) { int y; } main() { float f = -12,3; Esempio(90); stack 90 -12,3

lo scopriremo piu’ avanti nel corso heap lo scopriremo piu’ avanti nel corso … stack

Ricorsione E’ possibile definire funzioni in C in maniera ricorsiva. int Fatt(int n) { if (n==0) return 1; else return (n*Fatt(n-1)); } … main() { int fat,n=0; scanf(“%d”,&n); fat = Fatt(a); La ricorsione viene gestita attraverso l’uso opportuno dello stack: ogni chiamata della funzione ricorsiva genera un nuovo record di attivazione (con memorizzazione dei parametri attuali e allocazione di memoria delle variabili locali) che “maschera” la precedente invocazione.

Strumenti per la compilazione Ambiente Linux: istallazione di una versione quale Mandrake o Red Hat; ci sono due ambienti di sviluppo per C. 1) Kdevelop: ambiente di sviluppo per KDE http://www.kdevelop.org/index.html 2) Anjuta 0.1.9: ambiente di sviluppo per Gnome  http://download.html.it/ Ambiente Windows: esiste il borland cBuilder o il Devc, ambienti di sviluppo per linguaggi C/C++. http://www.borland.com/products/downloads/download_cbuilder.html http://www.bloodshed.net/ http://mais.dia.uniroma3.it/rodevirg

APPUNTI SUL LINGUAGGIO C Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Le funzioni in C FINE