Валидно реално число *

Напишете програма, която позволява да се въведе низ и отпечатва дали той е валидно реално число (валидното реално число може евентуално да започва със знак и после съдържа една или повече цифри, евентуално десетична точка и после евентуално още някакви цифри за дробната част).

По желание: Да се допълни програмата, така че да преобразува низа в число и да го отпечатва.

Публикувано в 11а, 11в с етикети . Постоянна връзка.

2 Responses to Валидно реално число *

  1. dreanor каза:
    #include <iostream>
    #include <cstdlib>
    #include <cctype>
    #include <string.h>
    
    using namespace std;
    int valid_flstr( char *flstr){ //Prowerka za walidno realno chislo
    
        if ((flstr[0]=='-')||(isdigit(flstr[0]))){
            int br=0;
            for (int i=1; flstr[i]!='\0'; i++)
                if ((flstr[i]==',')||(flstr[i]=='.')) br++;
                else if (!isdigit(flstr[i])) return 0;
        if (br>=2) return 0;
            else return 1;
        }
        else return 0;
        }
    
    double convert(const char* flstr){ //Obrushta niza w realno chislo
      double num=0, fact=1;
      int i=0,d;
      if (flstr[i]=='-'){
        i++;
        fact=-1;
      };
      for (bool point_s=false; flstr[i]; i++){
        if (flstr[i]=='.'){
          point_s=true;
          continue;
        }
        d=flstr[i]-'0';
        if (point_s) fact/=10.0;
        num=num*10.0+(double)d;
      };
      return num*fact;
    };
    
    int main()
    {
        char flstr[15];
        cin.getline(flstr, 15);
        if (valid_flstr(flstr)){
            double num=convert(flstr);
            cout<<num<<endl;
        }
        else cout<<"Newaliden whodn";
    
        system ("PAUSE");
        return 0;
    }
    

    Това е моят вариант.
    А сега мързеливият :)

    #include <iostream>
    #include <string.h>
    using namespace std;
    
    int main()
    {
        char flstr[15];
        cin.getline(flstr,15);
        float num=atof(flstr);
        cout<<num<<endl;
        system ("PAUSE");
        return 0;
    }
    
    
    • Данаил каза:

      Много добро решение! Особено ми хареса как си реализирал преобразуването на дробната част – аз го бях измислил по-сложно, например :-) Обаче трябва да го пипнеш още малко –
      приема например -. за валидно число.

      А за мързеливото решение – бива (и е доста по-кратко, да), но не проверява дали е валидно реално число. Няма да може да се отличи въвеждане на 0.0 от въвеждане на невалидни числа (за разлика от първия ти вариант). В този смисъл не удовлетворява условието на задачата.

Вашият коментар