Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1...

148

Transcript of Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1...

Page 2: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 3: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

switch-case,

switch,case,default

int_expr

constant-expr1

default

switch (int_expr)

{

case constant-expr1:

statement1

case constant-expr2:

statement2

case constant-exprN:

statementN

[default : statement]

}

Page 4: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

switch-case,

constant-expr1

int_expr

if, while

for,

• int_expr

statement {}

switch (int_expr)

{

case constant-expr1:

statement1

case constant-expr2:

statement2

case constant-exprN:

statementN

[default : statement]

}

Page 5: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

switch-case

expression

expression

constant-expr1

statement1,

case

default

expression

constant-expr2 …

default

switch (int_expr)

{

case constant-expr1:

statement1

case constant-expr2:

statement2

case constant-exprN:

statementN

[default : statement]

}

Page 6: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

switch-case

switch

scanf(“%c” , &a);

switch (a)

{case ‘A’: nA++;

case ‘E’: nE++;

case ‘O’: nO++;

default : nCons++;}

a==‘A’, nA,nE,nO,nCons;

a==‘E’, nE,nO,nCons;

a==‘O’, nO,nCons;

a==‘K’, Cons;

Page 7: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

switch-case

break

scanf(“%c” , &a);

switch (a)

{case ‘A’: nA++; break;

case ‘E’: nE++; break;

case ‘O’: nO++; break;

default : nCons++;}

a==‘A’, nA;

a==‘E’, nE;

a==‘O’, nO;

a==‘K’, Cons;

Page 8: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

switch-case

Page 9: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

#include<stdio.h>

int main ()

{

float op1, op2, tot;

char operazione;

int errore = 0;

printf ("Operazione (+,-,*,/): "); scanf ("%c", &operazione);

printf ("Primo operando: "); scanf ("%f", &op1);fflush(stdin);

printf ("Secondo operando: "); scanf ("%f", &op2);fflush(stdin);

switch (operazione)

{

case '+': tot = op1 + op2;

break;

case '-': tot = op1 - op2;

break;

case '*': tot = op1 * op2;

break;

case '/': if (op2 != 0)

{

tot = op1 / op2;

} else {

errore = 1;

}

break;

default: printf ("Operazione?\n");

errore = 1;

}

if (errore == 0)

printf ("Risultato: %f\n", tot);

else

printf ("Errore!\n");

return 0;

}

Page 10: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

switch-case

Page 11: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

#define N 100

#include<stdio.h>

int main()

{

int r,n8 = 0,n4 = 0,n2 = 0,n, i = 0,max;

int vet[N];

do

{

printf("\ninserire un numero: ");

scanf("%d",&vet[i]);

if (n>0)

{ r=n%8;

switch(vet[i])

{

// il numero è divisibile per 8

case 0:

n8++;

case 4:

n4++;

case 2:

n2++;

break;

case 6:

n2++;

}

i++; // incrementa il contatore

}

}while(vet[i -1]!=0 && i < N); // occhio che l'indice è stato incrementato

n = i;

printf("\n%d numeri,\nmult. di 8:%d \nmult. di 4:%d\nmult. di 2:%d\n\n",n, n8,n4,n2);

return 0;

}

TODO: modificare il programma

salvando i conteggi delle

occorrenze in un vettore e

stamparlo

TODO: modificare per stampare a

schermo l'istogramma delle

occorrenze

Page 12: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 13: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 14: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 15: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

Leggere coord. punto A

PERIM = LAB + LBC + LCA

LAB = distanza(A,B)LBC = distanza(B,C)LCA = distanza(C,A)

Leggere coord. punto B

Leggere coord. punto C

Coincidono (A,B)?

Coincidono (B,C)?

Coincidono (C,A)?

Allineati (A,B,C)?

sìno

no

no

no

Leggi: RISP

RISP = ‘s’ ?sì

Scrivi: “Triangolo

degenere”

INIZIO

Scrivi: PERIM

Scrivi: "Continuare? (s/n)"

FINE

Page 16: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

Leggere coord. punto A

PERIM = LAB + LBC + LCA

LAB = distanza(A,B)LBC = distanza(B,C)LCA = distanza(C,A)

Leggere coord. punto B

Leggere coord. punto C

