Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018
|
|
- Edoardo Bini
- 5 anni fa
- Visualizzazioni
Transcript
1 Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018 Esercizi sull allocazione dinamica della memoria in C Il codice di questi esercizi é contenuto nella cartella parte1 1. Implementare una lista dinamica di interi che funzioni come una coda FIFO, First In First Out. Implementare anche le funzioni che permettano: di creare la coda stampare il contenuto della coda partendo dallelemento partendo dall elemento intesta alla coda inserire in coda estrarre dalla testa 1 #include <s t d l i b. h> /* 5 La coda e definita esattamente come una lista con singolo puntatore 6 */ 7 typedef struct EL{ 8 9 int v a l o r e ; 10 struct EL next ; 11 } Elemento ; 12 typedef Elemento Coda ; /* Inizializza la coda */ 15 void c r e a c o d a ( Coda coda ){ 16 coda = NULL; 17 } /* Procedura che stampa la coda dal primo elemento a l l u l t i m o */ void stampa coda ( Coda coda ){ 23 if ( coda!=null){ 24 p r i n t f ( "%d ", coda >v a l o r e ) ; 25 stampa coda ( coda >next ) ; 26 } 27 } /* Procedura che inserisce un elemento al termine della coda */ 30 void push ( Coda coda, int v a l o r e ){ if ( coda == NULL){ 33 /* si inserisce solo quando si e raggiunto il fondo */ 34 Elemento e = ( Elemento ) malloc ( sizeof ( Elemento ) ) ; 35 e >v a l o r e = v a l o r e ; 36 e >next = NULL; 37 /* 38 Aggiorno anche il puntatore dell elemento che era 39 l ultimo elemento
2 40 della coda prima di questo inserimento 41 */ 42 coda = e ; 43 } 44 else{ 45 push (&(( coda) >next ), v a l o r e ) ; 46 } 47 } /* Procedura per estrarre il primo elemento dalla coda */ int pop ( Coda coda ){ if ( coda!= NULL){ 55 /* Assicurarsi che la coda non sia vuota */ 56 /* Salvo l i n d i r i z z o di memoria del primo elemento 57 per poter liberare l area di memoria allocata 58 dinamicamente 59 */ 60 Elemento e = coda ; /* Salvo il valore contenuto n e l l e l e m e n t o 63 per poterlo restituire al termine 64 della procedura */ 65 int v a l o r e = e >v a l o r e ; 66 coda = e >next ; 67 /* La testa della coda e aggiornata : ora punta al 68 secondo elemento della coda */ 69 f r e e ( e ) ; /* L area di memoria del primo 70 elemento viene cancellata */ 71 return v a l o r e ; /* Il valore di quello che era il primo elemento 72 viene restituito */ 73 } 74 else{ /* Ritorno un valore arbitrario in caso 75 la coda sia vuota */ 76 return 0 ; 77 } 78 } int main ( ) { Coda coda ; 83 c r e a c o d a (&coda ) ; 84 push(&coda, 1 ) ; 85 push(&coda, 4 ) ; 86 push(&coda, 2 ) ; 87 push(&coda, 5 ) ; 88 p r i n t f ( " Estraggo %d\n", pop(&coda ) ) ; 89 stampa coda ( coda ) ; 90 p r i n t f ( "\n" ) ; 91 } 2. Creare una lista dinamica di persone che memorizzi il loro nome,il loro peso e la loro altezza. Creare le funzioni che permettano la sua creazione e linserimento di nuove persone. La lista deve permettere di poter scorrere le persone sia in ordine di peso, sia di altezza. 1 #include <s t d l i b. h>
3 2 #include <s t r i n g. h> 3 4 #d e f i n e MAX typedef struct EL{ 8 9 char nome [MAX] ; 10 int peso ; /* peso in kg */ 11 int a l t e z z a ; /* altezza in cm */ 12 /* Elemento successivo in ordine di peso */ 13 struct EL n e x t p e s o ; 14 /* Elemento successivo in ordine di altezza */ 15 struct EL n e x t a l t e z z a ; 16 } Persona ; /* Sfruttiamo ancora la struttura per creare una 20 testa di lista con due puntatori ( come in es1) */ typedef Persona L i s t a ; /* Inizializza la testa della lista */ void c r e a l i s t a ( L i s t a l i s t a ){ 27 l i s t a >n e x t p e s o = NULL; 28 l i s t a >n e x t a l t e z z a = NULL; 29 } /* Stampa la lista in ordine di peso */ void s t a m p a l i s t a p e s o ( L i s t a l i s t a ){ 34 if ( l i s t a. n e x t p e s o!=null){ 35 /* Dichiaro una variabile temporanea 36 per rendere piu compatta la printf 37 */ 38 Persona p = l i s t a. n e x t p e s o ; 39 p r i n t f ( "Nome: %s - Peso: %d kg - Altezza : %d cm\n", 40 p >nome, p >peso, p >a l t e z z a ) ; /* Chiamata ricorsiva per stampare 43 anche il resto della lista */ 44 s t a m p a l i s t a p e s o ( p ) ; 45 /* Nota: invertendo ordine printf e chiamata ricorsiva 46 avremmo ottenuto la stampa dal peso maggiore 47 al minore */ 48 } 49 } /* 53 Stampa la lista in ordine di altezza ( identica alla precedente, 54 tranne che per i puntatori usati) 55 */ 56 void s t a m p a l i s t a a l t e z z a ( L i s t a l i s t a ) { if ( l i s t a. n e x t a l t e z z a!= NULL) { 59 Persona p = l i s t a. n e x t a l t e z z a ; 60 p r i n t f ( "Nome: %s - Peso: %d kg - Altezza : %d cm\n",
4 61 p >nome, p >peso, p >a l t e z z a ) ; 62 s t a m p a l i s t a a l t e z z a ( p ) ; 63 } 64 } /* Inserisce un nuovo elemento mantenendo entrambi 68 gli ordinamenti all interno della lista */ void i n s e r i s c i ( L i s t a l i s t a, char nome [MAX], int peso, int a l t e z z a ){ /* Creazione nuova persona da inserire in lista */ 73 Persona temp ; 74 Persona p = malloc ( sizeof ( Persona ) ) ; 75 p >peso = peso ; 76 p >a l t e z z a = a l t e z z a ; 77 s t r c p y (p >nome, nome ) ; /* Ricerca della prima persona con peso maggiore di 80 quello dato come parametro */ 81 for ( temp = l i s t a ; 82 temp >n e x t p e s o!= NULL && temp >next peso >peso < peso ; 83 temp = temp >n e x t p e s o ) ; /* Inserimento nuovo elemento in lista */ 86 p > n e x t p e s o = temp >n e x t p e s o ; 87 temp >n e x t p e s o = p ; /* Ricerca della prima persona con altezza maggiore di 90 quello dato come parametro */ 91 for ( temp = l i s t a ; 92 temp >n e x t a l t e z z a!=null && 93 temp >n e x t a l t e z z a >a l t e z z a <a l t e z z a ; 94 temp = temp >n e x t a l t e z z a ) ; /* Inserimento nuovo elemento in lista */ 97 p >n e x t a l t e z z a = temp >n e x t a l t e z z a ; 98 temp >n e x t a l t e z z a = p ; 99 } int main ( ) { L i s t a l i s t a ; 104 c r e a l i s t a (& l i s t a ) ; i n s e r i s c i (& l i s t a, "Mario Rossi",70, ) ; 107 i n s e r i s c i (& l i s t a, " Filippo Bianchi ",50, ) ; 108 i n s e r i s c i (& l i s t a, "Giulia Verdi",60, ) ; p r i n t f ( "Stampa in ordine di peso\n" ) ; 111 s t a m p a l i s t a p e s o ( l i s t a ) ; 112 p r i n t f ( "Stampa in ordine di altezza \n" ) ; 113 s t a m p a l i s t a a l t e z z a ( l i s t a ) ; }
5 3. Definire le strutture dati e le funzioni richieste per una lista di interi che puo anche contenere elementi ripetuti. Gli inserimenti nella lista sono sempre inseriti mantenendo la lista ordinata dal piu piccolo al piu grande. Ogni elemento della lista deve poter conoscere il prossimo elemento, il primo elemento pari e il primo numero primo che lo seguono nella lista, se esistono. 1 #include <s t d l i b. h> typedef enum {FALSE = 0, TRUE} bool ; /* Definisco la struttura elemento */ 9 10 typedef struct EL{ 11 int v a l o r e ; 12 struct EL next ; 13 struct EL p a r i ; 14 struct EL primo ; 15 } Elemento ; typedef Elemento L i s t a ; void c r e a l i s t a ( L i s t a l i s t a ){ 21 l i s t a = NULL; 22 } /* Stampa della lista: 25 il successivo pari e primo sono 26 stampati solo se esistono 27 */ void s t a m p a l i s t a ( L i s t a l i s t a ){ 30 if ( l i s t a!=null){ 31 p r i n t f ( " Elemento %d", l i s t a >v a l o r e ) ; 32 if ( l i s t a >p a r i!=null){ 33 p r i n t f ( " - Prossimo pari %d", 34 l i s t a >pari >v a l o r e ) ; 35 } 36 if ( l i s t a >primo!=null){ 37 p r i n t f ( " - Prossimo primo %d", 38 l i s t a >primo >v a l o r e ) ; 39 } 40 p r i n t f ( "\n" ) ; 41 s t a m p a l i s t a ( l i s t a >next ) ; 42 } 43 } /* 46 Definisco due funzioni di supporto : 47 - una per sapere se un numero e pari 48 - una per sapere se un numero e primo 49 */ 50 bool num primo ( int n ){ 51 int i ; 52 if (n<=1){ 53 return FALSE;
6 54 } 55 for ( i =2; i <n ; i ++){ 56 if ( n%i ==0){ 57 return FALSE; 58 } 59 } 60 return TRUE; 61 } bool num pari ( int n ){ return n%2==0; 66 } 67 /* 68 Inserimento : ad ogni inserimento dobbiamo anche trovare il prossimo 69 pari ed il prossimo primo in lista 70 */ void i n s e r i s c i ( L i s t a l i s t a, int v a l o r e ){ 73 L i s t a temp ; /* Dichiaro un puntatore temporaneo che mi 74 servira da indice per scorrere la lista 75 */ 76 /* creo l elemento */ 77 Elemento e l = malloc ( sizeof ( Elemento ) ) ; 78 el >v a l o r e = v a l o r e ; /* 81 Controllo se valore e pari o primo: 82 se lo devo aggiornare gli elementi 83 che lo precedono 84 */ 85 bool p a r i = num pari ( v a l o r e ) ; 86 bool primo = num primo ( v a l o r e ) ; /* 89 cerco all interno della lista il puntatore 90 all elemento che in lista seguira el 91 */ 92 for ( temp =l i s t a ; 93 temp!=null &&( temp) >v a l o r e < v a l o r e ; 94 temp = &(( temp) >next ) ) { /* 97 Mentre scorro ogni elemento della lista, 98 controllo se devo aggiornare i loro 99 puntatori al successivo pari e 100 successivo primo 101 */ 102 if ( p a r i && ( ( temp) >p a r i == NULL 103 ( temp) >pari >v a l o r e >= v a l o r e ) ) { 104 ( temp) >p a r i = e l ; 105 } 106 if ( primo && ( ( temp) >primo == NULL 107 ( temp) >primo >v a l o r e >= v a l o r e ) ) { 108 ( temp) >primo = e l ; 109 } }/* end for */ 112 /*
7 113 el prende l elemento puntato da temp 114 come elemento successivo 115 */ 116 e l >next = temp ; /* 120 Aggiorno i puntatori al successivo pari e primo di el: 121 se il successivo e pari o primo allora, puntano 122 al successivo altrimenti i puntatori puntano allo 123 stesso elemento puntato dal successivo 124 */ 125 if ( temp == NULL num pari ( ( temp) >v a l o r e ) ) { 126 el >p a r i = temp ; 127 } 128 else{ 129 el >p a r i = ( temp) >p a r i ; 130 } if ( temp == NULL num primo ( ( temp) >v a l o r e ) ) { 133 e l >primo = temp ; 134 } 135 else{ 136 e l >primo = ( temp) >primo ; 137 } /* Aggiorno il puntatore dell elemento che precede el 140 in lista 141 */ 142 temp = e l ; /* N.B. a questo punto 145 l indirizzo puntato da temp 146 corrisponde a quello puntato 147 dal next dell elemento precedente a el 148 nella lista 149 */ 150 } 151 int main ( ) { L i s t a l i s t a ; 154 c r e a l i s t a (& l i s t a ) ; 155 i n s e r i s c i (& l i s t a, 2 ) ; 156 i n s e r i s c i (& l i s t a, 1 ) ; 157 i n s e r i s c i (& l i s t a, 3 ) ; 158 i n s e r i s c i (& l i s t a, 2 ) ; 159 i n s e r i s c i (& l i s t a, 5 ) ; 160 i n s e r i s c i (& l i s t a, 4 ) ; s t a m p a l i s t a ( l i s t a ) ; 163 } 4. Creare una lista di interi in cui ogni elemento abbia un puntatore all ultimo elemento della lista (anche l ultimo elemento). Ogni nuovo elemento é inserito alla fine della lista. 1 #include <s t d l i b. h> 2 3 /*
8 4 Ogni elemento della lista ha un 5 puntatore all ultimo elemento 6 */ 7 8 typedef struct EL{ 9 int v a l o r e ; 10 struct EL next ; /* successivo */ 11 struct EL l a s t ; /* ultimo */ 12 } Elemento ; typedef Elemento L i s t a ; /* 19 La creazione della lista e la 20 stampa non sono influenzate dal 21 puntatore aggiuntivo e sono 22 identiche alle funzioni 23 per la creazione e stampa di tutte 24 le altre liste viste finora 25 */ void c r e a l i s t a ( L i s t a l i s t a ){ 28 l i s t a = NULL; 29 } void stampa ( L i s t a l i s t a ){ 32 if ( l i s t a!=null){ 33 p r i n t f ( "%d ", l i s t a >v a l o r e ) ; 34 stampa ( l i s t a >next ) ; 35 } 36 else{ 37 p r i n t f ( "\n" ) ; 38 /* 39 stampo \n quando 40 la lista termina 41 */ 42 } /* 45 stampa dell ultimo elemento : 46 N.B.-> dato che ogni elemento ha 47 un puntatore all ultimo, 48 basta accedere al primo 49 elemento della lista e risalire 50 da quello al valore dell ultimo 51 elemento 52 */ 53 } 54 void stampa ultimo ( L i s t a l i s t a ){ 55 if ( l i s t a!=null){ 56 p r i n t f ( "Ultimo elemento : %d\n", l i s t a >l a s t >v a l o r e ) ; 57 } 58 else{ 59 p r i n t f ( "La lista e vuota\n" ) ; 60 } 61 } 62
9 63 void i n s e r i s c i ( L i s t a l i s t a, int v a l o r e ){ 64 /* 65 L inserimento avviene quando si 66 raggiunge il termine della lista 67 */ 68 if ( l i s t a==null){ 69 Elemento e = malloc ( sizeof ( Elemento ) ) ; 70 e >v a l o r e = v a l o r e ; 71 e >next = NULL; 72 e >l a s t = e ; 73 l i s t a = e ; 74 } 75 else{ 76 i n s e r i s c i (&(( l i s t a ) >next ), v a l o r e ) ; 77 /* 78 Al termine della chiamata ricorsiva 79 si puo copiare il valore del puntatore 80 all ultimo elemento dell elemento successivo 81 */ 82 ( l i s t a ) > l a s t = ( l i s t a ) >next >l a s t ; 83 } 84 } int main ( ) { 87 L i s t a l i s t a ; 88 c r e a l i s t a (& l i s t a ) ; 89 stampa ultimo ( l i s t a ) ; 90 i n s e r i s c i (& l i s t a, 1 ) ; 91 stampa ultimo ( l i s t a ) ; 92 i n s e r i s c i (& l i s t a, 4 ) ; 93 stampa ultimo ( l i s t a ) ; 94 i n s e r i s c i (& l i s t a, 5 ) ; 95 stampa ultimo ( l i s t a ) ; 96 i n s e r i s c i (& l i s t a, 2 ) ; 97 stampa ultimo ( l i s t a ) ; stampa ( l i s t a ) ; 100 } Esercizi sulla gestione dei file in C Il codice di questi esercizi é contenuto nella cartella parte2 1. Scrivere il codice C che: Legge un intero n Legge n stringhe di testo salva le stringhe piu lunghe di 5 caratteri in un file long.txt e quelle piu corte in un file short.txt 1 #include <s t r i n g. h> 2 #include <s t d l i b. h> 3 4 #d e f i n e MAX int main ( ) {
10 7 8 FILE f s h o r t, f l o n g ; 9 int n, i ; 10 char s t r i n g a [MAX] ; 11 s c a n f ( "%d",&n ) ; /* Leggo il numero di stringhe da leggere */ /* creo entrambi i file in scrittura */ 14 if ( ( f s h o r t = fopen ( "short.txt", "w"))==null){ 15 puts ( " Errore nella creazione del file short. txt" ) ; 16 e x i t ( 1 ) ; 17 /* exit effettua il termine normale del programma 18 contenuta in stdlib.h 19 */ 20 } if ( ( f l o n g = fopen ( "long.txt", "w"))==null){ 23 puts ( " Errore nella creazione del file long. txt" ) ; 24 e x i t ( 1 ) ; 25 } for ( i =0; i <n ; i ++){ 28 s c a n f ( "%s", s t r i n g a ) ; /* Leggo una stringa */ 29 if ( s t r l e n ( s t r i n g a ) >5){ /* strlen mi da la lunghezza 30 della stringa */ 31 f p r i n t f ( f l o n g, "%s\n", s t r i n g a ) ; 32 } 33 else{ 34 f p r i n t f ( f s h o r t, "%s\n", s t r i n g a ) ; 35 } 36 } /* Chiudiamo lo stream ai due file */ 39 f c l o s e ( f s h o r t ) ; 40 f c l o s e ( f l o n g ) ; } 2. Scrivere una funzione C che prende come parametro un file e stampa a video tutte le sue righe dall ultima alla prima. Ogni riga e lunga non piu di 120 caratteri. Soluzione: 1 #include <s t d l i b. h> 2 #d e f i n e MAX READ /* funzione ricorsiva */ void c o n t r a r i o ( FILE f i l e ){ 9 10 if (! f e o f ( f i l e ) ) { /* feof(file * stream) testa il flag end -of -file 11 per lo stream stream. 12 */ 13 char s t r i n g a [MAX READ] ; 14 f g e t s ( s t r i n g a,max READ, f i l e ) ; /*
11 17 char * fgets( char *s, int size, FILE * stream ); 18 legge una linea dallo stream immagazzinandola 19 nel buffer puntato da s Sono letti al piu ( size - 1) caratteri, 22 oppure fino al raggiungimento del carattere 23 di new - line \n o di EOF 24 */ /* Chiamata ricorsiva 27 N.B. ogni volta che effettuiamo la 28 lettura il puntatore a file 29 viene spostato avanti di MAX_READ caratteri 30 nel nostro caso leggiamo una riga per volta 31 dato che non abbiamo righe con piu di caratteri 33 */ 34 c o n t r a r i o ( f i l e ) ; /* al termine della chiamata ricorsiva stampiamo la 37 riga letta 38 N.B. siccome la printf e dopo la chiamata ricorsiva 39 inizieremo a stampare dalla fine del file 40 */ 41 p r i n t f ( "%s", s t r i n g a ) ; } } int main ( ) { 48 FILE f i l e ; if ( ( f i l e = fopen ( "ex2.c", "r" ) ) == NULL){ 51 puts ( " Non e possibile aprire il file" ) ; 52 e x i t ( 1 ) ; 53 } 54 rewind ( f i l e ) ; /* ci riposizioniamo 55 all inizio del 56 file per 57 sicurezza 58 */ 59 c o n t r a r i o ( f i l e ) ; 60 f c l o s e ( f i l e ) ; 61 }
Allocazione dinamica memoria
Allocazione dinamica memoria Marco Casazza 11/12/2017 1 Esercizio 1 1 /* 2 Creare una lista bidirezionale di interi, ovvero una lista 3 che permette lo scorrimento in entrambe le direzioni ( dal primo
DettagliEsercitazioni di Fondamenti di Informatica - Lez. 7 20/11/2018
Esercitazioni di Fondamenti di Informatica - Lez. 7 0/11/018 Esercizi sull allocazione dinamica della memoria in C 1. Cosa stampa il seguente programma? 1 #d e f i n e MAXLENGTH 0 4 typedef struct { char
DettagliEsercitazioni di Fondamenti di Informatica - Lez. 9 4/12/2018
Esercitazioni di Fondamenti di Informatica - Lez. 9 /1/018 Esercizi sulla gestione dei file in C Il codice degli esercizi e contenuto nella cartella parte1 1. Creare una funzione C che legga tutto cio
DettagliEsercitazioni di Fondamenti di Informatica - Lez /12/2018
Esercitazioni di Fondamenti di Informatica - Lez. 0 //08 Esercizi su Python. ESAME 3/08/07 es. 6. Scrivere un programma Python 3 che definisce un apposito dizionario che contiene, attraverso le coppie
DettagliEsercitazione 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
DettagliProgrammazione 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
Dettagli#include <stdio.h> #include <stdlib.h> //necessaria per la malloc #include <string.h> // costante #define MAX_L 30
/* Dopo aver definito una lista in grado di contenere i dati di alcune persone (nome, genere e altezza in metri), scrivere un programma che consenta di verificare che inizialmente la lista sia vuota e
DettagliEsercitazioni di Fondamenti di Informatica - Lez. 5 30/10/2018
Esercitazioni di Fondamenti di Informatica - Lez. 30/10/018 Esercizi sulle funzioni in C I codici e le soluzioni degli esercizi sono nella cartella parte1 1. Scrivere i prototipi delle seguenti funzioni.
DettagliFondamenti di Informatica
Strutture dati complesse Esempi di strutture dati complesse analizzate in questa lezione: Fondamenti di Informatica 21. Strutture di dati complesse in C++ Array di puntatori Pila (Stack) Coda (queue) Liste
DettagliInformatica 1. Prova di recupero 21 Settembre 2001
Informatica 1 Prova di recupero 21 Settembre 2001 Si risolvano i seguenti esercizi. Ai fini della determinazione del voto finale il loro punteggio andrà sommato al punteggio del laboratorio. Il tempo complessivo
DettagliEsercitazione n. 7. Gestione dei file (seconda parte)
Esercitazione n. 7 Gestione dei file (seconda parte) dott. Carlo Todeschini tode@cremona.polimi.it Politecnico di Milano A.A. 2010/2011 Queste slide sono distribuite con licenza Creative Commons Attribuzione-Non
DettagliTitolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott.
Titolo presentazione INFORMATICA A sottotitolo A.A. 2017-18 Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott. Michele Zanella Info Logistiche (cont d) Calendario laboratori Data Orario
DettagliStrutture dati dinamiche
Strutture dati dinamiche - Liste concatenate - Pile -> LIFO (last in first out) - Code -> FIFO (first in first out) - Alberi binari: gestione dati in algoritmi complessi Liste Concatenate Formata da elementi
DettagliPolitecnico di Milano. Strutture dati dinamiche
Politecnico di Milano Strutture dati dinamiche Strutture dati statiche e dinamiche In C le dimensioni di ogni dato sono note prima dell esecuzione Sarebbe utile avere contenitori la cui dimensione varia
DettagliFondamenti di Informatica L-A
Fondamenti di Informatica L-A Esercitazione del 23/11/07 Ing. Giorgio Villani Ripasso Teoria Funzioni ricorsive 2 fatt(2) 1 2*fatt(1) fatt(1) 1 2*1 1*fatt(0) fatt(0) 1*1 caso base fatt(0)=1 Esercizio 1
DettagliListe concatenate. Violetta Lonati
Liste concatenate Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 2 novembre 2017 Violetta Lonati Liste
DettagliEsercitazioni di Fondamenti di Informatica - Lez. 4 23/10/2018
Esercitazioni di Fondamenti di Informatica - Lez. 4 2/0/20 Esercizi sui tipi in C I codici e le soluzioni degli esercizi sono nella cartella parte. Dato il seguente codice, trovare gli errori, correggerli
DettagliProf. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1
Operazioni sulle liste Definiamo una serie di procedure e funzioni per operare sulle liste. Usiamo liste di interi per semplicità, ma tutte le operazioni sono realizzabili in modo del tutto analogo su
DettagliLezione 11: Liste a Puntatori e Input/Output
Lezione 11: Liste a Puntatori e Input/Output Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione Richiamo: strutture (struct)
DettagliAllocazione dinamica della memoria
Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati
DettagliStrutture Dinamiche. Strutture Dinamiche
Corso di Informatica A Vito Perrone 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato)); Crea in memoria una variabile
DettagliINFORMATICA 2010/11 - CdL in FISICA TERZO APPELLO 8/09/2011: SOLUZIONI PROPOSTE
INFORMATICA 2010/11 - CdL in FISICA TERZO APPELLO 8/09/2011: SOLUZIONI PROPOSTE Scrivere in stampatello COGNOME, NOME e MATRICOLA su ogni foglio consegnato N.B.: In tutti gli esercizi viene valutata anche
DettagliPuntatori. 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
DettagliLaboratorio di Informatica
Liste semplici (semplicemente linkate) Una lista semplice e costituita da nodi Laboratorio di Informatica 7. Strutture complesse di dati in C++ Ogni nodo e una struttura che contiene : Dati Un riferimento
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 della prova scritta del 25 Luglio 2006 Esercizio 1 (4 punti) Date le seguenti variabili int A[] = 2,3,7,-2,5,-8,-4; int N = 7; int i; Scrivere la porzione di codice che sostituisca
DettagliLa struttura dati CODA
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una coda (o queue) è una struttura dati astratta
DettagliIL CONCETTO DI LISTA!
Liste semplici Obiettivi: Discutere la realizzazione collegata (puntatori a strutture) di liste semplici Introdurre l ADT lista semplice e le operazioni tipiche su essa 1 IL CONCETTO DI LISTA Una lista
DettagliStrutture Dinamiche. Fondamenti di Informatica
Strutture Dinamiche Fondamenti di Informatica 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione Companies, srl 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato));
Dettagli4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste
4 Le liste collegate 4.0 Le liste collegate c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 4.0 0 4 Le liste collegate Rappresentazione di liste 4.1
DettagliLezione 12: Allocazione Dinamica della Memoria
Lezione 12: Allocazione Dinamica della Memoria Laboratorio di Elementi di Architettura e Sistemi Operativi 17 Aprile 2013 Puntatori e vettori Puntatori ed indirizzi Semplificando, la memoria di un computer
DettagliDispensa 18 CORSO DI PROGRAMMAZIONE A.A CORSO DI LAUREA IN INGEGNERIA E SCIENZE INFORMATICHE CESENA. Laboratori
ORSO I LURE IN INGEGNERI E SIENZE INFORMTIHE ESEN ORSO I PROGRMMZIONE.. 2016-17 ispensa 18 Laboratori ott. Mirko Ravaioli e-mail: mirko.ravaioli@unibo.it http://www.programmazione.info orso di Programmazione..
DettagliFondamenti di Informatica T-1 Modulo 2
Fondamenti di Informatica T-1 Modulo 2 Obiettivo di questa esercitazione Allocazione dinamica della memoria ed esempi di problemi tipici d esame 2 Esercizio 1 Una ditta utilizza un sistema informatico
DettagliRappresentazione di sequenze...
Liste Rappresentazione di sequenze... Ritorniamo al nostro problema di rappresentare le sequenze, se vi ricordate avevano sottolineato un paio di problemi della rappresentazione di sequenze usando array
Dettagli5. Quinta esercitazione autoguidata: liste semplici
22 5. Quinta esercitazione autoguidata: liste semplici 5.1. Liste rappresentate mediante strutture e puntatori (LISTE1.C, LISTE2.C) Scrivere un programma che - costruisce una lista di k interi (con k letto
DettagliIntroduzione. Liste. Strutture ricorsive (2) Strutture ricorsive (1) DD p KP p
Introduzione Liste DD p. 449-474 KP p.397-424 Abbiamo fin ora studiato strutture dati con dimensione fissa: vettori e matrici strutture Introduciamo ora le strutture dati dinamiche (liste concatenate):
DettagliLaboratorio di Programmazione
Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 21 Strutture dinamiche Gli array ci permettono di memorizzare un insieme di dati dello stesso tipo Deve essere noto staticamente il
DettagliLezione 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
DettagliEsercitazioni di Prog. II (funzioni su insiemi) Chiara Petrioli
Esercitazioni di Prog. II (funzioni su insiemi) Chiara Petrioli Esercizi per la manipolazione di insiemi (rappresentati tramite liste) Insiemi.c /*Questo file include i prototipi e le definizioni di specifiche
DettagliEsercizio 1 Liste: calcolo del numero di elementi ripetuti in una lista
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 11 Esercitazione: 27 gennaio 2005 Esercizi su liste, ricorsione, file. Scaletta Esercizio 1 Liste: calcolo del numero di
DettagliFondamenti di Informatica II
Università degli studi di Messina Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica e delle Telecomunicazioni Fondamenti di Informatica II Tipi di dati astratti(adt)- seconda parte Coda Struttura
DettagliEsercitazione 12. Esercizi di Ricapitolazione
Esercitazione 12 Esercizi di Ricapitolazione Esercizio Scrivere un programma che, dato un numero intero positivo, stampa la sua rappresentazione binaria. ALGORITMO Scriviamo una procedura stampa_bin che,
DettagliLinguaggio C: Strutture e Liste Concatenate Valeria Cardellini
Linguaggio C: Strutture e Liste Concatenate Valeria Cardellini Corso di Calcolatori Elettronici A.A. 2018/19 Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica
DettagliInput/Output su File
Input/Output su File Premessa importante Queste dispense si intendono unicamente come riferimento rapido per consultare il significato e I prototipi delle funzioni per l'accesso ai file. Per avere esempi
DettagliLa programmazione nel linguaggio C
Cancellazione : versione ricorsiva Sfruttiamo la visione ricorsiva della struttura dati per realizzare la cancellazione in modo ricorsivo 1. la cancellazione della vuota non richiede alcuna azione 2. la
DettagliINFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti
INFORMATICA A Titolo presentazione sottotitolo A.A. 2018-19 Milano, XX mese 20XX Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti Ricorsione La ricorsione è un approccio per la risoluzione
DettagliLe strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.
Le strutture Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Dichiarazione di una struttura: struct point { int x; int y; }; La dichiarazione di una struttura
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliGestione dei file in C
Gestione dei file in C Fondamenti di Informatica Che cos è un file e a cosa serve? Memoria di massa vs memoria centrale q La memoria di massa (disco fisso) è un dispositivo di memorizzazione generalmente
DettagliINFORMATICA - CdL in FISICA. COMPITO del 28/05/2003 SOLUZIONI PROPOSTE
INFORMATICA - CdL in FISICA COMITO del 28/5/23 SOLUZIONI ROOSTE ESERCIZIO 1 Indicare i valori stampati dal seguente programma C. #include main() int *p, **q, x=, y=; p = &x; q = &p; *q = &y;
DettagliGestione dei File. Credits Prof. Campi
Gestione dei File Credits Prof. Campi 1 Perché i file? Sono strutture dati persistenti Sono solitamente memorizzati sui dischi Si usano dall'interno dei programmi Realizzano la persistenza dei dati cioè
DettagliPILE E CODE. Pile (stack):
PILE E CODE Sono tipi di dato che consentono di rappresentare sequenze di elementi in cui gli inserimenti e le cancellazioni sono eseguiti con particolari modalita` (politiche o discipline). Pile (stack):
DettagliPolitecnico di Milano - Dipartimento di Elettronica e informazione Prof. Mauro Negri
Politecnico di Milano - Dipartimento di Elettronica e informazione Prof. Mauro Negri Fondamenti di Informatica II prova in itinere 25 gennaio 2011 Matricola Cognome Nome Durata prova: 2 ore Istruzioni
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 15 Corso di Informatica 2009-2010 Lezione 15 1 Liste concatenate Liste concatenate Una lista concatenata costituisce un metodo molto utile per immagazzinare
DettagliLa copia di un file. contare di quanti caratteri sia composto il file (e quindi determinare la dimensione del file di origine)
La copia di un file Nell'esercizio di oggi cerchiamo di implementare un programma che permetta di effettuare la copia di un file di testo. L'operazione di copia, oltre a permettere di creare un nuovo file
DettagliListe concatenate e allocazione dinamica
Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide, e seguita
DettagliGestione dei file. File di testo e binari
Gestione dei file Un file e definito come un oggetto, presente nel file system, costituito da una sequenza continua di bytes Un file, per poter essere utilizzato, deve essere aperto Successivamente e possibile
DettagliNella propria home directory creare una sottodirectory chiamata es08, in cui metteremo tutti i file C di oggi.
Laboratorio 8 Nella propria home directory creare una sottodirectory chiamata es08, in cui metteremo tutti i file C di oggi. Note Quando dovete usare o ritornare dei valori booleani, usate la seguente
Dettagli10/10/2016. Caratteristiche degli array. Il tipo RECORD. Il record. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica
Caratteristiche degli array Principali caratteristiche degli array: LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica Marco Lapegna Dipartimento di Matematica e Applicazioni Universita degli
Dettaglistruct costobiglietto { //struttura per prezzo float prezzo; float tasse; float prezzototale; };
/* Programma 12cppEse1.cpp Autore : Riontino Raffaele 4 informatici ITIS Molinari - Milano corso serale 2/11/2010 Testo : Si vuole realizzare un tipo struct, utilizzato per informazioni su biglietti per
DettagliUso avanzato dei puntatori Allocazione dinamica della memoria
Uso avanzato dei puntatori Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica
DettagliLezione 8 Struct e qsort
Lezione 8 Struct e qsort Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 3 QuickSort strambo Modificare il Quicksort
DettagliALGORITMI E STRUTTURE DATI
ALGORITMI E STRUTTURE DATI Esercitazioni AndreA Orlandini http://www.dia.uniroma3.it/~orlandin/asd/ e-mail: orlandin@dia.uniroma3.it Orario di ricevimento: Martedì 14.00-16.00 Puntatori e Liste StudentiDIA
DettagliStringhe e allocazione dinamica della memoria
Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per
DettagliDiversi modi di rappresentare sequenze di elementi
Liste È molto comune dover rappresentare sequenze di elementi tutti dello stesso tipo e fare operazioni su di esse. Esempi: sequenza di interi (23 46 5 2 3) sequenza di caratteri ( x r f ) sequenza di
DettagliPreviously on TDP. LISTA rappresentata mediante "struct e puntatori" Cosa e aux? Di che tipo e e cosa contiene?
Previously on TDP lis ^ ^ 7 21 ** ** 14 *** memoria 9 NULL LISTA rappresentata mediante "struct e puntatori" *** lis->info == cosa? lis->next == ^^; /*cosa e ^^?*/ che cosa e' (*lis)? Cosa e aux? Di che
DettagliFondamenti di informatica, Sez. Ing. Informatica, Ing. Gestionale, Ing. Ambientale II prova in itinere, 29 Gennaio 2009
Fondamenti di informatica, Sez. Ing. Informatica, Ing. Gestionale, Ing. Ambientale II prova in itinere, 29 Gennaio 2009 Esercizio 1 (punti 3) Sia data la funzione ricorsiva seguente: void elabora (unsigned
DettagliLa programmazione nel linguaggio C. Liste
Liste È molto comune dover rappresentare sequenze di elementi tutti dello stesso tipo e fare operazioni su di esse. Esempi: sequenza di interi (23 46 5 28 3) sequenza di caratteri ( x r f ) sequenza di
Dettaglie e n-1 Esercizio 1.2 (Punti 8; punti 10 se risolto facendo uso della ricorsione)
Informatica 1 Seconda prova 31 Gennaio 2006 Esercizio 1 (Punti Una lista bidirezionale è una lista in cui ogni elemento è collegato, mediante puntatori, all elemento seguente e a quello precedente; alla
DettagliIl linguaggio C Strutture
Il linguaggio C Strutture Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C -- Strutture 2 Ringraziamenti Questi
Dettagli(*lista == NULL (*lista)->info >= elem) accede al campo next di *lista solo se *lista non e' NULL. */ #include <stdio.h> #include <stdlib.
/* ATTENZIONE: non accedere mai ai campi di un elemento della lista prima di essersi accertati che tale elemento sia diverso da NULL; Si osservi che la condizione booleana (*lista == NULL (*lista)->info
DettagliJAVA. import java.util.*; #include <stdio.h> public static class test { int variable; private int variable; int main (int argc, char *argv[]) {
JAVA C import javautil*; public static class test { private int variable; public void main (String[] args) { variable = 0; Systemoutprintln( Variable is: + variable); #include int variable; int
DettagliFondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 2A di Mercoledì 13 Gennaio 2010 tempo a disposizione 2h30'
Prima di cominciare: si scarichi dal sito http://esamix.labx il file StartKit2A.zip contenente i file necessari (solution di VS2008 e progetto compresi). Avvertenze per la consegna: apporre all inizio
DettagliSoluzioni seconda prova intermedia del 30 gennaio 2006 temi 1 e 2. Siano date le seguenti definizioni di costanti e tipi in linguaggio C:
Fondamenti Informatica B Soluzioni seconda prova intermedia del 30 gennaio 2006 temi 1 e 2 Esercizio 1 tema 1 Siano date le seguenti definizioni di costanti e tipi in linguaggio C: #define MAX_LENGTH 40
DettagliStrutture dati dinamiche in C (II)
Strutture dati dinamiche in C (II) Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi lisi@di.uniba.it Sommario Le liste concatenate (ancora ma in modo più formale) L
DettagliInserimento di un elemento in coda. quale va collegato quello nuovo. ultimo. *lista 8 3. aux. ultimo. *lista 8 3. aux
Inserimento di un elemento in coda Se la è vuota coincide con l inserimento in testa = è necessario il passaggio per indirizzo! Se la non è vuota, bisogna scandirla fino in fondo = dobbiamo usare un puntatore
DettagliPUNTATORI. Ivan Lanese
PUNTATORI Ivan Lanese Argomenti Puntatori Liste Puntatori Un puntatore è un tipo di dato che contiene l'indirizzo di memoria di un altro tipo di dato In c+o i puntatori sono tipati: avremo puntatori a
DettagliEsercizio 1 File: ordinamento di un archivio di studenti (file binario)
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 9 Esercitazione: 19 gennaio 2005 Esercizi sui file e sulle liste. Scaletta Esercizio 1 File: ordinamento di un archivio
DettagliLaboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014
Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014 Damiano Macedonio Esercizio 1 Scrivere una funzione che riceve in ingresso un puntatore ad un array di interi e modifica tale array
DettagliIl linguaggio C. Breve panoramica su stdio.h
Il linguaggio C Breve panoramica su stdio.h 1 Input/Output: stdio.h Contiene definizioni di costanti legate all I/O es. EOF (end of file) #define EOF (-1) valore restituito alla fine di un file Contiene
DettagliEsercizi su strutture dati
Esercizi su strutture dati Marco Alberti Programmazione e Laboratorio, A.A. 2016-2017 Dipartimento di Matematica e Informatica - Università di Ferrara Ultima modifica: 21 dicembre 2016 Liste collegate
DettagliIntroduzione al C Lez. 4. Allocazione Dinamica della memoria
Introduzione al C Lez. 4 Allocazione Dinamica della memoria Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso l allocazione esplicita di blocchi di memoria
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 della prova scritta del 27 Giugno 2006 Esercizio 1 (4 punti) Date le seguenti variabili int A[] = 2,3,7,-2,5,8,-4; int N = 7; int i; Scrivere la porzione di codice che sostituisca
DettagliLe strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.
Le strutture Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Dichiarazione di una struttura: struct point { int x; int y; }; La dichiarazione di una struttura
DettagliIMPLEMENTAZIONE CONCATENATE DELLE LISTE
IMPLEMENTAZIONE CONCATENATE DELLE LISTE Liste collegate Come già visto, la realizzazione sequenziale prevede che la sequenzialità degli elementi della lista venga rappresentata dalla adiacenza delle locazioni
DettagliTipi astratti pila e coda
Tipi astratti pila e coda Una pila è un tipo astratto che consente di rappresentare un insieme di elementi in cui ogni eliminazione ha per oggetto l elemento che è stato inserito per ultimo. Questa disciplina
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 19 luglio 2013 (turno 1) Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliLaboratorio di Programmazione
Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 26 Sommario: Gestione dei file in C. File ad accesso sequenziale: apertura, chiusura, lettura e scrittura. File binari. Gestione files
DettagliFondamenti di Programmazione
A.A. 08/09 Fondamenti di Programmazione (canale E-O) Docente: Prof.ssa Tiziana Calamoneri calamo@di.uniroma1.it Esercitatore: Dott. Roberto Petroccia petroccia@di.uniroma1.it Pagina del corso: http://twiki.di.uniroma1.it/twiki/view/programmazione1/eo/webhome
DettagliLezione 23 - ADT LISTA
Lezione 23 - ADT LISTA Rappresentazione concreta del Tipo di Dati Astratto LISTA. - Cenni sulla rappresentazione mediante array (puah!) - Rappresentazione concreta mediante struct e puntatori. - concetto
Dettaglidott. Sabrina Senatore
dott. Sabrina Senatore Dipartimento di Informatica Riepilogo strutture 1 Sintassi della dichiarazione: typedef struct nome_tipo { Dichiarazione dei campi nome_tipo; typedef struct point{ int x; int y;
DettagliGestione dinamica di una coda
Gestione dinamica di una coda Una coda o queue è una lista lineare a lunghezza variabile in cui l'inserimento di nuovi elementi (push) viene effettuato ad un estremo (fondo o rear) e l'estrazione degli
DettagliLE STRUTTURE DATI DINAMICHE
LE TRUTTURE DTI DIMICHE Talvolta è necessario allocare spazio di memoria durante l esecuzione di un programma oppure creare variabili di durata temporanea. Esempio: Leggere e memorizzare dei numeri interi
DettagliPreviously on TDP. LISTA rappresentata mediante "struct e puntatori" TipoLista lis. Dichiarare DISEGNARE e. DISEGNARE aux.
Previously on TDP lis 7 21 ** ** 14 *** *** memoria 9 LISTA rappresentata mediante "struct e puntatori" TipoLista lis lis->info == cosa? lis->next == ; /*cosa e?*/ che cosa e' (*lis)? Dichiarare DISEGNARE
DettagliCognome Domanda Nome Punteggio max
Fondamenti di Informatica - Proff. C. Bolchini, E. Di Nitto, F. Distante Corso di laurea in Ingegneria Meccanica e Aerospaziale Appello del 18 giugno 2002 Cognome Domanda 1 2 3 4 5 Nome Punteggio max 5
DettagliELEMENTI DI INFORMATICA LB ESERCITAZIONE (del 09/03/2007) Files, Strutture e Liste
ELEMENTI DI INFORMATICA LB ESERCITAZIONE (del 09/03/2007) Files, Strutture e Liste ESERCIZIO n.1 È dato un file di testo che contiene l'elenco dei vestiti presenti in un negozio. Il file contiene al massimo
Dettagli