Skip to content
This repository has been archived by the owner on Jun 16, 2023. It is now read-only.

Commit

Permalink
fine lezione 3
Browse files Browse the repository at this point in the history
  • Loading branch information
mc-cat-tty committed Sep 28, 2021
1 parent ef70c0f commit 31a2fa0
Show file tree
Hide file tree
Showing 11 changed files with 223 additions and 0 deletions.
46 changes: 46 additions & 0 deletions 2_mem.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,49 @@ Cicli = salto indietro
Jump = salto avanti

Linguaggi ad alto livello = si basano sul concetto di astrazione. La memoria viene astratta in variabili. (barriera di astrazione"

## RAM
Ad ogni processo viene assegnata una porzione di memoria RAM, strutturata come sequenza di celle contigue.

Byte = dimensione sufficiente ad allocare un tipo di dato char (dimensione esatta non definita dallo standard)

## Oggetto
Oggetto = astrazione di cella di memoria, caratterizzato da un valore memorizzato in una sequenza di celle contigue.

Ogni oggetto è identificato da un *indirizzo in memoria*. Indirizzo prima cella in cui è memorizzato (della sequenza). Ogni oggetto è caratterizzato da un *valore*, ovvero il numero che sta dentro alla sequenza di celle.

Il *tipo di dato* definisce come interpretare un oggetto (i valori possibili) e quali operazioni sono consentite.

## Tipi di dato primitivi

|Nome|Categoria|
|----|---------|
|int|sottoinsieme interi|
|float|sottoinsieme reali|
|double|sottoinsime reali a maggiore precisione|
|char|caratteri|
|bool|booleano|

Il tipo _int_ ha un insieme di valori limitato, rispetto all'insieme dei valori contenuti in Z.

Il numero massimo di bit allocati per un int dipende dalla lunghezza della WORD della macchina su cui lavoro, tipicamente 16 o 32 bit. Range: [-2^15, 2^15-1]


### Operazioni `int`
/ -> divisione intera
% -> modulo della divisione

TODO: link esercitazione moltiplicazione

## Espressioni letterali
=> nomenclatura: costanti senza nome - letterali

Valore numerico all'interno del codice ==> letterale numerico.

Questi valori costanti possono essere associate ad un nome (costante con nome), che funge da identificatore, fermo restando che il valore della costante non può variare come quello delle variabili. La costante può essere definita come _astrazione simbolica di un valore_. L'associazione identificatore-valore non cambia mai.

Nelle variabili l'associazione identificatore-indirizzo non varia, ma il valore contenuto può essere modificato.

TODO: link esercizio costante intera e stampa valore assegnato


54 changes: 54 additions & 0 deletions 2_struttura_programma.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Struttura semplificata di un programma

In prog1 vedremo solamente programmi contenuti in un unico file sorgente.

## Step compilazione
1. il file sorgente viene interpretato dal *pre-processore* e le direttive (iniziano con #) unwrappate
2. la nuova versione estesa del programma viene memorizzata in un file temporaneo
3. il file temporaneo passa per il compilatore

## Dichiarazione e definizione
Dichiarazione = istruzione in cui viene introdotto un nuovo *identificatore*

Definizione sottoinsieme di dichiarazione: allocazione spazio moemoria

## Struttura C
```
<direttive al pre-processore>
int main() {
<dichiarazione>
<dichiarazione>
<dichiarazione>
...
<istruzione diversa da dichiarazione>
<istruzione diversa da dichiarazione>
<istruzione diversa da dichiarazione>
}
```

Vietate le dichiarazioni in mezzo al codice

## Struttura Cpp
```
<direttive al pre-processore>
int main() {
<istruzione qualsiasi>
<istruzione qualsiasi>
<istruzione qualsiasi>
...
}
```

## Funzione main
Funzione speciale, tre caratteristiche principali:
1. deve essere sempre presente
2. entry point del programma
3. dopo l'ultima istruzione del main il programma termina

## Problem solving
1. capire il problema
2. cercare idea risolutiva
3. definire l'algoritmo
4. testarlo su carta
5. implementarlo
6. testarlo
22 changes: 22 additions & 0 deletions 3_assegnamento.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Assegnamento
Espressione di assegnamento:
`nomevar = espressione`

Istruzione assegnamento:
`<espressione assegnamento>`

Tabella dei simboli: simbolo -> indirizzo

Ogni assegnamento implica una scrittura della porzione di memoria in cui è contenuta la variabile.

*lvalue* = left value
*rvalue* = right value

`lvalue = rvalue` <--> _indirizzo = espressione_
Ordine esecuzione: risoluzione espressione rvalue, assegnamento al valore del simbolo di sinistra.

Anche l'espressione di assegnamento ha un risultato (un proprio valore), ovvero *l'indirizzo della variabile*. In C il risultato dell'assegnamento è il valore del rvalue.

Assegnamento multiplo: `c = d = 2`. Parti da destra: `c = (d = 2)`. Funziona sia in C che in C++

TODO: link esercizio e completa
30 changes: 30 additions & 0 deletions 3_sintassi.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Sintassi
Un programma C/C++ è una sequenza di *token* delimitate da *whitespaces*.
TODO: completa
Tipi token:
- operatori
- parole riservate
...
TODO: completa

## Identificatori
<identificatore> ::= <Lettera> {<Lettera> | <Cifra>}
- <lettera> = lettere maiusc e minusc + underescore
- no inizio con numero
- no parole riservate

## Commenti
=> parte di codice non interpretata dal compilatore

`// /* ... */`

Best practice:
```
/*
*
*
*/
```

# Spazi bianchi
Unico separatore obbligatorio tra identificatore e parola chiave.
17 changes: 17 additions & 0 deletions esercitazioni/5_scambio_int_facile.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#include <iostream>
#include <cstdio>

using namespace std;

int main() {
int a, b;
cout << "Inserisci valore a: ";
cin >> a;
cout << "Inserisci valore b: ";
cin >> b;
a += b;
b = a-b;
a -= b;
cout << "Dopo lo scambio: a=" << a << ", b=" << b << endl;
return 0;
}
12 changes: 12 additions & 0 deletions esercitazioni/6_numero_contrario.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#include <iostream>
#include <cstdio>

using namespace std;

int main() {
int a;
cout << "Immetti numero: ";
cin >> a;
cout << "Risultato: " << a%10 << a%100/10 << a/100 << endl;
return 0;
}
13 changes: 13 additions & 0 deletions esercitazioni/6_numero_contrario_mem.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#include <iostream>
#include <cstdio>

using namespace std;

int main() {
int a;
cout << "Immetti numero: ";
cin >> a;
int res = a%10 +
cout << "Risultato: " << a%10 << a%100/10 << a/100 << endl;
return 0;
}
Binary file modified esercitazioni/a.out
Binary file not shown.
11 changes: 11 additions & 0 deletions esercitazioni/const_print.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#include <iostream>
#include <cstdio>

using namespace std;

int main() {
const int A = 10; // Best practice: constants name should be uppercase
// A = 20; // lvalue must be variable
cout << "Il valore della costante è " << A << endl;
return 0;
}
10 changes: 10 additions & 0 deletions esercitazioni/test_c_var_declaration.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include <stdlib.h>

int main() {
int a = 10;
printf("a vale: %d\n", a);
int b = 20;
const c = 100;
printf("b vale: %d\n", b);
return 0;
}
8 changes: 8 additions & 0 deletions esercitazioni/zero_error.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#include <iostream>
#include <cstdio>
using namespace std;

int main() {
cout << 0/abs(0);
return 0;
}

0 comments on commit 31a2fa0

Please sign in to comment.