From 31a2fa0bee220bbc26ba8eb9d31148d2e889943a Mon Sep 17 00:00:00 2001 From: mc-cat-tty <44820563+mc-cat-tty@users.noreply.github.com> Date: Tue, 28 Sep 2021 12:30:37 +0200 Subject: [PATCH] fine lezione 3 --- 2_mem.md | 46 +++++++++++++++++++ 2_struttura_programma.md | 54 +++++++++++++++++++++++ 3_assegnamento.md | 22 +++++++++ 3_sintassi.md | 30 +++++++++++++ esercitazioni/5_scambio_int_facile.cpp | 17 +++++++ esercitazioni/6_numero_contrario.cpp | 12 +++++ esercitazioni/6_numero_contrario_mem.cpp | 13 ++++++ esercitazioni/a.out | Bin 17648 -> 17248 bytes esercitazioni/const_print.cpp | 11 +++++ esercitazioni/test_c_var_declaration.c | 10 +++++ esercitazioni/zero_error.cpp | 8 ++++ 11 files changed, 223 insertions(+) create mode 100644 2_struttura_programma.md create mode 100644 3_assegnamento.md create mode 100644 3_sintassi.md create mode 100644 esercitazioni/5_scambio_int_facile.cpp create mode 100644 esercitazioni/6_numero_contrario.cpp create mode 100644 esercitazioni/6_numero_contrario_mem.cpp create mode 100644 esercitazioni/const_print.cpp create mode 100644 esercitazioni/test_c_var_declaration.c create mode 100644 esercitazioni/zero_error.cpp diff --git a/2_mem.md b/2_mem.md index 24666dc..6b93849 100644 --- a/2_mem.md +++ b/2_mem.md @@ -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 + + diff --git a/2_struttura_programma.md b/2_struttura_programma.md new file mode 100644 index 0000000..121ec50 --- /dev/null +++ b/2_struttura_programma.md @@ -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 +``` + +int main() { + + + + ... + + + +} +``` + +Vietate le dichiarazioni in mezzo al codice + +## Struttura Cpp +``` + +int main() { + + + + ... +} +``` + +## 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 diff --git a/3_assegnamento.md b/3_assegnamento.md new file mode 100644 index 0000000..8d89767 --- /dev/null +++ b/3_assegnamento.md @@ -0,0 +1,22 @@ +# Assegnamento +Espressione di assegnamento: +`nomevar = espressione` + +Istruzione 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 diff --git a/3_sintassi.md b/3_sintassi.md new file mode 100644 index 0000000..20c9b59 --- /dev/null +++ b/3_sintassi.md @@ -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 + ::= { | } +- = 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. diff --git a/esercitazioni/5_scambio_int_facile.cpp b/esercitazioni/5_scambio_int_facile.cpp new file mode 100644 index 0000000..28471c1 --- /dev/null +++ b/esercitazioni/5_scambio_int_facile.cpp @@ -0,0 +1,17 @@ +#include +#include + +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; +} diff --git a/esercitazioni/6_numero_contrario.cpp b/esercitazioni/6_numero_contrario.cpp new file mode 100644 index 0000000..dd51bfb --- /dev/null +++ b/esercitazioni/6_numero_contrario.cpp @@ -0,0 +1,12 @@ +#include +#include + +using namespace std; + +int main() { + int a; + cout << "Immetti numero: "; + cin >> a; + cout << "Risultato: " << a%10 << a%100/10 << a/100 << endl; + return 0; +} diff --git a/esercitazioni/6_numero_contrario_mem.cpp b/esercitazioni/6_numero_contrario_mem.cpp new file mode 100644 index 0000000..b1752c6 --- /dev/null +++ b/esercitazioni/6_numero_contrario_mem.cpp @@ -0,0 +1,13 @@ +#include +#include + +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; +} diff --git a/esercitazioni/a.out b/esercitazioni/a.out index edfa31aa78f03c4626462d47eed7a3f9acee73e3..0057c0cb0f85296be5892764d8c79c615efe763f 100755 GIT binary patch delta 2925 zcmZ`*e{2&~9DjFh*SoU0Ubk}H2DY7oFkHKJjKQ$%>Ne9wGz=IZgsfAh%m5qPKtj|F z3D^QlwtZtPMq>>>BoQNX8ihY#%OY&Xkm4UCGms3U$w-I{lnBOAzwhq7ITn4%-RFHj z-=Fv1`@VJ}CX5{vx?PTho#;a|fFzdp6r8k0tcDn|_Wb0toe&M_ga{77*KtZPM2>`o zpmZ8O(LzHX4bDIoCTTKw?ni0rmtcMg=EspRKZbBYIIBn=BgPa$Osx0*U*f*h=5MW)~zhGn_VO3nwW7V*xWm@aO>2QdNzI{ld`wK!T46J4c`?*N(+oQcf(_=%Y6d%IIz0e=k}40g z2v*oxrS?x`#id?*zVwctkh`gQ`=P*IUW$`Olr!B`g#4cQ_+KaoXUL^9D0A0c z#eCtejCvh{gP1nubfD=U-Qlj_GMt3FECCA3?zcO`hb_PPaDHH*T~3WN2%d2XsD|;!!^gej@_7OJb_%e%ju;Rb(OwCb04;ts1&<2 z-iFHVks-Pmb(r#eDn-Zzy0+sVV!F+|XsQpbU)dGhw1|+AD z;#S0A#5iIL;=Vhn)EMGthuxHgAx06Sv`hl$J^6wMZg^Bn^foGC(({Cn z0Iyf=h@(tbm5(_%IfBnoOj1C}>c{K{#mbDdhIA`EY*c?5pJS+h0dYz%R_O**{{ucr z)aOjsuQL4cP?1|q--wlc;|-bbqb=Mi%EI$FI;(;A74IXB^_l)9=&5fVBA02;(vfb! zR0C%)InMe~uLij&3>LbDINT`o=ObiFzocXy)Jge zGaz;rh4-WceZGpqByC3=cv6}v@)-Edx_pl5A5gic&kYgz8QhytAPWXWGj#i1FzjCn zQc+SEhK3?%o|W*bX*fPiL?Y*K5uGNPBq`?ErV8RV6is9nae=qk39l9hgb3^_cA7Ft z3-lGMm=z_nLgEhix!5O2pafJjQ36hr6PGQ7QXJn-lS&e>6Qu;i0-qKq?b8zwvI#|z zUZZT|xONBQHE1YNb5?~6o^N9}iUOHU;?Pr~Lb${(59tieJXrG7>N~pRAZ8CvaB#nL zoCqYB)Xs>PhdiyKpH-nBR`h$G@x%e;i|0dUsX0v`+2ptvUSB-FV>@aI$s&@6;=kiv z+%}OOu^HdmiS`1)^+|amv6A zw5*)BP)*D7u%ht_(MK26nvbIvk84&g8DMtZ%#Jk~wg$Dk&Fn1XA)BQU7q-3w|6*jr zXxR`Pni# z;xX1c0yQY{QyhgDO8l(HVFV@K5ebkh%cgG71Up9&sIBb4|A6pg<=c4C)K-<*!evJ2 Spb2`bmdFRn4KWv#3im$^WgX7| literal 17648 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 diff --git a/esercitazioni/const_print.cpp b/esercitazioni/const_print.cpp new file mode 100644 index 0000000..89e803d --- /dev/null +++ b/esercitazioni/const_print.cpp @@ -0,0 +1,11 @@ +#include +#include + +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; +} diff --git a/esercitazioni/test_c_var_declaration.c b/esercitazioni/test_c_var_declaration.c new file mode 100644 index 0000000..4aa47c3 --- /dev/null +++ b/esercitazioni/test_c_var_declaration.c @@ -0,0 +1,10 @@ +#include + +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; +} diff --git a/esercitazioni/zero_error.cpp b/esercitazioni/zero_error.cpp new file mode 100644 index 0000000..97b3220 --- /dev/null +++ b/esercitazioni/zero_error.cpp @@ -0,0 +1,8 @@ +#include +#include +using namespace std; + +int main() { + cout << 0/abs(0); + return 0; +}