INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

Похожие документы
Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

Fondamenti di Informatica

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

Informatica (A-K) 5. Algoritmi e pseudocodifica

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 5 Ing. Gian Enrico Conti Dott. Michele Zanella

Introduzione al linguaggio C Funzioni

Introduzione al C. Esercitazione 6. Raffaele Nicolussi. Corso di Fondamenti di Informatica Ingegneria Clinica

La gestione della memoria dinamica Heap

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Laboratorio di Programmazione: Linguaggio C Lezione 9 del 27 novembre 2013

Programmi in Assembly

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

Esercizi. La funzione swapint() primo tentativo

METODI ESERCIZI. 07-xx_Esercizi[01] Versione del: venerdì 3 maggio Andrea Zoccheddu CORSO INFORMATICA ITI ANGIOY SASSARI

ESERCIZIO: Analisi di un programma. Dato il seguente programma C:

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Fondamenti di Informatica T-1 Modulo 2

INFORMATICA ED ELEMENTI DI INFORMATICA MEDICA. MODULO DI INFORMATICA Prof. Stefano Gaburri e Prof. Gianluca Palermo. Prova del 28 Giugno 2010

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Lezione 8 Struct e qsort

Транскрипт:

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan venus.unive.it/borg borg@unive.it Ricevimento lunedì, prima o dopo lezione 1

Le funzioni in C Le funzioni vengono utilizzate per 3 motivi: Riusabilità del software Per evitare la ripetizione di codice Per rendere più agevole la scrittura/lettura del codice /* prima funzione # include <stdio.h> Int quadrato (int y); main () { int x; for (x=1; x<=10; x++) printf ( %d, quadrato(x)); return 0 } // prototipo funzione //contatore // chiamata funzione //fine funzione main 2 int quadrato (int y) // definizione funzione { return y * y } // fine funzione quadrato

Funzioni: chiamata per valore o per riferimento Per valore, gli argomenti saranno passati preparando una copia del loro valore. Nessuna modifica al valore originario Per riferimento, gli argomenti saranno passati prendendo il riferimento al vaore originario. Vengono modificati i valori originari In C tutte le chiamate sono per VALORE, per riferimento invece bisogna utilizzare il concetto di puntatore. Esempio int quadrato (int *yptr) { return *yptr * *yptr; } // definizione funzione, chiamata per riferimento 3

Funzioni Se una funzione non accetta parametri in ingresso si dichiara come int quadrato (void) Se una funzione non restituisce nessun valore di ritorno allora si dichiara come Void quadrato (int x) In una funzione vanno esplicitamente dichiarate tutte le variabili int quadrato (double x, double y) int quadrato (double x, y) significa allocare x come double e y come un integer 4

Generare numeri casuali La funzione rand() genera numeri pseudocasuali INTERI compresi tra 0 e RAND_MAX (32767 secondo lo standard ANSI). L istruzione i = rand() assegna un numero casuale alla variabile intera i. Esercizio. Generare numeri casuali compresi tra 1 e 6 Esercizio. Simulare 6000 lanci di un dado, conti quante volte la facciata si è presentata e ne calcoli la probabilità. SENZA utilizzare i vettori Esercizio. Rifare esercizio punto precedente utilizzando i vettori 5

Esercizi Scrivere una funzione tipo: Potenza(base,esponente). Esponente deve essere un numero diverso da zero. Utilizzate il ciclo for per il calcolo. Scrivere una funzione Multiplo che per una coppia di numeri determini se il secondo sia multiplo del primo. La funzione deve restituire vero (1) o falso (0). La funzione main stampare a video vero o falso. Scrivere una funzione che determini se un numero è primo. (Numero è primo se divisibile per 1 o per se stesso). Fino a che limite superiore (di divisori) bisogna arrivare? 6

Il gioco dei dadi: implementiamolo 7 Un giocatore lancia 2 dadi. Vince se al primo tiro la somma è 7 o 11. Perde se al primo tiro la somma è 2, 3 o 12 (Craps). Se la somma è 4, 5, 6, 8, 9 o 10 al primo tiro, allora la somma diventa il punteggio del giocatore. Per vincere si deve continuare a lanciare i dadi fino a ottenere il punteggio giocatore del primo lancio. Se però durante i lanci esce 7 allora il giocatore ha perso. Es. 4 + 1 = 5 Punteggio = 5, ritiro i dadi 6 + 2 = 8 2 + 1 = 3 3 + 2 = 5 Hai vinto

La ricorsione 1/2 Per determinati tipi di problemi può essere utile che una funzione richiami se stessa, in questi casi si parla di ricorsione. Unesempio per chiarire il problema: calcolare il fattoriale diun numero. n! = n * (n-1) * (n-2) * 1 In modo non ricorsivo: fattoriale = 1; For (x = n; x>=1;x--) fattoriale = fattoriale * x; Scomponendo il problema, n! = n * (n-1)! 4! = 4 * 3! = 4 * 3 * 2! = 4 * 3 * 2 * 1! 8

9 La ricorsione 2/2 La sequenza di chiamate nello stack della procedura ricorsiva e i relativi valori di ritorno saranno dunque: 5! 5 * 4! 4 * 3! 3 * 2! 2 * 1! 1 long fattoriale ( long n) { If (n<=1) else } return 1 120 24 6 2 return (n * fattoriale(n-1)); 1

La ricorsione. Fibonacci In modo ricorsivo la serie di fibonacci può essere definita come: Fibonacci(0) =1 Fibonacci(1) =1 Fibonacci(n) = fibonacci(n-1) * fibonacci(n-2) Long fibonacci ( long n) { if (n==0 n==1) return n; else return (fibonacci(n-1) + fibonacci(n-2)); } 10

Esercizio sulla ricorsione Scrivete una funzione ricorsiva Potenza(base, esponente) Scrivete una funzione Palindromo () che restituisca vero o falso a seconda che la stringa si legga allo stesso modo da sinistra a destra e da destra a sinistra. 11