Top Banner
1 A.A. 2015/2016 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: [email protected] ) Università degli Studi di Brescia A.A. 2016/2017 2 A.A. 2015/2016 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia Vettori e Matrici di variabili tipo-dato identificatore[dimensione]; tipo-dato identificatore[dim1][dim2];
26

Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email:...

Sep 28, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

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

Elementi di Informatica e Programmazione - Dispensa IV -

PROGRAMMAZIONE C (Parte II)

Alessandro Saetti (email: [email protected])

Università degli Studi di Brescia A.A. 2016/2017

2 A.A. 2015/2016 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Vettori e Matrici di variabili

•  tipo-dato identificatore[dimensione];

•  tipo-dato identificatore[dim1][dim2];

Page 2: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

3 A.A. 2015/2016 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Vettori di variabili #include <stdio.h> #include <stdlib.h> #define DIM 50

int main() { int i, n = 0, num[DIM];

printf(�Immetti al piu' 50 interi (0 per terminare):�); do { scanf("%d", &num[n]); n++; } while (n < DIM && num[n-1] != 0); if (num[n-1] == 0) n--; for(i = n - 1; i >= 0; i--) printf(�%d\n�,num[i]);

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

4 A.A. 2015/2016 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Vettori di variabili #include <stdio.h> #include <stdlib.h> #define DIM 10

int main() { int vet[DIM], i, max, posmax;

for (i=0; i <DIM; i++) vet[i]=rand() % 101 - 50; max = vet[0]; posmax = 0; for (i=1; i <DIM; i++)

if(vet[i] > max) { max = vet[i]; posmax = i; } printf("\nMassimo %d in posizione %d\n", max,posmax); system("pause"); return(0);

}

Page 3: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

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

Vettori di variabili #include <stdio.h> #include <stdlib.h> #define DIM 10

int main() { int cifre[DIM] = {0}, i, n, resto;

printf("Inserisci un numero intero: "); scanf("%d", &n); while(n > 0) {

resto = n % 10; cifre[resto]++; n = n / 10; } for(i=0;i<DIM;i++) printf(�#%d:%d\n",i,cifre[i]); system("pause");

return(0); }

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

Vettori di Variabili #include <stdio.h> #include <stdlib.h> #define DIM 20

int main () { int vet[DIM], i, j, min = 100, mcd, num_divisibili;

for (i = 0; i < DIM; i++) vet[i] = rand() % 91 + 10;

for (i=0; i < DIM; i++) if (min > vet[i]) min = vet[i];

for (j = 1; j <= min; j++) { num_divisibili = 0;

for (i = 0; i < DIM ; i++) if ( vet[i] % j == 0) num_divisibili++; if (num_divisibili == DIM) mcd = j; } printf("\nIl massimo comune divisore e' %d\n\n", mcd); system("pause"); return(0);

}

Page 4: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

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

Vettori di variabili #include <stdio.h> #include <stdlib.h> #define MAX 100000

int main() { int primi[MAX], i, j, maxnum, div, n_primi=0;

printf("\nInserisci un numero (positivo e minore di %d):", MAX); scanf("%d", &maxnum); for (i=2; i<=maxnum; i++) {

div = 0; for (j=0; j < n_primi && primi[j] * primi[j] <= i && div==0; j++) {

if (i % primi[j] == 0) div++; } if (div == 0) {

printf("%d ",i); primi[num_primi] = i; n_primi++;

} }

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

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

Vettori di variabili #include <stdio.h> #include <stdlib.h> #define DIMR 5 #define DIMC 9

int main() { int i, j , mat[DIMR][DIMC];

for (i = 0; i < DIMR; i++) { for (j = 0; j < DIMC; j++) { mat[i][j] = (rand() % 16) - 3; printf("%d\t",mat[i][j]); } printf("\n"); } for (i=0; i<DIMC; i++) { for (j = 0; j < DIMR; j++) printf("%d\t",mat[j][i]); printf("\n"); } system("pause");

return(0); }

Page 5: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

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

Matrici di variabili #include <stdio.h> #include <stdlib.h> #define DIMR 5 #define DIMC 9

int main() { int mat[DIMR][DIMC], i, j, pos_per_colonna; int max_per_colonna=0, BestColonna;

for (i=0; i < DIMR; i++) { for (j=0; j < DIMC; j++) { mat[i][j] = (rand() % 121) - 60; printf("%d\t", mat[i][j]); } printf("\n"); } /* Continua nel prossimo lucido */

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

Matrici di variabili for (i=0; i < DIMC; i++) { pos_per_colonna = 0; for (j=0; j < DIMR; j++) if ( mat[j][i] > 0 ) pos_per_colonna++; if (pos_per_colonna > max_per_colonna) { max_per_colonna = pos_per_colonna; BestColonna = i; } } printf("\n\nColonna con più numeri positivi\n", BestColonna); for (i=0; i < DIMR; i++) printf("%d\n", mat[i][BestColonna]);

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

}

Page 6: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

11 A.A. 2015/2016

Puntatori

•  tipo-dato *identificatore;

•  Inizializzati con NULL oppure l’indirizzo di una variabile (tramite l’operatore &)

•  L’operatore * permette di riferirsi alla variabile puntata

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

12 A.A. 2015/2016

Operazioni su Stringhe int puts(const char *str) char *gets(char *s); int getchar(void); int strlen(const char *s); char *strcpy(char *s1, const char *s2); char *strncpy(char *s1, const char *s2, int n); char *strcat(char *s1, const char *s2); char *strncat(char *s1, const char *s2, int n); int strcmp(const char *s1, const char *s2);

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

Page 7: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

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

Leggere una stringa #include <stdio.h> #include <stdlib.h> #define DIM 10

int main() { int ch, i = 0; char str[DIM];

while ((ch = getchar()) != '\n') if (i < DIM - 1) str[i++] = ch; str[i] = '\0'; printf("\nLa stringa acquisita e': %s", str); system("pause");

return(0); }

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

Uso di Stringhe #include <stdio.h> #include <stdlib.h> #define DIM 50

int main() { int i; char frase[DIM];

gets(frase); for (i=0; i<DIM; i++) {

if (frase[i] >= 'A' && frase[i] <= 'Z') frase[i]+=32; else if (frase[i] >= 'a' && frase[i] <= 'z') frase[i]-=32; } printf("%s\n", frase); system("pause"); return(0);

}

Page 8: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

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

Uso di Stringhe #include <stdio.h> #include <stdlib.h> #define DIM 50

int main() { int i, count=0; char trova, parola[DIM];

scanf(�%50s�, parola); scanf("%c", &trova); for (i = 0; i < DIM && parole[i] != '\0'; i++)

if (parola[i] == trova) { printf(" - trovato %c in posizione %d\n", parola[i], i); count++; } printf("\n - trovate %d occorrenze\n", count); system("pause"); return(0);

}

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

Uso di Stringhe #include <stdio.h> #include <stdlib.h> #define DIM 50 #define LETTERE 26

int main() { char parola[DIM]; int i, n, cifre[LETTERE] = {0};

scanf("%s", parola); for(i = 0; i < DIM && parola[i] != '\0';i++) cifre[parola[i]-'a']++; for (i=0;i<LETTERE;i++) printf(�Occorrenze di %c: %d ", 'a'+i, cifre[i]); printf("\n"); system("pause"); return(0);

}

Page 9: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

17 A.A. 2015/2016

Definizioni e Chiamate a funzione

•  tipo-restituito nome-funzione (parametri) { dichiarazioni istruzioni }

•  return espressione; oppure return;

•  nome-funzione(argomenti);

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

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

Definizioni e Chiamate a funzione #include <stdio.h> #include <stdlib.h>

float calcola_media (float a, float b) { float somma;

somma = a + b; return (somma / 2);

}

int main() { float x, y, media;

scanf("%f%f", &x, &y); media = calcola_media(x, y); if (calcola_media(x,y) > 0) (void) printf("\nMedia positiva"); printf("\n%f", calcola_media(x,y)); system("pause"); return(0);

}

Page 10: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

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

Dichiarazioni di funzione #include <stdio.h> #include <stdlib.h>

float calcola_media (float a, float b);

int main() { float x, y, media;

scanf("%f%f", &x, &y); media = calcola_media(x, y); if (calcola_media(x,y) > 0) (void) printf("\nMedia positiva"); printf("\n%f", calcola_media(x,y)); system("pause"); return(0);

}

float calcola_media (float a, float b) { float somma;

somma = a + b; return (somma / 2);

}

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

Passaggio per valore #include <stdio.h> #include <stdlib.h>

float potenza (float base, int esp) { float y = 1.0;

for (; esp > 0; esp--) y *= base; return y;

}

int main() { int e; float b, r;

scanf("%f%d", &b, &e); r=potenza(b, e); printf("Potenza di %.2f alla %d: %.2f\n", b, e, r); system("pause"); return(0);

}

Page 11: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

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

Passaggio per indirizzo o riferimento #include <stdio.h> #include <stdlib.h>

void decomponi(float x, int *parte_int, float *parte_fraz) { *parte_int = (int) x; *parte_fraz = x - *parte_int;

}

int main() { int i = 0; float f = 0.0, num;

scanf("%f", &num); decomponi(num, &i, &f); printf("Parte intera di %.2f: %d\n", num, i); printf("Parte frazionaria di %.2f: %.2f\n", num, f); system("pause"); return(0);

}

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

Argomenti costituiti da vettori #include <stdio.h> #include <stdlib.h> #define DIM 10

int calc_max(const int v[], int n) { int i, max;

max = v[0]; for (i=1; i < n; i++) if (v[i] > max) max = v[i]; return max;

}

void inizializza_vet(int v[], int n, int min, int max) { int i;

for (i=0; i < n; i++) v[i] = (rand()%(max-min+1)) + min; }

Page 12: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

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

Argomenti costituiti da vettori void stampa_vet(const int v[], int n) { int i;

for (i=0; i < n; i++) printf("\n%d", v[i]); }

int main() { int vett[DIM];

inizializza_vet(vett, DIM, 10, 100); stampa_vet(vett, DIM); printf("\nIl massimo e': %d\n", calc_max(vett, DIM));

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

}

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

Argomenti costituiti da matrici #include <stdio.h> #include <stdlib.h> #define DIMR 10 #define DIMC 20

int calc_max(const int m[][DIMC], int n) { int i, j, max;

max = m[0][0]; for (i = 0; i < n; i++) for (j = 0; j < DIMC; j++) if (m[i][j] > max) max = m[i][j]; return max;

}

void inizializza_mat(int m[][DIMC], int n, int min, int max) { int i, j;

for (i = 0; i < n; i++) for (j = 0; j < DIMC; j++) m[i][j] = (rand()%(max-min+1)) + min;

}

Page 13: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

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

Argomenti costituiti da matrici void stampa_mat(const int m[][DIMC], int n) { int i;

for (i=0; i < n; i++) { for (j = 0; j < DIMC; j++) printf("%d\t", m[i][j]); printf("\n");

} }

int main() { int matt[DIMR][DIMC];

inizializza_mat(matt, DIMR, 10, 100); stampa_vet(matt, DIMR); printf("\nIl massimo e': %d\n", calc_max(matt, DIMR));

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

}

26 A.A. 2015/2016

Argomenti costituiti da stringhe

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

int ConfrantaStringhe (char str1[], char str2[]) { int i;

for (i = 0; str1[i] != ‘\0’ && str2[i] != ‘\0’; i++) if (str1[i] < str2[i]) return -1; else return 1; if (str1[i] != ‘\0’) return 1; else if (str2[i] != ‘\0’) return -1; else return 0; }

Page 14: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

27 A.A. 2015/2016

Restituire puntatori char *ConcatenaStringhe(char str1[], char str2[]) { int i, j;

for (i = 0; str1[i] != ‘\0’; i++);

for (j = 0; str2[j] != ‘\0’; j++) str1[i + j] = str2[j]; str2[j] = ‘\0’;

return str1; }

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

28 A.A. 2015/2016

Durata di Memorizzazione e Scope

•  Durata di memorizzazione: porzione del flusso di esecuzione durante cui la variabile è allocata – Automatica – Statica

•  Scope: porzione del codice durante il quale la variabile è visibile –  di blocco –  di funzione –  di file/progetto

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

Page 15: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

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

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

int parte intera; /* variabili globali*/ float parte_fraz;

void decomponi(float x) { parte_intera = (int) x; parte_fraz = x - parte_intera;

}

int main() { float x;

scanf("%f", &x); decomponi(x); printf("Parte intera di %.2f: %d\n", x, parte_intera); printf("Parte frazionaria di %.2f: %.2f\n", x, parte_fraz); system("pause"); return(0);

}

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

Scope int i; /* dichiarazione 1 */ void f (int i) { /* dichiarazione 2 */ i = 1;

} void g (void) { int i = 2; /* dichiarazione 3 */ if (i > 0) { int i; /* dichiarazione 4 */ i = 3; } i = 4;

} void h(void) { i = 5;

}

Page 16: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

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

Operazioni su sequenze: Stampa

void stampa(int vet[], int n) { int i;

for (i = 0; i < n; i++) printf("%d ", vet[i]); }

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

Operazioni su sequenze Ricerca completa

int cerca(int vet[], int n, int num) { int i;

for(i = 0; i < n; i++) { if (vet[i] == num) { return i; /* Elemento trovato */ } } return –1; /* Elemento non trovato */ }

Page 17: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

33 A.A. 2015/2016 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Operazioni su sequenze ordinate Ricerca binaria

int cerca(int vet[], int n, int num) { int i, inizio = 0, fine = n - 1;

do { i = (inizio + fine) / 2; if (vet[i] == num) return i; else if (vet[i] < num) inizio = i + 1; else fine = i – 1; } while (inizio <= fine); return –1; /* Elemento non trovato */

}

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

Operazioni su sequenze Inserimento all'inizio

int inserimento_inizio(int vet[], int n, int nuovo) { if (n < DIM) { vet[n++] = vet[0]; vet[0] = nuovo; } else printf("\nWarning: Array is full"); return n; }

Page 18: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

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

Operazioni su sequenze Inserimento alla fine

int inserimento_fine(int vet[], int n, int nuovo) { if (n < DIM) vet[n++] = nuovo; else printf("\nWarning: Array is full"); return n; }

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

Operazioni su sequenze ordinata Inserimento diretto

int inserimento_diretto (int vet[], int n, int nuovo) { int i, j;

for (i = 0; i < n && vet[i] < nuovo; i++); for (j = n; j > i; j--) vet[j] = vet[j-1]; vet[i] = nuovo; return ++n; }

Page 19: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

37 A.A. 2015/2016 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Operazioni su sequenze Cancellazione

int cancellazione(int vet[], int n, int num) { int pos = cerca(vet, n, num);

if (pos >= 0) { vet[pos] = vet[n-1]; n--; } else printf("\nWarning: Number not found"); return n; }

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

Operazioni su sequenze ordinate Cancellazione

int cancellazione(int vet[], int n, int num) { int i, pos = cerca(vet, n, num);

if (pos >= 0) { for (i = pos; i < n - 1; i++) vet[i] = vet[i+1];

n--; } else printf("\nWarning: Number not found"); return n; }

Page 20: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

39 A.A. 2015/2016 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Operazioni su sequenze ordinate Fusione

int fusione(int v1[], int v2[], int v3[], int n1, int n2) { int i=0, j=0, k=0;

do { if (i < n1 && (j == n2 || v1[i] <= v2[j])) v3[k++] = v1[i++]; else //if (j < n2 && (vet1[i] > vet2[j] || i == n1))

v3[k++] = v2[j++]; } while (i < n1 || j < n2); return k; }

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

Operazioni su sequenze Ordinamento per inserimento diretto

void ordinamento_diretto(int vet[], int n) { int i, j, x;

for (i = 1; i < n; i++) { x = vet[i]; for (j = i-1; j >= 0 && x < vet[j]; j--) vet[j+1] = vet[j]; vet[j+1] = x; } }

Page 21: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

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

Operazioni su sequenze Ordinamento per selezione

void ordinamento_selezione(int vet[], int n) { int i, j, k, x;

for (i = 0; i < n-1; i++) { k = i; x = vet[i]; for (j = i + 1; j < n; j++) { if (vet[j] < x) {

k = j; x = vet[j]; } } vet[k] = vet[i]; vet[i] = x; }

}

42 A.A. 2015/2016 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Operazioni su sequenze Ordinamento bubble-sort

void ordinamento_a_bolle(int vet[], int n) { int i, j, x;

for (i = 0; i < n - 1; i++) { for (j = n - 1; j > i; j--) { if (vet[j-1] > vet[j]) { x = vet[j-1]; vet[j-1] = vet[j]; vet[j] = x; } } }

}

Page 22: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

43 A.A. 2015/2016

Variabili Struttura

•  struct { dichiarazione variabili membro; } identificatori;

•  Operatori per strutture:

–  id.id

–  id -> id

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

44 A.A. 2015/2016

Etichettare e Definire Nuovi Tipi di Strutture

•  struct tag { dichiarazione variabili membro; } identificatori;

•  typedef struct { dichiarazione variabili membro; } nome_tipo;

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

Page 23: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

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

Operazioni su strutture Ricerca completa

int cerca(Cronometro c[], int n, char trova[]) { int i;

for(i = 0; i < n; i++) if (strcmp(c[i].nome, trova) == 0) return i; /* Elemento trovato */ return -1; /* Elemento non trovato */

}

46 A.A. 2015/2016 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Operazioni su strutture Stampa dato

void stampa_tempo(Cronometro c[], int n, char nome[]) { int i;

i = cerca(c, n, nome); if (i >= 0) printf("\n%.2f", c[i].tempo); else printf("\nNome non trovato!"); }

Page 24: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

47 A.A. 2015/2016 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Operazioni su strutture Inserimento diretto

int inserimento_diretto (Cronometro c[], int n, char nome[], float tempo) {

int i, j;

for (i=0; i<n && strcmp(c[i].nome, nome)<0; i++); for (j = n; j > i; j--) c[j] = c[j-1]; strcpy(c[i].nome, nome); c[i].tempo = tempo; return ++n;

}

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

Operazioni su strutture Cancellazione

int cancellazione(Cronometro c[], int n, char nome[]) { int i, pos = cerca(c, n, nome);

if (pos >= 0) { for (i = pos; i < n - 1; i++) c[i] = c[i+1]; n--; } else printf("\nWarning: Number not found"); return n; }

Page 25: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

49 A.A. 2015/2016

Unioni e Enumerazione

•  union { dichiarazione variabili membro; } identificatori;

•  enum {costanti_di_enum} identificatori;

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

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

Unioni Aggiungere un campo etichetta

#include <stdio.h>

#include <stdlib.h> #define INT 0 #define FLOAT 1 typedef struct { int tipo; union { int i; double d; } u;

} Numero;

Page 26: Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email: alessandro.saetti@unibs.it)

51 A.A. 2015/2016 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia

Unioni Aggiungere un campo etichetta

void stampa_numero(Numero n) { if (n.tipo == INT) printf(�%d�, n.u.i); else printf(�.2f�, n.u.d);

}

int main() { Numero n; n.tipo = INT; n.u.i = 12;

stampa_numero(n); system(�pause�); return 0;

}