35
1 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia Elementi di Informatica e Programmazione - Dispensa III - PROGRAMMAZIONE C (Parte I) Alessandro Saetti (email: [email protected] ) Università degli Studi di Brescia A.A. 2018/2019 2 A.A. 2018/2019 Linguaggi di Programmazione Basso livello di astrazione: – Linguaggio macchina – Linguaggio assembly Alto livello di astrazione: – C, C++, Java, C#, Perl, Python, PhP, Javascript Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

  • Upload
    vuxuyen

  • View
    224

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

1 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Elementi di Informatica e Programmazione - Dispensa III -

PROGRAMMAZIONE C (Parte I)

Alessandro Saetti (email: [email protected])

Università degli Studi di Brescia A.A. 2018/2019

2 A.A. 2018/2019

Linguaggi di Programmazione

•  Basso livello di astrazione: – Linguaggio macchina

– Linguaggio assembly

•  Alto livello di astrazione: – C, C++, Java, C#, Perl, Python, PhP, Javascript

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Page 2: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

3 A.A. 2018/2019

Paradigma di programmazione •  Imperativa: Ogni istruzioni corrisponde ad un ordine

impartito –  Strutturata-Procedurale

–  Orientata agli oggetti

•  Funzionale: le istruzioni sono intese come specifiche strutture dati eseguibili

•  Dichiarativo: si specifica cosa è il programma anziché cosa fa

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

4 A.A. 2018/2019

Interpreti e Compilatori •  Traduttore: Converte il codice di programmi scritti in

un linguaggio di programmazione nella corrispondente rappresentazione in linguaggio macchina

•  Interprete: Traduce ed esegue il programma istruzione per istruzione

•  Compilatore: Genera il programma in linguaggio macchina a partire dal codice del programma sorgente –  Pre-elaborazione (preprocessing) –  Traduzione –  Collegamento (Linking)

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Page 3: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

5 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Sistemi di sviluppo integrati

/* Stampa a video una stringa */ #include <stdio.h> int main(void) { printf(�Cogito ergo sum.\n�); return 0; }

6 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Dev-C++: Interfaccia utente

Page 4: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

7 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Dev-C++: Crea/apri file

8 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Dev-C++: salva file

Page 5: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

9 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Dev-C++: Compila programma

10 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Dev-C++: Correzione errori

Page 6: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

11 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Dev-C++: Esecuzione programma

12 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Che voto gli dareste? #include <stdio.h>#include <stdlib.h> int main() {int n,max=0;printf("Inserisci numeri interi (0 per terminare):

\n"); do { printf("==> ");

scanf("%d",&n); if(n > max) max = n; } while(n > 0); printf("Il massimo valore immesso e': %d\n",max);

system("pause"); return(0); }

Page 7: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

13 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Regola di scrittura 1 #include <stdio.h> #include <stdlib.h> int main() { int n,max=0; printf("Inserisci numeri interi (0 per terminare):\n"); do { printf("==> "); scanf("%d",&n); if(n > max) max = n; } while(n > 0); printf("Il massimo valore immesso e': %d\n",max); system("pause"); return(0);}

14 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Regola di scrittura 2 #include <stdio.h> #include <stdlib.h> int main() { int n,max=0; printf("Inserisci numeri interi (0 per terminare):\n"); do { printf("==> "); scanf("%d",&n); if(n > max) max = n; } while(n > 0); printf("Il massimo valore immesso e': %d\n",max); system("pause"); return(0);}

Page 8: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

15 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Regola di scrittura 3 #include <stdio.h> #include <stdlib.h> int main() { int n,max=0;

printf("Inserisci numeri interi (0 per terminare):\n"); do { printf("==> "); scanf("%d",&n); if(n > max) max = n; } while(n > 0); printf("Il massimo valore immesso e': %d\n",max); system("pause"); return(0);

}

16 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Regola di scrittura 4.1 #include <stdio.h> #include <stdlib.h> int main() {

int n,max=0;

printf("Inserisci numeri interi (0 per terminare):\n"); do { printf("==> "); scanf("%d",&n); if(n > max) max = n; } while(n > 0); printf("Il massimo valore immesso e': %d\n",max); system("pause"); return(0);

}

Page 9: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

