Esercizi su File
1
Esercizio
• Dato un file di testo chiamato dati.txt già esistente
contenente uno per riga valori che rappresentano numeri
relativi, scrivere un programma in linguaggio C in cui si
dichiarino due struct ST1 e ST2 ciascuna con due campi
a e b di tipo int e che effettua le seguenti operazioni:
– scrive su video quanti valori contiene il file dati.txt;
– pone nel campo a di ST1 il più grande valore
contenuto in dati.txt;
– pone nel campo b di ST1 il più piccolo valore
contenuto in dati.txt;
– pone nel campo a di ST2 la differenza fra il più
grande e il più piccolo valore contenuto in dati.txt;
– pone nel campo b di ST2 il prodotto fra il più grande e
il più piccolo valore contenuto in dati.txt.
2
#include <stdlib.h>
#include <stdio.h>
typedef struct {int a, b;} ST;
int main() {
ST ST1, ST2; FILE *f; int val;
f = fopen("dati.txt","r");
if (f==NULL) exit(-1);
fscanf(f,"%d",&ST1.a);
ST1.b = ST1.a;
while(feof(f) == 0) {
fscanf(f,"%d",&val);
if(val > ST1.a) { ST1.a = val; }
else if (val < ST1.b) { ST1.b = val; }
}
fclose(f);
ST2.a = ST1.a - ST1.b; ST2.b = ST1.a * ST1.b;
printf("%d %d\n\t %d %d\n", ST1.a,ST1.b,ST2.a,ST2.b);
return 0;
}
3
Esercizio
• Dato un file di testo chiamato dati.txt già esistente contenente
uno per riga valori che rappresentano numeri relativi, scrivere
un programma in linguaggio C in cui si dichiarino due file F1 e
F2 che esternamente si chiameranno rispettivamente dati1.txt e
dati2.txt e effettua le seguenti operazioni:
–
–
–
–
–
scrive quanti valori contiene il file dati.txt;
pone in dati1.txt gli elementi di dati.txt divisibili per 7;
pone in dati2.txt gli elementi di dati.txt divisibili per 5;
scrive su video quanti valori contiene il file dati1.txt;
scrive su video quanti valori contiene il file dati2.txt;
4
#include <stdlib.h>
#include <stdio.h>
int main() {
FILE *f, *f1, *f2;
int val, cont=0, cont7=0, cont5=0;
f = fopen("dati.txt","r");
f1 = fopen("dati1.txt","w");
f2 = fopen("dati2.txt","w");
if (f==NULL || f1==NULL || f2==NULL)
exit(-1);
5
while(fscanf(f,"%d",&val) != EOF) {
cont++;
if(val % 7 == 0) {
cont7++;
fprintf(f1,"%d\n",val);
}
if(val % 5 == 0) {
cont5++;
fprintf(f2,"%d\n",val);
}
}
printf("%d %d %d\n",cont,cont7,cont5);
fclose(f); fclose(f1); fclose(f2);
system("pause");
return 0;
}
6
Esercizio
• Scrivere un programma in linguaggio C
che:
– definisce due vettori P e D contenenti
ciascuno 100 numeri interi;
– legge da standard input una sequenza di
numeri interi ed inserisce i valori pari nel
vettore P e i valori dispari nel vettore D,
l’operazione di lettura termina quando almeno
uno dei due vettori è stato riempito;
– inserisce in un file di testo denominato dati.txt
i valori contenuti in P e D in modo alternato.
7
#define N 100
int main() {
int P[N], D[N], i=0, j=0;
do {
scanf(“%d”,&temp);
if(temp%2==0) { P[i]=temp; i++; }
else { D[j]=temp; j++; }
} while (i<N && j<N);
if(i>j) { max=i; } else { max=j; }
fp=fopen(“dati.txt”,”w”);
for(k=0;k<max;k++) {
if(k<i) fprintf(fp,”%d\n”, P[k]);
if(k<j) fprintf(fp,”%d\n”, D[k]);
}
fclose(fp);
return 0;
}
8
Esercizio
Scrivere un programma C che:
• ha in ingresso due file denominati rispettivamente A.txt e B.txt
contenenti su ogni riga un numero intero. Il numero di righe dei
due file non è noto a priori ma è uguale nei due file;
• definisce una matrice di nome MATRI 2 X 10 di tipo opportuno
e riempie la prima riga di MATRI con gli elementi di A.txt fino al
riempimento della riga o all'esaurimento dei dati letti dal file; poi
riempie la seconda riga di MATRI con gli elementi di B.txt fino
al riempimento della riga o all'esaurimento dei dati letti dal file;
• copia in un vettore VETT gli elementi presenti nella prima riga
della matrice che soddisfano i seguenti criteri:
– il valore è copiato solo se è maggiore o uguale al valore corrispondente
nella seconda riga della matrice;
– il vettore non deve presentare buchi, ovvero deve essere riempito senza
soluzione di continuità.
• Il programma stampa i valori effettivamente inseriti in VETT.
9
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fA, *fB;
int MATRI[2][10], VETT[10], el;
int indR, indV, j;
fA = fopen("A.txt","r");
fB = fopen("B.txt","r");
if(fA == NULL || fB== NULL)
exit(-1);
10
indR=0;
while(fscanf(fA,"%d",&el) != EOF && indR<10) {
MATRI[0][indR] = el;
indR++;
}
for(j=0;j<indR; j++) //fA e fB contengono lo stesso num di el
fscanf(fB,"%d",&MATRI[1][j]);
for(indV=0, j=0; j<indR; j++) {
if(MATRI[0][j] >= MATRI[1][j]) {
VETT[indV] = MATRI[0][j];
indV++;
}
}
for(j=0; j<indV; j++)
printf("%d\n",VETT[j]);
fclose(fA); fclose(fB);
system("pause"); return 0;
}
11
Scarica

Document