Linguaggio C. Esercizio 1

Documenti analoghi
Esercitazione 11. Liste semplici

dott. Sabrina Senatore

int ninv; /* numero di inventario */

Laboratorio di Programmazione

Hash Table. Hash Table

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Appello di Informatica B

Concetti chiave. Struct. Variabili strutturate: il tipo struct Elementi di una struttura typedef e struct Array di strutture

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.

Fondamenti di Informatica AA 2016/2017

(*lista == NULL (*lista)->info >= elem) accede al campo next di *lista solo se *lista non e' NULL. */ #include <stdio.h> #include <stdlib.

Il linguaggio C. Puntatori e dintorni

5. Quinta esercitazione autoguidata: liste semplici

FUNZIONI che operano su LISTE

I puntatori e l allocazione dinamica di memoria

Compito di Fondamenti di Informatica

Strutture dati. Le liste

PILE E CODE. Pile (stack):

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Rappresentazione di dati

Fondamenti di Informatica 2

Fondamenti di Informatica II

La Struttura Dati Lista

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Struct, enum, Puntatori e Array dinamici

Laboratorio di Informatica

Esercizio 1 (15 punti)

Programmazione I - Laboratorio

Strutture Dinamiche. Fondamenti di Informatica

Esercitazione 12. Esercizi di Ricapitolazione

Liste Doppiamente Collegate

#include<stdio.h> #include<stdlib.h> #include<string.h> typedef char Griglia [3][3];

Strutture Dati Dinamiche

Informatica 1. Prova di recupero 21 Settembre 2001

Strutture dati dinamiche in C (II)

Esercizi. Stringhe. Stringhe Ricerca binaria

Scrittura formattata - printf

Esercizi di programmazione in linguaggio C English Dictionary

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Esercitazione 10. Strutture ed Enumerazioni. Allocazione dinamica di memoria

RICORSIONE - schema ricorsivo (o induttivo) si esegue l'azione S, su un insieme di dati D, mediante eventuale esecuzione di

Informatica A (per gestionali) A.A. 2004/2005. Esercizi di riepilogo

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

Introduzione al linguaggio C Puntatori

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Lezione 8 Struct e qsort

Implementazione dell albero binario in linguaggio C++

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Funzioni con numero variabile di parametri: Funzioni Variadiche in C. Massimo Benerecetti Laboratorio di Algoritmi e Strutture Dati

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

Programmazione I - Laboratorio

Consideriamo un vettore allocato dinamicamente

Esercizi Strutture dati di tipo astratto

Pile: implementazioni. Pile. Pile: liste /1. Pile: liste /2. Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche

Un esempio di mutua ricorsione

L'Allocazione Dinamica della Memoria nel linguaggio C

Le Liste. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Le Liste 1 / 31

RELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA

Lezione 9: Strutture e allocazione dinamica della memoria

I puntatori e l allocazione dinamica di memoria

I puntatori e l allocazione dinamica di memoria. Esercizi risolti

(1) - - (4) R4 = R7 * R7 (4) (2) (3) 5 - (4) rinviata perché in WAW con (3) 6 (3) e (4) ritirabili ma attendono il completamento di (2) (2) (3) (4)

Politecnico di Milano - Facoltà di Ingegneria INFORMATICA A - Corso per allievi GESTIONALI - Prof. C. SILVANO A. A. 2001/ febbraio A

L'allocazione dinamica della memoria

Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; }

Esercizi. La funzione swapint() primo tentativo

Gestione dinamica della memoria

La sintassi del C APPENDICE H

Esercizio 1: Puntatori impiegati che sono manager

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

Perché il linguaggio C?

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

7. Strutture di controllo

Allocazione dinamica della memoria

Gestione dei file. File di testo e binari

Linguaggio C: PUNTATORI

Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Esercizi C sui tipi definiti dall utente

in più stringhe,... ADT un tipo è caratterizzato dalle operazioni consentite su di esso: un numero è qualcosa che si può moltiplicare, sommare,...

Problem solving elementare su dati vettoriali

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Indice. La gestione dei file in C e gli stream. Apertura e chiusura di un file. Operazioni sui file. Accesso sequenziale e non sequenziale

Aggregati di dati eterogenei: il tipo struct. Esercizi risolti

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste

Fondamenti di Informatica T. Linguaggio C: File

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Linguaggio C - Strutture

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 5A di Mercoledì 13 Luglio 2011 tempo a disposizione 2h

MAGAZZINO.CPP January 2, 2008 Page 1

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prima prova in itinere COGNOME E NOME. 13 novembre 2006 RIGA COLONNA MATRICOLA

Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi

Il linguaggio Java Istruzioni di Controllo

Transcript:

Linguaggio C Esercizi su puntatori e liste Walter Didimo (e-mail:didimo@dia.uniroma3.it) supplemento al Corso di Calcolatori Elettronici (Riccardo Torlone) 1 Esercizio 1 Siano p e q due puntatori a variabili intere. Si scriva un programma che svolga i seguenti punti, per ognuno dei quali viene data una funzione apposita: alloca dinamicamente due variabili intere ed assegna gli indirizzi corrispondenti a p e q, rispettivamente memorizza nelle due variabili intere due valori inseriti dall'utente stampa il contenuto delle variabili intere ed i loro indirizzi di memoria scambia gli indirizzi di memoria in p e q e ristampa il contenuto delle variabili intere e dei loro indirizzi dopo lo scambio 2

#include<stdio.h> #include<stdlib.h> Programma (1/2) void alloca_variabili (int **pp, int **qp){ *pp = (int *)malloc(sizeof(int)); *qp = (int *)malloc(sizeof(int)); void memorizza(int *p, int *q){ printf ("\ninserire due interi separati da uno spazio.."); scanf ("%d %d", p, q); void stampa (int *p, int *q){ printf ("\nindirizzo: %p, contenuto: %d",p,*p); printf ("\nindirizzo: %p, contenuto: %d",q,*q); 3 Programma (2/2) void scambia (int **p, int **q){ int *temp; temp = *p; *p = *q; *q = temp; int main (){ int *p, *q; alloca_variabili (&p,&q); memorizza (p,q); stampa (p,q); scambia (&p,&q); stampa (p,q); return 0; 4

Esercizio 2 Sia L una lista di record, ciascuno dei quali ha i seguenti campi: nome : di tipo stringa cognome : di tipo stringa età : di tipo intero Si scriva un programma che permette di eseguire le seguenti operazioni su L: aggiunge un nuovo record con dati specificati dall utente cancella un record con età specificata dall utente cancella tutti i record con età specificata dall utente stampa tutti i record della lista 5 #include<stdio.h> #include<stdlib.h> #include<string.h> Programma (1/7) typedef char String[20]; /* tipo puntatore ad elemento */ typedef struct elem* PElem; /* tipo puntatore a lista (cioè ad elemento)*/ typedef struct elem* PList; typedef struct elem { String nome; String cognome; int eta; PElem next; Elem; 6

Programma (2/7) /* inizializza la lista come vuota */ PList initlist(){ return NULL; /*end initlist*/ /* aggiunge un elemento in testa alla lista e ritorna il nuovo puntatore alla lista */ PList add (PList first, String _nome, String _cognome, int _eta){ PElem p; p = (PElem)malloc(sizeof(Elem)); strcpy(p->nome,_nome); strcpy(p->cognome,_cognome); p->eta = _eta; p->next = first; return p; /*end add*/ 7 Programma (3/7) /* ricerca e ritorna la posizione del primo record con età specificata; se un tale record non esiste ritorna NULL; in *pp mette la posizione del record precedente a quello cercato (serve per la cancellazione) */ PElem find (PList first, int _eta, PElem *pp){ PElem p = first; *pp = NULL; while (p){ if (p->eta == _eta) break; *pp = p; p = p->next; /*end while*/ return p; /*end find*/ 8

Programma (4/7) /* cancella il primo record con età specificata e ritorna il nuovo puntatore alla lista */ PList del (PList first, int _eta){ PElem p, p_pred, p_succ; p = find (first, _eta, &p_pred); if (p){ p_succ = p->next; if (p_pred){ p_pred->next = p_succ; free (p); /*end if*/ else{ free (p); first = p_succ; /*end else*/ /*end if*/ return first; /*end del*/ 9 Programma (5/7) /* cancella tutti i record con età specificata e ritorna il nuovo puntatore alla lista */ PList delall (PList first, int _eta){ PElem p_pred; while ( find (first, _eta, &p_pred) ) first = del (first, _eta); return first; /*end delall*/ /* stampa tutti i record della lista */ void print (PList first){ PElem p = first; while (p){ printf ("\nnome : %s", p->nome); printf ("\ncognome: %s", p->cognome); printf ("\netà : %d\n", p->eta); p = p->next; /*end while*/ /*end print*/ 10

Programma (6/7) int main (){ int option; PList first = initlist(); do{ printf ("\n\n1 - aggiungi record"); printf ("\n2 - cancella record"); printf ("\n3 - cancella tutti i record"); printf ("\n4 - stampa elementi"); printf ("\n5 - esci"); printf ("\nscegli opzione.."); scanf ("%d",&option); switch (option){ case 1:{ String _nome, _cognome; int _eta; printf ("\nnome cognome.."); scanf ("%s %s",_nome,_cognome); printf ("\netà.."); scanf ("%d",&_eta); first = add (first,_nome,_cognome,_eta); break; 11 Programma (7/7) case 2: case 3:{ int _eta; printf ("\netà.."); scanf ("%d",&_eta); if (option==2) first = del (first,_eta); else first = delall (first, _eta); break; case 4: print (first); break; default: break; /*end switch*/ /*end do*/ while (option!= 5); return 0; /*end main*/ 12