Fondamenti di Informatica
Laurea in
Ingegneria Civile e Ingegneria per l’ambiente e il territorio
Linguaggio C: Le basi
Stefano Cagnoni e Luca MussiDipartimento di Ingegneria dell’Informazione Università degli Studi di Parma
Il Calcolatore 2
Memoria Centrale
Spazio di lavoro del calcolatore: contiene i dati da elaborare e i risultati delle elaborazioni durante il funzionamento del calcolatore.
Insieme di celle di dimensione 1 byte, ciascuna delle quali è individuata da un indirizzo, costituito da un numero rappresentato da tanti bit quanti ne contiene il Registro Indirizzi all‟interno della CPU.
Poiché è possibile indirizzare direttamente ogni singola cella, una memoria di questo tipo si chiama Random Access Memory (RAM), cioè, alla lettera, memoria ad accesso casuale.
Il Calcolatore 3
Memoria Centrale
Indirizzamento
E‟ l‟attività con cui l‟elaboratore seleziona una particolare cella di memoria
per farlo l‟elaboratore inserisce l‟indirizzo della cella desiderata (da cui deve leggere o su cui deve scrivere) nel registro indirizzi della CPU
Ad es., se il Registro Indirizzi è lungo 32 bit posso indirizzare 2
32celle diverse.
2
32celle = 4 Gcelle -> 4 Gbyte
FI - Algoritmi e Programmazione 4
Variabile
E‟ un‟astrazione della cella di memoria
Formalmente, è un simbolo associato ad un indirizzo fisico (posizione all‟interno della memoria della cella o delle celle associate al simbolo, che conterranno la rappresentazione di un certo valore)
Nell‟esempio, il simbolo x rappresenta il contenuto della cella di memoria avente l‟indirizzo 1328, che ad esso ha associato il compilatore e che l‟utente ignora.
Se stampo x sul video mi comparirà il valore 4, cioè il contenuto della cella avente indirizzo 1328.
Simbolo
Simbolo indirizzoindirizzo contenutocontenuto x 1328
x 1328 44
FI - Algoritmi e Programmazione 5
Variabile
L‟indirizzo fisico di una variabile è fisso e immutabile all‟interno del programma; può cambiare il suo contenuto, cioè il valore della variabile
esempio: x=4;
...
...
1328 4
FI - Algoritmi e Programmazione 6
Definizione di variabile
E‟ la frase che introduce una nuova variabile
identificata da un simbolo
atta a denotare valori di un ben preciso tipo, che va specificato nella definizione
FI - Algoritmi e Programmazione 7
Esempi
Definizione di una variabile
<tipo><identificatore>
int x; /* deve denotare un valore intero*/
float y; /* deve denotare un valore reale*/
char ch; /* deve denotare un valore carattere*/
FI - Algoritmi e Programmazione 8
Inizializzazione di variabili
E‟ possibile specificare il valore iniziale di una variabile quando la si dichiara
<tipo><identificatore> = <espr> ; int x = 32;
double speed = 124.6;
double time = 71.6;
double km = speed*time;
/* inizializzazione mediante una espressione*/
FI - Algoritmi e Programmazione 9
Caratteristiche delle variabili
Campo d’azione (scope): è la parte di programma (unità di codifica) entro cui la variabile è nota e può essere usata
Tipo: specifica la classe di valori che la variabile può assumere (e quindi gli operatori applicabili)
Tempo di vita: l‟intervallo di tempo in cui rimane valida l‟associazione simbolo/cella di memoria
Valore: è rappresentato (secondo la codifica adottata per il tipo cui la variabile appartiene) nell‟area di memoria associata alla variabile.
FI - Algoritmi e Programmazione 10
Esempio
Data una temperatura c espressa in gradi Celsius, calcolare il corrispondente valore f espresso in Fahrenheit
Approccio:
si parte dal problema e dalle proprietà nel dominio dei dati per descrivere poi la soluzione in modo astratto
Specifica della soluzione:
relazione tra grandezze esistenti nello specifico dominio applicativo
C * 9/5 = F - 32
FI - Algoritmi e Programmazione 11
Esempio: algoritmo di risoluzione
Data la temperatura in Celsius C
calcolare la temperatura in Fahreneit F sfruttando la relazione
F = 32 + C *9/5
Solo a questo punto (una volta
definito l‟algoritmo) si effettua la codifica
Start
Stop Leggi C
Stampa 32 + C *9/5
FI - Algoritmi e Programmazione 12
Un possibile programma in C
main() {
float c; /* Celsius */
//legge il valore di c scanf(“%f”, &c);
printf ( “Temperatura (F): %f \n”, 32 + c * 9/5);
//stampa il valore convertito }
NB l‟impaginazione (indentazione) serve solo per rendere più leggibile il programma: in C le istruzioni sono separate da “;”
Strutture di controllo
If, while, for, do while
Il linguaggio C 14
Sì No
Se la condizione C è vera, esegui O1, altrimenti esegui O2 C
O1
Selezione if
O2
Strutture di controllo
Il linguaggio C 15
Strutture di controllo
Selezione if
if (condizione) istruzioni [else istruzioni]
Se la condizione è vera esegue il primo blocco di istruzioni, altrimenti esegue il secondo (se specificato)
istruzioni istruzione | „{„ istruzione {istruzione} ‟}‟
Calcolo valore assoluto if (x 0)
y = x;
else y = -x;
printf(“Val. Ass. %d\n”, y);
operatori di confronto maggiore maggiore o uguale
minore minore o uguale
uguale
diverso
falso 0 vero non 0
operatori logici NOT AND &&
OR | |
Il linguaggio C 16
Esempio
/*Dati due numeri in ingresso, individua il maggiore*/
#include <stdio.h>
int main(){
int num1,num2;
printf("Immetti i due numeri:");
scanf("%d %d",&num1,&num2);
if (num1==num2)
printf("I due numeri sono uguali");
else
if(num1>num2) printf("Il primo è maggiore”);
else printf("Il secondo è maggiore");
return 0;
}
Esercizio: Disegnare il diagramma di flusso di questo problema
Il linguaggio C 17
Strutture di Controllo
Ciclo While Ciclo do while Ciclo for
Sì No
Sì No
Ripete una stessa operazione O finché la condizione C resta vera
C
O
O C
Esegue una operazione O una volta, poi la ripete finché la condizione C resta vera
A livello logico, come ciclo while, ma separa più nettamente le istruzioni sui dati da quelle di controllo
Sì C No
O Istr. Iniz.
Istr. ciclica
Cicli
Il linguaggio C 18
Strutture di controllo
Ciclo while
while (condizione) {istruzioni}
Esegue il blocco di istruzioni che segue, finché la condizione è vera (può anche non eseguirlo mai)
Sì C No
O
Il linguaggio C 19
Strutture di controllo
Calcolo della somma dei primi 100 numeri naturali
#include stdio.h
int main(){
int i=1;
int somma 0;
while(i100) {
somma sommai;
i=i+1;
}
printf (“La somma vale: %d\n”, somma);
return 0;
}
Il linguaggio C 20
Strutture di controllo
Ciclo do while
do istruzioni
while (condizione)
Esegue (sempre almeno una volta) le istruzioni comprese nel blocco che segue e le ripete finché la condizione è vera
Sì No
O C
Il linguaggio C 21
Strutture di controllo
calcolo della somma dei primi 100 numeri naturali
#include stdio.h
int main(){
int i=1;
int somma 0;
do {
somma sommai;
i=i+1;
} while (i<=100)
printf (“La somma vale: %d\n”, somma);
return 0;}
Il linguaggio C 22
Strutture di controllo
Ciclo for
for(istr.iniziale; condizione; istr. ciclica) {istruzioni}
Dopo avere eseguito l‟istruzione iniziale, ripete l‟esecuzione del blocco di istruzioni che segue finché la condizione resta vera (se è falsa la prima volta, può anche non eseguirlo mai), concludendo ogni ciclo con l‟esecuzione dell‟istruzione ciclica.
for ( i1; i100; ii1 ) printf( “%d ”, i );
Sì C No
O
Istr. Iniz.
Istr. ciclica
Il linguaggio C 23
Strutture di controllo
Calcolo della somma dei primi 100 numeri naturali
#include stdio.h
int main(){
int i, somma 0;
for ( i1; i100; ii1)
somma sommai; /*se c’e’ una sola
istruzione si possono tralasciare le graffe
*/
printf (“La somma vale: %d\n”, somma);
return 0;
}
Il linguaggio C 24
Esercizi
Scrivere un programma che prenda in ingresso un intero N e calcoli il doppio della somma dei primi N numeri, a partire dal corrispondente diagramma di flusso
Scrivere un programma, a partire dal corrispondente diagramma di flusso, che chieda in ingresso un numero finché non si inserisce un numero dispari.
Quando questo avviene, il programma deve uscire scrivendo quanto è stata lunga la sequenza dei numeri pari che lo hanno preceduto.