tutorato elementi di informatica 2018 -...

50
Tutorato Elementi di Informatica 2018 Pattern Recognition & Application Lab Dipartimento di Ingegneria Elettrica ed Elettronica Università degli Studi di Cagliari Mail: [email protected] Telegram: bioinfo18 7 Novembre 2018 Esercizi per I parziale Marco Micheletto

Upload: phungthuy

Post on 15-Feb-2019

214 views

Category:

Documents


0 download

TRANSCRIPT

Tutorato Elementi di Informatica 2018

Pattern Recognition & Application Lab

Dipartimento di Ingegneria Elettrica

ed Elettronica

Università degli Studi di Cagliari

Mail: [email protected]: bioinfo18

7 Novembre 2018

Esercizi per I parziale

Marco Micheletto

Tipi di dato

• Nella parte dichiarativa (all’interno del main dunque) di unprogramma C, è necessario dichiarare tutte le variabili chesi intendono utilizzare nel resto del programma.

2

La funzione printf

• Serve per scrivere a schermo una sequenza di caratteri;

• Obbligatorio almeno 1 argomento;

• Accetta caratteri speciali:

• Newline: \n

• Tab: \t

• Backslash: \\

Stringa di controllo Stampa

%d Interi

%f Reale

%c Carattere

%s Stringa

%e, %E Formato Scientifico

3

La funzione printf

• Esempi del CZ

Stringa di controllo Stampa

%d Interi

%f Reale

%c Carattere

%s Stringa

%e, %E Formato Scientifico

4

printf("_TESTO DA STAMPARE_");

char c=‘T’;

printf("_%cESTO DA STAMPARE_",c);

char c=‘P’;

printf("_%cESTO DA STAMPARE_",c);

La funzione scanf

Ricordatevi l’&

scanf(“%d”,&a);

5

Tipo di variabile che volete scrivere

Nome della variabile che volete scrivere

Riscaldamento

6

• Scrivere un programma che, acquisite due variabili a e b ne

scambi il contenuto e stampi:

«Il valore di a è x_b, quello di b è x_a»

Relazionari

7

• Servono per confrontare due variabili:

Minore di Maggiore di Minore o uguale di Maggiore o uguale di

a<b a>b a<=b a>=b

Uguale a Diverso da

a==b a!=b

• Servono per operare tra valori booleani:

AND OR NEG

a&&b a||b !a

Il risultato di queste operazioni è TRUE o FALSE

8

if (condizione)

{

//ISTRUZIONI SE CONDIZIONE È VERO

}

else

{

// ISTRUZIONI SE CONDIZIONE È FALSO

}

Costrutto if…else

• La parte else è facoltativa

• Non bisogna specificare la condizione inversa

nell’else

9

• Se le condizioni sono più di 2, si possono utilizzare costrutti if/else

«annidati». L’esempio sarà chiarificativo.

• Esempio: Un programma che stampa «uno» se il valore inserito è 1, «due» se

2, «tre» se 3. Se il numero inserito è >3 allora deve stampare un avviso di

errore.

Costrutto if…else

#include<stdio.h>

int main()