Coincidono (A,B)?

Coincidono (B,C)?

Coincidono (C,A)?

Allineati (A,B,C)?

sìno

no

no

no

Leggi: RISP

RISP = ‘s’ ?sì

Raffinamento della lettura

dei valori delle coordinate

Raffinamento della valutazione

della condizione di triangolo

degenere

Raffinamento della valutazione

della condizione “Vuoi

continuare?”

Raffinamento del calcolo della

lunghezza dei lati e del

perimetro

Scrivi: “Triangolo

degenere”

INIZIO

Scrivi: PERIM

Scrivi: "Continuare? (s/n)"

FINE

Page 17: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

Leggere i valori delle coordinate dei vertici

Triangolo degenere?

Calcolare la lunghezza dei lati

Calcolare il perimetro come somma delle lunghezze

Vuoi continuare?

no

no

Scrivi: “Triangolo

degenere”

INIZIO

FINE

Scrivi il valore del perimetro

Page 18: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

Leggere i valori delle coordinate dei vertici

Triangolo degenere?

Calcolare la lunghezza dei lati

Calcolare il perimetro come somma delle lunghezze

Vuoi continuare?

no

no

Scrivi: “Triangolo

degenere”

INIZIO

FINE

Scrivi il valore del perimetro

Page 19: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

Page 20: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 21: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 22: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

Page 23: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 24: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 25: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

B. W. Kernighan D. M. Ritchie

Page 26: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 27: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

#include <stdio.h>

int main() {

char scelta;

int valore,risultato;

while(1) {/* menu */

printf("Premere A per inserire un num tra 0 e 10 e calcolarne il cubo\n");

printf("Premere B per inserire un num tra 11 e 20 e calcolarne il quadrato\n");

printf("Premere C per inserire un num tra 21 e 30 e calcolarne il doppio\n");

printf("Premere Q per uscire\n\n");

scanf(" %c",&scelta);

switch(scelta) {

case 'a':;

case 'A':

printf("Inserisci valore\n");

scanf("%d",&valore);

risultato=valore*valore*valore;

printf("risultato=%d\n\n",risultato);

break;

Page 28: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

case 'b':;

case 'B':

printf("Inserisci valore\n");

scanf("%d",&valore);

risultato=valore*valore;

printf("risultato=%d\n\n",risultato);

break;

case 'c':;

case 'C':

printf("Inserisci valore\n");

scanf("%d",&valore);

risultato=valore*2;

printf("risultato=%d\n\n",risultato);

break;

case 'q':;

case 'Q':

system("PAUSE");

return 0;

}

}

}

Page 29: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

#include <stdio.h>

void menu();

