Прошу помощи камрадов. Споткнулся на примитиве...

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Прошу помощи камрадов. Споткнулся на примитиве...

Сообщение Deimos » 23.11.2021 20:11:40

Всем Бобра...

Вводная: Ребенок учится в седьмом классе и начали изучать Pascal (fpc, что приятно порадовало).

Есть сайт с заданиями, на котором и проверяется работа, которая выполнена. Проверяется путем машинного тестирования.

Сабж:

Ввод
Три натуральных числа a, b, n (0 ≤ a, b, n ≤ 100). (руб, коп, шт)

Вывод
Через пробел два числа: стоимость покупки "руб" "коп"

Входные данные #1 content_copy
1 25 2

Выходные данные #1 content_copy
2 50

Предложенное решение:
Код: Выделить всё
var a,b,n:integer;
begin
    readln(a,b,n);
    a:=(a*100+b)*n;
    write(a div 100,' ',a mod 100);
end.


На мой взгляд - все верно. но проходит 8 из 10 тестов. в каких ошибка и какая - данных нет...

Ошибка в тестах или я (по "горе от ума") не углядел чего простого?

Буду благодарен за мысли...
Deimos
постоялец
 
Сообщения: 166
Зарегистрирован: 17.01.2010 00:31:30

Re: Прошу помощи камрадов. Споткнулся на примитиве...

Сообщение iskander » 23.11.2021 21:28:28

Емнип, режим совместимости по умолчанию - {$mode fpc}, а в нём Integer = SmallInt.
Может проблема в переполнении?
iskander
постоялец
 
Сообщения: 430
Зарегистрирован: 08.01.2012 18:43:34

Re: Прошу помощи камрадов. Споткнулся на примитиве...

Сообщение Deimos » 23.11.2021 21:42:01

iskander писал(а):Емнип, режим совместимости по умолчанию - {$mode fpc}, а в нём Integer = SmallInt.
Может проблема в переполнении?


там число от нуля до сотни... неоткуда переполнению взяться...
Deimos
постоялец
 
Сообщения: 166
Зарегистрирован: 17.01.2010 00:31:30

Re: Прошу помощи камрадов. Споткнулся на примитиве...

Сообщение runewalsh » 23.11.2021 22:20:26

Как же неоткуда, в a может понадобиться сохранить значение в 100 рублей × 100 копеек/рубль × 100 штук = 1 000 000 копеек.
Есть встроенные типы фиксированного размера int32 (±2 млрд), uint32 (0..4 млрд), int64 (±9×10¹⁸), uint64 (0..1,8×10¹⁹). Integer становится 32-битным при включении режима {$mode objfpc}.

Ещё можно умножить в два шага с переносом:
Код: Выделить всё
b := b * n;
a := a * n + b div 100;
b := b mod 100;
writeln(a, ' ', b);

Но семиклассник может и не просечь фишку (хотя, наверное, я слишком плохого мнения о семиклассниках...).
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 552
Зарегистрирован: 27.04.2010 00:15:25

Re: Прошу помощи камрадов. Споткнулся на примитиве...

Сообщение Deimos » 23.11.2021 22:39:30

runewalsh писал(а):хотя, наверное, я слишком плохого мнения о семиклассниках...


Слив засчитан... так меня давно не мокали "мордомвгрязь" )))

Благодарю

Мое упущение. Но семикласник, после двух лекций, действительно не может этого знать...

P.s. Семикласник нет, а мне следовало-бы... :twisted:
Deimos
постоялец
 
Сообщения: 166
Зарегистрирован: 17.01.2010 00:31:30


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru