Esercizi C su array e matrici

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

INFORMATICA Altre Istruzioni di I/O
Gli Algoritmi di ordinamento
INFORMATICA Algoritmi fondamentali
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array, matrici Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
Corso di Laurea Triennale in Ingegneria Gestionale Corso di Fondamenti di informatica A. A A.Pinto Algoritmi di ricerca 1.
Uso avanzato di C.
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
Iterazione A. Ferrari.
Stringhe di caratteri In linguaggio C.
Array multidimensionali
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Introduzione al linguaggio C
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Anno accademico Array e puntatori in C.
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
ESERCITAZIONE N. 5 ESERCIZIO N. 1 Autore: Biagio Brattoli S I Corso.
INFORMATICA Strutture iterative
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
PROGRAMMI DI RICERCA E ORDINAMENTO
Tail recursion: esempio
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
Process synchronization
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
1 Corso di Informatica (Programmazione) Esercitazione 3 (5 dicembre 2008)
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
APPUNTI SUL LINGUAGGIO C
INFORMATICA Esercizi.
Esercizio: Copiare un file in un nuovo file mediante le funzioni read e write.
Struct, enum, Puntatori e Array dinamici
Strutture di controllo nel C
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Strutture di controllo in C -- Flow Chart --
Esercizi C sui tipi definiti dall’utente
Politecnico di Milano Esercizi Stringhe Ricerca binaria.
Esercizi di riepilogo sul linguaggio C: file, puntatori, liste
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
File di testo, file binari
Dichiarazioni e tipi predefiniti nel linguaggio C
Le liste dinamiche La ricorsione
I File.
Le funzioni.
TIPI DI DATO Un tipo di dato T è definito come: un dominio di valori, D un insieme di funzioni F 1,..,F n sul dominio D un insieme di predicati P 1,..,P.
Calcolo del Massimo Comun Divisore
Crivello Di Eratostene (fonte wikipedia
1 ListaDiElem Cancella( ListaDiElem lista, TipoElemento elem ) { ListaDiElem puntTemp; if( ! ListaVuota(lista) ) if( lista–>info == elem ) { puntTemp =
void binario(int n); …………………
Massimo Comun Divisore
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 6 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
Unità Didattica 3 Linguaggio C
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
14 marzo 2002 Avvisi:.
Università degli Studi di BresciaA.A. 2012/2013 Fondamenti di Programmazione Docente: Alessandro SaettiA.A. 2012/2013 Università degli Studi di Brescia.
ESERCIZI.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
Pippo.
Ricerca sequenziale in un array di interi
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni – BCOR Ingegneria Elettronica – BELR Introduzione al C Esercitazione 5 D. Bloisi, A.
A LGORITMI DI ORDINAMENTO Cinzia Reverberi. COS’È UN ALGORITMO? Un algoritmo è un insieme ben ordinato di operazioni non ambigue ed effettivamente calcolabili.
ALGORITMI Un algoritmo è un insieme di istruzioni: -ordinate -non ambigue -effettivamente computabili.
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
ALGORITMO Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un formalismo che permette di rappresentare.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
L’ordinamento per Selezione seleziona l’elemento con valore maggiore e lo scambia con il primo elemento del vettore. Tra gli N-1 elementi rimanenti viene.
Copyright © Istituto Italiano Edizioni Atlas
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Esercizi sui dati strutturati 13 Tipi di dati strutturati.
Transcript della presentazione:

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] = {3, 5, -6, 10}; vett 1 2 3 3 5 -6 10 Stesso tipo per tutte le celle Alloca tutte le celle “lunghezza” dell’array Tipicamente serve un contatore.

Media e varianza Leggere un insieme di numeri, inserirlo in un array e calcolare la media e la varianza. L’utente dovrà esplicitamente indicare quanti numeri vuole inserire nell’array. Ricordiamo che la media e la varianza di n dati ai si ottengono: Utilizziamo la funzione predefinita pow(base,esp) che calcola baseesp.

Media e varianza #include <stdio.h> #include <math.h> void main() { const unsigned int MAX = 1000; float arrayNumeri[MAX]; unsigned int i, num; float totale = 0, media, varianza; printf ("quanti numeri (max %u): ", MAX); scanf ("%u", &num); /* assumo num < MAX */ for (i = 0; i < num; i++) printf ("Dato (%u): ", i); scanf ("%f", &arrayNumeri[i]); totale = totale + arrayNumeri[i]; } .

Media e varianza Se l’utente inserisce un solo numero? media = totale / num; totale = 0; for (i = 0; i < num; i++) { totale = totale + pow(arrayNumeri[i]-media, 2); } varianza = totale / (num – 1); printf ("Media:%f, varianza:%f", media, varianza); Se l’utente inserisce un solo numero? Verificare l’input dell’utente…

Trova il massimo Leggere un insieme di numeri interi e inserirlo in un array. L’insieme sarà terminato dal numero zero Trovare quindi: Il numero massimo La posizione della cella nella quale il numero massimo è stato inserito.

Trova il massimo #include <stdio.h> void main() { const unsigned int MAX = 1000; int arrayNumeri[MAX], dato, max; unsigned int i, num = 0, posizMax; arrayNumeri[0] = 0; /* se non immetto niente… */ scanf ("%d", &dato); while (dato != 0 && num < MAX) arrayNumeri[num] = dato; num = num + 1; if (num < MAX) /* Non leggo il dato seguente */ { /* se l’array è finito */ } } .

Trova il massimo max = arrayNumeri[0]; posizMax = 0; for (i = 1; i < num; i++) { if (arrayNumeri[i] > max) max = arrayNumeri[i]; posizMax = i; } printf ("Max:%d, posizione:%u", max, posizMax);

Ricerca lineare L’utente inserisce in un array un certo numero di interi L’utente inserisce un numero e l’elaboratore controlla se è presente nell’array Se il numero è presente, si visualizza la posizione in cui è stato trovato

Ricerca lineare #include <stdio.h> void main() { unsigned int i, n, trovato = 0; int numeri [100], num; printf ("Quanti numeri: "); scanf ("%u", &n); for (i = 0; i < n; i++) printf ("Numero %u: ", i); scanf ("%d", &numeri[i]); } printf ("Numero da cercare: "); scanf ("%d", &num); .

Ricerca lineare i = 0; do { if (numeri[i] == num) trovato = 1; } else } while (trovato == 0 && i < n); if (trovato) printf ("Numero: %d ", numeri[i]); printf ("Posizione: %u\n", i); } .