int main() {

char scelta;

int valore,risultato;

while(1) {

menu();

scanf("%c",&scelta);

………………………………………….

………………………………………….

}

void menu() {

printf("Premere A per inserire un num tra 0 e 10 e calcolarne il cubo\n");

printf("Premere B per inserire un num tra 11 e 20 e calcolarne il quadrato\n");

printf("Premere C per inserire un num tra 21 e 30 e calcolarne il doppio\n");

printf("Premere Q per uscire\n\n");

}

Page 30: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

char menu();

int main() {

char scelta;

int valore,risultato;

while(1) {

scelta=menu();

………………………

………………………

}

char menu() {

char ch;

printf("Premere A per un num tra 0 e 10 e calcolarne il cubo\n");

printf("Premere B per un num tra 11 e 20 e calcolarne il quadrato\n");

printf("Premere C per un num tra 21 e 30 e calcolarne il doppio\n");

printf("Premere Q per uscire\n\n");

scanf(" %c",&ch);

return ch;

}

Page 31: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

char menu();

int leggi();

int main() {

char scelta; int valore, risultato;

while(1) {

scelta = menu();

switch(scelta){

case 'a‘: case 'A':

valore=leggi();

risultato=valore*valore*valore;

printf("risultato=%d\n\n",risultato);

break;

……………………….

……………………….

}

}

int leggi() {

int v;

printf("Inserisci valore\n");

scanf("%d",&v);

return v;

}

Page 32: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int leggi(int min,int max) {

int v;

int ok=0;

while(!ok) {

printf("Inserisci valore\n");

scanf("%d",&v);

if(v>=min && v<=max)

ok=1;

}

return v;

}

Page 33: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

char menu();

int leggi(int min,int max);

int main() {

char scelta;

int valore,risultato;

while(1) {

scelta=menu();

switch(scelta){

case 'a‘: case 'A':

valore=leggi(0,10);

risultato=valore*valore*valore;

printf("risultato=%d\n\n",risultato);

break;

case 'b‘: case 'B':

valore=leggi(11,20);

risultato=valore*valore;

printf("risultato=%d\n\n",risultato);

break;

Page 34: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 35: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

<tipo restituito> <nome funzione>(<lista argomenti input>) {

<variabili locali>

<corpo della funzione>

}

Page 36: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

#include <stdio.h>

int main()

{

int i,n;

int primo;

for (i=1;i<=100;i++)

{

primo=1;

for (n=2;n<=i/2 && primo==1;n++)

if ((i%n)==0)

primo=0;

if (primo==1)

printf("%d\n",i);

}

}

Page 37: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

#include <stdio.h>

int main()

{

int i,n;

int primo;

for (i=1;i<=100;i++)

{

primo=1;

for (n=2;n<=i/2 && primo==1;n++)

if ((i%n)==0)

primo=0;

if (primo==1)

printf("%d\n",i);

}

}

i

i

primo

Page 38: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int verifica_primo(int numero){

int primo=1, n;

for (n=2;n<=numero/2 && primo==1;n++)

if ((numero%n)==0)

primo=0;

return primo;

}

Page 39: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

#include <stdio.h>

int main(){

int i,n;

int primo;

for (i=1;i<=100;i++){

primo=verifica_primo(i);

if (primo==1)

printf("%d\n",i);

}

}

Page 40: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

somma(a,b) a+b

<nome funzione>(<lista argomenti>),

<lista argomenti>

Page 41: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

return

return

Page 42: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int verifica_primo(int numero);

int main(){

int i;

for (i=1;i<=100;i++){

if (verifica_primo(i)==1)

printf("%d\n",i);

}

return 0;

}

Page 43: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int verifica_primo(int numero);

int main(){

int i;

for (i=0;i<100;i++){

if (verifica_primo(i+1)==1)

printf("%d\n",i+1);

}

return 0;

}

Page 44: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

controllaSePrimo

Page 45: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

#include <stdio.h>

#define L 10

int main()

{

int i, n, j=0, flag, vet[L], pri[L];

for(i = 0; i <L; i++){

printf("\ninserire vet[%d]:", i);

scanf("%d", &vet[i]);}

for(i = 0; i < L; i++){

flag=1;

for(n=2;n<= vet[i]/2 && flag==1;n++)

if((i%n)==0)

flag=0;

if(flag==1){

pri[j] = vet[i];

j++;

}

}

printf("\n[");

for(i = 0; i<j; i++)

printf("%d, ",pri[i]);

printf("]");

return 0;

}

Page 46: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int controllaSePrimo(int num)

{

int n, flag;

flag=1;

for(n=2; n<= num/2 && flag==1;n++)

if((num%n)==0)

flag=0;

return flag;

}

Page 47: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int main()

{

int i, j=0, flag, vet[L], pri[L];

for(i = 0; i <L; i++){

printf("\ninserire vet[%d]:", i);

scanf("%d", &vet[i]);}

for(i = 0; i <L; i++){

if(controllaSePrimo(vet[i])){

pri[j] = vet[i];

j++;

}

}

printf("\n[");

for(i = 0; i<j; i++)

printf("%d, ",pri[i]);

printf("]");

return 0;

}

Page 48: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

double power (double val, int pow) {

double ret_val = 1.0;

int i;

for (i = 0; i < pow; i++)

ret_val = ret_val * val;

return ret_val;

}

Page 49: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

result = power (valore, esponente);

void error_line (int line) {

printf ("Errore alla linea %d\n", line);

}

error_line (line_number);

Page 50: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 51: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

#include <stdio.h>

int power(int base, int n);

int main() {

int i;

for (i=0; i<10; i++)

printf("%d %d %d\n", i, power(2,i), power(3,i));

return 0;

}

int power(int base, int n) { /*base elevata a n*/

int i, p=1;

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

p=p*base;

return p;

}

Definizione di variabililocali alla funzione

dichiarazionedi funzione

definizionedi funzione

chiamatedi funzione

Page 52: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power(int base, int n) {

int i, p=1;

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

p=p*base;

return p;

}

testata

corpo

argomenti(parametri formali)

parte dichiarativa locale

parte esecutiva

Page 53: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

double power (double val, int pow) {

double ret_val = 1.0;

int i;

for (i = 0; i < pow; i++)

ret_val = ret_val * val;

return (ret_val);

}

Page 54: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

result = power(valore, esponente);

Page 55: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

float power (float v, int e) { ... ... }

result = power ((strlen(s)-3)*val), 2);

result = power ((power(6,9)-3)*val), 2);

Page 56: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int verifica_primo(int numero){

int n;

for (n=2;n<=numero/2 ;n++)

if ((numero%n)==0)

return 0;

return 1;

}

Valore di

ritorno

Page 57: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

return espressione;

Page 58: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 59: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

i

#include <stdio.h>

int power(int, int);

int main() {

int i;

for (i=0; i<10; i++)

printf("%d %d %d\n", i, power(2,i), power(3,i));

return 0;

}

int power( int base, int n ) { /* base intera elevata a n

intero */

int i, p=1;

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

p*=base;

return p;

}

Page 60: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

i

#include <stdio.h>

int power(int, int);

int main() {

int i;

for (i=0; i<10; i++)

printf("%d %d %d\n", i, power(2,i), power(3,i));

return 0;

}

int power( int base, int n ) { /* base intera elevata a n

intero */

int i, p=1;

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

p*=base;

return p;

}

Page 61: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

i

#include <stdio.h>

int power(int, int);

int main() {

int i;

for (i=0; i<10; i++)

printf("%d %d %d\n", i, power(2,i), power(3,i));

return 0;

}

int power( int base, int n ) { /* base intera elevata a n

intero */

int contatore, p=1;

for(contatore=1; contatore <=n; contatore++ )

p*=base;

return p;

}

Page 62: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 63: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

?

kmain

Page 64: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica( i, j );

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

?

kmain

?

x

?

y

?

rmolt

2 3

Page 65: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

?

k

2

x

3

y

6

r

main

molt

?

Page 66: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

?

k

2

x

3

y

6

r

main

molt

Page 67: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

?

k

6

main

Page 68: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k = power( i, j );

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

Page 69: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k = power( i, j );

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

?

b

?

e

?

ipow

1

p

Page 70: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k = power( i, j );

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

2

b

3

e

?

ipow

1

p

Page 71: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

2

b

3

e

1

ipow

1

p

Page 72: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

2

b

3

e

1

ipow

1

p

?

x

?

y

?

rmolt

Page 73: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

2

b

3

e

1

ipow

1

p

1

x

2

y

?

rmolt

Page 74: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

2

b

3

e

1

ipow

1

p

1

x

2

y

2

rmolt

?

Page 75: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

2

b

3

e

1

ipow

1

p

1

x

2

y

2

rmolt

Page 76: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

2

b

3

e

1

ipow

2

p

2

1

Page 77: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

2

b

3

e

2

ipow

2

p

Page 78: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

2

b

3

e

2

ipow

2

p

2

x

2

y

?

rmolt

Page 79: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

2

b

3

e

2

ipow

2

p

2

x

2

y

?

rmolt

4

4

Page 80: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

2

b

3

e

3

ipow

4

p

Page 81: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

2

b

3

e

3

ipow

4

p

4

x

2

y

?

rmolt

Page 82: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

2

b

3

e

3

ipow

4

p

4

x

2

y

?

rmolt

8

8

Page 83: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

2

b

3

e

4

ipow

8

p

Page 84: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

6

kmain

8

p

8

Page 85: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int power( int b, int e ) {

int i, p=1;

for( i=1 ; i<=e ; i++ )

p = moltiplica( p, b );

return p;

}int main() {

int i=2,j=3,k;

k=moltiplica(i,j);

k=power(i,j);

return 0;

}

int moltiplica( int x, int y ) {

int r;

r = x * y;

return r;

}

2

i

3

j

8

kmain

Page 86: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int RadiceIntera (int par) {

int cont = 0;

while (cont * cont <= par)

cont++;

return (cont – 1);

/* NB: se si arriva qui cont * cont è > par */

}

Page 87: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

x = sin(y) – cos(PI_GRECO – alfa);

/* PI_GRECO indica il valore costante */

x = cos( atan(y) – beta );

RisultatoDiGestione = FatturatoTotale( ArchivioFatture ) –

SommaCosti( ArchivioCosti );

OrdAlf = Precede( nome1, nome2 );

Page 88: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 89: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 90: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

#esempi

int sommaDivisori(int);

int controllaSePerfetto(int);

int controllaSePerfettoRef(int, int*);

int controllaSeAmici(int, int);

int leggiInteroPositivo();

Page 91: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 92: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 93: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 94: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 95: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 96: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

Stack pointer = 312312 312

311

310

303

...

• Operazione di inserimento:

- incremento SP

- scrittura in parola indirizzata da SP

• Operazione di estrazione:

- lettura da parola indirizzata da SP

- decremento SP

SP

Page 97: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

main()

f1() f2()

Chiama f1

variabili globali

r.d.a. di main()

r.d.a. di f1(1°)

r.d.a. di f2(1°)

r.d.a. di f1(2°)

r.d.a. di f2(2°)

...

Chiama f2

Chiama f1

ambiente

globaler.d.a. di f1(3°)

crescita

verso

l'alto

Page 98: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 99: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

Page 100: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int main()

{

int n, m, amici, perf, abb;

n = leggiInteroPositivo();

[…]

return 1;

}

int leggiInteroPositivo()

{

int x;

float f;

do

{

printf("\ninserire intero positivo: ");

scanf("%f", &f);

x = f; // casting implicito dato dall'assegnamento

}while(x<0 || x != f);

return x;

}

Lo scope delle variabili x ed f

corrisponde alla funzione leggiInteroPositivo()

Page 101: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

Page 102: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 103: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

void swap (int p, int q) {

int temp; /* var. locale */

temp = p;

p = q;

q = temp;

}

swap (i, j);

Page 104: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

void swap (int p, int q) {

int temp; /* var. locale */

temp = p;

p = q;

q = temp;

}

swap (i, j);

Page 105: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

void swap (int *p, int *q) {

int temp; /* var. locale */

temp = *p;

*p = *q;

*q = temp;

}

Page 106: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

void swap (int *p, int *q) {

int temp; /* var. locale */

temp = *p;

*p = *q;

*q = temp;

}

swap (&i, &j);

Page 107: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 108: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

void fiddle (int x, int * y) {

printf("Begin fiddle: x=%d, y=%d\n", x, *y);

x = x+1;

*y = *y+1;

printf("End fiddle: x=%d, y=%d\n", x, *y);

}

int main ( ) {

int i = 0, j = 0;

printf("Begin main: i=%d, j=%d\n", i, j);

fiddle(i, &j);

printf("Returned, ending main: i=%d, j=%d\n", i, j);

}

& fiddle (i, &j);

Due parametri: x (int) e y (punt. a int)

Page 109: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

Begin main: i=0, j=0

Begin fiddle: x=0, y=0

End fiddle: x=1, y=1

Returned, Ending main: i=0, j=1

Page 110: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 111: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 112: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 113: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int controllaSePerfettoRef(int x, int *abb);

1. abb

int abbondante;

controllaSePerfettoRef(7, &abbondante);

controllaSePerfettoRef

abb

*abb = 1;// risultato da inserire

abbondante

Page 114: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

*abb

res

Page 115: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

vet

v

Page 116: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int f (int par1) {

... (calcola valore

di variabile “risultato”) ...

return (risultato);

}

y = f (x);

void f (int par1, int * par2)

{

... (calcola valore di

variabile “risultato”)

...

*par2 = risultato;

}

f (x, &y);

Page 117: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 118: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

strcmp(s1, s2)

int mystrcmp( char s1[ ], char s2[ ] )

{

int i = 0;

while ( s1[i] == s2[i] && s1[i] != ‘\0’

)

++i;

return s1[i] – s2[i];

}

Page 119: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

#include<stdio.h>

#include<string.h>

#define N 30

int mystrcmp(char [], char []);

int main()

{

char s[N] = "ciao mamma";

char t[N] = "ciao";

printf("\nstrcmp(%s, %s) = %d", s, t, strcmp(s,t));

printf("\nmystrcmp(%s, %s) = %d", s, t, mystrcmp(s,t));

return 0;

}

int mystrcmp(char s1[], char s2[])

{

int i = 0;

while(s1[i] == s2[i] && s1[i] != '\0')

i++;

return s1[i] - s2[i];

}

Page 120: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

int mystrlen(char *);

int mystrlen_ref(char *);

int mystrlen(char *s)

{

int i = 0;

while(s[i]!='\0')

i++;

return i;

}

int mystrlen_ref(char *s)

{

char *q = s;

while(*(q++) != '\0');

return q-s-1;

}

Page 121: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 122: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

modificaArray(v,4);

void modificaArray(int vett[], int dim);

void modificaArray(int *vett, int dim);

void modificaArray(int vett[N], int dim);

Page 123: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

#include <stdio.h>

void modificaInt(int i);

void modificaArray(int vett[],int dim);

int main() {

int a = 0, i, v[4] = {0,1,2,3};

printf("Valori prima\n");

printf(" a = %d\n", a);

for (i=0; i<4; i++)

printf(" v[%d] = %d\n", i, v[i]);

printf("\nChiamo le funzioni...\n");

modificaInt(a);

modificaArray(v,4);

printf("\nValori dopo:\n");

printf(" a = %d\n", a);

for (i=0; i<4; i++)

printf(" v[%d] = %d\n", i, v[i]);

}

void modificaInt(int i) {

i = i + 100;

}

void modificaArray(int vett[],int dim) {

int i;

for (i=0; i<dim; i++)

vett[i] = vett[i] + 100;

}

Cosa stampa?

Page 124: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

#include <math.h>#include <stdio.h>#define N 5typedef struct { float x; float y; } punto;

float dist ( punto p1, punto p2 ) {return sqrt( pow(p1.x-p2.x, 2) + pow(p1.y-p2.y, 2) ); }

float perimetro ( punto poligono[], int dim ) {int i; float per = 0.0;for (i=1; i<dim; i++)

per = per + dist(poligono[i-1], poligono[i]);return per + dist(poligono[0], poligono[dim-1]); }

int main() {punto pol[N]; … acquisizione delle coordinate dei punti …

printf(“%d lati di lunghezza totale %f”, N, perimetro(pol, N));return 0;

}

Page 125: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

triangolo (Erone): A=sqrt(p*(p-a)*(p-b)*(p-c))

p: semiperimetro. a, b, c: misura dei lati A:area

float erone( punto p1, punto p2, punto p3 ) {punto tri[3]; float p;tri[0]=p1; tri[1]=p2; tri[2]=p3;p = 0.5 * perimetro(tri, 3);return sqrt(p*(p-dist(p3, p1))*(p-dist(p1, p2))*(p-dist(p2, p3))); }

float areapol( punto polig[], int dim ) {int i; float area = 0.0;for (i=2; i<dim; i++)

area = area + erone( polig[0], polig[i-1], polig[i] );return area;

} /* Così funziona solo con i poligoni convessi */

1

0

5

4

2

3

Page 126: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

float erone( punto p1, punto p2, punto p3 ) {

float p, a, b, c;

a = dist(p1, p2); b = dist(p2, p3); c = dist(p1, p3);

p = (a+b+c) / 2;

return sqrt(p*(p-a)*(p-b)*(p-c));

}

float areapol( punto polig[], int dim ) {

int i; float area = 0.0;

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

area = area + erone( polig[0], polig[i-1], polig[i] );

return area;

} /* Ancora funziona solo coi poligoni convessi */

1

0

5

4

2

3

Page 127: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

Modi di

passaggio

caratterisciche

per valore

("per copia")

per indirizzo

("per riferimento")

("per puntatore")

Tempo e spazio

necessari a trasferire

(copiare) i dati

grandi

(per parametri di

grandi dimensioni)

piccoli

(la dimensione dei puntatori è

fissa, non dipende dai dati)

C'è rischio di

effetti collaterali

indesiderati?

No

(i parametri attuale e

formale sono distinti)

(i parametri attuale e formale

"di fatto" coincidono)

Permette la

restituzione di

valori al chiamante?

No Sì

Page 128: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 129: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

/* n-1 rappresenta la posizione occupata dell'ultimo

elemento dell'array che contiene un valore significativo (la

"coda" da n+1 a DIMENSIONE non è considerata significativa)

*/

double sum(double a[], int n) {

int i;

double ris = 0.0;

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

ris = ris + a[i];

return ris;

}

Page 130: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

typedef double TipoArray [DIMENSIONE]

double sum (TipoArray a, int n)

double sum (double a[], int n)

double sum (double *a, int n)

sum(V, n) n

V[50]

sum (V, 50) V[0] + V[1] + … V[49]

sum (V, 30) V[0] + V[1] + … V[29]

sum (&V[0], 30) V[0] + V[1] + … V[29]

sum (&V[5], 7) V[5] + V[6] + … V[11]

sum (&V[0]+5,7) V[5] + V[6] + … V[11]

sum (V+5, 7) V[5] + V[6] + … V[11]

Page 131: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

f( UnTipo vet[] )

• UnTipo v[N];

• v[i] *(v+i)

− sizeof(UnTipo) N

f( UnTipo * vet )

vet[i]

Page 132: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

• UnTipo m[X][Y], c[X][Y][Z];

• m[i][j] *(*(m+i)+j) m + Y·i + j

− sizeof(Tipo) Y X

• c[i][j][k] *(*(*(c+i)+j)+k) c + Y·Z·i + Y·j + k

− sizeof(Tipo), Y Z X

g(UnTipo mat[][Y]) h(UnTipo cube[][Y][Z])

…g(m);

g(UnTipo * mat) h(UnTipo * cube)

mat[i][j] cube[i][j][k]

Page 133: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

#include<stdio.h>

#define N 30

void tabellina(int [][N], int);

void stampaTab(int [][N], int);

int main()

{

int tab[N][N], n;

do

{

printf("inserire quante tabelline: ");

scanf("%d", &n);

}while(n > N || n < 0);

tabellina(tab, n);

stampaTab(tab, n);

return 0;

}

Page 134: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

void tabellina(int t[][N], int n)

{

int i,j;

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

for(j = 0; j < n; j++)

t[i][j] = (i + 1) * (j + 1);

}

void stampaTab(int t[][N], int n)

{

int i,j;

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

{

for(j = 0; j < n; j++)

printf("%5d", t[i][j]);

printf("\n");

}

}

Page 135: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

'\0'

s1

void strcopia( char s1[], char s2[] ) {

int i = 0;

if ( s1 != NULL && s2 != NULL ) {

while ( s2[i] != '\0' ) {

s1[i] = s2[i];

i++;

}

s1[i] = '\0';

}

}

void strcopia2( char s1[ ], char s2[ ] ) {

while( s1 && s2 && ( *(s1++)=*(s2++) ) != '\0' )

;

}

/* …una versione assai più… "acrobatica"! */

/* "Bella", però… è codice "poco leggibile"*/

Page 136: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

void bubblesort (int param[], int size) {

for (i=0; i<size-1; i++)

porta in fondo il massimo in i..size-1

}

for ( j=0 ; j<size-1-i ; j++ )

if ( param[j] > param[j+1] )

swap( &param[j], &param[j+1] );

Attenzione: si usa la funzione swap passandole

gli indirizzi degli elementi da scambiare

Page 137: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

– Fornire un’astrazione completa dei numeri

complessi mediante dati e operazioni

– Prescindere dall’implementazione (trasparenza

delle scelte realizzative)

Page 138: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

#include <math.h> /* sqrt e fabs (radice e valore ass. di un float) */

typedef struct { float re;

float im; } nC;

void printC( nC z ) { /* a+bi è visualizzato come “ |a| |b| i ” */

char sre = '+', sim = '+';

if ( z.re < 0.0 )

sre = '–';

if ( z.im < 0.0 )

sim = '–';

printf(" %c %.2f %c %.2f i ", sre, fabs(z.re), sim, fabs(z.im));

}

float modulo( nC z ) {

return sqrt( z.re*z.re + z.im*z.im );

}

Page 139: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

nC costruisci( float r, float i ) { /* restituisce una struct di tipo nC */

nC temp;

temp.re = r;

temp.im = i;

return temp;

}

nC quadratoC( nC z ) { /* versione “funzionale” */

return costruisci( z.re * z.re – z.im * z.im , 2 * z.re * z.im )

}

void quadratoC2( nC z, nC *ris ) { /* versione “procedurale” */

ris->re = z.re * z.re – z.im * z.im;

ris->im = 2 * z.re * z.im;

}

Page 140: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

void leggiC( nC *z ) { /* versione “procedurale” */

printf("Parte reale : ");

scanf("%f", &(z->re));

printf("Parte immaginaria : ");

scanf("%f", &(z->im));

}

nC leggiC2() { /* versione “funzionale” */

nC temp;

printf("Parte reale : ");

scanf( "%f", &(temp.re));

return temp;

}

Page 141: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

nC somma( nC z, nC w ) { /* restituisce z+w */

return costruisci( z.re+w.re, z.im+w.im );

}

nC prodotto( nC z, nC w ) { /* restituisce z*w */

return costruisci( z.re * w.re – z.im * w.im,

z.re * w.im + z.im * w.re );

}

nC quoziente( nC z, nC w ) { /* restituisce z/w */

return costruisci (

(z.re*w.re + z.im*w.im) / (w.re*w.re + w.im*w.im) ,

(z.im*w.re – z.re*w.im) / (w.re*w.re + w.im*w.im)

);

}

Page 142: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

nC inverso( nC z ) { /* restituisce 1/z */

return quoziente( costruisci(1.0, 0.0), z );

}

nC potenzaIntera ( nC b, int e ) { /* restituisce be

*/

nC risult = costruisci(1.0, 0.0);

if ( e < 0 ) {

e = – e;

b = inverso( b );

}

for( ; e > 0; e-- )

risult = prodotto( risult, b );

return risult;

}

Page 143: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

typedef int Array [SIZE]; /* Parte dichiarativa globale */

typedef struct {

int actualSize; /* Dich. di tipo */

Array contents;

} Tabella;

int search(Tabella t, int k); /* Dich. funzione */

main() {

int i, pos, val;

Tabella myTab;

printf("dammi dimensione della tabella (inferiore a %d) : ", SIZE);

scanf("%d", &myTab.actualSize);

/*bisognerebbe controllare che sia < SIZE*/

for(i=0; i<myTab.actualSize; i++) {

printf("dammi un valore della tabella ");

scanf("%d", &myTab.contents[i]);

}

printf("dammi valore da cercare in tabella ");

scanf("%d", &val);

pos = search(myTab, val);

if (pos!=-1)

printf("elemento trovato in posizione %d \n", pos);

else

printf("valore non trovato in tabella\n");

}

int search (tabella t, int k) {

int n;

for(n = 0; n < t.actualSize; n++)

if (t.contents[n]==k)

return n;

return -1;

}

Page 144: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

Effetto dell’esecuzione di pos = search(myTab, val);

Passaggio parametri: copia di valori da un ambiente all’altro

Ambiente locale di searchAmbiente del main

myTab

val

actualSize

contents

pos

i

t

k

n

Page 145: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

void insert (tabella t, int el) {

if (t.actualSize<SIZE) {

t.contents[t.actualSize]=el;

t.actualSize++;

}

}

Che cosa succede nel caso della chiamata?

insert(myTab, 27);

la copia locale della tabella è distrutta al termine

dell'esecuzione della procedura, e la tabella del main resta

immutata

Page 146: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)
Page 147: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

&

Page 148: Informatica B -Corso Boracchi · 2020. 10. 27. · switch-case expression expression constant-expr1 statement1, case default expression constant-expr2 …default switch (int_expr)

t

el

Ambiente locale di insertAmbiente del main

myTab

elem

actualSize

contents

insert(&myTab, int elem); /* Chiamata*/

void insert (tabella * t, int el) { /* Definizione della procedura insert */

if (t–>actualSize<SIZE) {

t–>actualSize++;

t–>contents[actualSize-1] = el;

}

}