Dunque, spero che qualcuno possa aiutarmi...
Dato un file del tipo:
4 6 -5 2 1
5 -3 2
.
.
.
-4 5 10 -3 2 0
Sono riuscito a normalizzare i valori in [-1;1], con questo semplice codice:
codice:
#include<stdlib.h>
#include<stdio.h>
#define max(x,y) ((x>y)?x:y)
#define min(x,y) ((x<y)?x:y)
int main( int argc, char * argv[] ) {
int n=100000;
int vett[n];
FILE *fd,*fdout;
int i, res, dimensioni_vettore;
int min_value=100000;
int max_value=-100000;
double lower=-1.0,upper=1.0, value;
/* apre il file */
if ( argc != 3 ) {
printf("Utilizzo: %s file1 outfile\n",argv[0]);
return 1;
}
fd = fopen (argv[1], "r");
if ( fd == NULL) {
perror("Errore in apertura del file");
exit(1);
}
fdout = fopen (argv[2], "a");
for(i=0; i<n-1; i++){
res=fscanf(fd, "%d", &vett[i]);
if( res==EOF )
break;
printf("valore esaminato:%d\n",vett[i]);
min_value=min(vett[i],min_value);
max_value=max(vett[i],max_value);
dimensioni_vettore=i;
}
printf("max=%d, min=%d\n",max_value,min_value);
/* normalizzazione -1;1 */
for(i=0; i<dimensioni_vettore+1; i++){
if(vett[i] == min_value)
value = lower;//-1
else if(value == max_value)
value = upper;//1
else
value = lower + (upper-lower) *
(value-min_value)/
(max_value-min_value);
fprintf(fdout, "%g ",value);}
/* chiude il file */
fclose(fd);
fclose(fdout);
return 0;
}
Il problema è che i valori normalizzati sono scritti uno di seguito all' altro senza rispettare il ritorno a capo quando una riga finisce... Questo perché leggo i valori come interi e li inserisco in un vettore di interi che con la funzione fscanf non tiene conto del fine riga e inizio nuova riga...
Come posso modificare il tutto in modo da scrivere i valori riga per riga, invece che tutti in fila???