fondamenti di informatica
parte 5
appunti per Nettuno a.a. 20042005
di
anna maria carminelli gregori
fond. di informatica1 parte 5
1
E per emulare la memoria?
Le matrici non bastano: per i dati occorrerebbe
un vettore a dimensione variabile (che si
puo’ ottenere con l’uso di funzioni come malloc
o new) di int ove porre valori interi e poi un
altro di float, uno di char …; per gli indirizzi e
le istruzioni in linguaggio macchina poi,
occorrerebbe un altro vett… di unsigned, etc.
insomma un contenitore di elementi di tipo
diverso, non omogenei ed anche a dimensione
variabile. Un tipo di variabile strutturata che
permette di mantenere in memoria un insieme
di elementi non omogenei e’ la struct del C
e C++ simile al record del Pascal.
fond. di informatica1 parte 5
2
Meo 2
Esempio di struct in C e C++
lez. 5 & seg.
struct studente
{char nome[20];
char cognome[25];
int eta;
float peso;
float altezza;
};
Concettualmente con la keyword
struct si definisce un tipo di tabella non
omogenea con elementi di vari tipi che in C e
C++ possono essere anche funzioni: cosi’
fatta la struct puo’ servire a introdurre la class
del C++…ma questa e’ un’ altra storia (II corso!)
fond. di informatica1 parte 5
3
L’ emulazione della C.M.
riporterebbe all’ Hardware
ma prima di fare nuovi discorsi, occorrono precisazioni
sull’ uso di array e sulla sinteticita’ del C e C++. E’
bene ricordare le 2 versioni della procedura:
void strcp(char *s, char *t) /* strcp copia la
stringa puntata da t in quella puntata da s */
{ while ((*s=*t)!=‘\0’) /*fintantoche’ il contenuto di t
assegnato alla cella puntata da s e’ diverso da ‘\0’
(=fine stringa) fai*/ s++; t++}; // + sintetica ?!
while (*s++=*t++) // perche’ manca != ‘\0’ ??
; }
fond. di informatica1 parte 5
4
Frasi sintetiche
Questo tipo di sintesi e’ normale nei programmi
in C o in C++ ed e’ utile conoscerla ed
abituarcisi per poter leggere programmi C e C++
in circolazione;
si tratta di “compattare” alcuni tipi di frasi in una
sola.
Es. lettura e calcolo indicate nel progetto logico
posto in parte 4 diapo 69: fintantoche’ il
carattere letto non e’ il punto, aggiungi 1 all’
elemento che indica la frequenza del carattere
letto… ma come si scrive in C o C++ sintetic … ?
fond. di informatica1 parte 5
5
Sinteticamente … ?
Non e’ in linea con la sintesi leggere la
sequenza di caratteri in un vettore di char e
poi analizzare il vettore ... Sarebbe comunque
corretto farlo se fosse necessario tenere
memoria della sequenza di caratteri per altri
scopi per es. per successive analisi. Se invece l’
analisi e’ solo quella indicata allora:
while( (cin >> ch) /* fintantoche’ c’e’ un ch
(carattere) da leggere*/ && ( ch != ‘.’) ) /* e
inoltre questo ch e’ diverso da punto: FAI */...
fond. di informatica1 parte 5
6
In definitiva
il significato di queste considerazioni
riguarda l’ utilizzo di matrici e/o vettori.
E’ bene usarli solo quando esiste la
necessita’ di tenere memoria dei valori
calcolati o letti: se tale necessita’ manca
allora usare il valore corrente (per es.
appena letto) per i calcoli ad esso relativi
e passare ad altro valore (per es. il
successivo).
fond. di informatica1 parte 5
7
Il ritorno all’ hardware
Mezzalama 2
lez. 18 & seg.
Vai a pag. 31
ha lo scopo di introdurre il linguaggio di E.E.
Si ricordi:
C.M. & CPU: indirizzo di ogni locazione di C.M.
=> in registri della CPU ( es. registro P =Puntatore, registro I.C.= Instruction Counter ...);
Contenuto di ogni locazione di C.M. => in altri
registri della CPU (per es. A = Accumulatore...);
C.M. (RAM): scandibile e rintracciabile per es.
col Registro P : IndirizziMemoria <=> Registro P;
CPU = Unita’ Centrale = Unita’ Elaborativa =
MicroProcessore per Personal Computer
fond. di informatica1 parte 5
8
… e la struttura funzionale di
EE gia’ presentata:
Temporizzator
e
Unita’ Centrale di Controllo
Registri
Unita’ di controllo di
I/O
Periferiche
UCP
Unita’ Aritmetico - Logica
Flag
Memoria Centrale
Memorie di massa
fond. di informatica1 parte 5
9
La CPU controlla tutte le
operazioni di E.E.
Le operazioni possono essere:
interne alla CPU (per es. Somma i contenuti
di 2 Registri);
esterne come trasferimenti di dati verso la
(o dalla) C.M. o verso le (o dalle) interfacce
(Controller Unit) dei dispositivi periferici.
Notare: la CPU non invia i dati al dispositivo,
ma alla sua interfaccia!
fond. di informatica1 parte 5
10
La CPU lavora
in stretto contatto con la C.M. e per svolgere i
suoi compiti usa i registri, i Flag (indicatori di
stato) e inoltre le Unita’ di Controllo e
Aritmetico-Logica (A.L.U.). I registri piu’ usati
sono:
Registri P e I.C. (Istruction Counter) per tenere
gli Indirizzi,
Registri tipo Accumulatore (A, B, C … ed anche
Reg.1, Reg.2 ...) per tenere i Dati ,
Registro Istruzione (I.R.) per tenere le
Istruzioni del linguaggio di macchina.
fond. di informatica1 parte 5
11
CPU: funzionamento ciclico
Ogni ciclo della CPU si compone di 3 fasi:
fase di fetch (=prelievo),
fase di decodifica,
fase di esecuzione dell’ istruzione.
In ogni fase sono usati alcuni Registri.
Le operazioni relative ad ogni fase sono:
fond. di informatica1 parte 5
12
Prelievo e decodifica
fase di fetch (=prelievo: uso dei Reg. IC e IR):
1) Esame del Reg. I.C.;
2) Accesso alla locazione di C.M. indirizzata da
I.C.;
3) Trasferimento del contenuto della
locazione di C.M. in I.R.;
fase di decodifica: (uso del Reg. IR):
4) Interpretazione del contenuto di I.R.;
5) SE non e’ un' istruzione ALLORA
segnalazione ERRORE e STATO DI ATTESA
fond. di informatica1 parte 5
13
Esecuzione istruzione
… altrimenti fase di esecuzione:
SE si tratta di un’ istruzione di salto alla
locazione di memoria di indirizzo xyzv allora
I.C.= xyzv ed il controllo delle operazioni passa
a xyzv e da qui si prosegue in sequenza;
ALTRIMENTI: l' istruzione viene eseguita ed e’
incrementato I.C.= I.C.+(lunghezza istruz.)
per passare all’ istruzione successiva.
Si noti: in assenza di istruzioni di salto esiste un
ordinamento sequenziale tra le istruzioni.
fond. di informatica1 parte 5
14
Accesso alla Memoria:
per estrarre info. = leggere dalla Memoria;
per deporre info. = scrivere in Memoria;
Operazioni realizzabili:
 a Hardware con codici propri della CPU
 a Software con istruzioni di un Linguaggio
Artificiale, tradotte nei codici della CPU (ossia
nelle Istruzioni del linguaggio della macchina)
dal programma traduttore.
Esempio fase di esecuzione con uso del reg.P
(e non I.C. per brevità di scrittura)
Sia: Istruzione = Leggi un dato dal disco e
ponilo in C.M. all' indirizzo 00116
15
Registro P di 4 bit =>16 byte
indirizzabili (qui la freccia sintetizza il contenuto
di P)
 CPU = “Ragnetto”
Central Memory
0000
000
REG. P .
1
Accumulat.
Registro P.= Pointer
1111
fond. di informatica1 parte 5
16
Esempio: continua
C.P.U. pone 00116 nel Registro P cioe’ P= 00116
(cfr. grafico precedente) e passa il controllo all’
Unita’ di Controllo della Periferica disco.
Questa, attivato il lettore che legge il dato (per
es. 3.14), lo pone in un proprio registro: da qui
C.P.U. lo preleva e lo trasferisce nell’
Accumulatore ossia A = 3.14
Infine C.P.U. trasferisce il contenuto di A nella
Memoria indirizzata da P ossia Mem(P)=A (cfr.
grafico seguente)
fond. di informatica1 parte 5
17
Registro P di 4 bit => 16 byte
indirizzabili
 CPU = “Ragnetto”
Central Memory
3.14
REG. P.
0000
0001
3.14
Accumulat.
Registro P.= Pointer
1111
fond. di informatica1 parte 5
18
Ancora esempi
 Analogo comportamento se Istruzione = Visualizza un
dato su video … Se poi Istruzione = Somma i dati
delle locazioni di indirizzo 55516 e 12316 e
metti il risultato in C.M. all' indirizzo 66616
allora C.P.U. effettua le operazioni seguenti
(dove => significa sposta e il registro B  A)
55516 => P
Mem(P) => A
(per es. 891710 => A)
12316 => P Mem(P) => B (per es. 7910 => B)
A+B => A
(per es. 891710+7910 => A)
66616 => P
A => Mem(P)
fond. di informatica1 parte 5
19
Deduzioni logiche
Cosa vogliono evidenziare i precedenti esempi?
1) ogni accesso in C.M. avviene con il deposito
in un registro di CPU (I.C., P, …) dell’ indirizzo
della locazione (cella, byte, voce …) di C.M;
2) ogni insieme di istruzioni (ossia ogni
programma) per essere eseguito deve risiedere
in C.M.
3) se un salto rimanda ad un indirizzo dove non
c’e’ un’ istruzione, ma un dato: ERRORE!
fond. di informatica1 parte 5
20
Le istruzioni
del linguaggio macchina sono praticamente
comandi in codice. Il codice e’ quello
capito dalla CPU di E.E. con comandi indicati
con sigle, da immaginare in binario.
Per es. somma
avra’ il codice ADD

poni in memoria “
“ “
STORE
 carica in un registro “
“ “
LOAD
 salta (branch)
“
“ “
B
salta e torna indietro(back)“ “ “
BB
confronta (compare) avra’ il codice CMP
etc.
fond. di informatica1 parte 5
21
Il formato delle istruzioni
del linguaggio della macchina varia da C.P.U. a
C.P.U. col vincolo che ogni istruzione deve poter
stare nel registro I.R. della C.P.U. per essere
decodificata e poi eseguita. Il numero dei bit di
I.R. varia da C.P.U. a C.P.U….
Se per es. IR ha 32 bit allora si potrebbero
usare: 8 bit per il codice operativo (leggi, scrivi,
somma …), 4 bit indicare il supporto, 4 bit il
tipo di indirizzamento (immediato, diretto, indiretto) e
16 bit per indirizzare la memoria o altro.
Segue un esempio in un ipotetico linguaggio
macchina.
fond. di informatica1 parte 5
22
Come fare la somma S=S
in linguaggio macchina ?
i=0-7
5
In C++ o C  {int S = 0, i;
for ( i=0; i<8; i=++) S+ = 5;}
In ling.macchina le addizioni si fanno in A=Acc.
e per gli indici si usano i Reg.i e cosi’ a parole:

Azzera A e Carica in Reg.1 0
COME Confronta Reg.1 con 8

Se sono uguali salta a VIA

(se no) Aggiungi ad A 5

Incrementa Reg.1 di 1

Salta a COME
VIA
Memorizza
A in S (A => MemS) 23
fond. di informatica1 parte 5
E quindi:

CLEAR A

LOAD R1 #0 (#indica dato immediato)
COME CMP R1 #8 (se il compare da’ 0 FlagZero=1)

BZ
VIA (salta a VIA se FlagZero=1)

ADD A #5

INC
R1 (incrementa di 1 R1)

B
COME
VIA
STORE A ADDRS (--> ADDRS => P
e inoltre A => Mem(P))
fond. di informatica1 parte 5
24
o anche e meglio (con 1 giro
ed 1 istruzione in meno):


COME

CLEAR A
LOAD R1 #7
ADD A #5
DEC
R1 (decrementa di 1 R1 : quando R1= 0


VIA
BZ
VIA (salta a VIA se FlagZero=1)
B
COME
STORE A ADDRS
.
FlagZero=1)
fond. di informatica1 parte 5
25
BUS
Tra le unita’ di E.E. viaggiano dati e indirizzi …
 DOVE? Nei BUS !
BUS = l' insieme dei collegamenti (cavi e
connettori) tra C.P.U. e le altre componenti su
cui sono trasferiti le informazioni in parallelo a
pacchetti di n bit
BUS indirizzi => n da 8 a 20 bit e
BUS dati
=> n da 8 a 64 ”
Attualmente si usano 2-3 livelli di BUS per
accellerare i trasferimenti.
fond. di informatica1 parte 5
26
Memoria di massa :
Funzione: uguale a quella della C.M. (memorizzare
!!!), ma tecnologia di tipo magnetico ...
Caratteristica: permanenza delle informazioni (come
la ROM !!!), ma il Tempo di accesso che dipende
dal tipo,  10-100msec. Enorme divario con la C.M.
!!! Questo divario deve essere “compensato” con
operazioni di input/output che scambino un notevole
numero di informazioni in ogni accesso (cfr. diapo 32)
Supporto: disco fisso, dischetto (floppy), nastro, C.D.
...
Lettura/scrittura: Unita’ di Lettura/scrittura dotata di
una testina apposita o di raggio laser.
fond. di informatica1 parte 5
27
Tipo di accesso:
sequenziale e, per dischi (hard e floppy),
diretto o casuale (= random) tramite gli
indirizzi di settore e traccia creati (cfr.parte 2)
con la formattazione che divide il disco in tracce
ed ogni traccia in settori a partire da punti di
riferimento. RICORDARE che la Formattazione
annulla il contenuto preesistente! PERICOLO!
Capacita’
Capacita’
Capacita’
Capacita’
dei
dei
dei
dei
dischetti:  360, 780, 1200 Kbyte e oltre
dischi: da 10 Mbyte a 40 Gigabyte “ “
C.D.:  700 Mbyte;
nastri: variabile secondo il tipo di unita’
fond. di informatica1 parte 5
28
Unita’ periferiche: sistema video
E’ costituito da un display e da una scheda
grafica ed ha 2 modalita’ di funzionamento:
alfanumerica (p.e. 25righe x 80colonne di
testo) e grafica con necessita’ di un software
pilota (=driver) della scheda grafica posto in
un file con estensione .BGI che permette
diverse modalita’, risoluzioni … num. di colori;
elemento base: PIXEL (PIcture ELement) in un
raster o matrice (griglia) di PIXEL (1280x1024;
…) usabili singolarmente in alta risoluzione, a
gruppi in bassa risoluzione.
fond. di informatica1 parte 5
29
Comunicazioni tra
elaboratori
Si basano su strumenti Hard./Soft. che
permettono di collegare elaboratori di vari tipi
in reti locali (LAN) e geografiche (WAN);
occorrono dispositivi di interfaccia tra
elaboratori (per es. “schede di rete”) e
protocolli (regole) di comunicazione;
si puo’ anche usare la rete telefonica con l’ uso
del “modem” dispositivo +comunemente usato
che permette di convertire il segnale analogico
(voce) a segnale digitale (bit) e viceversa.
fond. di informatica1 parte 5
30
E inoltre …
parlando di comunicazioni, il mezzo piu’
semplice per trasferire qualunque informazione
sia da C.M. a memoria di massa sia tra
Elaboratori di tipo diverso resta il file tipo testo
sequenziale memorizzato su memoria di massa.
Nel file tipo testo i byte sono interpretati come
caratteri ASCII (in altri file, quelli binari ogni
byte e’ considerato come 8 bit di un dato
binario, per es. float);
I file tipo testo possono essere usati in lettura,
scrittura e aggiornamento.
fond. di informatica1 parte 5
31
Come si costruisce un file
tipo testo in C, C++ ?
Occorre usare le librerie e le funzioni giuste …
ma comunque sempre le informazioni al / dal
file sequenz. sono trasferite a blocchi, 1 blocco
per volta, da / a una zona di C.M. che funge da
tampone o buffer (= “interfaccia” tra i 2 tipi di
memoria) e da qui smistate (Cfr. parte2, file & C.M.)
Il C e C++ considerano un file sequenziale
come un flusso (stream) o successione
continua di byte proveniente da/inviata a
memoria di massa (analogia con cin e cout).
Per gestirlo pero’ usano procedure diverse.
fond. di informatica1 parte 5
32
Argomenti del main
Per trasmettere ad un programma C o C++
informazioni (per es. il nome del file di lavoro
dati.per) si usano i parametri della main
function che finora era sempre scritta main().
La main function ha 2 forme di intestazione:
int main()
int main(int argc, char* argv[])
dalle quali si nota che il valore di ritorno e’ int
(come quello indicato nella frase return (0) !!).
fond. di informatica1 parte 5
33
main
Nella seconda forma si notano: int argc che e’
il numero di parametri trasmessi, char* argv[]
che e’ un vettore di puntatori a stringhe= nomi
dei parametri trasmessi.
In argv[0] c’ e’ il puntatore al nome del
programma, primo argomento presente sulla
linea di attivazione del programma stesso; nei
successivi ci sono puntatori alle stringhe che
sono gli altri argomenti presenti sulla linea di
attivazione del programma stesso.
fond. di informatica1 parte 5
34
Esempio
Avendo scritto la frase main cosi’:
main(int argc, char *argv[])
la linea di attivazione potra’ essere cosi’ fatta:
fileper.exe dati.per
dove il file di dati da leggere (dati.per) e’
fornito in argv[1], in argv[0] va fileper (nome
del programma) e argc viene posto =2.
Tutto questo deve servire da guida, ma per
imparare occorre FARE e poi provare e
riprovare con pazienza …
fine.
fond. di informatica1 parte 5
35
Appendice a): perplessita’ 1
RICORDARSI: l’ operatore >> preleva un
dato dal un flusso di input: che tipo di dato?
Il tipo che e’ stato dichiarato: char, int, float,
...
2) RICORDARSI: non abusare di matrici e/o
vettori; usarli solo quando esiste la
necessita’ di tenere memoria dei valori
calcolati o letti: se tale necessita’ manca
allora usare il valore letto per i calcoli
necessari e passare al successivo.
fond. di informatica1 parte 5
36
Appendice a): perplessita’ 2
3) La funzione elabora usata in tanti esempi di
programmi indica col suo nome una
elaborazione di tipo generale. Quando l’
elaborazione e’ di un tipo specificato e’ meglio
usare nomi di funzioni pertinenti, come fatto
nell’ esempio sulla valutazione del minimo e del
massimo (parte 4) dove si usavano nomi come
minimo, massimo, rivaluta e memovis. Cosi’ il
programma diventa +comprensibile e -generico
Come ulteriore esempio, se in un programma ...
fond. di informatica1 parte 5
37
Appendice a): perplessita’ 3
… se in un programma e’ richiesto di leggere
una matrice di valori interi e ricercarvi un certo
valore (letto anch’esso da tastiera) le funzioni
da usare e costruire saranno:
leggi(matrice); cin>> valore;
if (ricerca(valore, matrice, &riga, &colonna))
visualizza(“\ntrovo valore in ”, riga,colonna);
else cout<< “\nIl valore non c’e’ !”<<endl;
QUI la funzione elabora e’ la ricerca !
fond. di informatica1 parte 5
38
Appendice a): perplessita’ 4
4) RICORDARE: la codifica F.P. normalizzata fa
riferimento alla base 2 e quindi il valore dell’
esponente riguarda la base 2. Col metodo delle
moltiplicazioni successive ogni moltiplicazione
per la base isola una nuova cifra nella nuova
base. Per es.  =3.1410 avra’ 112 come parte
intera e 00100011112 come parte decimale.
Normalizzando  +.1100100011112 E+102
con S=0, M=1100100011112, E=0102 .
fond. di informatica1 parte 5
39
Appendice a): perplessita’ 5
RICORDARSI di fare attenzione alle specifiche
di progetto di un programma: IN PARTICOLARE
alle specifiche di progetto del programma da
costruire all’ esame che stanno nelle relative
richieste. Analizzarle e riflettere!
UN CONSIGLIO per l’ esame: scrivere il
programma in modo semplice e chiaro, con
qualche commento, ma senza fronzoli,
badando a rispondere a tutte e sole le
richieste. Privilegiare la sostanza ! Se resta
tempo aggiungere … i “fiorellini” !
fond. di informatica1 parte 5
40
Appendice b): esempi di temi
d’esame del 2000
 Fondamenti di Informatica 1
 TEMPO = 1 ORA e 1/2,
 NON AMMESSI TESTI, APPUNTI, CALCOLATRICI.
 1) Conversioni di base (punteggio =2)

