Presentazione di PowerPointbloisi/didattica/ingegneriaClinica1314/... · free(T);} Esercizio 2...
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: [email protected]
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