Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2017, 15:36   #1
No@ngel
Новичок
Джуниор
 
Регистрация: 15.12.2017
Сообщений: 2
По умолчанию Найти сумму чисел. Не пойму в чем ошибка.

Текст задачи:
На стандартном потоке ввода задаётся последовательность целых чисел. Каждое число последовательности не меньше -20000000 и не больше 20000000. Всего последовательность состоит не более чем из 40 чисел. Последовательность завершается признаком конца ввода. На стандартный поток вывода напечатайте сумму этих чисел.

Решение:
Код:
var y, x, i:longint;
begin
    i:=0;
    while (not eoln) do
    begin
    if i<=40 then begin
    read(x);
    y:=y+x;
    i:=i+1;
    end;
    end;
    writeln(y);
end.
Программа работает при любых значениях вводимых с клавиатуры.
Программа компилятора олимпиадных задач говорит, что решение неполное.
И если можно ее как-то упростить то как?

_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 15.12.2017 в 15:50.
No@ngel вне форума Ответить с цитированием
Старый 15.12.2017, 15:57   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

y обязательно обнулять перед использованием.
даже если компилятор это Вам позволяет, никогда не используйте неиницилизированные переменные! никогда!

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

Впрочем, по условию задачи чисел не больше 40.
поэтому и считать/проверять их количество я смысла не вижу:
Код:
var y, x:longint;
begin
    y:=0;
    while (not eoln) do
    begin
       read(x);
       y:=y+x;
    end;
    writeln(y);
end.
но тут есть подвох, связанный с переполнением данных.
попробуйте взять и просуммировать тридцать чисел 19999999
Такой размер входит в диапазон представления longint?
вот в этом и подвох.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.12.2017, 16:04   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если проверяешь количество чисел и там вдруг больше 40, то бесконечный цикл получишь. А зачем вообще проверяешь? Признак конца ввода нужно ловить. А какой он?
Цитата:
тут есть подвох, связанный с переполнением данных
Не вижу, 40*20000000 свободно в longint помещается
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 15.12.2017 в 16:08.
Аватар вне форума Ответить с цитированием
Старый 15.12.2017, 16:27   #4
No@ngel
Новичок
Джуниор
 
Регистрация: 15.12.2017
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код:
var y, x:longint;
begin
    y:=0;
    while (not eoln) do
    begin
       read(x);
       y:=y+x;
    end;
    writeln(y);
end.
Такой вариант решения тоже пробовался изначально. Все равно вердикт "неполное решение" поэтому и стали заморачиваться с ограничениями по кол-ву символов в строке

Последний раз редактировалось No@ngel; 15.12.2017 в 16:28. Причина: Забыла процитировать
No@ngel вне форума Ответить с цитированием
Старый 15.12.2017, 16:58   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Не вижу, 40*20000000 свободно в longint помещается
ага, что то я обсчитался.
в longint диапазон до 2147483647, это на 107 таких чисел хватит.

No@ngel, текст задания Вы точно скопировали? проверьте, сколько ноликов в числе.
Иначе, я не вижу ни подвохов, ни причин, почему выдаётся "неполное решение"...


погуглил. нашёл неоднократное упоминание задачи в интернете.
действительно, там от -20000000 до 20000000.
Задача тривиальная.
Что-то не так либо с тестирующей программой, либо с тем, что программа тестирует что-то, что не оговорено в условиях задачи.
Короче, сайт для тестирования -> в топку.

Последний раз редактировалось Serge_Bliznykov; 15.12.2017 в 17:05.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не пойму в чем ошибка Sancheper Паскаль, Turbo Pascal, PascalABC.NET 1 20.06.2012 22:56
Не пойму в чем ошибка Snekich Microsoft Office Excel 5 18.12.2011 19:35
Не пойму в чем ошибка. Кто подскажет? Wild_klas Помощь студентам 8 20.10.2010 09:05
не пойму в чем ошибка Анастасия123456789 Помощь студентам 3 23.03.2009 15:53
Не пойму в чем ошибка Machete PHP 2 08.12.2008 10:09