Informatica 1, Sez. di Cremona
|
|
- Michelina Colli
- 4 anni fa
- Visualizzazioni
Transcript
1 Informatica 1, Sez. di Cremona Prova in itinere del 27 Gennaio 2010 Si risolvano i seguenti esercizi. La prova prevede un punteggio massimo di 17/14-esimi, cui andranno sommati i punti ottenuti nel primo compitino e quelli del laboratorio. Il tempo a disposizione è 2 h. e 30 minuti Esercizio 1 (punti 4) Si consideri il seguente programma (i puntini indicano parti del codice irrilevanti) # typedef int *Point; typedef Point *Dpoint; int x = 3; int F1 ( ) /* prototipo della funzione F1*/ void F2 (Point P) /* prototipo della funzione F2*/ void main () { int y; y = x + F1( ); printf ( il risultato finale è %d \n, y) int F1 ( ) { Dpoint DP; DP = malloc( sizeof (Point)); *DP = malloc (sizeof (int)); F2 (*DP); return (**DP) void F2 (Point P) { *P = 5 Si descriva, preferibilmente mediante apposite figure lo stato completo della memoria: a. subito dopo la chiamata di F2 da parte di F1 b. appena prima della terminazione del main Al momento del ritorno al main sono state create delle dangling references o è stata creata della garbage? NB Per stato completo della memoria si intende soprattutto lo stato della stack e quello della heap. Tuttavia può essere utile disegnare o fare riferimento anche all area dati che contiene il codice oggetto del main e delle funzioni. Alternativamente è anche possibile indicare mediante generici xxx, yyy gli indirizzi di alcune istruzioni del codice oggetto sia del main che delle funzioni.
2 Esercizio 2 (punti 4) Si consideri un file di testo Testo costituito da una sequenza di stringhe lunghe al più 30 caratteri; ogni stringa è terminata dall apposito carattere newline. Si scriva un sottoprogramma (non un intero programma!) che: 1. Apra il file Testo; 2. Costruisca una lista di stringhe che contenga esattamente le stringhe del file disposte in ordine alfabetico (NB: il file non è originariamente già ordinato); 3. Chiuda il file;. 4. Produca come risultato un puntatore alla testa della lista costruita.. NB1: Il codice del sottoprogramma deve essere preceduto dalle eventuali dichiarazioni necessarie per la corretta compilazione ed esecuzione del sottoprogramma stesso. NB2: E fortemente consigliato fare uso di sottoprogrammi già definiti, preferibilmente sottoprogrammi della libreria standard del C, o anche sottoprogrammi definiti nel testo. Qualora si faccia uso di questi ultimi non è necessario ridefinirli, basta dichiararli; se tuttavia essi abbisognassero di qualche modifica rispetto al codice originario è necessario ridefinirne il codice o almeno spiegare con precisione le modifiche necessarie. Esercizio 3 (punti 4) Si scriva un sottoprogramma ricorsivo che riceva come parametri un array di interi e un intero non negativo che indica il numero di elementi dell array su cui operare a partire dal primo (si assuma che tale numero sia sempre non superiore al numero di elementi effettivamente presenti) e fornisca come risultato la sommatoria di tali elementi. NB: è fortemente preferibile che ad ogni chiamata ricorsiva il sottoprogramma non allochi un proprio array locale.
3 Esercizio 4 (punti 5) Si considerino i seguenti programmi C (gli #include necessari sono omessi): Programma 1 void main( ) { pid_t pid, miopid, pidpadre; int i, stato_exit, stato_wait; pidpadre = getpid( ); for (i = 1; i <= 3; i++) { pid=fork( ); if (pid == 0) { miopid=getpid( ); printf("sono il processo figlio %i esimo del processo %i con pid %i \n", i, pidpadre, miopid); printf("termino \n\n"); stato_exit=i; exit(stato_exit); else { printf("ho creato il processo figlio %i esimo il cui pid è%i \n\n ", i, pid); pid = wait (&stato_wait); printf("è terminato il processo figlio %i esimo \n", i); printf("il pid del figlio e' %i, lo stato e' %i\n",pid,stato_wait/256); Programma 2 void main( ) { pid_t pid, miopid, pidpadre; int i, stato_exit, stato_wait; pidpadre = getpid( ); for (i = 1; i <= 3; i++) { pid=fork( ); if (pid == 0) { miopid=getpid( ); printf("sono il processo figlio %i esimo del processo %i con pid %i \n", i, pidpadre, miopid); printf("termino \n\n"); stato_exit=i; exit(stato_exit); else { printf("ho creato il processo figlio %i esimo il cui pid è%i \n\n ", i, pid); pid = waitpid (pid, &stato_wait); printf("è terminato il processo figlio %i esimo \n", i); printf("il pid del figlio e' %i, lo stato e' %i\n", pid, stato_wait/256);
4 Programma 3 void main( ) { pid_t pid_ret, pid[4], miopid, pidpadre; int i, stato_exit, stato_wait; pidpadre = getpid( ); for (i = 1; i <= 3; i++) { pid[i] = fork( ); if (pid[i] == 0) break; for (i = 1; i <= 3; i++) { if (pid[i] == 0) { miopid=getpid( ); printf("sono il processo figlio %i esimo del processo %i con pid %i \n", i, pidpadre, miopid); printf("termino \n\n"); stato_exit=i; exit(stato_exit); else if (pidpadre == getpid( )) { printf("ho creato il processo figlio %i esimo il cui pid è%i \n\n ", i, pid[i]); pid_ret= waitpid (pid[i], &stato_wait); printf("è terminato il processo figlio %i esimo \n", i); printf("il pid del figlio e' %i, lo stato e' %i\n", pid_ret, stato_wait/256); Si assuma che ogni processo venga generato e termini correttamente senza errori. Si supponga inoltre che il S.O assegni il pid 500 al padre e numeri di pid a seguire per i figli creati dal padre. Si dica, giustificando brevemente la risposta, se i tre programmi o due tra essi sono tra loro equivalenti nel senso che l insieme di tutte le possibili risposte dei tre o due programmi coincidono: se anche una sola possibile risposta di un processo non è possibile nell altro i processi non si considerano equivalenti. Nel caso si ritenga che essi siano equivalenti si indichino alcune delle possibili risposte ad essi comuni (almeno 3, se ne sono possibili 3 o più). Per risposta si intende l output completo fornito da padre e figli. Se invece si ritiene che due tra loro o tutti e tre non siano equivalenti si indichino alcune risposte per ognuno dei 3 programmi evidenziando quali tra esse non sarebbero possibili per gli altri o per un altro dei due rimanenti. In sostanza si dimostri la diversità tra i programmi evidenziando i comportamenti diversi ma anche le eventuali riposte che potrebbero comunque essere fornite da tutti e tre o due di essi.
5 Soluzioni Soluzione dell Esercizio 1
6 Stack Valore attuale dello stackpointer Link dinamico di F2 Indirizzo di base del record di attivazione corrente, ossia di F2 = Precedente valore dello SP zzz /*indirizzo di ritorno a F1*/ P /*parametro di F2*/ DP /*variabile locale di F1*/ Link dinamico di F1 Indirizzo di base del record di attivazione di F1 = Precedente valore dello SP Indirizzo di base del record di attivazione del main yyy /*indirizzo di ritorno al main*/ /*Risultato di F1*/ = 5 y /* variabile locale del main */ x /* variabile globale*/ = 3 Heap a. Stato della memoria subito dopo la chiamata di F2
7 Stack Valore attuale dello stackpointer Indirizzo di base del record di attivazione del main y /* variabile locale del main */ = 8 x /* variabile globale*/ = 3 5 Heap b. stato della memoria appena prima della terminazione del main Al ritorno al main da parte di F1 le due celle allocate nello heap sono diventate inaccessibili e quindi garbage, come risulta evidente dalla figura b.
8 Soluzione dell Esercizio 2 E opportuno utilizzare i sottoprogrammi di libreria per la gestione dei file e delle stringhe. E inoltre utile adattare in modo semplice la procedura di inserimento in ordine di un elemento in una lista in modo che il tipo degli elementi sia la stringa e quindi il confronto tra stringhe avvenga mediante la procedura di libreria strcmp. # include stdlib.h # define LunghStr 30 typedef char TipoElemento [LunghStr]; struct EL { TipoElemento Info; structel *Prox; ; typedef structel ElemLista; typedef ElemLista *ListaDiElem; void Inizializza (ListaDiElem *Lista) /* prototipo della funzione*/; void InserisciInOrdine(ListaDiElem *Lista, TipoElemento Elem) { ElemLista *Punt, *PuntCorrente, *PuntPrecedente; PuntPrecedente = NULL; PuntCorrente = *Lista; while (PuntCorrente!= NULL && strcmp( Elem, PuntCorrente >Info) > 0) { PuntPrecedente = PuntCorrente; PuntCorrente = PuntCorrente->Prox; Punt = malloc(sizeof(elemlista)); strcpy (Punt >Info, Elem); Punt >Prox = PuntCorrente; if (PuntPrecedente)!= NULL PuntPrecedente >Prox = Punt; /* Inserisci internamente alla lista */ else *Lista = Punt; /* Inserisci in testa alla lista */
9 ListaDiElem CostruisciLista ( ) { TipoElemento linea; FILE *ft; ListaDiElem ListRis if ((ft = fopen("testo", "r")) == NULL) printf("il file non può essere aperto\n"); else { Inizializza ( &ListRis); while (fgets(linea, LunghStr,ft)!= NULL) InserisciInOrdine(&ListRis, linea); fclose(ft); return (ListRis); Soluzione dell Esercizio 3 int SommaRic (int numelem, int seq [ ]) { if (numelem == 0) return 0 else return (seq[0] + SommaRic (numelem -1, &seq[1])
10 Soluzione dell Esercizio 4 I primi due programmi sono del tutto equivalenti, a dispetto del fatto che il secondo impieghi la primitiva waitpid invece della semplice wait. Infatti il processo padre ad ogni iterazione del ciclo genera un figlio, ma prima di generarne altri si mette in attesa; quindi non può che ricevere l avviso di terminazione del figlio appena generato, l unico vivo o zombie- esistente. Quindi le possibili uscite saranno tutte del tipo sono il processo figlio 1 esimo del processo 500 con pid 501 termino ho creato il processo figlio 1 esimo il cui pid è 501 è terminato il processo figlio 1 esimo il pid del figlio e' 501, lo stato e' 1 sono il processo figlio 2 esimo del processo 500 con pid 502 termino ho creato il processo figlio 2 esimo il cui pid è 502 è terminato il processo figlio 2 esimo il pid del figlio e' 502, lo stato e' 2. E però possibile che per ogni figlio generato il padre esegua l istruzione di stampa che precede l attesa prima che il figlio inizi o termini l esecuzione. Si possono perciò verificare, in ambo i casi, anche uscite del tipo ho creato il processo figlio 1 esimo il cui pid è 501 sono il processo figlio 1 esimo del processo 500 con pid 501 termino è terminato il processo figlio 1 esimo il pid del figlio e' 501, lo stato e' 1
11 sono il processo figlio 2 esimo del processo 500 con pid 502 termino ho creato il processo figlio 2 esimo il cui pid è 502 è terminato il processo figlio 2 esimo il pid del figlio e' 502, lo stato e' 2. oppure ancora sono il processo figlio 1 esimo del processo 500 con pid 501 ho creato il processo figlio 1 esimo il cui pid è 501 termino è terminato il processo figlio 1 esimo il pid del figlio e' 501, lo stato e' 1 sono il processo figlio 2 esimo del processo 500 con pid 502 termino ho creato il processo figlio 2 esimo il cui pid è 502 è terminato il processo figlio 2 esimo il pid del figlio e' 502, lo stato e' 2. Il comportamento del Programma 3 è invece diverso e presenta una gamma di possibili risposte molto più ampia, tra cui compaiono anche quelle fornite dai primi due programmi. Precisamente: I tre figli del programma padre possono scrivere il loro output in qualsiasi ordine relativo perché non è detto che vadano in esecuzione nello stesso ordine in cui sono generati Il padre scriverà i suoi messaggi ho creato il processo figlio x esimo il cui pid è 50x è terminato il processo figlio x esimo
12 il pid del figlio e' 50x, lo stato e' x comunque nell ordine x = 1, 2, 3 anche se esso non fosse l ordine di terminazione dei figli poiché è il padre che li attende in ordine grazie all uso della waitpid Le frasi prodotte dai vari figli possono essere intercalate con quelle prodotte dal padre in qualsiasi ordine, fermo restando che essi devono stampare la frase termino prima che il padre possa rendersi conto, e quindi notificare, la loro terninazione, ciò che avviene dopo la waitpid. NB Si noti che il primo ciclo for viene eseguito per intero solo dal padre, mentre il primo figlio ne esce alla prima iterazione, il secondo alla seconda, il terzo appena prima di ultimare l ultima; ognuno ha pid[i] = 0 solo per il proprio valore di i. Inoltre i fligli 2 e 3 eseguiranno il secondo ciclo for alcune volte senza eseguire nessuna istruzione del suo corpo.
Fondamenti 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
DettagliEsercizio 1 (punti 5) E noto che un Full adder è un circuito logico che realizza le funzioni Riporto e Risultato seondo la definizione seguente
Informatica 1, Sez. di Cremona Appello del 12 Febbraio 2009 NB. Gli allievi Informatici e Gestionali, ad eccezione di coloro che hanno ottenuto il riconoscimento di 5 crediti per esami sostenuti in altri
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));
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
DettagliEsercizio 1: funzione con valore di ritorno di tipo puntatore
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 7 Esercitazione: 14 dicembre 2005 Esercizi su ricorsione, manipolazione stringhe, strutture dinamiche Problema: Esercizio
DettagliProgrammazione di sistema e gestione dei processi in C
Programmazione di sistema e gestione dei processi in C Indice Dalla macchina astratta sequenziale C Alla macchina parallela Processi e programmi Le primitive per la gestione dei processi Creazione, sospensione,
DettagliFondamenti di Informatica
Fondamenti di Informatica Prima prova intermedia - 11 Novembre 2009 Si risolvano i seguenti esercizi. Il compitino prevede un punteggio massimo di 15/14-esimi, cui andranno sommati i punti ottenuti nel
Dettagli1. PARALLELISMO E PROCESSI. 1.1 La necessità del parallelismo
1. PARALLELISMO E PROCESSI 1.1 La necessità del parallelismo Un programma eseguibile, generato ad esempio da un programma C, è rigorosamente sequenziale, nel senso che viene eseguito una istruzione alla
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
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
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 Gestione della memoria La gestione statica della memoria è molto efficiente ma non è priva di inconvenienti È rigida rispetto a informazioni la cui dimensione non è nota a priori
Dettaglieseguire comandi dati dall'utente, utilizzando una macchina reale, di livello inferiore,
La programmazione di sistema Introduzione ai sistemi operativi multiprocesso Primitive per la gestione dei processi http://home.dei.polimi.it/silvano/acso.htm Il sistema ste operativo Il Sistema Operativo
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2017-18 Pietro Frasca Lezione 6 Martedì 24-10-2017 1 Sostituzione del codice Tipicamente, dopo una
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
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
DettagliAllocazione 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
DettagliAddendum alle chiamate di sistema per la gestione processi. E Mumolo
Addendum alle chiamate di sistema per la gestione processi E Mumolo Definiamo un processo proc.c che scrive l'argomento passato in linea: void main(int argc, char *argv[]){ printf("sono il processo %s\n",
DettagliEsercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);
Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di
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 appello 15 luglio 2013 Matricola Cognome Nome Istruzioni Durata prova: 2 ore LE RISPOSTE
DettagliSystem call per la gestione di processi
System call per la gestione di processi Chiamate di sistema per creazione di processi: fork() sostituzione di codice e dati: exec...() terminazione: exit() sospensione in attesa della terminazione di figli:
DettagliPolitecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri
Politecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri Fondamenti di Informatica II appello 5 luglio 2014 Matricola Cognome Nome Istruzioni Durata prova: 2
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
DettagliSystem call per la gestione di processi
System call per la gestione di processi Chiamate di sistema per creazione di processi: fork() sostituzione di codice e dati: exec...() terminazione: exit() sospensione in attesa della terminazione di figli:
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
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
DettagliL'Allocazione Dinamica della Memoria nel linguaggio C
L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego riochierego@libero.it http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria
DettagliI puntatori e l allocazione dinamica di memoria
I puntatori e l allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 2006 Politecnico di Torino 1 Allocare = collocare in
DettagliCORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 4
UNIVERSITÀ DEGLI STUDI DI PARMA Facoltà di Ingegneria Corso di Laurea in Ingegneria Elettronica e delle Telecomunicazioni a.a. 2005-2006 CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 4 1 Funzioni per il
DettagliAXO. Operativo. Architetture dei Calcolatori e Sistema. programmazione di sistema
AXO Architetture dei Calcolatori e Sistema Operativo programmazione di sistema Il sistema operativo Il Sistema Operativo è un insieme di programmi (moduli software) che svolgono funzioni di servizio nel
DettagliEsercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018
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
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 Informatica I III appello 6 settembre 2011 Matricola Cognome Nome Durata prova: 1 ora ½ Istruzioni
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
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2018-2019 Pietro Frasca Lezione 5 Martedì 16-10-2018 Operazioni sui processi Nella maggior parte dei
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
DettagliAllocazione dinamica della memoria
Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori
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
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 16 febbraio 2016 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliLaboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007
Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 08/03/07 Nota Questi lucidi sono tratti
DettagliFUNZIONI. attribuire un nome ad un insieme di istruzioni parametrizzare l esecuzione del codice
Funzioni FUNZIONI Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvono parti specifiche di un problema Una funzione permette di attribuire un nome ad un insieme di istruzioni
DettagliEsercizio sulla gestione di processi in Unix!
! Esercizio sulla gestione di processi in Unix! 1 Esercizio Si vuole realizzare un programma C che abbia la seguente interfaccia:./launch_commands Il programma deve richiedere all utente: un numero N (pari
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
DettagliI Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix.
I Processi nel Sistema Operativo Unix Processi Unix Unix è un sistema operativo multiprogrammato a divisione di tempo: l unità di computazione è il processo. Caratteristiche del processo Unix: processo
DettagliGestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.
DettagliLinguaggio C. Esercizio 1
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
DettagliFUNZIONI che operano su LISTE e TEMI d ESAME
D O D I C E S I M A ESERCITAZIONE 2006/ L. MANDELLI FUNZIONI che operano su LISTE e TEMI d ESAME ------------------calcola la somma degli elementi in posizione pari di una lista Si assuma che il primo
DettagliInformatica B Prof. Di Nitto e Morzenti Appello del 17 febbraio 2005 Cognome e Nome... Numero Matricola... (in stampatello)
Informatica B Prof. Di Nitto e Morzenti Appello del 17 febbraio 2005 Cognome e Nome... Numero Matricola... (in stampatello) Risolvere i seguenti esercizi, scrivendo le risposte ed eventuali tracce di soluzione
DettagliControllo dei Processi 1
Controllo dei Processi 1 I processi Nei sistemi Unix/Linux ogni processo ne può generare altri. Il processo che li genera è detto processo padre (parent process), mentre i processi generati sono detti
DettagliIntroduzione alla programmazione ricorsiva
Introduzione alla programmazione ricorsiva chiamata ricorsiva di sottoprogrammi un sottoprogramma P chiama lo stesso P direttamente o indirettamente (e.g., P chiama Q che chiama P) sembra circolo vizioso
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
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
DettagliSystem Calls per la Gestione dei Processi
System Calls per la Gestione dei Processi Domenico Cotroneo Dipartimento di Informatica e Sistemistica Università degli Studi di Napoli Federico II Roadmap Process Context Identificativi getpid() getppid()
DettagliSistemi Operativi. Marzo-Giugno 2011 matricole congrue 0 mod 3. Controllo dei processi - I
Marzo-Giugno 2011 matricole congrue 0 mod 3 Controllo dei processi - I Controllo dei processi Creazione di nuovi processi Esecuzione di programmi Processo di terminazione Altro 2 1 Identificatori di processi
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)
DettagliAritmetica dei puntatori
Aritmetica dei puntatori Marco Alberti Programmazione e Laboratorio, A.A. 2016-2017 Dipartimento di Matematica e Informatica - Università di Ferrara Ultima modifica: 7 dicembre 2016 sizeof L operatore
DettagliAllocazione dinamica della memoria: calloc() Se T è il nomed di un tipo, la chiamata calloc(n, sizeof(t)) è equivalente a malloc(n * sizeof(t))
Allocazione dinamica della memoria: malloc() In C è possibile allocare dinamicamente un area di memoria (ossia, durante l esecuzione di un programma) tramite le funzioni malloc() e calloc() (occorre includere
DettagliLABORATORIO DI SISTEMI OPERATIVI
LABORATORIO DI SISTEMI OPERATIVI Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Guglielmo Cola Email: g.cola@iet.unipi.it Web: iet.unipi.it/g.cola Processi in Unix/Linux caratteristiche
DettagliProgrammazione I Prova scritta - 10 gennaio h20min
Programmazione I Prova scritta - 10 gennaio 2019-1h20min NOTA: Nei programmi si trascuri ogni problema legato al tipo ed al valore di ritorno della funzione main, inoltre si sottintenda la presenza delle
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
DettagliUna stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' a p e \0
STRINGHE: ARRAY DI CARATTERI Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' s a p e \0 0 1 2 3 Un vettore di N caratteri può dunque ospitare stringhe lunghe al più N-1
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
DettagliLa creazione di un nuovo processo in UNIX
La creazione di un nuovo processo in UNIX #include int fork(void); Viene creato un nuovo processo (figlio) identico (stesso codice, area dati copiata) al processo (padre) che ha invocato la
DettagliStrutture Dati Dinamiche
Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti
DettagliPolitecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri
Politecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri Fondamenti di Informatica II prova 13 febbraio 2015 Matricola/codice persona Cognome Nome Durata prova:
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;
DettagliProgrammazione I (Classe 1)
Programmazione I (Classe 1) Preappello di Giugno (prima prova) 10 Giugno 2016 Docenti: De Prisco - Deufemia - Zizza Cognome: Nome: Matricola: Ritirato 1 Esercizi (leggere attentamente il testo prima di
DettagliPolitecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri. Fondamenti di Informatica II prova in itinere
Politecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri Fondamenti di Informatica II prova in itinere 14 febbraio 2014 Matricola Cognome Nome Istruzioni Durata
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
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,
DettagliEsercizio 1 Liste: calcolo perimetro di un poligono
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 12 Esercitazione: 28 gennaio 2005 Esercizi su liste, ricorsione, file. Scaletta Esercizio 1 Liste: calcolo perimetro di
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
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 Informatica I II appello 13 luglio 2011 Matricola Cognome Nome Durata prova: 2 ore Fondamenti
DettagliARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.
3 ITI - a.s. 2007-2008 Compiti di Informatica ESTATE 2008 ARRAY E STRINGHE Scrivere una funzione che carica da tastiera un array di n elementi e lo stampa invertendo il primo elemento con l'ultimo, il
DettagliSistemi Operativi Teledidattico
Sistemi Operativi Teledidattico Anno 2002 3a esercitazione 5/10/2002 Paolo Torroni processi fork (creazione di un figlio) exec (sostituzione di codice del programma in esecuzione) wait (attesa della terminazione
DettagliScope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano
Scope delle variabili e passaggio parametri Danilo Ardagna Politecnico di Milano 1-4-2014 Introduzione! Con le funzioni è stato introdotto un meccanismo per definire dei piccoli programmi all interno di
DettagliIl processo figlio : utilizza lo stesso codice che sta eseguendo il padre ;
La creazione di un nuovo processo in UNIX int fork(void); Viene creato un nuovo processo (figlio) identico (stesso codice, area dati copiata) al processo (padre) che ha invocato la fork Solo il valore
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
DettagliEsercitazione 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
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 III appello 6 settembre 2012 Matricola Cognome Nome Istruzioni Durata prova: 1 ora 30 minuti
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
Dettagliil tipo di parallelismo dipende dal grado di cooperazione
Thread Settembre 2009 programma e parallelismo il tipo di parallelismo dipende dal grado di cooperazione (scambio d informazione) necessario tra attività svolte in parallelo processo macchina virtuale
DettagliEsercizio 1: Puntatori impiegati che sono manager
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 10 Esercitazione: 25 gennaio 2006 Esercizi di riepilogo Problema: Esercizio 1: Puntatori impiegati che sono manager Si
DettagliLaboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Funzioni standard del C: Funzioni di I/O Allocazione dinamica della memoria Funzioni su stringhe di caratteri Testo di riferimento B.W. Kernighan & D.M. Ritchie
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
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
DettagliUniversità degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica. SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto fork() & exec() Roberto Perdisci A.A. 2004/2005 1 Dettagli
DettagliCorso di laurea in ingegneria informatica Esame di sistemi operativi 21 gennaio 2009 SOLUZIONI
Corso di laurea in ingegneria informatica Esame di sistemi operativi 21 gennaio 2009 SOLUZIONI 1. Si consideri il programma C seguente (gli #include necessari sono omessi): / programma principale / 1.
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 della prova scritta del 6 Aprile 2006 Esercizio 1 (4 punti) Date le seguenti variabili int A[] = 2,3,7,-2,5,8,-4; int N = 7; int x = -1; Scrivere la porzione di codice che inserisce
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
DettagliVariabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free
Variabili dinamiche Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free 1 Tipi di variabili in C In C è possibile classificare le variabili in
DettagliIntroduzione al linguaggio C Puntatori
Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2017
DettagliSISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi
SISTEMI OPERATIVI Processi in Linux 2 Creazione di processi concorrenti» La creazione di un processo figlio consente di far eseguire alcune funzionalità del programma in modo concorrente» Opzione 1 il
DettagliLaboratorio di Sistemi Operativi
primavera 2009 Controllo dei processi (2) Funzioni wait e waitpid quando un processo termina il kernel manda al padre il segnale SIGCHLD il padre può ignorare il segnale (default) oppure lanciare una funzione
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 17 febbraio 2014 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
Dettagli! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente
! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente!!la loro esistenza deve essere prevista e dichiarata a priori! Questo può rappresentare un problema soprattutto per variabili
DettagliIntroduzione al C. Lezione 4 Allocazione dinamica della memoria. Rossano Venturini. Pagina web del corso
Introduzione al C Lezione 4 Allocazione dinamica della memoria Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Lezioni di ripasso
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
Dettagligiapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL
Materiale di ausilio utilizzabile durante l appello: tutto il materiale è a disposizione, inclusi libri, lucidi, appunti, esercizi svolti e siti Web ad accesso consentito in Lab06. L utilizzo di meorie
DettagliProgrammazione II canale AD -- Esonero del 21/04/2006
Esercizio 1 (Sbarramento ) Si scriva una funzione ricorsiva che riceve in input una lista concatenata di interi L e restituisce una nuova lista concatenata di interi L1 in cui l elemento j-simo ( j 1)
Dettagli