Estratto del documento

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);
        }
    }
}
Anteprima
Vedrai una selezione di 8 pagine su 33
Appunti corso Informatica   Pag. 1 Appunti corso Informatica   Pag. 2
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Appunti corso Informatica   Pag. 6
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Appunti corso Informatica   Pag. 11
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Appunti corso Informatica   Pag. 16
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Appunti corso Informatica   Pag. 21
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Appunti corso Informatica   Pag. 26
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Appunti corso Informatica   Pag. 31
1 su 33
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher tommasocajano di informazioni apprese con la frequenza delle lezioni di Informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Milano o del prof Distante Fausto.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community