17 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Regola di scrittura 4.2 #include <stdio.h> #include <stdlib.h> int main() { int n,max=0; printf("Inserisci numeri interi (0 per terminare):\n"); do { printf("==> "); scanf("%d",&n); if(n > max) max = n; } while(n > 0); printf("Il massimo valore immesso e': %d\n",max); system("pause"); return(0);

}

18 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Regola di scrittura 4.3 #include <stdio.h> #include <stdlib.h> int main() { int n,max=0;

printf("Inserisci numeri interi (0 per terminare):\n"); do { printf("==> "); scanf("%d",&n); if(n > max) max = n; } while(n > 0); printf("Il massimo valore immesso e': %d\n",max); system("pause"); return(0);

}

Page 10: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

19 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Uso dei commenti #include <stdio.h> #include <stdlib.h> /* Scopo: Calcolo del valore massimo * Input: -- * Output: 0 se il programma termina correttamente */ int main() {

int n,max=0;

printf("Inserisci numeri interi (0 per terminare):\n"); do { printf("==> "); scanf("%d",&n); if(n > max) max = n; } while(n > 0); printf("Il massimo valore immesso e': %d\n",max); system("pause"); return(0);

}

20 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Commenti •  /* Scopo: semplice programma * Autore: A. Saetti * Input: -- * Output: 0 se termina correttamente */

•  /********************************************** * Scopo: semplice programma * * Autore: A. Saetti * * Input: -- * * Output: 0 se termina correttamente *

**********************************************/

Page 11: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

21 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Tipi di Dati Interi, Caratteri, Floating point

Tipo Bit Valore minimo Valore massimo short int unsigned short int int

unsigned int

long int

unsigned long int

16 16 32 32 32 32

-32.768 0

-231

0 -231

0

32.767 65.535 231-1 232-1

231-1

232-1 signed char unsigned char

8 8

-128 0

+127 255

Tipo Bit Valore minimo Valore massimo Precisione

float double

32 64

1.17549*10-38

2.22507*10-308

3.40282*1038

1.79769*10308

6 cifre 15 cifre

22 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sui Dati Operatore di assegnamento

int main(void) { short int i1, i2, i3 = 5, i4;

const float f1 = 1.25e1; float f2;

char c1 = '2'; f2 = 10.2; i1 = i2 = 10;

i4 = 32768; /* adesso i4 vale –32768 */ return 0;

}

Page 12: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

23 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sui Dati Operatori aritmetici e di casting

Ø Operatore di casting: ( nome-del-tipo ) espressione

Unario Binario

Additivo Moltiplicativo

+ più unario + somma * moltiplicazione

– meno unario – sottrazione / divisione

% resto

24 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sui Dati Conversioni aritmetiche

int main(void) { char c; short int s; int i; float f; double d; long double ld;

s = s + c; /* c convertito al tipo short */ i = i + s; /* s convertito al tipo int */ f = f + i; /* i convertito al tipo float */ d = d + f; /* f convertito al tipo double*/ ld = ld + d; /* d convertito al tipo long double */ return 0;

}

Page 13: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

25 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sui Dati Conversioni negli assegnamenti

int main(void) { char c; short int s; int i; float f; double d;

i = c; /* c convertito al tipo int */ f = i; /* i convertito al tipo float */ d = f; /* f convertito al tipo double */ i = 842.97 /* adesso i vale 842 */ return 0;

}

26 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sui Dati Conversioni di tipo esplicite: Casting

int main(void){ int parte_int; float numero_reale = 10.2, parte_fraz;

parte_int = (int)numero_reale; parte_fraz = numero_reale - parte_int; return(0); }

Page 14: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

27 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sui Dati Conversioni di tipo esplicite: Casting

int main(void) { int dividendo = 100, divisore = 8, resto, quoz_intero;

float quoz_reale; quoz_intero = dividendo / divisore; resto = dividendo % divisore; quoz_reale = (float)dividendo/(float)divisore; return(0); }

28 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione Procedurale Visualizzazione e acquisizione dati

•  printf(stringa, espr1, espr2, …);

•  scanf(stringa, &espr1, &espr2, …);

•  Specifiche di conversione principali: –  %d: stampa un dato intero o carattere in formato decimale –  %f: stampa un dato floating point (float o double) –  %Lf: stampa un dato floating point (long double) –  %c: stampa un dato carattere –  %s: stampa un dato stringa –  %-αX: stampa un dato dedicando almeno α caratteri (indentato a sx) –  %-α.βX: stampa un dato frazione con β cifre dopo la virgola

