Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    24

    [C] scrivere double su file senza zeri meno significativi

    Ciao a tutti,
    dovrei acquisire da tastiera una serie di numeri (interi e double) e trascriverli su file. Fino a qui tutto bene, però nel file i numeri dovrebbero essere trascritti esattamente come sono, cioè, per esempio se l'utente insersce 2 nel file devo trascrivere 2 e non 2.000000, allo stesso modo se viene inserito 2.55 devo trascrivere 2.55 e non 2.550000.
    Ho già risolto il problema quando il numero è intero:
    codice:
    double numero;
    FILE *finput;      //puntatore al file
    
    for(i = 0; i < n; i++)
    {
       printf("Inserire un numero: ");
       scanf("%lf", &numero);
       if(numero == (double)(int)numero)  //controllo se il numero inserito è un intero
          fprintf(finput, "%d ", (int)numero);  //se il numero è intero viene scritto su file con %d
       else
          fprintf(finput, "%lf ", numero);  //altrimenti viene scritto usando %lf
    }
    Con il controllo dell'if sono riuscito a rosolvere il problema quando viene inserito un numero intero, ma come posso fare per ottenere un risultato simile anche dentro l'else, cioè quando viene inserito un double?
    Non posso usare una cosa del tipo:
    fprintf(finput, "%.2lf ", numero);
    perchè così facendo otterrei un risultato ottimale solo per i numeri che hanno due cifre decimali, mentre riamrrebbe uno zero se il numero ha una sola cifra decimale oppure verrebbe troncato se ha più di due cifre decimali.
    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    La richiesta è bizzarra e l'unico modo è fare l'input in una stringa.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    24
    ovviamente questa cosa fa parte di un programma più esteso e ovviamente funziona tutto anche lasciando gli zeri, è solo una mia fissa per rendere più "elegante" il file.
    Quindi dovendo utilizare una stringa io dovrei:
    1) acuisire il valore double;
    2) convertirlo in tipo stringa (array di char);
    3) effettuare un controllo sui caratteri eliminando gli zeri meno significativi;
    4) riconvertire la stringa in double;

    giusto?

  4. #4
    Originariamente inviato da jeremyj
    ovviamente questa cosa fa parte di un programma più esteso e ovviamente funziona tutto anche lasciando gli zeri, è solo una mia fissa per rendere più "elegante" il file.
    Quindi dovendo utilizare una stringa io dovrei:
    1) acuisire il valore double;
    2) convertirlo in tipo stringa (array di char);
    3) effettuare un controllo sui caratteri eliminando gli zeri meno significativi;
    4) riconvertire la stringa in double;

    giusto?
    puoi saltare l'ultimo passaggio e scrivere sul file direttamente la stringa.
    Fra l'altro se invece di usare un array di char usi std::string ci sono dei metodi comodi per il punto (2) senza che debba scriverli tu

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    24
    ok perfetto, scusate la sbadataggine, in effetti per fare ciò che mi serve basta semplicemente acquisire il valore come una stringa e trascriverlo su file.
    Vorrei chiedervi anche un'altra cosa:
    è possibile fare in modo che i valori vengano allineati verticalmente all'interno del file?
    Per esempio:
    codice:
    0.12 0.3 1.2
    1.4  0.2 3.7
    4.1  1.1 3.2
    3.2  1.1 8.6
    2.45 4   0.18
    So che anche questa può sembrare una richiesta strana e inutile ai fini dello svolgimento del programma, ma sto preparando un lavoro per scopo didattico e al professore potrebbe far piacere questa cosa.
    Grazie a tutti.

  6. #6
    ti devi contare la lunghezza della stringa, in questo modo poi puoi allinearle come vuoi

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma allinearle a destra avrebbe senso?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    24
    Originariamente inviato da MegaAlchimista
    ti devi contare la lunghezza della stringa, in questo modo poi puoi allinearle come vuoi
    Però, per come ho strutturato la funzione di acquisizione dei valori, per "calcolare" l'allineamento mi devo basare sulla stringa più lunga, e finchè l'utente non ha inserito l'ultimo valore non posso stabilire qual è la più lunga.
    Potrei usare una qualche struttura di appoggio oppure un qualche metodo più efficiente?


    Originariamente inviato da oregon
    Ma allinearle a destra avrebbe senso?
    No, mi servirebbe allineare a sinistra come nell'esempio postato in precedenza.

    Grazie.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    In poche parole, per capirci, tu vuoi tutti gli elementi in modo che il punto decimale sia incolonnato?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    24
    Originariamente inviato da oregon
    In poche parole, per capirci, tu vuoi tutti gli elementi in modo che il punto decimale sia incolonnato?
    In pratica io devo acuisire un numero n di punti (specificabile dall'utente) rappresentabili in uno spazio k-dimensionale (k specificabile dall'utente), perciò ogni punto deve venire rappresentato da k coordinate.
    Le coordinate devono essere inserite dall'utente poi il programma deve calcolare la distanza euclidea tra tutte le coppie di punti e stampare a video tali distanze in ordine crescente. Essendo però un compito a scopo didattico il professore vuole che trascrivaimo le coordinate inserite dall'utente su file e poi le ripreleviamo dal file al momento di calcolare la distanza euclidea (il prof. chiede questo per farci lavorare con i file).
    Il programma l'ho già realizzato e testato e funziona perfettamente, volevo solo sistemare il particolare dell'allineamento nel file perchè potrebbe piacere al prof.
    In pratica il file viene strutturato in modo che ogni riga rappresenta un punto e tutti i valori sulla stessa riga rappresentano le coordinate di quel punto (ad esmpio se k=2 siamo in uno spazio bidimensionale perciò in ogni riga saranno presenti due valori che rappresentano le due coordinate del punto, analogamente se k=3 siamo in uno spazio tridimensionale quindi saranno presenti tre valori per ogni riga).
    Io vorrei allineare quei valori allineando verticalmente la prima cifra di ogni numero (e non allineando il punto decimale)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.