Esprimere in base 10 l' intero positivo piu' grande
rappresentabile con 6 bit in base 2.

Scrivere la rappresentazione binaria normalizzata di 3/4
 2) (punteggio =1)
 Come sono effettuate le divisioni per 2 dei numeri interi dall'
Unita' Aritmetico-Logica?
fond. di informatica1 parte 5
41
Appendice b; continua 2
 3) (punteggio =2) NO
 In un circuito logico a 3 ingressi (V,X,Y) la funzione Z vale 1
quando la combinazione di ingresso e’ dispari: scrivere la
funzione Z.
 4) (punteggio =5)
 Scrivere in C o C++ un programma strutturato in
sottoprogrammi che provveda a costruire in Memoria Centrale
una matrice F di N*M elementi float. Ogni elemento di F deve
contenere il valore della funzione
 f = 0.5*x2 +1.5*y +1
 per x variabile con passo dx=0.5 nell' intervallo 0.0  x  2.0
e y variabile con passo dy=0.1 nell' intervallo 0.0  y  0.3
(Estremi inclusi!)
fond. di informatica1 parte 5
42
Appendice b; continua 3
 (SI NOTI che N ed M vanno calcolati in funzione degli intervalli
di definizione di x e y e dei passi dx e dy sopra specificati).
 Dopo la costruzione della matrice F, il programma deve:
 visualizzare su video i valori N e M e la matrice F per righe.
 N.B. E' SCONSIGLIATO L' USO DI VARTIABILI GLOBALI
 Fondamenti di Informatica 1
 TEMPO = 1 ORA e 1/2,
 NON AMMESSI TESTI, APPUNTI, CALCOLATRICI.
 1) Conversioni di base (punteggio =2)
 Dare la forma normalizzata binaria Floating Point con 1 bit
