Ciao a tutti, piacere sono un nuovo iscritto al forum :)
Vi volevo chiedere una mano su un problema riguardante i file in C.
La traccia del problema é: "Scrivi una funzione parametrica in grado di fondere due file di interi ordinati in senso crescente in un nuovo file, leggendo i tre nomi da input. Le eventuali ripetizioni devono essere eliminate. Quindi,visualizza sullo schermo i nuemri di valore maggiore in ordine decrescente."
La difficoltá che trovo sta nel fondere il contenuto dei due file.
Questo é quello che sono riuscito a fare:
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
// PROTOTIPI DI FUNZIONE //
int lettura1(char file1[], int vett1[]);
int lettura2(char file2[], int vett2[]);
int lettura3(char file3[], int vett3[]);
int main () {
int scelta; // VARIABILI UTILIZZATA PER LO SWITCH //
char file1[MAX]; // VARIABILE DI TIPO CHAR, DOVE VA INSERITO IL NOME DEL PRIMO FILE //
char file2[MAX]; // VARIABILE DI TIPO CHAR, DOVE VA INSERITO IL NOME DEL SECONDO FILE //
char file3[MAX]; // VARIABILE DI TIPO CHAR, DOVE VA INSERITO IL NOME DEL SECONDO FILE //
// VETTORE CHE CONTERRA' TUTTI I NUMERI PRESENTI NEL FILE 1 //
// DIM1, VARIABILE CHE CONTIENE IL NUMERO TOTALE DI NUEMERI PRESENTI NEL FILE 1 //
// I, E' L'INDICE UTILIZZATO PER LA STAMPA DEL VETTORE 1 //
int v1[MAX], dim1, i;
// VETTORE CHE CONTERRA' TUTTI I NUMERI PRESENTI NEL FILE 2 //
// DIM2, VARIABILE CHE CONTIENE IL NUMERO TOTALE DI NUMERI PRESENTI NEL FILE 2 //
// J, E' L'INDICE UTILIZZATO PER LA STAMPA DEL VETTORE 2 //
int v2[MAX], dim2, j;
// VETTORE CHE CONTERRA' TUTTI I NUEMRI PRESENTI NEL FILE 3 //
// DIM3, VARIBILIE CHE CONTIENE IL NUMERO TOTALE DI NUMERI PRESENTI NEL FILE 3 //
// Z, E' L'INDICE UTILIZZATO PER LA STAMPA DEL VETTORE 3 //
int v3[MAX], dim3, z;
do { // INIZIO DEL CICLO DO - WHILE //
// COMANDO UTILIZZATO PER PULIRE LO SCHERMO, QUANDO IL MENU SI RIPETE //
system("cls");
printf("--------------------Menu--------------------");
printf("\n1- Leggi il primo e il secondo file.");
printf("\n2- Combina il primo e il secondo file, nel file 3.");
printf("\n3- Stampa del terzo file.");
printf("\n4- Esci dal programma.");
printf("\nQual'e' la tua scelta? ");
scanf ("%d", &scelta); // INSRIMENTO DI UN NUMERO NELLA VARIABILE SCELTA //
// INIZIO DELLA STRUTTURA SWITCH, CON IL CONTROLLO SULLA VARIABILE SCELTA //
switch(scelta) {
case 1: // CASO 1 //
printf("\nInserisci il nome del primo file: "); // INSERICI IL NOME DEL FILE CHE VUOI STAMPARE //
scanf("%s", file1); // AQUISIZIONE DEL NOME DEL FILE CHE SI VUOLE STAMPARE PER PRIMO //
dim1 = lettura1(file1, v1); // ASSEGANMO ALLA VARIABILE DIM1, IL VALORE RIPORATO DALLA FUNZIONE LETTURA1 //
printf("\nADESSO MI TROVO PRIMA DELLA STAMA DEL VETTORE 1.");
// INIZIO DEL CICLO PER LA STAMPA DEI NUMERI DEL VETTORE 1 //
for (i=0;i<dim1;i++) {
printf("\nADESSO SONO ALL'INTERNO DEL FOR DEL PRIMO VETTORE.");
printf("\n");
printf("%d ", v1);
printf("\nI=%d", i);
}
printf("\nInserisci il nome del secono file: "); // INSERICI IL NOME DEL FILE CHE VUOI STAMPARE //
scanf("%s", file2); // AQUISIZIONE DEL NOME DEL FILE CHE SI VUOLE STAMPARE PER SECONDO //
dim2 = lettura2(file2, v2); // ASSEGANMO ALLA VARIABILE DIM1, IL VALORE RIPORATO DALLA FUNZIONE LETTURA2 //
printf("\nADESSO MI TROVO PRIMA DELLA STAMA DEL VETTORE 2.");
// INIZIO DEL CICLO PER LA STAMPA DEI NUMERI DEL VETTORE 2 //
for (j=0;j<dim2;j++) {
printf("\nADESSO SONO ALL'INTERNO DEL CICLO FOR DEL SECONDO VETTORE.");
printf("\n");
printf("%d ", v2[j]);
}
printf("\n");
system("PAUSE");
break;
case 2: // CASO 2 //
j=0; // INIZIALIZZAZIONE DELLA VARIABILE J A 0 //
z=0; // INIZIALIZZAZIONE DELLA VARIABILE Z A 0 //
// INIZIO DEL FOR CHE CI PERMETTEREA DI INSERIRE I NUMERI IN ORDINE NEL VETTORE 3 //
for (i=0;i<dim1;i++) {
if (v1 != v2[j]) {
if (v1 > v2[j]) {
v3[z] =v1;
z++;
j++;
}
else {
v3[z] = v2[j];
z++;
j++;
}
}
}
FILE *tp; // INIZIALIZZAZIONE DI UN PUNTATORE A FILE //
printf("\nInserisi il nome del file dove deve essere salvare la fusione tra i primi due file: ");
scanf("%s" , file3);
tp = fopen(file3, "w");
for (z=0;z<dim3;z--) {
fprintf(tp, "%d ", file3);
}
fclose(tp);
printf("\n");
system("PAUSE");
break;
case 3:
dim3 = lettura3(file3, v3);
for (z=0;z<dim3;z++) {
printf("%d\t", v3[z]);
}
printf("\n");
system("PAUSE");
break;
case 4:
exit(1);
default:
printf("\nERRORE:il carattere inserito non e' valido.");
printf("\n");
system("PAUSE");
break;
}
} while(1);
return 0;
}
// DEFINIZIONE DI FUNZIONI //
int lettura1(char file1[], int vett1[]) {
int i=0;
FILE *fp1;
printf("\nSIAMO NELLA FUNZIONE DI LETTURA1.");
fp1 = fopen(file1, "r");
while (!eof(fp1)) {
printf("\nADESSO MI TROVO NEL CICLO WHILE DELLA FUNZIONE LETTURA1.");
fscanf(fp1, "%d ", &vett1);
i++;
}
fclose(fp1);
return i;
}
int lettura2(char file2[], int vett2[]) {
int j=0;
FILE *fp2;
printf("\nSIAMO NELLA FUNZIONE DI LETTURA2.");
fp2 = fopen(file2, "r");
while (!eof(fp2)) {
printf("\nADESSO MI TROVO NEL CICLO WHILE DELLA FUNZIONE LETTURA2.");
fscanf(fp2, "%d ", &vett2[j]);
j++;
}
fclose(fp2);
return j;
}
int lettura3(char file3[], int vett3[]) {
int k=0;
FILE *fp3;
printf("\nSIAMO NELLA FUNZIONE DI LETTURA3.");
fp3 = fopen(file3, "r");
while(!eof(fp3)) {
printf("\nADESSO MI TROVO NEL CICLO WHILE DELLA FUNZIONE LETTURA3.");
fscanf(fp3, "%d ", &vett3[k]);
}
fclose(fp3);
return k;
}
Grazie solo per il tempo perso per leggere tutto il codice :love:
Vi volevo chiedere una mano su un problema riguardante i file in C.
La traccia del problema é: "Scrivi una funzione parametrica in grado di fondere due file di interi ordinati in senso crescente in un nuovo file, leggendo i tre nomi da input. Le eventuali ripetizioni devono essere eliminate. Quindi,visualizza sullo schermo i nuemri di valore maggiore in ordine decrescente."
La difficoltá che trovo sta nel fondere il contenuto dei due file.
Questo é quello che sono riuscito a fare:
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
// PROTOTIPI DI FUNZIONE //
int lettura1(char file1[], int vett1[]);
int lettura2(char file2[], int vett2[]);
int lettura3(char file3[], int vett3[]);
int main () {
int scelta; // VARIABILI UTILIZZATA PER LO SWITCH //
char file1[MAX]; // VARIABILE DI TIPO CHAR, DOVE VA INSERITO IL NOME DEL PRIMO FILE //
char file2[MAX]; // VARIABILE DI TIPO CHAR, DOVE VA INSERITO IL NOME DEL SECONDO FILE //
char file3[MAX]; // VARIABILE DI TIPO CHAR, DOVE VA INSERITO IL NOME DEL SECONDO FILE //
// VETTORE CHE CONTERRA' TUTTI I NUMERI PRESENTI NEL FILE 1 //
// DIM1, VARIABILE CHE CONTIENE IL NUMERO TOTALE DI NUEMERI PRESENTI NEL FILE 1 //
// I, E' L'INDICE UTILIZZATO PER LA STAMPA DEL VETTORE 1 //
int v1[MAX], dim1, i;
// VETTORE CHE CONTERRA' TUTTI I NUMERI PRESENTI NEL FILE 2 //
// DIM2, VARIABILE CHE CONTIENE IL NUMERO TOTALE DI NUMERI PRESENTI NEL FILE 2 //
// J, E' L'INDICE UTILIZZATO PER LA STAMPA DEL VETTORE 2 //
int v2[MAX], dim2, j;
// VETTORE CHE CONTERRA' TUTTI I NUEMRI PRESENTI NEL FILE 3 //
// DIM3, VARIBILIE CHE CONTIENE IL NUMERO TOTALE DI NUMERI PRESENTI NEL FILE 3 //
// Z, E' L'INDICE UTILIZZATO PER LA STAMPA DEL VETTORE 3 //
int v3[MAX], dim3, z;
do { // INIZIO DEL CICLO DO - WHILE //
// COMANDO UTILIZZATO PER PULIRE LO SCHERMO, QUANDO IL MENU SI RIPETE //
system("cls");
printf("--------------------Menu--------------------");
printf("\n1- Leggi il primo e il secondo file.");
printf("\n2- Combina il primo e il secondo file, nel file 3.");
printf("\n3- Stampa del terzo file.");
printf("\n4- Esci dal programma.");
printf("\nQual'e' la tua scelta? ");
scanf ("%d", &scelta); // INSRIMENTO DI UN NUMERO NELLA VARIABILE SCELTA //
// INIZIO DELLA STRUTTURA SWITCH, CON IL CONTROLLO SULLA VARIABILE SCELTA //
switch(scelta) {
case 1: // CASO 1 //
printf("\nInserisci il nome del primo file: "); // INSERICI IL NOME DEL FILE CHE VUOI STAMPARE //
scanf("%s", file1); // AQUISIZIONE DEL NOME DEL FILE CHE SI VUOLE STAMPARE PER PRIMO //
dim1 = lettura1(file1, v1); // ASSEGANMO ALLA VARIABILE DIM1, IL VALORE RIPORATO DALLA FUNZIONE LETTURA1 //
printf("\nADESSO MI TROVO PRIMA DELLA STAMA DEL VETTORE 1.");
// INIZIO DEL CICLO PER LA STAMPA DEI NUMERI DEL VETTORE 1 //
for (i=0;i<dim1;i++) {
printf("\nADESSO SONO ALL'INTERNO DEL FOR DEL PRIMO VETTORE.");
printf("\n");
printf("%d ", v1);
printf("\nI=%d", i);
}
printf("\nInserisci il nome del secono file: "); // INSERICI IL NOME DEL FILE CHE VUOI STAMPARE //
scanf("%s", file2); // AQUISIZIONE DEL NOME DEL FILE CHE SI VUOLE STAMPARE PER SECONDO //
dim2 = lettura2(file2, v2); // ASSEGANMO ALLA VARIABILE DIM1, IL VALORE RIPORATO DALLA FUNZIONE LETTURA2 //
printf("\nADESSO MI TROVO PRIMA DELLA STAMA DEL VETTORE 2.");
// INIZIO DEL CICLO PER LA STAMPA DEI NUMERI DEL VETTORE 2 //
for (j=0;j<dim2;j++) {
printf("\nADESSO SONO ALL'INTERNO DEL CICLO FOR DEL SECONDO VETTORE.");
printf("\n");
printf("%d ", v2[j]);
}
printf("\n");
system("PAUSE");
break;
case 2: // CASO 2 //
j=0; // INIZIALIZZAZIONE DELLA VARIABILE J A 0 //
z=0; // INIZIALIZZAZIONE DELLA VARIABILE Z A 0 //
// INIZIO DEL FOR CHE CI PERMETTEREA DI INSERIRE I NUMERI IN ORDINE NEL VETTORE 3 //
for (i=0;i<dim1;i++) {
if (v1 != v2[j]) {
if (v1 > v2[j]) {
v3[z] =v1;
z++;
j++;
}
else {
v3[z] = v2[j];
z++;
j++;
}
}
}
FILE *tp; // INIZIALIZZAZIONE DI UN PUNTATORE A FILE //
printf("\nInserisi il nome del file dove deve essere salvare la fusione tra i primi due file: ");
scanf("%s" , file3);
tp = fopen(file3, "w");
for (z=0;z<dim3;z--) {
fprintf(tp, "%d ", file3);
}
fclose(tp);
printf("\n");
system("PAUSE");
break;
case 3:
dim3 = lettura3(file3, v3);
for (z=0;z<dim3;z++) {
printf("%d\t", v3[z]);
}
printf("\n");
system("PAUSE");
break;
case 4:
exit(1);
default:
printf("\nERRORE:il carattere inserito non e' valido.");
printf("\n");
system("PAUSE");
break;
}
} while(1);
return 0;
}
// DEFINIZIONE DI FUNZIONI //
int lettura1(char file1[], int vett1[]) {
int i=0;
FILE *fp1;
printf("\nSIAMO NELLA FUNZIONE DI LETTURA1.");
fp1 = fopen(file1, "r");
while (!eof(fp1)) {
printf("\nADESSO MI TROVO NEL CICLO WHILE DELLA FUNZIONE LETTURA1.");
fscanf(fp1, "%d ", &vett1);
i++;
}
fclose(fp1);
return i;
}
int lettura2(char file2[], int vett2[]) {
int j=0;
FILE *fp2;
printf("\nSIAMO NELLA FUNZIONE DI LETTURA2.");
fp2 = fopen(file2, "r");
while (!eof(fp2)) {
printf("\nADESSO MI TROVO NEL CICLO WHILE DELLA FUNZIONE LETTURA2.");
fscanf(fp2, "%d ", &vett2[j]);
j++;
}
fclose(fp2);
return j;
}
int lettura3(char file3[], int vett3[]) {
int k=0;
FILE *fp3;
printf("\nSIAMO NELLA FUNZIONE DI LETTURA3.");
fp3 = fopen(file3, "r");
while(!eof(fp3)) {
printf("\nADESSO MI TROVO NEL CICLO WHILE DELLA FUNZIONE LETTURA3.");
fscanf(fp3, "%d ", &vett3[k]);
}
fclose(fp3);
return k;
}
Grazie solo per il tempo perso per leggere tutto il codice :love: