Programmazione I - Laboratorio
|
|
|
- Oliviero Rinaldi
- 9 anni fa
- Просмотров:
Транскрипт
1 Programmazione I - Laboratorio Esercitazione 3 - Array Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa mezzetti mezzetti di.unipi.it 2. Dipartimento di Informatica, Università di Pisa milazzo milazzo di.unipi.it Corso di Laurea in Informatica A.A. 2012/2013 G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
2 Array (1) Un array (o vettore) consente di memorizzare tanti valori dello stesso tipo in un unica semplice struttura dati Un array (di interi) di dimensione 10 si dichiara come segue int a [10]; Tale dichiarazione alloca un area di memoria pari alla dimensione di 10 interi. Con la notazione a[i] si può far riferimento all i-esimo elemento dell array Gli indici degli array vanno da 0 alla dimensione-1, quindi identifichiamo i 10 elementi di a con le seguenti espressioni a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
3 Array (2) I singoli elementi degli array possono essere acceduti ed assegnati come normali variabili. Ad esempio, il seguente programma inizializza un array a di 10 elementi con i numeri da 1 a 10 e poi copia il contenuto di a nell array b che ha la stessa dimensione int main () /* dichiaro due array di interi di dimensione 10 */ int a [10], b [10]; int i; /* inizializzo a */ for (i =0; i <10; i ++) a[ i] = i; /* copio a in b */ for (i =0; i <10; i ++) b[i] = a[i]; return 0; G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
4 Array (3) ATTENZIONE!!! Molto spesso (soprattuto quando si usano cicli per scorrere gli elementi di un array) può capitare di commettere l errore di accedere un array usando un indice negativo o maggiore della dimensione dell array. Questo errore non viene controllato dal compilatore! In fase di esecuzione il programma accedere ad aree di memoria che non hanno nulla a che fare con l array (altre variabili, aree di memoria non allocate, ecc...) con effetti impredicibili. Esempio di errore nell uso dell indice: int a [10]; int i; for (i =0; i <=10; i ++) /* errore <= */ a[ i] = i; questo frammento di codice accede ad a[10] che è fuori dell area di memoria allocata per l array G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
5 Array bidimensionali (matrici) E anche possibile definire array bidimensionali (array di array, o matrici) come nel seguente esempio /* Tabella delle moltiplicazioni */ # include <stdio.h> int main () /* dichiarazione di matrice 10 x10 */ int moltiplicazioni [10][10]; int i, j; /* inizializzazione */ for (i =0; i <10; i ++) for (j =0; j <10; j ++) moltiplicazioni [i][j] = (i +1)*( j +1); /* stampa lineare */ for (i =0; i <10; i ++) for (j =0; j <100; j ++) printf ("%3d ", moltiplicazioni [i ]); printf ("\n"); /* stampa */ for (i =0; i <10; i ++) G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
6 Esempio svolto - array casuale.c Scrivere un programma che crei casualmente un array di 23 interi, lo stampi a video, lo modifichi azzerando tutti gli elementi in posizione di indice pari e quindi stampi l array modificato. Usare la funzione rand() della libreria standard (includendo stdlib.h) che genera interi casuali G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
7 Esempio svolto - array casuale.c I # include <stdio.h> # include < stdlib.h> /* per usare rand () e srand () */ # include <time.h> /* per usare time () */ # define SIZE 23 int main () int a[ SIZE ]; int i; /* stampa il massimo numero generabile da rand () */ /* printf ("% d\n", RAND_MAX ); */ /* inizializza il generatore di numeri casuali usando l orologio di sistema */ srand ( time (0)); for (i =0; i< SIZE ; i ++) a[i] = rand (); printf ("a[%d] = %d\n",i,a[i ]); for (i =0; i< SIZE ; i=i +2) a[ i] = 0; G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
8 Esempio svolto - array casuale.c II for (i =0; i< SIZE ; i ++) printf ("a[%d] = %d\n",i,a[i ]); G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
9 Esercizio - array ordinato.c Scrivere un programma che crei un array di 7 interi forniti dall utente, controlli se l array e ordinato in ordine strettamente descrescente e stampi a video sia l array che il risultato ( E ordinato oppure Non e ordinato: X dove X e la posizione del primo elemento fuori ordine). G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
10 Esercizio - array ordinato.c I # include <stdio.h> # define DIM 7 int main () int a[ DIM ]; int i; int ordinato =1; /* inizializzo a */ for (i =0; i<dim ; i ++) printf (" inserisci a[%d]: ",i); scanf ("%d",&a[i ]); /* stampo a */ for (i =0; i<dim ; i ++) printf ("a[%d]=% d\n",i,a[i ]); /* controllo se a e ordinato */ i =0; while ((i<dim -1)&&( ordinato )) /* nota DIM -1 */ if (a[i]<=a[i +1]) ordinato =0; i ++; G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
11 Esercizio - array ordinato.c II /* stampo il messaggio di output */ if ( ordinato ) printf ("E ordinato \n"); else printf (" Non e ordinato % d\ n",i); return 0; G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
12 Esercizio - array min min.c Scrivere un programma che crei un array di 9 interi forniti dall utente e determini (se c e ) la posizione del primo elemento che e minore della somma degli elementi che lo precedono e la posizione del primo elemento che e minore della somma degli elementi che lo seguono. G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
13 Esercizio - array min min.c I /* Calcolo di elemento minore della somma dei precedenti e seguenti */ # include <stdio.h> # define DIM 9 int main () int i; int a[ DIM ]; int somma ; int posizione ; for (i =0; i<dim ; i ++) printf (" Inserisci a[%d]: ",i); scanf ("%d",&a[i ]); i =0; somma =0; posizione = -1; while ((i<dim )&&( posizione <0)) if (a[i]< somma ) posizione =i; else G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
14 Esercizio - array min min.c II somma = somma +a[i]; i=i +1; if ( posizione >=0) printf (" Primo elemento minore della somma dei precedenti "); printf ("in posizione %d\n",posizione ); else printf (" Elemento minore della somma dei precedenti "); printf (" non trovato \n"); somma =0; posizione = -1; for (i=dim -1; i >=0; i - -) if (a[i]< somma ) posizione =i; somma = somma +a[i]; if ( posizione >=0) G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
15 Esercizio - array min min.c III printf (" Primo elemento minore della somma dei successivi "); printf ("in posizione %d\n",posizione ); else printf (" Elemento minore della somma dei successivi "); printf (" non trovato \n"); return 0; G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
16 Esercizio - ordinamento.c Scrivere un programma che crei casualmente un array di 13 interi, lo stampi a video, lo ordini con ordinamento crescente e quindi lo stampi a video nuovamente. G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
17 Esercizio - ordinamento.c I # include <stdio.h> # include < stdlib.h> /* per usare rand () e srand () */ # include <time.h> /* per usare time () */ # define DIM 13 int main () int a [13]; int i, j; /* inizializza il generatore di numeri pseudo - casuali */ srand ( time (0)); /* inizializza e stampa l array */ for (i =0; i<dim ; i ++) a[i] = rand (); printf ("a[%d] = %d\n",i,a[i ]); /* cicla per ogni posizione dell array ( tranne l ultima ) */ for (i =0; i<dim -1; i ++) int pos_minimo =i; int tmp ; G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
18 Esercizio - ordinamento.c II /* seleziona il minimo tra i successori di a[ i] */ for (j=i +1; j<dim ; j ++) if (a[j]<a[ pos_minimo ]) pos_minimo = j; /* mette il minimo in posizione i */ if ( i!= pos_minimo ) tmp = a[i]; a[ i]=a[ pos_minimo ]; a[ pos_minimo ]= tmp ; /* stampa l array ordinato */ printf (" ARRAY ORDINATO :\n"); for (i =0; i<dim ; i ++) printf ("a[%d] = %d\n",i,a[i ]); G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
19 Esercizio - prodotto vettori.c Scrivere un programma che chieda all utente due array di 3 elementi e quindi calcoli la matrice 3 per 3 risultato del prodotto riga per colonna dei due array. Il programma dovra quindi stampare a video la matrice e la sua diagonale. G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
20 Esercizio - prodotto vettori.c I # include <stdio.h> # define DIM 3 int main () int a[ DIM ],b[ DIM ],m[ DIM ][ DIM ]; int i, j; /* legge il primo array */ for (i =0; i<dim ; i ++) printf ("a[%d] = ",i); scanf ("%d",&a[i ]); /* legge il secondo array */ for (i =0; i<dim ; i ++) printf ("b[%d] = ",i); scanf ("%d",&b[i ]); /* calcola il prodotto riga per colonna */ for (i =0; i<dim ; i ++) for (j =0; j<dim ; j ++) m[i][j] = a[i]*b[j]; G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
21 Esercizio - prodotto vettori.c II /* stampa il risultato */ printf (" MATRICE :\n"); for (i =0; i<dim ; i ++) for (j =0; j<dim ; j ++) printf (" %6d ",m[i][j]); printf ("\n"); /* stampa la diagonale */ printf (" DIAGONALE :\n"); for (i =0; i<dim ; i ++) printf ("%d\n",m[i][i]); G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
22 Il Crivello di Eratostene è una tecnica per calcolare i numeri primi. Si disegna una tabella 10x10 con i numeri da 1 a 100 ordinati I numeri possono essere liberi o cancellati. Inizialmente tutti i numeri sono liberi, eccetto l 1 che è cancellato (non essendo numero primo, per definizione) Si sceglie il primo numero libero (il 2, al primo giro) e si cancellano tutti i suoi multipli (4,6,8,...) Si sceglie il successivo numero libero (questa volta il 3) e si cancellano tutti i suoi multipli che non siano già stati cancellati (9,15,21,...) Si procede in questo modo fino alla fine della tabella Alla fine i numeri non cancellati saranno tutti e soli i numeri primi tra 0 e 100
23 Esercizio - crivello.c Implementare il Crivello di Eratostene usando una matrice 10x10 e stampare la matrice risultante al termine dell esecuzione in forma tabellare G. Mezzetti & P. Milazzo (Univ. di Pisa) Esercitazione 3 A.A. 2012/ / 1
Programmazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 6 - Liste Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento
Programmazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 4 - Puntatori, vettori e stringhe Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti
Esercitazione 6. Array
Esercitazione 6 Array Arrays Array (o tabella o vettore): è una variabile strutturata in cui è possibile memorizzare un numero fissato di valori tutti dello stesso tipo. Esempio int a[6]; /* dichiarazione
Fondamenti di Informatica
Vettori e matrici #1 Le variabili definite come coppie sono dette variabili scalari Fondamenti di Informatica 5. Algoritmi e pseudocodifica Una coppia è una variabile
C: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
Fondamenti di Programmazione
A.A. 08/09 Fondamenti di Programmazione (canale E-O) Docente: Prof.ssa Tiziana Calamoneri [email protected] Esercitatore: Dott. Roberto Petroccia [email protected] Pagina del corso: http://twiki.di.uniroma1.it/twiki/view/programmazione1/eo/webhome
I tipi strutturati e i record in C++
I tipi strutturati e i record in C++ Docente: Ing. Edoardo Fusella Dipartimento di Ingegneria Elettrica e Tecnologie dell Informazione Via Claudio 21, 4 piano laboratorio SECLAB Università degli Studi
Informatica (A-K) 5. Algoritmi e pseudocodifica
Vettori e matrici #1 Informatica (A-K) 5. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile & Ambientale A.A. 2011-2012 2 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
Fondamenti di Informatica 6. Algoritmi e pseudocodifica
Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
Cicli annidati ed Array multidimensionali
Linguaggio C Cicli annidati ed Array multidimensionali Cicli Annidati In C abbiamo 3 tipi di cicli: while(exp) { do { while(exp); for(exp;exp;exp3) { Cicli annidati: un ciclo all interno del corpo di un
Esercitazione di Reti degli elaboratori
Esercitazione di Prof.ssa Chiara Petrioli Christian Cardia, Gabriele Saturni Cosa vedremo in questa lezione? Gli Array Gli array multidimensionali Le stringhe I puntatori Esercizi Pagina 1 Gli Array Definizione
Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di
ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere
Generazione di numeri pseudo-casuali
Generazione di numeri pseudo-casuali Perchè è difficile? Il computer esegue deterministacamente le istruzioni fornite dal programma Questo comporta che è molto difficile ottenere vera casualità (ossia
Fondamenti di Programmazione
Fondamenti di Programmazione Ingegneria dell Automazione Industriale Ingegneria Elettronica e delle Comunicazioni Alessandro Saetti Marco Sechi e Andrea Bonisoli (email: {alessandro.saetti,marco.sechi,[email protected])
Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.
Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;
Lezione 8: Stringhe ed array multidimensionali
Lezione 8: Stringhe ed array multidimensionali Vittorio Scarano Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione AVVISO: la lezione di laboratorio di 28/5 non si
9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
9 - Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea
Esercizi C su array e matrici
Politecnico di Milano Esercizi C su array e matrici Massimo, media e varianza,, ordinamento, ricerca e merge, matrice simmetrica, puntatori Array Array o vettore Composto da una serie di celle int vett[4]
Fondamenti di Informatica T-1 Modulo 2
Fondamenti di Informatica T-1 Modulo 2 1 Obiettivi di questa esercitazione 1. Array 2 Esercizio 1 Creare un programma che legga da input un numero non noto a priori di interi (al più 10) terminati da 0.
Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi
Informatica 1 Corso di Laurea Triennale in Matematica Gianluca Rossi [email protected] Dipartimento di Matematica Università di Roma Tor Vergata 11: Stringhe (www.informatica-uno.blogspot.com)
Linguaggio C: Array Valeria Cardellini
Linguaggio C: Array Valeria Cardellini Corso di Calcolatori Elettronici A.A. 2018/19 Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica Array in C q Dichiarazione
Laboratorio di Programmazione: Linguaggio C Lezione 9 del 27 novembre 2013
Laboratorio di Programmazione: Linguaggio C Lezione 9 del 27 novembre 2013 Damiano Macedonio Giochi d Azzardo Note Iniziali Per generare un numero casuale basta includere la libreria stdlib.h e utilizzare
ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }
ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il
Algoritmo di ordinamento per sostituzione. Esempio : dato l array :
Algoritmo di ordinamento per sostituzione Per ottenere un ordinamento crescente con l algoritmo di ordinamento per Sostituzione si confronta l elemento nella prima posizione con gli elementi nelle posizioni
Esercitazione 11. Liste semplici
Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene
Esercizi. La funzione swapint() primo tentativo
Politecnico di Milano Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio di array. #include
Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