Page 15: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

29 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione Procedurale Chiamata a Funzioni: Stampa dati

#include <stdio.h>

int main(void) { int h1 = 10, h2 = 11; float x1;

x1=23.21; printf(�Ore %d: %f gradi\nOre %d: %9.2f gradi\n�, h1,

x1, h2, x1); printf(�Ore %d: %9.f gradi\n�, h2, x1);

return 0; }

Ore 10: 23.209999 gradi Ore 11: 23.21 gradi Ore 11: 23 gradi

30 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione Procedurale Chiamata a Funzioni: Acquisizione dati

#include <stdio.h>

int main(void) { int i, j, num, den;

float x, y;

scanf(�%d%d%f%f�, &i, &j, &x, &y); scanf(�%d/%d�,&num,&den); return 0;

}

1–20 .3 –4.0e3↵

2/5↵

Page 16: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

31 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione Procedurale Chiamata a Funzioni: Acquisizione dati

#include <stdio.h>

int main(void) { char c1, c2; scanf(�%c�, &c1); fflush(stdin); scanf(�%c�, &c2); fflush(stdin); return 0;

}

A↵ B↵

32 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione Procedurale Chiamata a Funzioni: Acquisizione dati

#include <stdio.h>

int main(void) { char c1, c2; scanf(��%c�, &c1); scanf(��%c�, &c2); return 0;

}

A↵ B↵

Page 17: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

33 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

•  Acquisire da tastiera un reale e visualizzare la sua parte intera e frazionaria

•  Acquisire da tastiera due numeri naturali. Si consideri gli interi acquisiti come il dividendo ed il divisore di una divisione. Visualizzare il quoziente intero, il resto ed il quoziente reale della divisione.

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

34 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Operatori Logici e Relazionali

int main() { int op1 = 12, ris; char opc = 'H';

ris = op1 < 10 && op1 >= 5; ris = !(op1 < 10 && op1 >= 5); ris = op1 >= 10 || op1 < 5; ris = opc >= 'a' && opc <= 'z'; ris = (opc >= 'a' && opc <= 'z') || (opc >= 'A' && opc <= 'Z'); return 0; }

Page 18: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

35 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Scelta semplice e a 2 vie

if (espressione) istruzione;

if (espressione) {

… /* blocco di istruzioni */

}

if (espressione) istruzione1; else istruzione2;

36 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Operatori logico-relazionali

Simbolo Significato Precedenza > >= < <=

Maggiore di Maggiore di o uguale a Minore di Minore di o uguale a

Binario

== !=

Uguale a Diverso da

Binario

! &&

||

Negazione logica Congiunzione logica Disgiunzione logica

Unario Binario Binario

Page 19: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

37 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

Acquisire da tastiera tre numeri naturali e visualizzare il massimo tra i naturali acquisiti.

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

38 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

#include <stdio.h> #include <stdlib.h>

int main() { int num1, num2, num3, max;

printf("Immetti 3 numeri interi: "); scanf("%d%d%d", &num1, &num2, &num3); max = num1;

if (num2 > max) max = num2; if (num3 > max)

max = num3; printf("Il massimo e' %d\n", max); system("pause"); return(0);

}

Astrazione sul Controllo Scelta semplice

Page 20: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

39 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

Acquisire da tastiera un numero naturale. Si considero il naturale acquisito come un numero di anno. Si visualizzi un messaggio che indica se l’anno è bisestile o meno.

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

40 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Scelta a 2 vie

#include <stdio.h> #include <stdlib.h>

int main() { int anno;

printf("Immetti un anno: "); scanf("%d", &anno); if (anno % 4 == 0 && anno % 100 != 0 || anno % 400 == 0)

printf("L'anno %d e' bisestile\n", anno); else printf("L'anno %d non e' bisestile\n",anno); system("pause"); return(0);

}

Page 21: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

41 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Scelta a più vie

if (espressione-1) istruzione-1; else if (espressione-2) istruzione-2; … else if (espressione-n) istruzione-n; else istruzione-n+1;

switch(espressione) { case exp-costante: istruzioni + break … case exp-costante: istruzioni + break default: istruzioni }

42 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

Acquisire da tastiera un carattere e visualizzare un messaggio che indica se il carattere acquisito è una lettera minuscola, una lettera maiuscola, una cifra o altro.

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Page 22: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

43 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Scelta a più vie

#include <stdio.h> #include <stdlib.h>

int main() { char c;

scanf(�%c�,&c); if (c >= '0' && c <= '9') printf(�Il carattere è una cifra�); else if (c >= 'A' && c <= 'Z') printf(�Il carattere è una lettera maiuscola�); else if (c >= 'a' && c <= 'z') printf(�Il carattere è una lettera minuscola�); else printf(�Il carattere non è alfanumerico�);

system("pause"); return(0);

}

44 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

Acquisire da tastiera un intero. Si consideri l’intero acquisito una cifra binaria. Si visualizzi un messaggio che indica come si pronuncia la cifra oppure un avvertimento per indicare che l’intero immesso non è una cifra binaria.

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Page 23: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

45 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Istruzione di selezione SWITCH

#include <stdio.h> #include <stdlib.h>

int main() { int num;

printf(�Inserisci una cifra binaria: �); scanf(�%d�,&num); switch(num) { case 0: printf(�%d si pronuncia zero\n�, num); break; case 1: printf(�%d si pronuncia uno\n�, num); break; default: printf(�%d non e‘ una cifra binaria\n�, num); } system("pause"); return(0);

}

46 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

Acquisire da tastiera un numero reale e visualizzare la sua parte frazionaria e la sua parte intera, se quest’ultima è diversa da zero

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Page 24: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

47 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

•  Acquisire da tastiera due numeri naturali. Si consideri i naturali acquisiti come il dividendo ed il divisore di una divisione. Visualizzare il quoziente intero ed il resto se il divisore è diverso da zero.

•  Acquisire da tastiera due numeri naturali. Si consideri i naturali acquisiti come il dividendo ed il divisore di una divisione. Visualizzare il quoziente intero ed il resto se il divisore è diverso da zero. Altrimenti visualizzare un messaggio di errore.

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

48 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Istruzioni iterative: WHILE, DO, FOR

•  while(espressione) istruzione;

•  do istruzione; while (espressione); •  for(exp1;exp2;exp3) istruzione;

Page 25: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

49 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

Acquisire da tastiera un numero naturale e visualizzare la più piccola potenza di 2 superiore al naturale acquisito.

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

50 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Istruzioni iterative: WHILE

#include <stdio.h> #include <stdlib.h>

int main() { int i, n;

printf(�Inserisci un intero: �); scanf(�%d�,&n); i=1; while(i <= n) i = i * 2; printf(�Minima potenza di 2 maggiore di %d: %d�,n,i); system("pause"); return(0);

}

Page 26: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

51 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

Acquisire da tastiera un numero naturale e visualizzare il naturale acquisito con le cifre invertite. Ad esempio se si acquisisce 165 si vuole visualizzare 561.

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

52 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Istruzioni iterative: WHILE

#include <stdio.h> #include <stdlib.h>

int main() { int n;

printf(" - INVERSIONE CIFRE - \n"); printf("Inserisci un numero positivo: "); scanf("%d",&n);

do { printf("%d", n%10);

n=n/10; } while(n > 0) system("pause"); return(0); }

Page 27: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

53 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

Acquisire da tastiera un numero naturale e visualizzare la quantità di cifre che costituiscono il naturale. Ad esempio, acquisendo 156 si vorrebbe visualizzare il numero 3.

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

54 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Istruzioni iterative: DO

#include <stdio.h> #include <stdlib.h>

int main() { int cifre = 0,n;

printf("Inserisci un numero positivo: "); scanf("%d",&n);

do { n = n / 10; cifre++;

} while(n > 0); printf(�Numero cifre: %d�, cifre); system("pause"); return(0);

}

Page 28: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

55 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

Acquisire da tastiera una successione di numeri naturali che termina con zero. Visualizzare il minimo tra naturali acquisiti (zero escluso).

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

56 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Istruzioni iterative: DO

#include <stdio.h> #include <stdlib.h>

int main() { int n,min = 0;

printf("Inserisci numeri interi (0 per terminare):\n"); do { printf("==> "); scanf("%d",&n); if(min == 0 || (n > 0 && n < min)) min = n; } while(n > 0); printf("Il minimo valore immesso e': %d\n",min);

system("pause"); return(0); }

Page 29: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

57 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

Acquisire da tastiera un numero naturale e visualizzare un messaggio che indica se il naturale acquisito è superiore rispetto al naturale con le cifre invertite. Ad esempio se si acquisisce 651 si vuole visualizzare un messaggio per indicare che 651 è superiore a 156.

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

