Professor Fausto Distante scaglione BOM-CES
Corso informatica ingegneria aerospaziale
Definizione alfabeto
Definizione alfabeto: insieme finito (non nullo) di elementi distinguibili tra loro.
- (a): {a,b,c,..., z} è un alfabeto costituito da ventuno elementi.
- (b): {*,$,&} è a sua volta un alfabeto, questa volta costituito da tre elementi.
Gli elementi di un qualsiasi alfabeto non hanno significato, ma la loro giustapposizione permette di definire una serie di concetti che verranno successivamente interpretati dall’utente/macchina (calcolatore elettronico).
Definizione cardinalità di un insieme
Definizione cardinalità di un insieme: numero di elementi che compongono l’insieme stesso.
La differenza tra (a) e (b) è appunto la cardinalità: questa influisce sulla lunghezza delle parole. Minore è la cardinalità di un insieme e maggiore diventa la lunghezza delle parole.
Problema: come lavora un calcolatore elettronico?
Soluzione: riconosce un concetto rilevando:
- Passaggio / non passaggio di corrente elettrica;
- Presenza / assenza della differenza di potenziale (ddp).
È chiaro quanto sia vantaggioso fare riferimento a un alfabeto costituito da due elementi rispetto a un alfabeto più complesso e articolato, ecco che viene introdotto l’alfabeto binario: {0,1}.
Definizione bit
Definizione bit: binary digit.
- 0 → non passa corrente (buio).
- 1 → passa corrente (luce).
La garanzia della correttezza del passaggio dell’informazione è sicuramente maggiore.
Problema: come posso rappresentare i caratteri della tastiera?
Soluzione: codice ASCII (American Standard Code for Information Interchange).
Sulla tastiera posso trovare 128 caratteri. La giustapposizione di sette {0,1} permette di identificare univocamente 128 elementi.
Definizione alfabeto numerico
Definizione alfabeto numerico: insieme finito (non nullo) di elementi distinguibili tra loro che hanno un significato intrinseco in questo caso.
- Alfabeto numerico dell’Impero Romano: {I, V, X, L, C, D, M} → base 7.
- {0,1,2,3,4,5,6,7,8,9} → alfabeto numerico decimale → base 10.
Definizione di base
Definizione base: coincide con la cardinalità dell’alfabeto numerico.
Notazione posizionale pesata: 543 = (5 * 102) + (4 * 101) + (3 * 100) = 500 + 40 + 3 = 543
Problema: come posso passare da base dieci a base due e viceversa?
Soluzione:
Passaggio binario-decimale: (0 * 20) + (0 * 21) + (1 * 22) + (0 * 23) + (1 * 24) + (0 * 25) + (1 * 26) = (1010100) → 4 + 16 + 64 = (84)10
Passaggio decimale binario: divido per due e tengo traccia del resto (che sarà un numero compreso tra 0 e 1) e leggo al contrario quanto ho trovato e scrivo il risultato in orizzontale.
Perciò 84 = (1010100)2
Generalizzazione della notazione posizionale pesata: per passare da decimale a binario e viceversa procedo come dimostrato in precedenza perché in questo modo il procedimento viene sempre svolto in decimale (linguaggio con il quale siamo abituati a risolvere le operazioni di somma, sottrazione, moltiplicazione e divisione).
Alfabeto numerico esadecimale
Alfabeto numerico esadecimale: {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}.
A → 10; B → 11; C → 12; D → 13; E → 14; F → 15; = (12 * 160) + (11 * 161) + (3 * 162) = (3) (956)16 10
Operazioni con alfabeto numerico binario
- Somma
- Moltiplicazione
- Sottrazione: a + (-b)
Nasce un problema sull’alfabeto: {0,1,+,-}
Problema: Come posso scrivere un numero con segno negativo?
Soluzione: rappresentazione in modulo e segno! (su 8 bit 256 configurazioni)
- 0 → positivo.
- 1 → negativo.
(50) = (110010) = (00110010)10
L’operazione algebrica in rappresentazione modulo e segno deve essere eseguita sul modulo, facendo attenzione in un secondo momento al segno del risultato finale.
Codifica in complemento a 10
Codifica in complemento a 10 (3 caselle):
005 | 5 004 | 4 003 | 3 002 | 2 001 | 1 000 | 0 999 | -1 998 | -2 997 | -3 996 | -4 995 | -5
(2 + 3) = 002 + 003 = 005 = 5
[2 + (-4)] = 002 + 996 = 998 = -2
[-2 + (-3)] = 998 + 997 = 995 = -5
(343 + 216) = 343 + 216 = 559 (negativo) → effetto di overflow: una somma di due numeri concordi non può restituire un risultato di segno discorde. È un effetto che può succedere quando la somma è tra due numeri di segno uguale.
Codifica in complemento a 2
Codifica in complemento a 2 (su 3 bit 8 configurazioni, 4 positive e 4 negative):
011 | 3 010 | 2 001 | 1 000 | 0 111 | -3 110 | -2 101 | -1 100 | -4
[1 + (-3)] = 001 + 101 = 110 = -2
[-2 + (-4)] = 110 + 100 = 010 = 2 != -6
La prima cifra suggerisce il metà spazio di appartenenza (se positivo o negativo): diverso dalla rappresentazione in modulo e segno.
Problema: Come trovare l’opposto in complemento a due?
Soluzione: Mantengo inalterato il numero finché non compare il primo 1, dopodiché inverto tutto ciò che segue (0 → 1; 1 → 0).
Soluzione #2: inverto completamente il numero e sommo la quantità 1 (più rigoroso).
Esercizio modalità esame
A = (78)10
B = (-67)10
Eseguire A+B e A-B in complemento a due.
Risolvo
- Convertire A in binario naturale;
- Definire la metà spazio di appartenenza in complemento a due (0 positivo; 1 negativo);
- Convertire l’opposto di B in binario naturale;
- Trasformare l’opposto di B in complemento a due;
- Trovare l’opposto dell’opposto di B, cioè -B, in complemento a due: inverto e sommo 1;
- Eseguire A + B e A - B.
(78) = (1001110) = (01001110)10 2
(67) = (1000011) = (01000011)10 2
10111100 +1 =10111101 (-67) = (10111101)10 2
A+B = 01001110 + 10111101 = 00001011 (N.B: stiamo lavorando su 8 bit)
A-B = 01001110 + 01000011 = 10010001 overflow, questa somma non può essere fatta;
Problema: come posso rappresentare un numero reale?
Soluzione: rappresentazione mantissa-esponente.
- 3,7 → 0,37 * 101
- 0,02 → 0,2 * 10-1
- 19,0 → 0,19 * 102
Linguaggio C
Linguaggio C
Definizione algoritmo
Definizione algoritmo: insieme finito (non nullo) di istruzioni univocamente identificabili (termina in un tempo finito) e comprensibili dall’utente.
- PS1 ... Sn
- A1 ... An
- L1 ... Ln
Definizione variabile
Definizione variabile: è un contenitore d’informazione.
- Assegnamento
- Input / Output
- Selezione (if)
Definizione ciclo
Definizione ciclo: porzione di codice che viene ripetuta più volte. Il numero di volte è definito da un’espressione condizionale.
N.B: al fine di comprendere più facilmente il linguaggio C sarebbe meglio che l’espressione che regola la ripetizione del ciclo fosse definita in modo tale che ripeta dal ramo del vero.
Esempio #1: ciclo a condizione finale
Ciclo a condizione finale viene eseguito almeno una volta. È consigliato quando si ha la certezza che il ciclo debba essere eseguito almeno una volta.
Problema: moltiplicare A (intero) e B (intero). L’utente conosce l’operatore somma, sottrazione e confronto.
Ciclo a condizione iniziale
Per essere eseguito (almeno) una volta l’espressione regolatrice deve essere vera. È consigliato quando non si ha la certezza che il ciclo debba essere eseguito almeno una volta.
Programmazione C Linguaggio
Esercizio stampa numero romano: condizione semplice (if) + ciclo a condizione iniziale (while)
#include <stdio.h>
int main (){
// spazio di memoria (standard) per variabile: intero 2 byte (16 bit), float 4 byte (32 bit),
// char 1 byte (8 bit)
int numero;
do {
printf("Inserire un numero strettamente maggiore di zero: \n");
scanf("%d", &numero);
} while (numero <= 0);
while (numero >= 1000) {
numero = numero - 1000;
printf("M");
}
if (numero >= 500) {
numero = numero - 500;
printf("D");
}
while (numero >= 100) {
numero = numero - 100;
printf("C");
}
if (numero >= 50) {
numero = numero - 50;
printf("L");
}
while (numero >= 10) {
numero = numero - 10;
printf("X");
}
if (numero >= 5) {
numero = numero - 5;
printf("V");
}
while (numero >= 1) {
numero = numero - 1;
printf("I");
}
return 0;
}
Esercizio con costrutto switch
#include <stdio.h>
int main () {
int op_uno, op_due, ris;
char operatore;
printf("Inserire primo termine: \n");
scanf("%d", &op_uno);
getchar();
printf("Inserire operatore: \n");
scanf("%c", &operatore);
printf("Inserire secondo termine: \n");
scanf("%d", &op_due);
switch (operatore) {
case '+': {
ris = op_uno + op_due;
printf("%d %c %d = %d", op_uno, operatore, op_due, ris);
}
}
}
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.