Consenso all'uso dei cookies

SITO1 -- SITO2 -- Forum2 -- CercaGlobale -- Informativa su Cookie e Privacy

Questo Forum1 è in sola lettura -- Usa il Forum2


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Aiuto programmazione in C
#1
Question 
Buon giorno!Chiedo aiuto a voi per risolvere questo esercizio:
"Si realizzi un programma in linguaggio C che permetta di acquisire da tastiera un numero reale con la denotazione europea che usa la virgola per segnalare la parte frazionaria. Il numero può avere il segno. Si supponga che il valore introdotto abbia sempre una forma corretta, e che il valore sia inferiore al massimo rappresentabile con il tipo float. Esempio di input: 123,45"

 il problema è che devo leggere il numero anche se ho inserito dei caratteri diversi da numeri
esempio:
input: fh*f-je1d?¿df64gu,f4__33
output: -164,433
ho fatto un esercizio simile (al fondo del post) per la lettura di numeri interi e funziona.. in questo caso l'unico problema è che per scrivere un numero in float in quel modo devo leggere ogni singolo carattere esaminarlo e poi procedere;
quando il carattere è ',' o '.' devo iniziare a scrivere la mantissa del numero;

allora ho pensato: finchè carattere!=',' e da '.' scrivo i valori in una variabile intera chiamato per esempio parte_intera, altrimenti scrivo i valori seguenti in un altro intero chiamato mantissa;
alla fine dell'aquisizione dei numeri (quando l'ultimo carattere è '\n') devo unire parte_intera e mantissa in unica variabile float chiamata per esempio "numero_in_float"..
per l'unione ho pensato di utilizzare un contatore (per esempio "i") che segni quanti numeri ho inserito nella mantissa e poi faccio:numero_in_float=parte_intera+((float)mantissa/(10*i));
(oppure numero_in_float= parte_intera-((float)mantissa/(10*i)) se avevo inserito il carattere '-' prima dei numeri per avere un numero negativo)
 il problema è: utilizzando degli interi, INT_MAX=2147483647 e INT_MIN=-2147483648 (tenete conto che controllo che non ci sia overflow e underflow) ma la variabile float può contenere valori molto più grandi quindi taglio fuori un sacco di valori! (o sbaglio?)
 voi come fareste?

 vi allego il programma che avevo fatto per l'inserimento di valori interi: 
Codice PHP:
/*
    10)Si realizzi un programma che legga da tastiera un numero intero, cifra per cifra,
       e restituisca in una variabile il valore. Si supponga che il valore introdotto
       abbia una forma corretta e che il valore sia rappresentabile con gli interi.
       Approfondimento: prevedere che la forma sia corretta, ma il valore possa eccedere
       la rappresentazione degli interi.
*/

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <limits.h>

int main()
{   
int numero,flag,segno,n_carattere,numero_inserito;
    
char carattere,c_segno;
    
printf("Inserisci un valore intero compreso tra  %d e %d: ",INT_MIN,INT_MAX);
    
flag=0;
    
c_segno='0';
    
numero=0;
    
segno=1;
    
numero_inserito=0;
    while (
flag==0)
    {
        
carattere=getchar();
        if (((
isdigit(carattere))||(((carattere=='+')||(carattere=='-'))&&;(c_segno=='0'))))
        {
            if ((
carattere=='-')&&;(numero_inserito==0))
            {
                
c_segno='-';
                
segno=-1;
            }
                else
                {
                    if (
isdigit(carattere))
                    {
                        
n_carattere=carattere-'0';
                        
numero_inserito=1;
                        if (((
segno>0)&&;(((numero*10)+(segno*n_carattere))>0))||((segno<0)&&;(((numero*10)+(segno*n_carattere))<0)))
                            
numero=((numero*10)+(segno*n_carattere));
                        else
                            
numero_inserito=2;
                    }
                }
        }
        if (
carattere=='\n')
            
flag=1;

    }
    if (
numero_inserito==1)
        
printf("\nHai inserito il numero= %d\n\n",numero);
    else
        {
            if (
numero_inserito==2)
                
printf("\nHai inserito un valore oltre i limiti!\n\n");
            else
                
printf("\nNon hai inserito numeri.\n\n");
        }
    return 
0;


 

 
Cita messaggio
#2
P.S.: tenete conto che sono alle prime armi e che ho cominciato a programmare da 3 settimane [img]images/smilies/arrossire.gif[/img]
Cita messaggio


Vai al forum:


Utenti che stanno guardando questa discussione: 1 Ospite(i)