Merge di due array ordinati L’utente inserisce due array composti da numeri interi ed ordinati in senso crescente. Le lunghezze dei due array possono essere differenti L’elaboratore crea un terzo array ordinato, utilizzando i due array inseriti dall’utente Infine, quest’ultimo array viene visualizzato i1 i2 im 10 20 30 40 50

Merge di due array ordinati #include <stdio.h> void main() { const int MAX = 100; int array1[MAX], array2[MAX], merge[2 * MAX]; unsigned int n1, n2, i1, i2, im; printf ("Lungh array 1: "); scanf ("%u", &n1); printf ("Lungh array 2: "); scanf ("%u", &n2); for (i1 = 0; i1 < n1; i1++) printf ("Array1, numero: "); scanf ("%d", &array1[i1]); } .

Merge di due array ordinati for (i2 = 0; i2 < n2; i2++) { printf ("Array2, numero: "); scanf ("%d", &array2[i2]); } i1 = 0; i2 = 0; .

Merge di due array ordinati for (im = 0; im < n1 + n2; im++) { if (i1 < n1 && array1[i1] < array2[i2] || i2 >= n2) merge[im] = array1[i1]; i1++; } else merge[im] = array2[i2]; i2++; } .

Merge di due array ordinati for (im = 0; im < n1 + n2; im++) { printf ("%d\n", merge[im]); } } .

Ordinamento per inserzione L’utente inserisce in un array un certo numero di interi L’elaboratore ordina l’array in senso crescente e lo visualizza L’algoritmo viene applicato mentre l’utente inserisce i dati 20 25 30 1 2 3 4 10 20 25 30 40 1 2 3 4 10 30 1 2 3 4 20 1 2 3 4 1 2 3 4 20 20 30 1 2 3 4 10

Ordinamento per inserzione #include <stdio.h> void main() { unsigned int tot; int ultima, i, candidata, sposta; int n, numeri[100]; printf ("Quanti numeri: "); scanf ("%u", &tot); for (ultima = 0; ultima < tot; ultima++) printf ("Numero: "); scanf ("%d", &n); candidata = 0; .

Ordinamento per inserzione while (n >= numeri[candidata] && candidata <= ultima) { candidata++; } /* Sposto a partire dal fondo, altrimenti sovrascrivo. La variabile ultima indica l'ultima casella occupata */ for (sposta=ultima; sposta>=candidata; sposta--) numeri[sposta + 1] = numeri[sposta]; numeri[candidata] = n; } .

Ordinamento per inserzione for (i = 0; i < tot; i++) { printf ("%d\n", numeri[i]); } } .

Ordinamento con Bubble Sort Lo stesso testo dell’esercizio precedente Usiamo l’algoritmo di ordinamento noto con il nome di “bubble sort” (ordinamento a bolle) L’utente inserisce i dati in modo disordinato L’algoritmo viene applicato alla fine della fase di inserimento 20 25 30 40 1 2 3 4 10 25 10 30 40 1 2 3 4 20 20 10 30 40 1 2 3 4 25 10 25 30 40 1 2 3 4 20

Ordinamento con Bubble Sort Come si effettua lo scambio del contenuto di due variabili? Serve una variabile temporanea: 10 20 a temp b 10 20 a temp b 20 a 10 temp b 20 10 a temp b

Ordinamento con Bubble Sort #include <stdio.h> void main() { unsigned int tot, i, scambio; int numeri [100], temporanea; printf ("Quanti numeri: "); scanf ("%u", &tot); for (i = 0; i < tot; i++) printf ("Numero: "); scanf ("%d", &numeri[i]); } .

Ordinamento con Bubble Sort do { scambio = 0; for (i = 0; i < tot - 1; i++) if (numeri[i] > numeri[i + 1]) /* inizio scambio di due variabili */ temporanea = numeri[i]; numeri[i] = numeri[i + 1]; numeri[i + 1] = temporanea; /* fine scambio di due variabili */ scambio = 1; } } while (scambio == 1); .

Ordinamento con Bubble Sort for (i = 0; i < tot; i++) { printf ("%d\n", numeri[i]); } } .

Matrice Composta da una matrice di celle int mat[2][4] = {{3,5,7,2},{-4,6,1,1}}; mat 1 2 3 3 5 7 2 -4 6 1 Stesso tipo per tutte le celle Alloca tutte le celle “lunghezze” della matrice Tipicamente servono due contatori.

Matrice simmetrica L’utente inserisce una matrice quadrata, composta di numeri reali, ed il programma verifica (e visualizza) se è simmetrica La dimensione della matrice inserita dall’utente è fissata all’interno del programma Ricordiamo che una matrice quadrata è simmetrica sse per ogni i,j vale ai,j = aj,i 1 7 3 8 5 4 11 13 6 2

Matrice simmetrica #include <stdio.h> void main() { const unsigned int DIM = 3; unsigned int riga, colonna; unsigned int simmetrica; float matrice [DIM][DIM]; for (riga = 0; riga < DIM; riga++) for (colonna = 0; colonna < DIM; colonna++) printf ("numero (%u,%u): ", riga, colonna); scanf ("%f", &matrice[riga][colonna]); } } .

Matrice simmetrica simmetrica = 1; riga = 0; do /* righe */ { colonna = riga + 1; do /* colonne */ if (matrice[riga][colonna]!= matrice[colonna][riga]) simmetrica = 0; } colonna++; .

Matrice simmetrica } while (colonna < DIM && simmetrica == 1); riga++; } while (riga < DIM - 1 && simmetrica == 1); if (simmetrica == 1) { printf ("Matrice simmetrica\n"); } else printf ("Matrice non simmetrica\n"); } .

Puntatori Un puntatore contiene un riferimento ad un’altra variabile … int a = 125, *p; p = &a; *p = 128; printf (“%d”, *p); (1000) (2000) a 125 1000 p

Array e puntatori Il nome dell’array, usato senza le parentesi, rappresenta l’indirizzo in memoria della prima cella (ovvero, un puntatore ad essa) L’indirizzo non può essere modificato (ovvero, il nome rappresenta un puntatore costante) int vettA[4], vettB[4]; int *pIntero; … pIntero = vettA; /* Corretto: pIntero punta a vettA */ vettB = vettA; /* Errore di compilazione! */ vettA = pIntero; /* Errore di compilazione! */

Array e puntatori #include <stdio.h> void main() { int numeri[5] = {6, 8, -3, 4, 10}; int *pInt; unsigned int i; pInt = numeri; /* pInt diventa un alias */ for (i = 0; i < 5; i++) printf ("%d\n", numeri[i]); printf ("%d\n", *(pInt + i)); printf ("%d\n", pInt[i]); } }.