{

int num;

scanf(“%d",&num);

if(ctrl==«S»)

printf(“il prezzo è %.2f”,prezzo=prezzo-prezzo*0,10);

else if(num==2)

printf(“due”);

else if(num==3)

printf(“tre”);

else

printf(“Errore! Hai inserito un numero >3!”);

}

Costrutto switch case

10

• Permette di compattare una serie di if/else

#include<stdio.h>

int main()

{

int num;

scanf(“%d",&num);

switch(num)

{

case 1: printf(«uno»); break;

case 2: printf(«uno»); break;

case 3: printf(«uno»); break;

default: printf(«Errore! Hai inserito un numero >3!»); break;

}

}

Stesso risultato ma molto più compatto!

Salta all’istruzione

dopo lo switch

Costrutto switch case

11

• Permette di compattare una serie di if/else

• La variabile di controllo viene

confrontata per uguaglianza con il

valore del case.

• Le clausole (case) vengono valutate in

ordine

• Il comando break evita che

l’istruzione continui anche se una

clausola è stata verificata

• La sezione default viene eseguita se

nessuna clausola è rispettata

Esercizio 2

12

Su una linea ferroviaria rispetto alla tariffa piena gli utenti pensionati

usufruiscono di uno sconto del 10%, gli studenti del 15% e i disoccupati del 25%.

Codificando i pensionati con una P, gli studenti con una S e i disoccupati con una

D, scrivere un programma che richiesto il costo di un biglietto e l'eventuale

condizione particolare dell'utente, visualizzi l'importo da pagare.

Esercizio 2

13

Soluzione if/else

Esercizio 2

14

Soluzione

switch/case

Cicli: while

15

while (condizione)

{

/*Istruzioni da eseguire finché

la condizione è vera */

}

• Laddove è richiesta la ripetizione iterativa di un certo gruppo di

istruzioni (tipo Ripeti-Finché), in C si adotta usualmente il costrutto

while.

Cicli: while

16

• Fondamentalmente permettono di eseguire ripetutamente le istruzioni

Cicli: while

17

• Fondamentalmente permettono di eseguire ripetutamente le istruzioni

Dichiarazione e inizializzazione dell’indice

Controllo dell’indice

Incremento dell’indice

Cicli: while

18

• Esempio: Cosa stampa questo programma?

Cicli: do…while

19

do

{

istruzione;

}

while(condizione);

• Esegue comunque UNA istruzione e poi verifica la

condizione. Il controllo avviene alla fine di ogni loop.

• Esempio

• Equivalente al costrutto while ma più complesso nella sintassi.

• Serve soprattutto quando si conosce “a priori” la durata di unloop.

Cicli: for

20

for(inizializzazione;condizione;incremento/decremento)

{

istruzione1;

istruzione2;

...

}

• Inizializzazione: valore iniziale della variabile di controllo del ciclo.

• Condizione: il ciclo for procede finché questa condizione è VERA.

• Incremento/decremento: è il passo di iterazione, cioè di quanto lavariabile di controllo deve essere aumentata/decrementata.

• Equivalente al costrutto while ma più complesso nella sintassi.

• Serve soprattutto quando si conosce “a priori” la durata di unloop.

Cicli: for

21

Dichiarazione e inizializzazione dell’indice

Controllo dell’indice

Incremento dell’indice

Cicli: for

22

• Esempio: Cosa stampa questo programma?

Cicli: for

23

• for (i=1 ; i<=10 ; i++)

• for (i=1 ; i<10 ; i++)

• for (i=10; i>=1 ; i--)

• for (i=0; i<=10 ; i+=2)

i=10,9,8,…,1

i=0,2,4,6,8,10

i=1,2,3,…,9

i=1,2,3,…,10

• Quizzzzz: Quanto vale i per questi cicli?

Cicli for annidati

24

• Quizzzzz: Cosa stampa?

Esercizio 3

25

Si scriva un programma in linguaggio C che acquisisca un numero intero positivo

N da tastiera e stampi il valore del fattoriale di N.

Suggerimento. Si ricorda che il fattoriale di un numero e il prodotto di tutti i

numeri compresi tra 1 ed N.

N! = 1 · 2 · 3 · . . . · (N − 1) · N

Inoltre 0! = 1.

Esercizio 3

26

Riepilogo: Array

• Gli array contengono un numero finito di dati tutti dello stesso tipo.

• Gli elementi dell'array sono individuati da un indice

• Per dichiarare un vettore si deve specificare il tipo e il numero dei

suoi elementi:

v[0] v[1] v[2] v[3]

v

27

• Si accede al valore della variabile nell’i-esima posizione scrivendo v[i], con

i = 0,…, 4

int v[4]; //un vettore di interi di 4 elementi

Perché si usano?

28

int age0;

int age1;

int age2;

int age3;

int age4;

age1=10;

printf("age 1 is %d",age1);

int age[5];

age[1]=10;

printf("age 1 is %d",age[1]);

Inizializzazione di un array

29

int v[5]={1,2,3,4,5}

1 2 3 4 5

v[0] v[1] v[2] v[3] v[4]

int v[]={1,2,3,4,5}

1 2 3 4 5

v[0] v[1] v[2] v[3] v[4]

Inizializzazione di un array

30

int v[5]={0}

0 0 0 0 0

v[0] v[1] v[2] v[3] v[4]

int v[5]={1,2,3}

1 2 3 0 0

v[0] v[1] v[2] v[3] v[4]

Assegnamento

31

• Gli elementi di un array devono essere modificati/letti uno per volta tramite

un for

Copia di un array

32

Copia di un array

33

Riepilogo: Array

v[0] v[1] v[2] v[3]

v

Quizzzzzzzzzzzzz

34

int v[4]; //un vettore di interi di 4 elementi

int c[4]; //un vettore di interi di 4 elementi

char c[4]; //un vettore di caratteri di 4 elementi

float f[4]; //un vettore di numeri con virgola di 4 elementi

int c[7]; //un vettore di interi di 7 elementi

una stringa

Le magie con typedef

Quizzzzzzzzzzzzz

35

typedef TipoEsistente NuovoTipo;

Le magie con typedef

Quizzzzzzzzzzzzz

36

typedef TipoEsistente NuovoTipo;

• vettore v; //un vettore di interi di 4 elementi di nome v

• vettore virgola;

• char nome; //un carattere di nome «nome»

• stringa nome; //un vettore di 50 el di nome «nome»

typedef int vettore[4];

typedef char stringa[50];

typedef float virgola[7];

1. vettore di 7 float di nome virgola

2. vettore di 4 interi di nome virgola

3. Errore

4. vettore di 4 float di nome virgola

Costruttore struct

• Il costruttore struct serve a definire tipi “strutturati”, cioè composti da

tipi semplici (o da ulteriori tipi strutturati).

• Esempio:

#include<stdio.h>

typedef struct{

int matricola;

char nome[30];

char cognome[30];

}Studente;

• Sintassi:

typedef struct{

− Componenti

della struttura;

}NomeTipo;

Sezione direttive!

37

matricola

nome

cognome

Studente

int main ()

{

Studente s1,s2;

s1.matricola=234969;

s1.nome="Roberto";

s1.cognome="Cro";

s2.matricola=123456;

s2.nome="Simone";

s2.cognome="Murru";

}

Dichiarazione di due

variabili di nome s1 e

s2 di tipo Studente

L’accesso ad una delle

variabili

“incapsulate” dalla

nostra struttura dati

avviene intercalando

il nome della variabile

dal nome della

struttura con un

punto ‘.’

38

Costruttore struct

matricola

nome

cognome

Studente

int main ()

{

Studente s1={27548,"Gianluca","Cro"};

Studente s2={12345,"Gabriele","Fois"};

}

• Si possono definire le strutture anche in questo modo più compatto, analogo

all’assegnamento visto per gli array;

39

Costruttore struct

Riepilogo: costruttore struct

numero

modello

prezzo

Automobile

40

typedef struct{

int numero;

char modello[30];

float prezzo;

}Automobile;

Quizzzzzzzzzzzzz

• int main ()

{

Automobile polo={77,"Volkswagen",12900};

}

• int main ()

{

Automobile polo={"Volkswagen",77,12900};

}

• int main ()

{

polo Automobile={77,"Volkswagen",12900};

}

Riepilogo: costruttore struct

numero

modello

prezzo

Automobile

41

typedef struct{

int numero;

char modello[30];

float prezzo;

}Automobile;

Quizzzzzzzzzzzzz

1.Modello: Polo

2.scambio: 77

3.Modello: Fiat

4.scambio: 00

Esercizio 4

42

Scrivere un programma in C che trovi il numero più grande

dentro un array di interi e lo stampi assieme alla posizione.

Esercizio 5

43

Scrivere un programma in C che calcoli per un singolo studente la media

pesata di N esami leggendo per ogni esame il voto riportato (in

trentesimi) e il corrispondente numero di crediti.

Es. Carriera di Gianluca Calia:

Esame CFU Voto

Analisi I 9 24

Fisica I 8 28

Chimica 6 26

Elementi Informatica 6 27

𝑚𝑒𝑑𝑖𝑎_𝑝𝑒𝑠𝑎𝑡𝑎 = (24 ∗ 9) + (28 ∗ 8) + (26 ∗ 6) + (27 ∗ 6)

𝑚𝑒𝑑𝑖𝑎_𝑝𝑒𝑠𝑎𝑡𝑎 =𝑚𝑒𝑑𝑖𝑎_𝑝𝑒𝑠𝑎𝑡𝑎

𝑆𝑜𝑚𝑚𝑎𝐶𝑟𝑒𝑑𝑖𝑡𝑖

𝑆𝑜𝑚𝑚𝑎𝐶𝑟𝑒𝑑𝑖𝑡𝑖 = 9 + 8 + 6 + 6

Esercizio 5

44

Esercizio 6

45

Estendere l’esercizio 5 in modo tale che possano essere inseriti i dati di

M studenti (prestando attenzione a non sovrascrivere la media pesata di

ogni studente). Il programma deve stampare la media pesata solo se

la media pesata e il numero di crediti sono entrambi maggiori a delle

soglie definite dall’utente.

Esercizio 6

46

Esercizio 7

47

Data la struttura point definita come

scrivere un programma C che acquisendo in ingresso un vettore di strutture point e la

sua grandezza, ne stampi a video il contenuto. Per esempio per un vettore di

lunghezza 4 che contiene i punti ( 0.0 ; 1.0 ) , ( 0.1 ; 1.1) , ( 0.2 ; 1.2 ) e ( 0.3 ; 1.3 ) la

funzione fornisce come output:

Point n 0 : ( 0.0 , 1.0 )

Point n 1 : ( 0.1 , 1.1 )

Point n 2 : ( 0.2 , 1.2)

Point n 3 : ( 0.3 , 1.3 )

typedef struct{

float x;

float y;

}point;

Esercizio 7

48

Esercizio 8

49

Scrivere un programma in C che memorizzi per M studenti i seguenti

dati: nome, cognome, matricola, media pesata e somma crediti (calcolati

su N esami). In questo esercizio dovete usare le strutture.

Il programma deve stampare a video la media di ogni studente col suo

nome e cognome.

Esempio di output:

La media pesata di Maurizio Pisciottu è 19,84

Esercizio 8

50