Salve, ho realizzato questo programma dove se utilizzo la funzione potenza da me realizzata il programma funziona correttamente , mentre se la sostituisco con la funzione pow presente nella libreria math.h , la funzione ConvertireStringaInNumero mi restituisce valori diversi?
Ho visto che la funzione pow restituisce un double così ho provato a scrivere
num = num + ((Str[i] - 48) * (int) pow(10, (dim - 1) - k));
ma ottengo ancora una volta risultati diversi.
Come posso risolvere ? Grazie.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define T '-'
#define SFINE '\0'
#define NFINE -1
#define DIM 1000
int TrovaMassimo(int base, char *Str);
int VerificaCorrettezzaNumeri(int base, char Str[]);
void ConvertireStringaInVettoreInteri(char *Str, int V[]);
int LeggereDimensioneNumero(int i, char Str[]);
int ConvertireStringaInNumero(int i, int j, int dim, char Str[]);
int potenza(int base, int esponente);
int RicercaMassimo(int V[]);
int main(void){
char Str[] = "421-64-5-345";
int base = 7;
int max;
max = TrovaMassimo(base, Str); //restituisce il massimo oppure -1 in caso di simboli non ammessi
if (max == -1){
printf("E' presente almeno un simbolo non ammesso dalla base inserita\n");
}else{
printf("Il numero e' %d\n",max);
}
system("pause");
return 0;
}
int TrovaMassimo(int base, char *Str){
int n;
int V[DIM];
int esito;
ConvertireStringaInVettoreInteri(Str, V);
esito = VerificaCorrettezzaNumeri(base, Str); // restituisce 0 in caso di esito positivo o altrimenti -1
if (esito == 0){
n = RicercaMassimo(V);
}
if (esito == -1){
n = -1;
}
return n;
}
int VerificaCorrettezzaNumeri(int base, char Str[]){
int i = 0;
int c = 0;
while (Str[i] != SFINE && c == 0){
if ((Str[i] - 48) >= base && Str[i] != T && c == 0){
c = -1;
}
i++;
}
return c;
}
void ConvertireStringaInVettoreInteri(char Str[], int V[]){
int i = 0;
int k = 0;
int dim, num;
while(i < strlen(Str)){
dim = LeggereDimensioneNumero(i, Str);
num = ConvertireStringaInNumero(i, i + dim - 1, dim, Str);
V[k] = num;
i = i + dim + 1;
k++;
}
V[k] = NFINE;
/* oppure:
int i = 0;
char *ch = strtok(Str, "-");
while (ch != NULL){
V[i] = atoi(ch);
ch = strtok(NULL, "-");
i++;
}
V[i] = NFINE;
*/
return;
}
int LeggereDimensioneNumero(int i, char Str[]){
int cont = 0;
while (Str[i] != T && Str[i] != SFINE){
cont++;
i++;
}
return cont;
}
int ConvertireStringaInNumero(int i, int j, int dim, char Str[]){
int k = 0;
int num = 0;
while (i <= j){
num = num + ((Str[i] - 48) * potenza(10, (dim - 1) - k)); <---------------------------------------------------
k++;
i++;
}
return num;
}
int potenza(int base, int esponente){
int i = 1;
int p = base;
if (esponente == 0){
base = 1;
}
while (i < esponente){
base = base * p;
i++;
}
return base;
}
int RicercaMassimo(int V[]){
int i = 0;
int max = V[i];
while (V[i] != NFINE){
if (max < V[i]){
max = V[i];
}
i++;
}
return max;
}