Mi mandi un messaggio privato con il contatto msn; ne ho bisogno, ora
Necessito consulenza su come compilare un programma per domani.
Mi mandi un messaggio privato con il contatto msn; ne ho bisogno, ora
Necessito consulenza su come compilare un programma per domani.
Codice:# include <stdio.h> # include <string.h> # include <math.h> int SommaConverti(char nome_file[]); int main() { char nome_file[21]; printf("Nome del file: "); scanf("%s", nome_file); printf("La somma e' %d\n", SommaConverti(nome_file)); return 0; } int SommaConverti(char nome_file[]) { int somma=0; FILE* fp; fp = fopen ("prova.txt","r"); char check=getc(fp); while (check!=EOF) //controllo se ho finito di leggere {//leggo una riga char tmp[50]; int tmpint[50]; int i=0; while ((check!='\n')&&(check!=EOF)) { tmp[i]=check; i++; check=getc(fp); //alla fine di questo i è pari al numero di caratteri della riga } int j=1; while(tmp[j]!=')') //inizia a leggere il numero da convertire { if(tmp[j]<='9') //se è minore o uguale a nove è un numero tmpint[j]=tmp[j]-'0'; if(tmp[j]>'9') //se è maggiore di 9 è una lettera tmpint[j]=tmp[j]-'A'+10; printf ("%d", tmpint[j]); j++; } //j punta alla seconda parentesi alla fine del ciclo, j+2 punta al primo numero che compone la base int k=j-2; //indica la lunghezza del numero da convertire int base=0; j=j+2; //j punta al primo numero che compone la base while(j<i-1) { if(j-3==k) base=tmp[j]-'0'; else base=10*(base)+(tmp[j]-'0'); j++; } int h, numero=0; for(h=0; h<k; h++) { numero=numero+(tmpint[h])*pow(base,k-h); } printf("%d %d\n", numero, base); somma = somma + numero; check=getc(fp); } fclose(fp); return somma; }
Il programma riceve un file formattato nella seguente maniera
Codice:(23) 10 (EF0) 18 (2NG) 33 (1204) 5
I numeri tra parentesi rappresentano appunto dei numeri scritti in base decimale da 1 a 36
Il numero successivo rappresenta invece la base in cui è scritto.
Il programma deve stampare a video la somma di tutti i numeri convertiti in base decimale.
(A corrisponde a 10, B corrisponde a 11, C corrisponde a 12 e così via fino a Z che corrisponde a 36)
Se vi pare fatto male potete pure rifarlo, mi basta averlo funzionante, è urgentissimo! ;_;
Vi chiederete perché mi sveglio così tardi ma è tutta oggi che ci sto sopra... devo portarlo all'orale di domani. Era un esercizio dello
scritto che non sono riuscito a svolgere, lo scritto si è appena svolto (l'altro ieri) quindi non ho avuto possibilità di farlo prima.
parli arabo per me... ho solo quest'esame di inforamatica. Per fortuna.
Comunque ho stampato qualcosina... al primo giro il programma legge il numero giusto e la base giusta ma ritorna un numero complessivo sballato.
Al secondo giro il programma legge il numero giusto e la base sbagliata (ex legge 1 al posto di 10) e ritorna un numero complessivo sballato.
Non puoi provare a sistemare nulla?