per S, 3 bit per E , 4 bit per M del valore X=1/4 in base 10.
fond. di informatica1 parte 5
43
Appendice b; continua 4
 Dare la rappresentazione binaria in complemento a 2 con 8 bit
di X = 1510.
 2) (punteggio =1) Indicare quante sono e quali sono le fasi di
cui si compone il ciclo della CPU (Unita' Centrale di Elaboraz.)
 3) (punteggio =2) Indicare sinteticamente come lavora un
Sistema operativo multiprogrammato e dove si trovano i "molti"
programmi da essere eseguiti.
 4) (punteggio = 5) Scrivere in C++ un programma strutturato
in sottoprogrammi che faccia le seguenti azioni tramite apposite
procedure o funzioni:
 _ costruire in Memoria Centrale un vettore (tabella) di 10
elementi interi ordinati dove ogni elemento e' divisibile per 3 e
per 5 ossia 15, 30, 45, 60, ... e visualizzarlo
fond. di informatica1 parte 5
44
Appendice b; continua 5
 _ chiedere all' utente 2 valori interi (non compresi tra quelli
posti nel vettore);
 _ aggiungere nel vettore i 2 valori letti posizionandoli nei
posti voluti dall' ordinamento e visualizzare il vettore cosi'
modificato. (Se per esempio i valori letti sono 7 e 31 il vettore
modificato risultera': 7, 15, 30, 31, 45, 60, ... )

N.B. E' SCONSIGLIATO L' USO DI VARTIABILI GLOBALI
 Fondamenti di Informatica 1
 TEMPO = 1 ORA e 1/2,
 NON AMMESSI TESTI, APPUNTI, CALCOLATRICI.
 1) Conversioni di base (punteggio =2)
 Usando l' aritmetica binaria e la notazione in complemento a 2
