tutorato elementi di informatica 2018 -...
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.
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
17
• Fondamentalmente permettono di eseguire ripetutamente le istruzioni
Dichiarazione e inizializzazione dell’indice
Controllo dell’indice
Incremento dell’indice
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
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?
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.
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
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
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 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 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 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