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
Embed
Elementi di Informatica e Programmazione PROGRAMMAZIONE C ... · Elementi di Informatica e Programmazione - Dispensa IV - PROGRAMMAZIONE C (Parte II) Alessandro Saetti (email:...
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
1 A.A. 2015/2016 Docente: A. Saetti Elementi di Informatica e Programmazione – Università di Brescia
Elementi di Informatica e Programmazione - Dispensa IV -
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];
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);
}
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);
}
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
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);
}
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
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
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;
}
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 */ }
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; }
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; }
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; }
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; } }
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; } } }