Esercizi di preparazione alla Seconda Prova Intermedia Fondamenti di Informatica L-A (Proff. Paola Mello e Paolo Bellavista)
|
|
- Gustavo Leonardi
- 7 anni fa
- Visualizzazioni
Transcript
1 Esercizi di preparazione alla Seconda Prova Intermedia Fondamenti di Informatica L-A (Proff. Paola Mello e Paolo Bellavista) La seconda prova intermedia prevede: un esercizio di analisi; uno/due esercizi di sintesi; domande. Un esempio di possibile Seconda Prova Intermedia ESERCIZIO 1 (sintesi) Si scriva una funzione che riceva come parametri di ingresso un vettore Vold di interi e la sua dimensione e restituisca come parametro di uscita un nuovo vettore Vnew contenente i valori di Vold minori di un valore Max specificato ed il loro numero N. void positivi(int Vold[], int Vnew[], int DimOld, int Max, int *N); Dato un file di testo auto.txt, si supponga che contenga righe ciascuna contenente una stringa (targa dell auto) e un intero (numero di Km), separati da uno o più spazi. Ad esempio: BO MO FE Si scriva un programma C che: inserisca in un vettore V1 (supposto di dimensione massima DIM 100) il numero di chilometri percorsi dalle automobili che iniziano per B. Si stampi un messaggio di errore nel caso non ne esistano. Chiami la funzione positivi() precedentemente definita per ottenere in un nuovo vettore V2 i valori dei chilometri di V1 minori di un certo valore specificato dall utente e il loro numero. Si mostri come varierebbe il programma se il vettore V1 fosse allocato dinamicamente, chiedendo all utente la dimensione massima. #include <stdlib.h> #DEFINE DIM 100 void positivi(int Vold[], int Vnew[], int DimOld, int Max, int *N) { int i = 0; *N=0; while (i<dimold)
2 { if (Vold[i] < Max) { Vnew[*N]=Vold[i]; *N= ++(*N); i++; main() { int kmax, km, V1[DIM], V2[DIM], i=0, Num; FILE* f; char targa[20]; if ((f=fopen("auto.txt", "r"))==null) { printf("il file non esiste!"); exit(1); while(fscanf(f,"%s%d\n", targa, &km)!= EOF) if (targa[0]== B ){ V1[i]=km; i++; if (i==0) printf("nessuna auto"); fclose(f); printf("inserisci il numero massimo di km: "); scanf("%d", &kmax); positivi(v1, V2, DIM, kmax, &Num); Variazione (allocazione dinamica del vettore): #include <stdlib.h> main() { int *V1; int i, DIM; printf("quanti elementi? "); scanf("%d", &DIM); /* allocazione del vettore */ V1=(int *)malloc(dim*sizeof(int)); /* lettura del file ed alla fine */ free(v1); /* deallocazione */
3 ESERCIZIO 2 (Analisi) Si indichino i valori stampati dal seguente programma C, motivando la risposta data. Indicare quali sono i blocchi in cui è visibile la variabile N (motivare la risposta). #define L 7 int N=L; void P(char* VET[], int DIM); main () { char* M[L] = {"pippo","pluto","paperino","qui","quo","qua", "minnie"; int i; P(M,L-2); for (i = L-1; i-- >0; ) printf("%s\n",*(m+i)); void P(char* VET[], int DIM) { int i; N++; for (i=0; i<dim-1; i=i+2) return; strcpy(vet[i],vet[i+1]); Il programma stampa: qua quo qui qui pluto pluto La variabile N è visibile in tutti i blocchi, perché è definita nell'ambiente globale. ESERCIZIO 3 (Domanda) Supponiamo che sia int X = 1; Cosa fa fprintf(file,"%d", X); a. emette sul file un byte che corrisponde al codice ASCII del carattere 1; b. emette sul file (per interi su 16 bit) due byte che rappresentano 1 in notazione binaria; c. emette sul file un byte che corrisponde al codice ASCII del carattere X. La risposta è a.
4 ESERCIZI DI PREPARAZIONE AL SECONDO INTERMEDIO Esercizio (analisi) Dato il seguente programma C: #define Dim 5 char c = 'a'; char A[Dim]={'c','i','a','o','\0'; char vet[dim]={'e','e','e','e','\0'; void sub(char vet1[], char vet2[]); void stampa(char vet[]); main() {stampa(a); sub(a,vet); stampa(vet); stampa(a); printf("%c",c); void sub(char vet1[dim], char vet2[dim]) {int i; char c='b'; for(i=0; i<dim-1; i++) if (vet2[i]>vet1[i]) vet1[i]=vet2[i]; else vet1[i]=c; void stampa(char vet[]) {printf("vettore:\n"); printf("%s",vet); printf("\n"); Che cosa viene stampato dal programma (si motivi opportunamente la risposta)? Si dica inoltre se la variabile i definita nella procedura sub() è visibile dalla procedura stampa() e dal main.
5 La prima stampa produce i valori ciao che corrispondono al vettore A inalterato. Dopo di che viene chiamata la procedura sub che modifica i valori di vet e di A. Se l elemento di vet è maggiore alfabeticamente del corrispondente elemento di A, quest'ultimo elemento viene sovrascritto dall elemento di vet, altrimenti viene sovrascritto con il carattere b. Quindi vet viene modificato in ebeb. Viene poi stampato il vettore A, producendo eeee. Poi viene stampato vet ebeb. Infine viene stampato c, che è la variabile definita esternamente al main e non quella definita nella procedura sub(). Quindi, il risultato stampato è: Vettore: ciao Vettore: eeee Vettore: ebeb a la variabile i definita nella procedura sub() non è visibile nella procedura stampa() e nel main.
6 Esercizio (analisi) Dato il seguente programma C: #define Dim 5 int f(int *V, int k) {int i, s=dim; for(i=dim-1;i>=0; i-=k) { V[i]=i; s+=i; return s; main() { int A[Dim]={1,1,1,1,1; int i; for (i=0; i<dim; i+=2) A[i]-=i; printf("%d\n", f(a,3)); for(i=0; i<dim; i++) printf("%d\t", A[i]); Qual è l'uscita del programma? La risposta deve essere opportunamente motivata. : Il ciclo for nel main modifica le componenti del vettore A di indice pari. Il vettore diventa: {1,1,-1,1,-3 Il main chiama poi la funzione f, passando il vettore A per indirizzo e il valore 3. La funzione, a passi di 3 (k=3), assegna alle componenti del vettore V (che rappresenta l indirizzo del primo elemento di A) di indice i=4 e i=1 il valore dell indice stesso. Il vettore A diventa: {1,1,-1,1,4 e somma alla variabile s (inizialmente uguale a 5) tali indici, restituendo il valore di s in uscita (s=5+4+1=10). Nel main viene stampato il valore restituito dalla funzione: 10 e il vettore A:
7 Esercizio (analisi) Dato il seguente programma C: #define D 4 float V[D]={1.5, 2.5, 3.5, 4.5; float A[D]={0,0,1,1; float Fun(float V[], int k) {int i; for(i=0;i<d; i+=k) V[i]=i; return i; main() {int i; printf("%f\n", Fun(A,2)); for(i=0; i<d; i++) printf("%f\t", V[i]); printf("\n"); for(i=0; i<d; i++) printf("%f\t", A[i]); Che cosa stampa il programma (si motivi opportunamente la risposta)? Il programma main chiama la funzione Fun, passando il vettore A per indirizzo e il valore 2. La funzione, a passi di 2 (k=2), assegna alle componenti del parametro formale V (al quale è stato assegnato l indirizzo del vettore A) di indice i=0,2 il valore dell indice stesso, e al termine restituisce il valore dell indice i (=4). Tale risultato viene stampato dalla printf nel programma main: Terminata la funzione, il main stampa il contenuto del vettore V: e il vettore A: Si noti che il vettore V dichiarato nella parte delle dichiarazioni globali non è stato modificato dalla chiamata della funzione Fun. Infatti a tale funzione viene trasferito per indirizzo il vettore A (modificato). La funzione Fun accede alle componenti di A attraverso il parametro formale V che non è il vettore dichiarato in precedenza, ma un nome (identico al precedente) con il quale si riferisce all interno della funzione Fun il parametro attuale A passato per indirizzo.
8 Esercizio (analisi) Dato il seguente programma C: #include<stdio.h> #define Dim 4 char single = 'n'; char Primo[Dim]={'a','b','c','\0'; char Secondo[Dim]={'b','b','b','\0'; int change(char string1[], char string2[]); void print(char string[]); main() {int N; print(primo); N = change(primo,secondo); print(secondo); print(primo); printf("%c,%d",single,n); int change(char string1[], char string2[]) {int j; int i=4; char single='f'; for(j=0;j<dim-1;j++) if (string2[j]>string1[j]) {string1[j]=string2[j]; i++; else Primo[j]=single; return i; void print(char string[]) {printf("vettore:\n"); printf("%s",string); printf("\n"); Che cosa viene stampato dal programma? La risposta deve essere opportunamente motivata. Si dica inoltre se la variabile N definita nel main è visibile anche dalle funzioni/procedure change e print. La prima stampa produce i valori abc che corrispondono al vettore Primo inalterato. Dopo di che viene chiamata la procedura change che modifica i valori di Primo e di Secondo. Se l elemento di Secondo è maggiore alfabeticamente del corrispondente elemento di Primo, quest'ultimo elemento viene sovrascritto dall elemento di Secondo, altrimenti il j-esimo elemento di Primo viene sovrascritto con il carattere f (la definizione di single, interna alla procedura change, nasconde la definizione data come variabile globale). Il valore restituito da change è il valore iniziale di i più il numero di volte in cui si è verificato il caso Secondo[j] > Primo[j], cioè 4+1. Quindi Primo diventa bff. Viene poi stampato il vettore Secondo, producendo bbb. Poi viene stampato Primo: bff.
9 Infine viene stampato single, che è la variabile definita esternamente al main e non quella definita nella procedura change e il valore restituito da change. Quindi, il risultato stampato è: Vettore: abc Vettore: bbb Vettore: bff n,5 la variabile N definita nel main non è visibile nelle procedure/funzioni. Esercizio (analisi) Dato il seguente programma C: #define Dim 5 int calc(int *N, int p) {int i, k=dim; for(i=0; i<dim; i=i+p) { N[i]=p-N[i]; k=k-i; p = p + 1; return k; main() { int Quad[Dim]={1,4,9,16,25; int i, j = 2; for (i=0; i<dim; i++) Quad[i] = i+j - Quad[i]; printf("%d\n", calc(quad,j)); for(i=0; i<dim; i++) printf("%d\t", Quad[i]); printf("\n%d\n", j); dire che cosa viene stampato dal programma, con le opportune motivazioni. Si dica poi se la variabile k è visibile dal main().
10 Dopo il primo ciclo for del main, il vettore Quad contiene i seguenti valori {1, -1, 5, 11, -19 Dopo di che viene chiamata la funzione calc che riceve come parametro attuale (per indirizzo) il vettore Quad e la variabile intera j = 2. Nel ciclo for della funzione calc il vettore viene modificato nel seguente modo: Al primo passo l elemento di indice 0 viene sottratto al valore 2 e la variabile k rimane uguale a 5 Al secondo passo, l elemento di indice 2 viene sottratto a 2 e la variabile k diventa uguale a 3 Al terzo passo, l elemento di indice 4 viene sottratto a 2 e la variabile k diventa uguale a -1. k viene restituita dalla funzione calc e quindi la prima stampa del programma main fornisce in uscita - 1. Viene poi stampato il vettore Quad modificato (perché passato per indirizzo) ed infine j che non viene modificata dalla funzione ric. Risultato stampato dal programma
11 Esercizio (analisi) Dato il seguente programma: #define DIM 6 int p(int a) { if (a%2==0) return 0; else return a+1; int f(int *a, int b) { if (a[b]!=0) return a[b]=5; else return p(b+1)+b; main() { int A[DIM]={0,0,0,0,0,0; int i; for(i=0; i<dim; i+=2) A[i]=i; printf("%d\n", f(a,0)); for(i=0; i<dim; i++) printf("%d\t",a[i]); Si indichino, nel giusto ordine, i valori stampati dal programma. :
12 Esercizio (sintesi) Dato un file di testo mesi.txt, si supponga che sia costituito da righe ciascuna contenente una stringa (nome del mese) ed un intero (numero di giorni). Ad esempio: gennaio 31 febbraio 28 marzo 31 aprile 30 Si stampino a video i nomi dei mesi che hanno 31 giorni. #include <stdlib.h> main() { int giorni; FILE* f; char nome[20]; if ((f=fopen("mesi.txt", "r"))==null) { printf("il file non esiste!"); exit(1); while(fscanf(f,"%s%d\n", nome, &giorni)!= EOF) if (giorni == 31) printf("%s\n", nome); fclose(f);
13 Esercizio (sintesi) Si scriva una procedura che legga da input una serie di numeri positivi (massimo 10) e termini con un numero negativo o nullo. Tale procedura restituisce in uscita (come parametri passati per riferimento) un vettore V (di dimensione fisica 10 dichiarato nel programma chiamante) contenente i numeri letti e il numero effettivo di elementi letti N (ossia la dimensione logica del vettore). void leggi(int V[], int *N); Si mostri anche un esempio di chiamata della procedura. void leggi(int V[], int *N) { int i = 0; int Num; printf( inserisci un intero positivo (0 o neg per terminare): ); scanf( %d, &Num); while (Num > 0) { V[i] = Num; i++; printf( inserisci un intero positivo (0 o neg per terminare): ); scanf( %d, &Num); *N = i; chiamata: main(){ int VETTORE[10]; int DimLogica; leggi(vettore, &DimLogica); printf("numero effettivo di elementi nel vettore: %d",dimlogica);
14 Esercizio (sintesi) Si scriva un programma C che tramite tre funzioni, leggi, media, stampa: a) Legga da terminale una prima sequenza di numeri terminati dal valore 0 (un numero su ogni linea) e li inserisca in un vettore A; b) Legga da terminale una seconda sequenza di numeri terminati dal valore 0 e li inserisca in un altro vettore B; c) Sia in grado di calcolare la media degli elementi di un vettore con la funzione media; d) Stampi a video il vettore (A oppure B) la cui media è maggiore. NOTA: Si ipotizzi una dimensione massima di 10 per i vettori Esempio: Vettore A: Media=25/5=5 Vettore B: Media=38/6=6.333 Vettore Max: #include<stdio.h> #define MAX 10 int leggi(int vet[],char nome); float media(int vet[],int lung); void stampa(int vet[],int lung); main() {int A[MAX],B[MAX],a,b; a=leggi(a,'a'); b=leggi(b,'b'); if(media(a,a)<media(b,b))stampa(b,b); else if(media(a,a)==media(b,b))printf("i vettori hanno la stessa media!\n"); else stampa(a,a); int leggi(int vet[],char nome) {int i=0; printf("\nscrivi gli elementi del vettore %c\n",nome); do {printf("elemento %d: ",i+1); scanf("%d",&vet[i]); i++; while(vet[i-1]!=0&&i<max); return i-1;
15 float media(int vet[],int lung) {int i; float sum=0; for(i=0;i<lung;i++)sum+=vet[i]; return sum/lung; void stampa(int vet[],int lung) {int i; printf("il vettore con media maggiore è:\n"); for(i=0;i<lung;i++)printf("%d ",vet[i]);
16 Esercizio (sintesi) Dato un file di testo estratti.txt, si supponga che sia costituito da righe ciascuna contenente una ruota (nome della ruota del lotto) ed un intero (numero estratto). Ad esempio: napoli 31 genova 28 napoli 60 Si scriva un programma C che prenda in ingresso il nome di una ruota e stampi tutti i numeri estratti su quella ruota. #include <stdlib.h> #include <string.h> main() { int numero; FILE* f; char ruota[20],miaruota[20]; printf("inserire ruota: "); scanf("%s",miaruota); if ((f=fopen("estratti.txt", "r"))==null) { printf("il file non esiste!"); exit(1); while(fscanf(f,"%s %d\n", ruota, &numero)!= EOF) if (strcmp(ruota,miaruota)==0) printf("%d\t", numero); fclose(f);
17 Esercizio (sintesi, due esercizi collegati) Si scriva un programma C che legga due serie di dati e le memorizzi in due vettori di strutture. Nel primo vettore FILM (di dimensione 3) vengono memorizzate strutture (struct film) del tipo: - titolo (stringa di lunghezza 20 non contenente spazi bianchi) - codice film (intero) - costo (intero) - numero giorni di riprese Nel secondo vettore ATTORI (di dimensione 5) vengono memorizzate strutture (struct attore) del tipo: - nome (stringa di lunghezza 20) - codice film (intero) - costo al giorno (intero) Si scriva un programma che: tramite due procedure leggifilm e leggiattore legga a terminale i dati da inserire nei due vettori; void leggifilm(int n, struct film F[]); void leggiattore(int n, struct attore A[]); tramite la procedura aggiornacosto aggiorni il costo del film sommando a questo il costo di ciascun attore che partecipa al film. Il costo dell attore viene calcolato come costo al giorno per il numero di giorni delle riprese. void aggiornacosto(struct film F[], int n, struct attore A[], int m); dove n è la dimensione del vettore F[] e m è la dimensione del vettore A[] #define DIMA 4 #define DIMF 2 struct film{ char titolo[20]; int codice; int costo; int giorni;; struct attore{ char nome[20]; int codicefilm; int costogiorno;; void leggifilm(int n, struct film F[]);
18 void leggiattore(int n, struct attore A[]); void aggiornacosto(struct film F[], int n, struct attore A[], int m); main() {int i; struct film FILM[DIMF]; struct attore ATTORI[DIMA]; leggifilm(dimf,film); leggiattore(dima,attori); aggiornacosto(film,dimf,attori,dima); void leggifilm(int n, struct film Vet[]) {int i; for(i=0;i<n;i++){ printf("inserisci Codice, Titolo, Costo e Numero giorni \n"); scanf("%d",&vet[i].codice); scanf("%s",vet[i].titolo); scanf("%d",&vet[i].costo); scanf("%d",&vet[i].giorni); void leggiattore(int n, struct attore Vet[]) { int i; for(i=0;i<n;i++){ printf("inserisci nome, codicefilm, costo al giorno\n"); scanf("%s",vet[i].nome); scanf("%d",&vet[i].codicefilm); scanf("%d",&vet[i].costogiorno); void aggiornacosto(struct film F[], int n, struct attore A[], int m){ int i,j; for (i = 0; i < n; i++) for (j = 0; j < m; j++) if (A[i].codicefilm == F[j].codice){ F[j].costo = F[j].costo + A[i].costogiorno*F[j].giorni; printf("\ncosto aggiornato del film %s: %d", F[j].titolo, F[j].costo);
19 Esercizio (sintesi) Si vuole realizzare un programma che data da input una sequenza di N parole (di, al massimo, 20 caratteri ciascuna), li memorizzi in una struttura dati dinamica e poi stampi la loro lunghezza. #include <stdlib.h> #include <string.h> typedef char parola[20]; main() { parola *p; int i, N; printf("quante parole? "); scanf("%d", &N); /* allocazione del vettore */ p=(parola *)malloc(n*sizeof(parola)); /* lettura della sequenza */ for(i=0; i<n; i++) scanf("%s", p[i]); for(i=0; i<n; i++) printf("\n%d", strlen(p[i])); free(p); /* deallocazione */
20 Esercizio (sintesi, 3 esercizi in uno) Sia dato il file di testo "dati.txt" contenente i dati relativi agli studenti immatricolati al primo anno della Facoltà di Ingegneria. In particolare, le informazioni sono memorizzate nel file "dati.txt" come segue: ognuna delle linee del file contiene i dati relativi ad un nuovo studente ed in particolare: Matricola: un intero che indica il numero di matricola dello studente; CdL: un intero che indica il corso di laurea (CdL) dello studente (es. 2145); Sia dato un secondo file binario indirizzi.bin che contiene, invece, l indirizzo di ogni studente, e in particolare: Matricola: il numero di matricola dello studente; Nome: il nome dello studente; Cognome: il cognome dello studente; Via: una stringa che riporta la via di residenza dello studente; Città: una stringa che riporta la città di residenza dello studente; CAP: un intero che rappresenta il codice di avviamento postale dello studente. Si scriva un programma in linguaggio C che: 1. A partire dai file "dati.txt" e indirizzi.bin costruisca una tabella T contenente, per ogni studente, Matricola, Nome, Cognome, Via, Città, CAP e CdL. 2. A partire dalla tabella T, e dato da input un intero C che rappresenta un CdL, stampi la percentuale di studenti (rispetto al numero totale delle matricole) iscritti al corso C. [Ad esempio, se il numero totale delle matricole e` 1000, e quello degli studenti iscritti a C e` 200, il programma stamperà 20% ] 3. Scriva su un terzo file di testo bologna.txt, nome, cognome e numero di matricola di tutti gli studenti che abitano a Bologna. : #include <string.h> /* tipi di dato */ typedef struct { dati; unsigned int matr; unsigned CDL; typedef struct {unsigned int matr; char nome[20]; char cognome[30]; char via[30]; char citta[30]; unsigned int CAP;
21 indirizzo; typedef struct { unsigned int matr; char nome[20]; char cognome[30]; char via[30]; char citta[30]; unsigned int CAP; unsigned int CDL; elemento; typedef elemento tabella[10]; elemento riempiel( dati d, indirizzo i); /* le seguenti funzioni servono solo per predisporre e visualizzare il file di indirizzi:*/ void creafile(char *b); void vedifile(char *b); /* fine funzioni file */ main() { dati D; indirizzo I; elemento E; tabella T; FILE *f1, *f2; int i, trovato,ins=0, totc; unsigned int C; /*non necessario: creaz. del file binario */ printf("creare il file (0/1)??"); scanf("%d", &i); if (i==1) creafile("indirizzi.bin"); else vedifile("indirizzi.bin"); /*domanda 1: costruzione della tabella */ f1=fopen("dati.txt", "r"); f2=fopen("indirizzi.bin", "rb"); while (fscanf(f1,"%u%u", &D.matr, &D.CDL)>0) { trovato=0; rewind(f2); while(fread(&i,sizeof(indirizzo),1,f2)>0 &&!trovato) if (I.matr==D.matr) /*ho trovato l'indirizzo dello stud. D */
22 { trovato=1; E=riempiel(D, I); T[ins]=E; ins++; fclose(f1); fclose(f2); /*domanda 2: stampa della percentuale degli iscritti a un corso dato*/ printf("inserire il corso C: "); scanf("%u", &C); totc=0; for(i=0; i<ins; i++) if(t[i].cdl==c) totc++; printf("\n Iscritti al corso %u: %f \%\n", C, (float)totc*100/ins); /*domanda 3: scrittura di bologna.txt" */ f1=fopen("bologna.txt", "w"); for (i=0; i<ins; i++) if (strcmp("bologna", T[i].citta)==0) fprintf(f1, "%s %s %u\n", T[i].nome, T[i].cognome, T[i].matr); fclose(f1); elemento riempiel(dati d, indirizzo i) { elemento e; /*copia in e il contenuto di d e di i*/ e.matr=d.matr; e.cdl=d.cdl; strcpy(e.nome, i.nome); strcpy(e.cognome, i.cognome); strcpy(e.via, i.via); strcpy(e.citta, i.citta); e.cap=i.cap; return e; void creafile(char *v) { FILE *f; indirizzo e;int fine=0;
23 f=fopen(v, "wb"); printf("creazione di %s...\n", v); while (!fine) { printf("matricola"); scanf("%u", &e.matr); printf("\ncap? " ); scanf("%u", &e.cap); printf("\ncognome? "); scanf("%s", &e.cognome); printf("\nnome? "); scanf("%s", &e.nome); printf("\ncitta`? "); scanf("%s", &e.citta); printf("\nvia? "); scanf("%s", &e.via); fflush(stdin); fwrite(&e, sizeof(indirizzo), 1, f); printf("\nfine (SI=1, NO=0)? "); scanf("%d", &fine); fclose(f); void vedifile(char *v) {FILE *f; indirizzo e;int fine=0; f=fopen(v, "rb"); printf("lettura di %s:\n", v); fread(&e, sizeof(indirizzo), 1, f); while (!feof(f)) { printf("%u\t", e.matr); printf("%s\t", e.cognome); printf("%s\t", e.nome); printf("%s\t", e.via); printf("%s\n", e.citta); printf("%u\t", e.cap); fread(&e, sizeof(indirizzo), 1, f); fclose(f);
24 Esercizio (sintesi) Dato un file di binario mesi.dat, si supponga che contenga (in rappresentazione interna) strutture così configurate: una stringa (nome del mese) ed un intero (numero di giorni). Ad esempio: gennaio 31 febbraio 28 marzo 31 aprile 30 Si memorizzi il contenuto del file in un vettore di strutture e si stampino a video i nomi dei mesi che hanno 31 giorni. #include <stdlib.h> main() { int i; struct mese {int giorni; char nome[20]; v[12]; FILE* f; if ((f=fopen("mesi.dat", "rb"))==null) { printf("il file non esiste!"); exit(1); while(fread(&v[i],sizeof(struct mese),1,f)>0){ if (v[i].giorni == 31) printf("%s\n", v[i].nome); i++; fclose(f);
25 Esercizio (sintesi) su liste di interi Un file di testo (TEMP.DAT) contiene i dati relativi alle medie di tutti gli studenti che devono accedere ad una sessione di laurea. Si realizzi un programma C che: a) Costruisca in memoria centrale una lista che memorizzi, in modo ordinato crescente tali medie (intere) e la stampi. b) Letti due valori interi da console min e max, utilizzando la lista, visualizzi il valore delle medie comprese fra min e max ed un opportuno messaggio se non ne esistono. Possibile contenuto di TEMP.DAT intervallo stampa È possibile utilizzare librerie C (ad esempio per stringhe) e si possono utilizzare le operazioni primitive presentate a lezione sull ADT lista.
26 Possibile Schema di /* PROGRAMMA PRINCIPALE - file main.c */ #include <stdlib.h> #include "list.h" main(){ element e, min, max; list L=emptylist();; FILE *f1; int i; /* DOMANDA a */ f1 = fopen("temp.dat", "r"); while (fscanf(f1, %d, &e)!=eof) L=insord(e, L); showlist(l); fclose(f1); /* DOMANDA b */ printf( Dammi i due estremi : ); scanf( %d, &min, &max); while (!empty(l)&& (head(l)<min))l=tail(l); if (empty(l)) printf( nessun valore ); else { while (!empty(l)&& (head(l)<max)) printf( %d, head(l)); L=tail(L);
27 Esercizio (sintesi) su liste di interi Si scriva una funzione ricorsiva con prototipo 'list unique(list l)' che elimini le copie di elementi duplicati adiacenti. Ad esempio, data una lista i cui valori sono [0,2,4,6,4,2,0], applicare unique( l ) produce effettivamente la stessa lista di sette elementi perché non vi sono elementi duplicati adiacenti. Invece per la lista [0,0,2,2,4,4,6], la lista risultato dell esecuzione di unique( l ) sarà [0,2,4,6]. SOLUZIONE I (CON USO DI PRIMITIVE) list unique( list l ) { if ( empty(l) ) return emptylist(); else if ( head(l)==head( tail(l) ) return unique( tail(l) ); else return cons( head(l), unique( tail(l) ) ); SOLUZIONE II typedef int element; typedef struct list_element { element value; struct list_element *next; item; typedef item* list; list unique( list l ) { if ( l == NULL ) return NULL; else if ( l -> value == l -> next -> value ) return unique( l -> next ); else { list t; t=(list)malloc(sizeof(item)); t -> value = l -> value; t -> next = unique( l -> next ); return (t);
28 Esercizio (sintesi) su file e liste di interi Un file di testo ARCHIVIO.TXT contiene i dati (primo autore, titolo, numero di copie possedute, numero di copie in prestito) relativi ai differenti volumi conservati presso una biblioteca. Più precisamente, ogni riga del file contiene nell'ordine, separati da uno spazio bianco: autore (non più di 20 caratteri senza spazi intermedi); titolo (non più di 50 caratteri senza spazi intermedi); numero_possedute (da leggersi come intero); numero_prestito (da leggersi come intero). Si realizzi un programma C che: 1. Legga il contenuto di ARCHIVIO.TXT e costruisca in memoria centrale un vettore V di strutture corrispondenti (si supponga che il file ARCHIVIO.TXT non possa contenere più di 30 righe). Si stampi a video il contenuto del vettore. 2. A partire da V, costruisca una lista L di interi contenente per ciascun volume il numero di copie disponibili nella biblioteca, ovvero la differenza fra il numero di copie possedute e il numero di copie in prestito. Si stampi a video il contenuto della lista L. 3. Utilizzando L per ottenere la somma delle copie disponibili e V per la somma delle copie possedute, calcoli il rapporto fra volumi disponibili e volumi posseduti. Oppure 3bis. Utilizzando la lista di interi L, stampi il numero di riga di ARCHIVIO.TXT relativo al volume con più copie disponibili. In caso di più volumi con pari numero di copie disponibili, qualunque riga relativa a questi ultimi è considerata una risposta corretta. Ad esempio: contenuto di ARCHIVIO.TXT Salinger IlGiovaneHolden 10 8 Wallace InfiniteJest 12 3 Carver Cattedrale Baricco Seta 6 0 Hornby ComeDiventare 9 9 Sartre LaNausea 3 1 Robbins NaturaMorta 7 7 Stampa di L: [2, 9, 0, 6, 0, 2, 0] È possibile utilizzare librerie C (ad esempio per stringhe) e si devono utilizzare le librerie sulle liste presentate a lezione. Qualunque libreria utente addizionale eventualmente utilizzata va riportata nello svolgimento e consegnata.
29 Possibile Schema di Suddivido il programma nei seguenti file: list.c funzioni di libreria per la gestione di liste list.h header file associato a list.c element.h contiene la dichiarazione di element mainlibri.c contiene il programma principale /* PROGRAMMA PRINCIPALE - file mainlibri.c */ #include <stdlib.h> #include "list.h" #define MAX 20 typedef struct{ char autore[20]; char titolo[50]; int possedute; int prestito; volume; main() { volume e; list L,L1; FILE *f; volume V[MAX]; int elementi=0,i,pos,max; int somma_possedute, somma_disponibili; L=emptylist(); /* DOMANDA 1 */ f = fopen("archivio.txt", "r"); if (f==null) { printf("impossibile aprire file di ingresso"); exit(1); /* se non riesce a creare il file visualizza messaggio di errore ed esce */ while (fscanf(f,"%s%s%d%d\n",e.autore, e.titolo, &e.possedute, &e.prestito)>0) V[elementi++] = e; fclose(f); for (i=0; i<elementi; i++) printf("volume %d: %s\t%s\t%d\t%d\n",i,v[i].autore, V[i].titolo,V[i].possedute,V[i].prestito);
30 /* DOMANDA 2 */ for (i=0; i<elementi; i++) L = cons(v[i].possedute-v[i].prestito,l); showlist(l); /* in che ordine viene stampata la lista??? */ /* DOMANDA 3 */ for (i=0; i<elementi; i++) somma_possedute += V[i].possedute; L1=L; while (!empty(l1)) { somma_disponibili += head(l1); L1=tail(L1); printf("rapporto disponibili/possedute = %f\n", (float)somma_disponibili/somma_possedute); /* DOMANDA 3bis */ i=0; max=-1; while (!empty(l)) { if (head(l)>max) { max = head(l); pos=i; L=tail(L); i++; printf("volume con più copie disponibili: %d", elementi-pos-1);
31 Esercizio (domanda) Supponiamo di dover assegnare due strutture identiche contenenti un intero e un float: struct prova{ int A; float B; ; struct prova S1; struct prova S2; Quali delle seguenti istruzioni non è consentita per effettuare l assegnamento? 1. S1 = S2; 2. S1 == S2; 3. S1.A = S2.A; S1.B = S2.B; 2. Non è un operatore di assegnamento ma di confronto. Esercizio (domanda) Si descrivano sinteticamente i componenti della macchina di Von Neumann (si consulti la dispensa relativa) Esercizio (domanda) Qual è la relazione tra vettori e puntatori nel linguaggio C? È lecito scrivere: int V[10], *punt; punt=v; Motivare la risposta. : Un puntatore è una variabile che ha come valore l indirizzo di un altro dato. Un vettore rappresenta un indirizzo costante (quello del primo elemento del vettore). La differenza è che tale indirizzo è costante e non se ne può variare il valore. L istruzione punt=v è lecita e assegna al puntatore l indirizzo del primo elemento del vettore (rappresentato dal nome V).
32 Esercizio (domanda) Qual è la differenza tra un parametro formale passato per indirizzo e uno passato per valore ad una procedura: A. Se modificato all interno della procedura, il parametro passato per indirizzo non comporta modifica sul parametro attuale. Viceversa avviene per il parametro passato per valore; B. Se modificato all interno della procedura, il parametro passato per valore non comporta modifica sul parametro attuale. Viceversa avviene per il parametro passato per indirizzo; C. I parametri passati per indirizzo sono solo vettori, mentre tutti gli altri non possono essere passati che per valore. La risposta corretta è la B. Esercizio (domanda) Di che tipo è la variabile f restituita dalla funzione fopen (se ne mostri anche la dichiarazione): f = fopen("esame.txt", "r"); La variabile f è un puntatore a file FILE* f; f = fopen("esame.txt", "r"); Esercizio (domanda) Si individuino analogie e differenze tra le funzioni fscanf e scanf. Entrambe sono funzioni che permettono di leggere dati rispettivamente da un file di testo (passato come parametro alla fscanf) e la seconda da standard input. Entrambe hanno come parametri una stringa di formato e i valori da leggere, ma la fscanf() necessita di un parametro aggiuntivo costituito dal puntatore a FILE su cui svolgere le operazioni di lettura.
33 Esercizio (domanda) Siano date due stringhe char s1[]="pippo", s2[20]; Se si scrive s1=s2; che cosa succede? A. Tutto il contenuto di s2 viene copiato in s1 B. Si ottiene un errore di compilazione C. Il primo elemento di s2 viene ricopiato nel primo elemento di s1 B. Si ottiene un errore di compilazione. Esercizio (domanda) Supponiamo che sia int x = 11; Che differenza c è fra fprintf(file,"%d", x); e fwrite(&x, sizeof(int), 1, file); se il codice ASCII del carattere 1 è ? fprintf emette due byte, ciascuno corrispondente al codice ASCII del carattere 1: fwrite emette (su 16 bit) due byte che rappresentano 11 in notazione binaria:
Esercizi di Preparazione alla Seconda Prova Intermedia Fondamenti di Informatica L-A (Proff. Paola Mello e Paolo Bellavista)
Esercizi di Preparazione alla Seconda Prova Intermedia Fondamenti di Informatica L-A (Proff. Paola Mello e Paolo Bellavista) ESERCIZIO (sintesi) 1. Si scriva una funzione che riceva come parametri di ingresso
Esercizi di Preparazione alla Prima Prova Intermedia Fondamenti di Informatica L-A (Proff. Paola Mello e Paolo Bellavista)
Esercizi di Preparazione alla Prima Prova Intermedia Fondamenti di Informatica L-A (Proff. Paola Mello e Paolo Bellavista) La prima prova intermedia potrà includere: esercizi di analisi; esercizi di sintesi;
Esercizio 1. Esercizio 1 - Soluzione
Esercizio 1 Realizzare un programma che, aperto un file di testo di nome Prova.txt in modalità scrittura, provveda a leggere da input delle parole separate da spazi (stringhe di al più 63 caratteri) e
Esercizi di Preparazione alla Prima Prova Intermedia Fondamenti di Informatica L-A (Proff. Paola Mello e Paolo Bellavista) ESERCIZI DI ANALISI
Esercizi di Preparazione alla Prima Prova Intermedia Fondamenti di Informatica L-A (Proff. Paola Mello e Paolo Bellavista) La prima prova intermedia potrà includere: esercizi di analisi; esercizi di sintesi;
Esercizio 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
giapresente( ) 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
Esercizio 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
1. Realizzare una funzione: int trovaritardatari(file *fprestiti, FILE *frate, Prestito *dest, int dim)
Fondamenti di Informatica L-A (A.A. 2005/2006 - CdS Ingegneria Informatica) Prof.ssa Mello & Prof. Bellavista Seconda Prova Intermedia del 07/12/2005 - durata 2.30h COMPITO C ESERCIZIO 1 (14 punti) Una
Lab 15 Gestione file di testo
Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni e Ingegneria dell Automazione a.a. 2009/2010 Lab 15 Gestione file di testo Lab15 1 Esercizio 1 Realizzare un programma
ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)
ADT LISTA Pochi Linguaggi forniscono tipo lista fra predefiniti (LISP, Prolog); per gli altri, ADT lista si costruisce a partire da altre strutture dati (in C tipicamente vettori o puntatori) OPERAZIONI
Un file di testo (TEMP.TXT) contiene i dati relativi alle medie di tutti gli studenti che
ESERCIZIO su liste di interi Un file di testo (TEMP.TXT) contiene i dati relativi alle medie di tutti gli studenti che devono accedere ad una sessione di laurea. Si realizzi un programma C che: 1. Costruisca
Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 5A di Mercoledì 13 Luglio 2011 tempo a disposizione 2h
Prima di cominciare: si scarichi dal sito http://esamix.labx il file StartKit5A.zip contenente i file necessari (progetto Visual Studio ed eventuali altri file di esempio). Avvertenze per la consegna:
Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 1B di Martedì 22 Dicembre 2009 tempo a disposizione 2h30'
Prima di cominciare: si scarichi dal sito http://esamix.labx il file StartKit1B.zip contenente i file necessari (solution di VS2005/VS2008 e progetto compresi). Avvertenze per la consegna: apporre all
Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 2A di Mercoledì 2 Febbraio 2011 tempo a disposizione 2h
Prima di cominciare: si scarichi dal sito http://esamix.labx il file StartKit2A.zip contenente i file necessari (progetto Visual Studio ed eventuali altri file di esempio). Avvertenze per la consegna:
! I file di testo non sono indispensabili: sono semplicemente comodi 1. Sintassi:
Un file binario è una pura sequenza di byte, senza alcuna strutturazione particolare! È un'astrazione di memorizzazione assolu -tamente generale, usabile per memorizza -re su file informazioni di qualsiasi
FILE BINARI FILE BINARI FILE BINARI. OUTPUT BINARIO: fwrite()
FILE BINARI Un file binario è una pura sequenza di byte, senza alcuna strutturazione particolare È un'astrazione di memorizzazione assolutamente generale, usabile per memorizzare su file informazioni di
Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 3A di Venerdì 12 Febbraio 2016 tempo a disposizione 2h
Avvertenze per la consegna: apporre all inizio di ogni file sorgente un commento contenente i propri dati (cognome, nome, numero di matricola) e il numero della prova d esame. Al termine, consegnare tutti
Gestione 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
Esercizio 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
Il 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;
Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 3A di Giovedì 16 Febbraio 2017 tempo a disposizione 2h
Avvertenze per la consegna: apporre all inizio di ogni file sorgente un commento contenente i propri dati (cognome, nome, numero di matricola) e il numero della prova d esame. Al termine, consegnare tutti
Esercitazione 11. Liste semplici
Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene
Fondamenti di Informatica T-1 Modulo 2
Fondamenti di Informatica T-1 Modulo 2 1 Obiettivi di questa esercitazione 1. Array 2 Esercizio 1 Creare un programma che legga da input un numero non noto a priori di interi (al più 10) terminati da 0.
Esercizio 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
Ricerca binaria ricorsiva!
ESERCIZIO: RICERCA BINARIA! Soluzione Iterativa! int ricerca_bin (int vet[], int el) {int first=0, last=n-1, med=(first+last)/2; int T=0; while ((first
Lab 10 Gestione file di testo
Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 10 Gestione file di testo Lab15 1 Esercizio 1 n Realizzare un programma che, aperto un file di testo di nome
Stringhe 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
int ninv; /* numero di inventario */
1) Scrivere il programma C che legga da un file di testo ("dati.dat") i record con dati relativi ad un archivio di dischi (utilizzando la struttura data) e scriva il file dati1.dat con i nomi degli artisti
Allocazione 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
Scrittura formattata - printf
Esercizi su Input/Output con formato FormattedIO 1 Scrittura formattata - printf Funzione printf int printf ( , ) La funzione restituisce un valore intero uguale ai caratteri
Un file è un astrazione di memorizzazione di dimensione potenzialmente illimitata (ma non infinita), ad accesso sequenziale.
IL CONCETTO DI FILE Un file è una astrazione fornita dal sistema operativo, il cui scopo è consentire la memorizzazione di informazioni su memoria di massa. Concettualmente, un file è una sequenza di registrazioni
ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli
ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del
Lezione 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
Strutture 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
ELEMENTI 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
Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori
Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Meccanica, Elettrica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011
C: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni. Lab 06 Array" Lab06 1
Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 06 Array" Lab06 1 Esercizio 1" n Creare un programma che legga da input un numero non noto a priori di interi
Fondamenti di Informatica T-1 modulo 2
Fondamenti di Informatica T-1 modulo 2 1 Obiettivi Liste Liste Liste... Liste! 2 Esercizio 1 I risultati di un appello d esame di Fondamenti di Informatica vengono salvati su un file (di testo) Su tale
Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 1A di Mercoledì 19 Gennaio 2011 tempo a disposizione 2h
Prima di cominciare: si scarichi dal sito http://esamix.labx il file StartKit1A.zip contenente i file necessari (progetto Visual Studio ed eventuali altri file di esempio). Avvertenze per la consegna:
1. Realizzare una funzione int trovaevasori(file * fcatasto, FILE * ftasse, Lotto * dest, int dim)
Fondamenti di Informatica L-A (A.A. 2005/2006 - CdS Ingegneria Informatica) Prof.ssa Mello & Prof. Bellavista Seconda Prova Intermedia del 07/12/2005 - durata 2.30h COMPITO B ESERCIZIO 1 (14 punti) L ufficio
Esempio di Prova Scritta
Esempio di Prova Scritta La prova scritta è composta da alcuni esercizi per un totale di 10 punti (durata:circa 1h15 ). Le tipologie di esercizi possibili comprendono:! sintesi di una funzione ricorsiva/iterativa,
Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 6A di Giovedì 8 Settembre 2016 tempo a disposizione 2h
Avvertenze per la consegna: apporre all inizio di ogni file sorgente un commento contenente i propri dati (cognome, nome, numero di matricola) e il numero della prova d esame. Al termine, consegnare tutti
Fondamenti di Informatica T-1, 2017/2018 Modulo 2. Prova d Esame 1A di Giovedì 11 Gennaio 2018 tempo a disposizione 2h
Avvertenze per la consegna: apporre all inizio di ogni file sorgente un commento contenente i propri dati (cognome, nome, numero di matricola) e il numero della prova d esame. Al termine, consegnare tutti
Lezione 8. Sottoprogrammi
Lezione 8 Il linguaggio C: Sottoprogrammi e Funzioni I puntatori Input/Output su file Sottoprogrammi Per risolvere un problema si può scomporlo in problemi più semplici e comporre le loro soluzioni in
Fondamenti di Informatica T-1, 2013/2014 Modulo 2. Prova d Esame 6A di Giovedì 11 Settembre 2014 tempo a disposizione 2h
Avvertenze per la consegna: apporre all inizio di ogni file sorgente un commento contenente i propri dati (cognome, nome, numero di matricola) e il numero della prova d esame. Al termine, consegnare tutti
1. Esercizio tipo per prova pratica
1. Esercizio tipo per prova pratica Testo: Si realizzi un programma nel linguaggio C che, data una sequenza di 10 interi da standard input, facendo uso di una funzione di nome media1, stampi tutti i valori
Operazioni su file di caratteri
Operazioni su file di caratteri Apertura fopen Chiusura fclose Scrittura fprintf Lettura fscanf Controllo fine file feof Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Apertura di un file: Si
Esercizio 1 - Soluzione
Esercizio 1 Realizzare un programma che provveda a leggere da input delle parole separate da spazi (stringhe di al più 63 caratteri) e le ripeta su standard output (servizio di echo ). Il programma deve
Informatica 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
Fondamenti di Informatica T-1, 2014/2015 Modulo 2. Prova d Esame 1A di Martedì 13 Gennaio 2015 tempo a disposizione 2h
Avvertenze per la consegna: apporre all inizio di ogni file sorgente un commento contenente i propri dati (cognome, nome, numero di matricola) e il numero della prova d esame. Al termine, consegnare tutti
Fondamenti di Informatica T-1, 2011/2012 Modulo 2. Prova d Esame 2A di Giovedì 12 Gennaio 2012 tempo a disposizione 2h
Prima di cominciare: si scarichi dal sito http://esamix.labx il file StartKit2A.zip contenente i file necessari (progetto Visual Studio ed eventuali altri file di esempio). Avvertenze per la consegna:
Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.
Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;
Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 5A di Giovedì 7 Luglio 2016 tempo a disposizione 2h
Avvertenze per la consegna: apporre all inizio di ogni file sorgente un commento contenente i propri dati (cognome, nome, numero di matricola) e il numero della prova d esame. Al termine, consegnare tutti
Gestione 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
Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
La Struttura Dati Pila
La Struttura Dati Pila La pila o stack è una particolare struttura dati in cui l'inserimento e la cancellazione sono consentite solo in una specifica posizione, chiamata cima (top) dello stack. La gestione
Esercizio 1 - cicli. Esercizio 1 cicli - Soluzione
Sequenze di cifre Esercizio 1 - cicli Realizzare un programma che prende in input una sequenza di cifre (tra 1 e 9) e calcola la somma massima fra le sotto- sequenze di cifre non decrescente Il programma
Fondamenti di Informatica T-1, 2014/2015 Modulo 2. Prova d Esame 2A di Martedì 29 Gennaio 2015 tempo a disposizione 2h
Avvertenze per la consegna: apporre all inizio di ogni file sorgente un commento contenente i propri dati (cognome, nome, numero di matricola) e il numero della prova d esame. Al termine, consegnare tutti
Esercizio 1. Esercizio 2
Esercizio 1 Realizzare un programma che, aperto un file di testo di nome Prova.txt in modalità scrittura, provveda a leggere da input delle parole separate da spazi (stringhe di al più 63 caratteri) e
Fondamenti di Informatica T. Linguaggio C: i puntatori
Linguaggio C: i puntatori Il puntatore E` un tipo di dato, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore è un insieme
Fondamenti di Informatica T-1, 2017/2018 Modulo 2. Prova d Esame 2A di Giovedì 25 Gennaio 2018 tempo a disposizione 2h
Avvertenze per la consegna: apporre all inizio di ogni file sorgente un commento contenente i propri dati (cognome, nome, numero di matricola) e il numero della prova d esame. Al termine, consegnare tutti
Gestione dei files. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Via Leopardi 132
Gestione dei files Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Via Leopardi 132 Struttura del disco fisso Un disco fisso è composto da una serie di piatti sovrapposti Ogni piatto è
Esercizi di programmazione in linguaggio C English Dictionary
Esercizi di programmazione in linguaggio C English Dictionary Il file di testo wordnet.txt contiene un certo numero di parole (word) e il corrispondente significato (meaning) secondo il seguente formato:
file fisico file logico
I files Un file è una struttura di dati residente su una memoria di massa (file fisico) Un programma vede un file come una sequenza di bytes (file logico) Generalizzando, un file può comprendere qualsiasi
Esercizi di preparazione alla prova scritta
Esercizi di preparazione alla prova scritta ARGOMENTI: Istruzione dominante, complessità ESERCIZIO n 1 Si analizzi il seguente frammento di codice C: #define N 10 int V[N]={1,2,3,4,5,6,7,8,9,10;... main()
Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali
MASTER Information Technology Excellence Road (I.T.E.R.) Array Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Tipi di dato stutturati In C si possono
Linguaggio C - Array. Array: tipo nome_array[num_elementi]
Linguaggio C - Array Array: Gli array o vettori sono delle strutture dati in grado di contenere un insieme di valori tutti dello stesso tipo. Un array lo possiamo immaginare come un contenitore suddiviso
Puntatori e Heap in C. Prof.Ing.S.Cavalieri
Puntatori e Heap in C Prof.Ing.S.Cavalieri Tipi Puntatori #include int n; int * p; int main(void) { n = 15; p = &n; NULL int n, *p; printf("\nil Numero n e' uguale a : %d ",n); *p = 25; printf("\nil
I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore
I puntatori Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p
PROVA SCRITTA DEL CORSO DI CORSO DI LAUREA IN INGEGNERIA BIOMEDICA ED ELETTRICA 9/6/2008
PROVA SCRITTA DEL CORSO DI CORSO DI LAUREA IN INGEGNERIA BIOMEDICA ED ELETTRICA 9/6/2008 MOTIVARE IN MANIERA CHIARA LE SOLUZIONI PROPOSTE A CIASCUNO DEGLI ESERCIZI SVOLTI ESERCIZIO 1 (5 punti) Descrivere
L'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
Esercizio 1 (15 punti)
Esercizio 1 (15 punti) Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I Prova scritta del 30 giugno 2017 In un lontano paese da
PROVA PRATICA DI FONDAMENTI DI INFORMATICA A COMPITO A
PROVA PRATICA DI FONDAMENTI DI INFORMATICA A COMPITO A Si scriva un programma C che legga due serie di dati e li memorizzi in due vettori di strutture. Nel primo vettore SQUADRE (di dimensione 6) vengono
Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()
Allocazione Statica Finora abbiamo visto che le variabili sono sempre definite staticamente. Questo è un limite perché la loro esistenza deve essere prevista e dichiarata a priori. In particolare per variabili
Il linguaggio C Puntatori
Il linguaggio C Puntatori Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C - puntatori 2 Ringraziamenti Questi
1. Realizzare una funzione int trovaevasori(file * fcomune, FILE * ftasse, Recapito * dest, int dim)
Fondamenti di Informatica L-A (A.A. 2005/2006 - CdS Ingegneria Informatica) Prof.ssa Mello & Prof. Bellavista Seconda Prova Intermedia del 07/12/2005 - durata 2.30h COMPITO A ESERCIZIO 1 (14 punti) L ufficio
Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.
Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. 1 Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa a valori delle variabili
Esercizi. I File ed il C
Politecnico di Milano Esercizi File di testo,, file binari I File ed il C Insieme omogeneo di dati, memorizzato su disco e caratterizzato da un nome La lunghezza di un file non è fissata a priori Astrazione
FILE BINARI FILE BINARI
FILE BINARI Un file binario è una pura sequenza di byte, senza alcuna strutturazione particolare È un'astrazione di memorizzazione assolutamente generale, usabile per memorizzare su file informazioni di
ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 28 Gennaio 1999 PROVA SCRITTA
28 Gennaio 1999 PROVA SCRITTA Esercizio 1 Un elaboratore rappresenta numeri interi in complemento a due su 8 bit e numeri reali in utilizzando un byte per la mantissa normalizzata e un byte per l esponente
Il puntatore. Il puntatore
Il puntatore È un tipo scalare, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Il dominio di una variabile di tipo puntatore è un insieme di indirizzi: Il valore di una
dott. 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;
Esercizio 1: calcolo insieme intersezione
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 3 Esercitazione: 19 ottobre 2005 Esercizi su array e matrici Esercizio 1: calcolo insieme intersezione Problema: *******************************************************************
il precedente programma dichiara un vettore di interi di dimensione 10 e successivamente inserisce il valore 4 nel secondo elemento del vettore.
Questa dispensa propone esercizi sulla scrittura di algoritmi, in linguaggio C, utili alla comprensione dei vettori (ingl., array). La dichiarazione di un vettore di elementi omogenei in C avviene grazie
Introduzione 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 2016
File e puntatori a file
File e puntatori a file Vitoantonio Bevilacqua vitoantonio.bevilacqua@poliba.it La libreria stdio.h mette a disposizione delle funzioni che hanno la peculiarità di trattare con questa nuova tipologia di
Esercizi. La funzione swapint() primo tentativo
Politecnico di Milano Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio di array. #include
Fondamenti di Informatica 6. Algoritmi e pseudocodifica
Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
Fondamenti 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
Gli array, le stringhe e le strutture
INFORMATICA B Ingegneria Elettrica Gli array, le stringhe e le strutture Limiti dei tipi di dato semplici Utilizzare solo i tipi di dato semplici può essere limitante e rendere il programma poco flessibile
Introduzione alla programmazione in linguaggio C
Introduzione alla programmazione in linguaggio C Il primo programma in C commento Header della libreria Funzione principale Ogni istruzione in C va terminata con un ; Corso di Informatica AA. 2007-2008
Fondamenti di Informatica T. Linguaggio C: File
Linguaggio C: File I File Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa, che consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centrale.
ESERCIZIO 1 ESERCIZIO 2
ESERCIZIO 1 Scrivere una funzione che data una stringa A calcoli la sua lunghezza. int lunghezza(char A[]); Scrivere una funzione che date due stringhe A e B copi il contenuto di A in B e restituisca il
Linguaggio C. Vettori, Puntatori e Funzioni Stringhe. Università degli Studi di Brescia. Prof. Massimiliano Giacomin
Linguaggio C Vettori, Puntatori e Funzioni Stringhe Università degli Studi di Brescia Prof. Massimiliano Giacomin SCHEMA DELLA LEZIONE RELAZIONE TRA VETTORI E PUNTATORI (e le stringhe letterali come caso
Stringhe e tipi di dati strutturati
Stringhe e tipi di dati strutturati Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 21 Marzo 2013 Info sui Labs http://tinyurl.com/ieimlabextra Ricordate di portare un adattatore!
Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di
ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere
1 (4) 2 (4) 3 (12) 4 (6) 5 (6)
CORSO DI LAUREA IN INGEGNERIA ELETTRICA, CHIMICA e MATERIALI Informatica B, C Anno Accademico 2016-2017 Proff. Danilo ARDAGNA Prima Prova in Itinere 4.5.2017 Cognome Nome Matricola Firma Durata: 2h Valutazioni
Il 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
5. 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