Sei sulla pagina 1di 17

RECAP… Soluzione automatica di problemi conoscenza di:

Informazione descrittiva, formalizzata del problema


Individuazione di una soluzione corretta ed efficiente (algoritmo)
Struttura e funzionamento dello strumento di elaborazione (il calcolatore)
Regole per automatizzare il percorso risolutivo (programma)

PIANO DEGLI STRUMENTI Pseudo-codice

PIANO CONCETTUALE
PROBLEMA ALGORITMO PROGRAMMA

metodo linguaggio di
risolutivo programmazione
Problema: calcolare automaticamente l’area di un rettangolo di base 3 e altezza 7
unità di controllo

INPUT?
• base
• altezza
OUTPUT? MAR
• area
base 3 operazione
altezza 7 stato

... ALU esegui

MDR 21
area

unità centrale di elaborazione

• Il nostro pseudo programma ha sei istruzioni (;)


• C’è una fase dichiarativa <Tipo di dato> e <nome simbolico>
• C’è una fase di assegnazione <nome simbolico> = <valore>
• Sintassi: <destinazione dato> = <sorgente dato>
Da algoritmo a pseudo-codice a programma C
Problema: calcolare e stampare il prodotto dei numeri 5, 7 e 10
tramite un programma C denominato “Esempio2”
1. Considero il primo fattore
int reg1; la dichiarazione della funzione main costituisce il corpo
2. Considero il secondo fattore principale di ogni programma C. L’esecuzione di un
int reg2;
3. Considero il terzo fattore int reg3; programma inizia sempre dal main. Il testo della
funzione main (il corpo del main) è racchiuso tra
4. Effettuo il prodotto dei tre fattori int reg4; parentesi graffe.
5. Stampo il prodotto ottenuto
reg1=5;
Algoritmo reg2=7; #include <stdio.h>
reg3=10; int main (){
reg4=reg1*reg2*reg3;
Stampo REG4; int reg1;
int reg2;
int reg3;
Pseudo-codice int reg4;

#include <stdio.h> reg1=5;


indica che deve essere utilizzata la libreria reg2=7;
standard di I/O, nella quale sono definite le
reg3=10;
principali funzioni per la gestione
dell’input/output. Questa libreria è
reg4=reg1*reg2*reg3;
essenziale per la maggior parte dei printf(“risultato %d”, reg4);
programmi C e permette di utilizzare le }
funzioni standard di I/O per leggere i
caratteri da tastiera e stampare a video. Programma C
#include <stdio.h>
int main (){
int reg1;
Analizziamo i problemi affrontati finora… int reg2;
int reg3;
int reg4;

reg1=5;
Problema: calcolare e stampare il prodotto dei numeri 5, 7 e 10 reg2=7;
reg3=10;
reg4=reg1*reg2*reg3;
printf(“risultato %d”, reg4);
}

Problema: calcolare e stampare l’area di un rettangolo di base 3 e


altezza 7
Esempi di problemi
Problemi specifici o individuali
Calcolare la somma di 3 e 7
Calcolare il fattoriale del numero 5

Problemi generali

Calcolare la somma di due numeri interi x e y Da <dato>


a
Calcolare il fattoriale di un numero intero non
<variabile>
negativo tramite
l’operazione di
Un problema generale individua una classe di acquisizione
infiniti problemi individuali input (lettura
da tastiera)!
Lettura di dati da tastiera
Problema: Leggere un numero intero, assegnare il valore letto ad una variabile intera num e stamparne il contenuto

Programma C
#include <stdio.h>
int main() {
int num;
printf("inserisci un valore intero"); Stampa il messaggio

scanf("%d",&num); Acquisisci un intero e memorizzalo in num

printf("valore inserito: %d",num); Stampa l’intero contenuto dopo la virgola


}
Esercizio 1_1 Leggere due numeri interi l1 ed l2 che rappresentano i lati di un rettangolo, calcolare e scrivere il perimetro del
rettangolo

- l1 ed l2 sono due variabili atte a contenere due numeri interi (i lati del rettangolo, che si ipotizza che siano numeri interi)
- perimetro è una variabile intera atta a contenere il valore che si calcolerà per il perimetro del rettangolo con lati l1 ed l2

1) Scriviamo un messaggio che guidi chi deve eseguire il programma nella immissione dei dati (input) che servono (ad esempio la
stringa "Immettere due numeri interi\n")
2) Leggiamo l1 (ossia acquisiamo il valore di l1 dallo standard input-tastiera)
3) Leggiamo l2
4) Calcoliamo la quantità 2*l1+2*l2 ed il valore ottenuto salviamolo in perimetro (il valore del perimetro sarà dato dal valore
dell’espressione calcolata)
5) Scriviamo un messaggio nel quale spieghiamo che stiamo per visualizzare il valore del perimetro
6) Scriviamo il valore della variabile perimetro
#include <stdio.h>
int main() {
int l1;
int l2;
int perimetro;
printf("Immettere il valore di l1\n");
scanf("%d",&l1);
printf("Immettere il valore di l2\n");
scanf("%d",&l2);
perimetro=2*l1+2*l2;
printf("Perimetro del rettangolo: ");
printf("%d",perimetro);
}
Problema: calcolare e stampare il prodotto dei numeri 5, 7 e 10 di tre interi

1. Predisporre reg1 a contenere il dato 5 ricevuto in input