fond. di informatica1 parte 5
45
Appendice b; continua 6

calcolare: la differenza tra
01012 e 10112 ;

il valore di un registro a 4 bit contenente 11112.

 2) (punteggio =1) Indicare la funzione del linker e quando e'
usato.
 3) (punteggio =2) NO !Indicare come viene realizzata la
dipendenza dal tempo nei circuiti elementari di memoria
FF_SR utilizzati per memorizzare i bit. Indicare anche la loro
struttura.
 4) (punteggio =5) Scrivere in C++ un programma strutturato
in sottoprogrammi che in Memoria Centrale utilizzi 3 matrici
bidimensionali di interi e di dimensione 3x3, A, B, C, e dotato di
un programma principale consistente dei passi seguenti:
fond. di informatica1 parte 5
46

Appendice b; continua 7
 P1.
init (A); init (B);
 P2.
C = A*B;
 P3.
stampa(A), stampa(B), stampa(C).
 NOTE: Le matrici A e B devono essere opportunamente
inizializzate tramite una procedura di lettura da tastiera, con
prototipo del tipo: void init(X) dove X e' una matrice 3x3 che
in uscita da init contiene i valori letti;
 Le 2 matrici A e B cosi' inizializzate, devono essere moltiplicate
tramite la procedura: void product(....) con tre parametri
(matrice C in uscita, matrici A e B in ingresso), ossia il risultato
di product( ...) e': C = A*B (ricordando che un elemento C[i][j]
e' dato dalla sommatoria in k di A[i][k] * B[k][j] );
fond. di informatica1 parte 5
47
Appendice b; continua 8
 Le matrici A, B, C devono essere visualizzate tramite la
procedura void stampa(X) che visualizza per righe sul display la
matrice X di dimensioni 3x3.
 N.B. E' SCONSIGLIATO L' USO DI VARTIABILI GLOBALI.
 Fondamenti di Informatica 1
 TEMPO = 1 ORA e 1/2,
 NON AMMESSI TESTI, APPUNTI, CALCOLATRICI
 1) Conversioni di base (punteggio =2)
 da base 2 in forma Floating Point normalizzata con Segno = 0,
 Esponente= 0012 Mantissa Normalizzata=10102 a base 10 =?
 da base 10 a base 16: 12310 = ?
fond. di informatica1 parte 5
48
Appendice b; continua 9
 2) (punt. =1) Indicare la differenza tra file e directory del DOS.
 3) (punteggio =2) In cosa consistono le fasi di Fetch (prelievo)
e decodifica di un' istruzione in linguaggio macchina ? chi le
attua ?
 4) (punteggio = 5) Scrivere in C++ un programma
strutturato in sottoprogrammi che:
 legga da tastiera un insieme di valori interi da memorizzare in T
array monodimemnsionale (vettore) di al massimo 99 elementi;
 attivi una procedura Conta che esamini T e restituisca 2 valori
e cioe': il numero degli elementi effettivamente presenti in T,
e il numero degli elementi che hanno un valore non divisibile
per 2 ne' per 3 e visualizzi sul video tali numeri.
 N.B. E' SCONSIGLIATO L' USO DI VARTIABILI GLOBALI
fond. di informatica1 parte 5
49
Scarica

Fondin~5 - UniNa STiDuE