Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Ошибка в сравнении чисел.  (Прочитано 820 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Tobyan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 15
  • C++.
    • Просмотр профиля
Ошибка в сравнении чисел.
« : 28 Октября 2011, 19:20:48 »
Написал по заданию небольшую програмку (которая еще будет совершенсвоваться в течение 12 ступеней(заданий) П.С.: занимаюсь по книжке Страуструпа: принципы и практика программирования)
Так вот на первый взгляд при запуске программы все отлично идет. При введении чисел они вроде бы корректно сравниваются и т.п. по возможностям проги. Но потом если вводить случайные большие числа типа "654219684" и "987641" программа может сказать, что 654219684<987641 и что 654219684 наименьшее число из двух.

в чем проблема?




#include<iostream>
#include<fstream>
#include<sstream>
#include<cmath>
#include<cstdlib>
#include<string>
#include<list>
#include<vector>
#include<algorithm>
#include<stdexcept>
#include<map>
using namespace std;

int main()
{
    vector<string> varcan;
    string arc;
    cout << "Пожалуйста, введите два числа и символ '|' : \n";
    int i = 0;
    int ii = 1;
    for(;;i+=2,ii+=2)
    {
        while(cin >> arc)
        {
            if (arc == "|" ) {break;}
            varcan.push_back(arc);
        }
        else if (varcan[i]>varcan[ii])
        {
            cout << "Наименьшее значение из двух равно : " << varcan[ii]
                 << "\nЧисла : "<< varcan[ii] <<'<'<< varcan[i] << "\n" ;
        }
        else if (varcan[ii]>varcan[i])
        {
            cout << "Наименьшее значение из двух равно : " << varcan[i]
                 << "\nЧисла : "<< varcan[i] <<'<'<< varcan[ii] << "\n" ;
        }
        else
       
        cout << "Размер варкана "<< varcan.size() << endl;
        if (varcan.size()> 100) {break;}

    }
}

Пользователь решил продолжить мысль 28 Октября 2011, 20:16:12:
И еще скажите пожалуйста, как изменить правильно тип переменной arc на double. Просто необходимо для окончания ввода ввести символ "|" , а сравнивать символьные и численные литералы нельзя.
« Последнее редактирование: 28 Октября 2011, 23:14:22 от Tobyan »

andrey_p

  • Гость
Re: Ошибка в сравнении чисел.
« Ответ #1 : 29 Октября 2011, 05:35:42 »
Ох... Нужно объявить три переменные - 2 типа double, одну типа char и считывать в них подряд 2 числа и символ. Сравнение чисел и строк, выглядищих одинаково, но имеющих разный тип, будет и должно происходить по разному.

Поскольку знаний совсем мало, а занимаетесь самостоятельно, Страуструпа обязательно надо дополнить еще чем-то. Перцольд "Код" - для основ работы компьютера (изумительная книга) и How to think like computer scientist (Python) или Eloquent Javascript. Две последние книги в свободном доступе в Интернете и очень легки для чтения.

ЗЫ Без знания технического английского (желания и возможности его изучить) лучше сразу бросить баловство с программированием.

Оффлайн Tobyan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 15
  • C++.
    • Просмотр профиля
Re: Ошибка в сравнении чисел.
« Ответ #2 : 29 Октября 2011, 12:02:15 »
Ох... Нужно объявить три переменные - 2 типа double, одну типа char и считывать в них подряд 2 числа и символ. Сравнение чисел и строк, выглядищих одинаково, но имеющих разный тип, будет и должно происходить по разному.
Я просто переписал код заново ибо выложенная версия как то мне совсем не понравилась.
Затем я его модифицировал и сравнение оказалось ненужным. Проблему в завершающим символом '|' так же решил.
Цитировать
Перцольд "Код" - для основ работы компьютера
Спасибо, обязательно прочту.
Цитировать
Без знания технического английского (желания и возможности его изучить) лучше сразу бросить баловство с программированием.
Есть и желание и знание и возможности(ибо самообучение). Нет только коллектива подходящего. Живу как говорится во враждебной среде, антиинглишленгвистов(это лишает одной из возможностей совершенствования, да и просто неприятно.) :)
« Последнее редактирование: 29 Октября 2011, 14:09:01 от Tobyan »

 

Страница сгенерирована за 0.024 секунд. Запросов: 22.