2. Predisporre reg2 a contenere il dato 7 ricevuto in input
3. Predisporre reg3 a contenere il dato 10 ricevuto in input #include <stdio.h>
4. Predisporre reg4 a contenere il risultato int main() {

int reg1; int reg1;


int reg 2; int reg 2;
int reg3; int reg3;
int reg4; int reg4;
printf("Immettere il primo numero\n");
reg1=5; scanf("%d",&reg1);
reg2=7; printf("Immettere il secondo numero\n");
reg3=10; scanf("%d",&reg2);
reg4=reg1*reg2*reg3; printf("Immettere il terzo numero\n");
scanf("%d",&reg3);
reg4=reg1*reg2*reg3;
printf(“Il risultato è %d”, reg4);
La fase dichiarativa rimane immutata! Cambia l’assegnazione }
È buona norma far precedere sempre la lettura da una stampa
Analizziamo (ancora) i problemi affrontati finora…

Scrivere su una linea il nome Maria e sulla linea successiva il nome Mario

Algoritmo espresso in linguaggio naturale (pseudocodice)


- sequenza di (3) istruzioni:

Scrivere la sequenza di caratteri “Maria” (Istruzione 1)


Andare a capo (Istruzione 2)
Scrivere la sequenza di caratteri “Mario” (Istruzione 3)

Esecutore umano in grado di


comprendere l’italiano e di Risultato dell’esecuzione:
eseguire comandi (istruzioni) del
Maria
tipo: scrivere, andare a capo…
Mario
Scrivere su una linea il nome Maria e sulla linea
successiva il nome Mario
Algoritmo (espresso tramite flow charts o diagramma di flusso):

Scrivere la sequenza di caratteri “Maria” #include <stdio.h>


int main() {
Andare a capo printf("Maria");
printf("\n");
Scrivere la sequenza di caratteri printf("Mario");
“Mario”
}

Risultato dell’esecuzione:
(esecutore umano )
Maria
Mario
Un altro tipo di problema…

Leggere e memorizzare in num un numero intero e, se num è negativo, scrivere “il


numero è negativo”. Scrivere comunque il numero letto.

(Istruzione 1) Leggere un numero ed assegnare il valore letto


ad una variabile intera (atta a contenere numeri interi) num
(Istruzione 2) Se (il valore di) num è negativo
(istruzione 2.a) scrivere “il numero è negativo”
scrivere “il numero è pari”
(Istruzione 3) Scrivere num

Sequenza di tre istruzioni.


Istruzione 2 è una istruzione di controllo decisionale
Leggere e memorizzare in num un numero intero e, se num è negativo, scrivere “il numero è negativo”.
Scrivere comunque il numero letto.

Istruzione 1
Istruzione 1

Istruzione 2

espressione logica
(istruzione
Istruzione 3 decisionale) Falso

Vero

Istruzione 2

Istruzione 3
Leggere e memorizzare in num un numero intero e, se num è negativo, scrivere “il numero è negativo”.
Scrivere comunque il numero letto.

Scrivere la sequenza di caratteri “Maria”

Leggere un numero e memorizzarlo in num


Andare a capo

Scrivere la sequenza di caratteri


“Mario” num è negativo?
Falso

Vero

Scrivere “numero negativo”

Scrivere num
Leggere e memorizzare in num un numero intero e, se num è negativo, scrivere “il numero è negativo”.
Scrivere comunque il numero letto

(Istruzione 1) Leggere un numero ed assegnare il valore letto ad una variabile intera (atta
a contenere numeri interi) num
Algoritmo (in linguaggio naturale): (Istruzione 2) Se (il valore di) num è negativo
(istruzione 2.a) scrivere “il numero è negativo”
(Istruzione 3) Scrivere num

#include <stdio.h>
int main() {
int num;
Programma in linguaggio C printf("inserire num");
scanf("%d",&num);
if(num<0) if (condizione)
printf("il numero è negativo\n"); istruzione da eseguire
printf("%d",num);
}
(Istruzione 1) Leggere un numero ed assegnare il valore letto ad una variabile intera (atta
a contenere numeri interi) num
(Istruzione 2) Se (il valore di) num è negativo
(istruzione 2.a) scrivere “il numero è negativo”
Algoritmo (in linguaggio naturale): (istruzione 2.b) scrivere “ovvero minore di zero”
(Istruzione 3) Scrivere num

#include <stdio.h>
int main() {
int num;
printf("inserire num");
Programma in linguaggio C scanf("%d",&num);
if(num<0) {
if (condizione) {
printf("il numero è negativo\n");
blocco di istruzioni da eseguire
printf("ovvero minore di zero\n"); }
}
printf("%d",num);
}
espressione
logica
Falso

Vero

Istruzione/Blocco di istruzioni

if (condizione) if (condizione) {
istruzione da eseguire blocco di istruzioni da eseguire
}
Esercizi ( da svolgere su carta o CodeBlocks o al sito
https://www.onlinegdb.com/online_c_compiler)
• Esercizio 1_1: Leggere tre numeri interi l1, l2 ed l3 che rappresentano i lati di un
triangolo, calcolare e scrivere il perimetro. Esempio: se l1=3, l2=7 e l3=1, il
programma stampa ‘perimetro =11.’

• Esercizio 1_2: Leggere due numeri interi x e y (si assume siano diversi da zero):
stampare il messaggio ‘numeri di segno concorde’ se x e y hanno lo stesso segno.
Esempio: se x=3 e y=9 il programma stampa ‘numeri di segno concorde’ e termina;
se x =2 e y =-7 il programma termina direttamente.

• Esercizio 1_3: Leggere due numeri interi a e b ed invertirli (cioè, fare sì che a fine
programma il contenuto di a sia il precedente contenuto di b e viceversa). Esempio:
se a=3 e b=102, scrivere le opportune istruzioni affinchè a=102 e b=3.

Potrebbero piacerti anche