58 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

•  Acquisire da tastiera una successione di due interi che termina con due interi positivi. Si consideri i due interi positivi acquisiti come il dividendo ed il divisore di una divisione. Visualizzare il quoziente intero della divisione.

•  Acquisire da tastiera una successione di due interi che termina con due interi positivi. Si consideri gli interi acquisiti come il dividendo ed il divisore di una divisione. Visualizzare il quoziente intero calcolato utilizzando esclusivamente operazioni di somma e sottrazione.

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Page 30: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

59 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

Acquisire da tastiera un numero naturale e visualizzare il suo fattoriale.

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

60 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Istruzioni iterative: FOR

#include <stdio.h>

#include <stdlib.h>

int main() {

int n, fatt = 1, i;

printf(�Immetti il numero n:�);

scanf(�%d�, &n);

for (i = 2; i <=n; i++)

fatt = fatt * i;

printf(�Fattoriale di %d: %d�, n, fatt);

system(�pause�);

return 0;

}

Page 31: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

61 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

Acquisire da tastiera un numero naturale e visualizzare la quantità dei suoi divisori.

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

62 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Istruzioni iterative: FOR

#include <stdio.h> #include <stdlib.h> int main() { int i,n; printf("Inserisci un intero positivo: "); scanf ("%d",&n); printf("\nI divisori di %d sono:\n", n);

for (i = 1; i <= n ; i++) if (n % i == 0) printf ("%d\n",i); system("pause");

return(0); }

Page 32: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

63 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

Acquisire da tastiera due naturali e visualizzare il loro minimo comune multiplo.

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

64 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Istruzioni iterative: FOR

#include <stdio.h> #include <stdlib.h> int main() { int num1, num2, max, mcm, i; printf("Inserisci due interi positivi: ");

scanf("%d",&num1); scanf("%d",&num2);

if (num1 > num2) max = num1; else max = num2; for (i = num1 * num2; i >= max ; i--) if ( i % num1 == 0 && i % num2 == 0) mcm = i; printf (�Minimo comune multiplo: %d", mcm); system("pause"); return(0); }

Page 33: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

65 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

Acquisire un numero naturale n e visualizzare una piramide di naturali tale per cui la piramide ha n righe e la i-esima riga della piramide è costituita da i cifre uguali ad i. Ad esempio per n = 3 si vuole visualizzare: 1 22 333

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

66 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Istruzioni iterative: Cicli Annidati

#include <stdio.h> #include <stdlib.h>

int main() { int i,j,n;

scanf(�%d�,&n); for (i=1; i <= n; i++) { for (j=1; j <= i; j++) printf(�%d�, i ); printf(�\n�); } system(�pause�); return 0;

}

1

22

333

Per n=3:

Page 34: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

67 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Istruzioni di salto: BREAK

scanf(�%d�, &n) for (i = 100; i > 0; i--) if(i % n == 0) break;

printf(�%d�, i);

scanf(�%d�, &n) for(i = 100; i > 0 && i % n != 0; i--);

printf(�%d�, i);

68 A.A. 2018/2019 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Astrazione sul Controllo Istruzioni di salto: CONTINUE

sum = n = 0; do {

scanf(�%d�, &i); if (i <= 0) continue; sum += i;

n++; } while (n < 10);

sum = n = 0; do { scanf(�%d�, &i); if (i > 0) { sum += i; n++; } } while (n < 10);

Page 35: Elementi di Informatica e Programmazione PROGRAMMAZIONE …didattica-saetti.unibs.it/didattica/contenuti/EIP/lucidi/3-Program... · Docente: A. Saetti Elementi di Informatica e Programmazione

69 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

Acquisire da tastiera 5 numeri naturali e dopo ciascuna acquisizione visualizzare quanti divisori ha il naturale acquisito

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

70 A.A. 2018/2019

Esercizi in Aula Scrivere dei programmi C per svolgere i seguenti compiti

•  Acquisire da tastiera 5 volte due numeri naturali. Si considerino i naturali acquisiti come il dividendo ed il divisore di una divisione. Dopo ciascuna acquisizione visualizzare il quoziente intero ed il resto.

•  Acquisire da tastiera una successione di naturali che termina con 0 e al termine delle acquisizione visualizzare la quantità di numeri primi acquisiti

Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia