Presentazione di PowerPointbloisi/didattica/ingegneriaClinica1314/... · free(T);} Esercizio 2...

Post on 10-Aug-2020

3 views 0 download

Transcript of Presentazione di PowerPointbloisi/didattica/ingegneriaClinica1314/... · free(T);} Esercizio 2...

Corso di Laboratorio di InformaticaIngegneria Clinica – BCLR

3

Esercizi Esame

Domenico Daniele Bloisi

Docente

Ing. Domenico Daniele Bloisi, PhDRicercatore

Dipartimento di Ingegneria Informatica, Automaticae Gestionale “Antonio Ruberti”Via Ariosto 25(adiacente Piazza Dante,

fermate Manzoni, Vittorio Emanuele,

Tram 3 fermata via Labicana)

Email: bloisi@dis.uniroma1.it

Home page: http://www.dis.uniroma1.it/~bloisiPagina 22013/2014Esercizi Esame

3

Ricevimento

In aula, subito dopo le lezioni Su appuntamento (tramite invio di una email) presso: Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti, via Ariosto 25 - II piano, stanza A209

Si invitano gli studenti a controllare regolarmente la bacheca degli avvisihttp://www.dis.uniroma1.it/~bloisi/didattica/labinf1314.html#Avvisi

Pagina 32013/2014Esercizi Esame3

Orari

Lunedì 12.00 – 13.30 Aula 15, via Scarpa 14

Lunedì 14.00 – 17.15Aula 15, Laboratorio Didattico via Tiburtina 205

Martedì 14.00 – 15.30 Aula 16, via Scarpa 14

Mercoledì 12.00 – 13.30 Aula 15, via Scarpa 14

Pagina 42013/2014Esercizi Esame3

Esercizio 1

Pagina 52013/2014Esercizi Esame3

Scrivere una funzione trasp che, dati in ingresso una matrice (rappresentata tramite puntatore a puntatore), la dimensione delle righe e la dimensione delle colonne, restituisca una nuova matrice (rappresentata tramite puntatore a puntatore) che sia la trasposta della matrice in ingresso.

Esempio

1 2 3 1 22 3 1 2 3 3 1

Inoltre, scrivere ...

Esercizio 1

Pagina 62013/2014Esercizi Esame3

Inoltre, scrivere una funzione main che verifichi il comportamento della funzione traspLa matrice di cui si vuole calcolare la trasposta deve essere recuperata da file.Il formato del file in ingresso sarà:<R> <C><dato0> <dato1> … <datoC-1>…<datoR-1> <dato1> … <datoC-1>

2 33 3 54 62 71

Esempio

Soluzione Esercizio 1

Pagina 72013/2014Esercizi Esame3

//dichiarazione della funzione traspint** trasp(int**, int, int);

Soluzione Esercizio 1

Pagina 82013/2014Esercizi Esame3

int** trasp(int** mat, int r, int c){int i;int j;int** t = malloc(c * sizeof(int*));if(t == NULL)

return NULL;for(i = 0; i < c; i++) {

t[i] = malloc(r * sizeof(int));if(t[i] == NULL)

return NULL;}for(i = 0; i < r; i++) {

for(j = 0; j < c; j++) {t[j][i] = mat[i][j];

}}return t;

}

Definizione della funzionetrasp

Soluzione Esercizio 1

Pagina 92013/2014Esercizi Esame3

#include <stdlib.h>#include <stdio.h>

#define DEBUG 1

int main() {FILE* fd = fopen("dati.txt","r"); //FILE* fd = fopen("C:\\code\\dati.txt","r"); if(fd == NULL) {

fprintf(stderr, "Errore apertura file\n");return EXIT_FAILURE;

}else {

fprintf(stdout, "File aperto\n");}

path assoluto

path relativo

Soluzione Esercizio 1

Pagina 102013/2014Esercizi Esame3

int r, c; //numero di righe e colonnefscanf(fd, "%d", &r);fscanf(fd, "%d", &c);//creazione struttura dati per memorizzare i//dati letti da fileint** M = malloc(r * sizeof(int*));if(M == NULL) {

fprintf(stderr, "Errore M\n");return EXIT_FAILURE;

}int i, j;for(i = 0; i < r; i++) {

M[i] = malloc(c * sizeof(int));if(M[i] == NULL) {

fprintf(stderr, "Errore M[%d]\n", i);return EXIT_FAILURE;

}}

Soluzione Esercizio 1

Pagina 112013/2014Esercizi Esame3

//memorizzazione datifor(i = 0; i < r; i++) {

for(j = 0; j < c; j++) {fscanf(fd, "%d", &M[i][j]);

}}

#if DEBUGprintf("M\n");for(i = 0; i < r; i++) {//righe

for(j = 0; j < c; j++) {//colonneprintf("%d ", M[i][j]);

}printf("\n");

}printf("\n");

#endif

Soluzione Esercizio 1

Pagina 122013/2014Esercizi Esame3

//calcolo traspostaint** T = trasp(M, r, c);if(T == NULL) {

fprintf(stderr, "Errore funzione trasp\n");return EXIT_FAILURE;

}

printf("Trasposta\n");for(i = 0; i < c; i++) {//righe

for(j = 0; j < r; j++) {//colonneprintf("%d ", T[i][j]);

}printf("\n");

}

Soluzione Esercizio 1

Pagina 132013/2014Esercizi Esame3

for(j = 0; j < r; j++)free(M[j]);

free(M);for(j = 0; j < c; j++)

free(T[j]);free(T);

}

Esercizio 2

Pagina 142013/2014Esercizi Esame3

Scrivere una funzione creaFileDecrescente che, preso in ingresso il nome di un file contenente interi, lo modifichi in modo da contenere gli stessi interi, ma in ordine inverso.

Esempio di file in input

Esempio Esecuzione Esercizio 2

Pagina 152013/2014Esercizi Esame3

File interi.txt originale1 12 34 5 6 7 3 4 5 6 6 77 4 3 32 2 34 5 6 6 4 2 3 4 66 5 433 23 889 0 6 54

File interi.txt modificato54 6 0 889 23 433 5 66 4 3 2 4 6 6 5 34 2 32 3 4 77 6 6 5 4 3 7 6 5 34 12 1

Esempio di file in output

Soluzione Esercizio 2

Pagina 162013/2014Esercizi Esame3

//prototipo per creaFileDecrescenteint creaFileDecrescente(const char* nomefile);

Soluzione Esercizio 2

Pagina 172013/2014Esercizi Esame3

int creaFileDecrescente(const char* nomefile) {

FILE* fd = fopen(nomefile, "r");if(fd == NULL)

return 0;int i, count = 0, j = 0;while(!feof(fd)) {

if(fscanf(fd, "%d", &i) == 1) count++;

}

Soluzione Esercizio 2

Pagina 182013/2014Esercizi Esame3

if(count == 0) return 0;

int array[count];rewind(fd);while(!feof(fd)) {

if(fscanf(fd, "%d", &i) == 1)array[j++] = i;

}fclose(fd);

Funzione rewind

Pagina 192013/2014Esercizi Esame3

Syntax:#include <stdio.h>void rewind( FILE *stream );

Description:The function rewind() moves the file position indicator to the beginning of the specified stream, also clearing the error and EOF flags associated with that stream.

Soluzione Esercizio 2

Pagina 202013/2014Esercizi Esame3

fd = fopen(nomefile, "w");if(fd == NULL)

return 0;for(i = count-1; i >= 0; i--)

fprintf(fd, "%d ", array[i]);fclose(fd);return 1;

}

Soluzione Esercizio 2

Pagina 212013/2014Esercizi Esame3

int main() {char *nomefile = "interi.txt";FILE* fd = fopen(nomefile, "r");if(fd == NULL) {

printf("errore apertura ""file %s\n", nomefile);

exit(EXIT_FAILURE);}

Soluzione Esercizio 2

Pagina 222013/2014Esercizi Esame3

int i;printf("file %s originale\n", nomefile);while(!feof(fd)) {

if(fscanf(fd, "%d", &i) == 1) {printf("%d ", i);

}}printf("\n");fclose(fd);

Soluzione Esercizio 2

Pagina 232013/2014Esercizi Esame3

if(creaFileDecrescente(nomefile)) {fd = fopen(nomefile, "r");if(fd == NULL) {

printf("Errore apertura file %s\n", nomefile);

exit(EXIT_FAILURE);}printf("file %s modificato\n",

nomefile);

Soluzione Esercizio 2

Pagina 242013/2014Esercizi Esame3

while(!feof(fd)) {if(fscanf(fd, "%d", &i) == 1){

printf("%d ", i);}

}printf("\n");fclose(fd);

}

Soluzione Esercizio 2

Pagina 252013/2014Esercizi Esame3

else {printf( "errore in "

"creaFileDecrescente(%s)\n", nomefile);

exit(EXIT_FAILURE);}return EXIT_SUCCESS;

}

Esercizio 3

Pagina 262013/2014Esercizi Esame3

Scrivere un programma che legga caratteri dalla tastiera e li scriva su un file “copia.txt” fino a che l'utente non immetta il carattere '$', nel qual caso il programma deve terminare verificando la corretta chiusura del file.

Esempiodigitare il testo da salvare$ per terminareeeeeesssssjtyrgesss$File copia.txt chiuso correttamente

Esempio Output Esercizio 3

Pagina 272013/2014Esercizi Esame3

Soluzione Esercizio 3

Pagina 282013/2014Esercizi Esame3

#include <stdio.h>#include <stdlib.h>

int main() {char *nomefile = "copia.txt";FILE* fd = fopen(nomefile, "w");if(fd == NULL) {

printf("errore apertura file %s\n", nomefile);

return EXIT_FAILURE;}

Soluzione Esercizio 3

Pagina 292013/2014Esercizi Esame3

printf("digitare il testo da salvare\n");printf("$ per terminare\n");int c = getchar();while(c != '$' && c != EOF) {

fprintf(fd, "%c", c);c = getchar();

}

Soluzione Esercizio 3

Pagina 302013/2014Esercizi Esame3

int i = fclose(fd);if(i == 0)

printf("File %s chiuso correttamente\n",nomefile);

elseprintf("Errore in chiusura per "

"il file %s\n", nomefile);return EXIT_SUCCESS;

}

Esercizio 4 Vero/Falso

Pagina 312013/2014Esercizi Esame3

void f(int *a) {a[1]=++a[3];

}

int main (void){/*1*/ int x[5]={14, 7, -4};/*2*/ printf("%d\n", x[4]);/*3*/ printf("%d\n", x[3] && (x[1] = 4));/*4*/ printf("%d\n", x[1]);/*5*/ printf("%d\n", x[3]);/*6*/ f(x);/*7*/ printf("%d\n", x[1]);/*8*/ printf("%d\n", x[3]);/*9*/ return 0; }

1. La riga 2 stampa un numero casuale2. La riga 3 stampa 03. La riga 4 stampa 44. La riga 5 stampa 05. La riga 7 stampa 16. La riga 8 stampa 1

Esercizio 4 Output

Pagina 322013/2014Esercizi Esame3

007011

Esercizio 5 Vero/Falso

Pagina 332013/2014Esercizi Esame3

int main() {/* 1*/ int A; float B; char C, ch;/* 2*/ A=4; B=2.9f; C='C'; ch='D';/* 3*/ printf("%c\n", C);/* 4*/ printf("%d\n", ch - C);/* 5*/ printf("%d\n", A%(int)B);/* 6*/ A = (A%(int)B + (++A));/* 7*/ printf("%d\n", A);/* 8*/ B = A++/B;/* 9*/ printf("%f\n", B);/*10*/ ch = (C+=1);/*11*/ printf("%c\n", ch);}

1. La riga 3 stampa 672. La riga 4 stampa 13. La riga 5 stampa 04. La riga 7 stampa 55. La riga 9 stampa 3.6670006. La riga 11 stampa D

Codice ASCII C = 67Codice ASCII D = 68

Esercizio 5 Output

Pagina 342013/2014Esercizi Esame3

C1051.724138D