Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 22.01.2019
Сообщений: 6
1

Задачка про монеты

11.03.2020, 20:17. Просмотров 471. Ответов 10
Метки нет (Все метки)

Если монета легче или тяжелее настоящей, то она фальшивая. Определить среди трех монет есть ли фальшивая и какая?

Помогите пожалуйста написать программу. Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2020, 20:17
Ответы с готовыми решениями:

Задача про монеты. Найти количество монет определенного номинала
Дана примерно такая задача : Есть монеты определенного номинала ( 5копеек,10копеек,50копеек)...

Про массив задачка
На массивы вооще не могу решать задачи помогите! Во входном файле дана последовательность чисел....

задачка про матрицу.
ПОмогите пожалуйста сделать задачку... я совсем не шарю, а допуск нужен..... Для матрицы из 3...

Задачка про острова
На старых школьных олимпиадах была такая задачка: Дана матрица (n*m), которая состоит из 1 и 0....

__________________
10
Модератор
8409 / 4160 / 2875
Регистрация: 17.08.2012
Сообщений: 13,262
12.03.2020, 00:48 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var
  m: array[1..3] of real;
  i: integer;
begin
  for i := 1 to 3 do
    begin
      write('Масса ', i, ' монеты? ');
      readln(m[i])
    end;
  if (m[1] = m[2]) and (m[1] = m[3]) then write('Фальшивой монеты нет')
  else
    if m[2] = m[3] then
      write('Монета 1 фальшивая')
    else
      if m[1] = m[3] then
        write('Монета 2 фальшивая')
      else
        if m[1] = m[2] then
          write('Монета 3 фальшивая')
        else write('Фальшивую монету определить нельзя: массы всех монет разные');
  readln
end.
1
2171 / 1021 / 409
Регистрация: 19.03.2019
Сообщений: 3,284
12.03.2020, 10:42 3
Cyborg Drone, а вот в данном конкретно случае не проще было не использовать массив, а массы взять в три переменные a b c ?
суть кода не изменилась бы, а код был чуть-чуть меньше.
ну и real в качестве типа данных - на мой взгляд - перебор. целые числа тут намного лучше подходят

Pascal
1
2
3
4
5
6
var a,b,c : integer;
begin
  Write('Введите массы трёх монет: ');
  ReadLn(a,b,c);
 
... далее по тексту вместо m[1] a, вместо m[2] b, вместо m[3] с ...
0
Модератор
8409 / 4160 / 2875
Регистрация: 17.08.2012
Сообщений: 13,262
12.03.2020, 11:09 4
Насчёт массива - может быть. Просто одновременный ввод нескольких переменных я стараюсь не применять, с той целью, чтобы программа выдерживала прямое попадание в свой интерфейс самого необученного академика. А с массивом ввести по отдельности что-то пронумерованное проще.

Насчёт integer - не согласен. Масса - это несчётная сущность, поэтому должна выражаться действительным числом. По-моему, в данном случае как раз абстрагирование до integer излишнее.
0
2171 / 1021 / 409
Регистрация: 19.03.2019
Сообщений: 3,284
12.03.2020, 15:25 5
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Масса - это несчётная сущность, поэтому должна выражаться действительным числом.
да ладно. то, что вы покупаете в продуктовом магазине, измеряется в целых числах ( в граммах).
для монеты достаточно будет целого значения в миллиграммах (или в каратах )
а уж если Вы сравниваете в программе значения вещественных переменных, то делайте это корректно (через epsilon)
две вещественные переменные никогда нельзя сравнивать напрямую друг с другом. такова суровая машинная действительность.
0
Модератор
8409 / 4160 / 2875
Регистрация: 17.08.2012
Сообщений: 13,262
12.03.2020, 16:36 6
А кто сказал, что сравнение через этот идиотский эпсилон - корректное? На самом деле, это не так. Это всего лишь способ ухудшить точность вычислений выше порога ошибки усечения, ничего более. Например, числа 1.23456789012345678901 и 1.23456789012345678909 после преобразования в машинную форму станут равными. И никакой эпсилон не сделает их различными. Теперь, наоборот, попробуйте привести пример чисел, которые равны математически (по текстовой записи), но не равны в машинной форме. Что, не получается? А теперь расскажите мне, зачем нужен в данной задаче этот костыльный эпсилон?

На самом деле, во-первых, этот эпсилон действительно нужен очень и очень редко, и, во-вторых, сам является генератором ошибок. Эпсилон полезен лишь для тех, кто плохо представляет, как числа переводятся в машинную форму, и какие ошибки являются неотъемлемой частью машинного представления числа.
0
2171 / 1021 / 409
Регистрация: 19.03.2019
Сообщений: 3,284
12.03.2020, 16:53 7
Cyborg Drone, столько энергии и много слов вместо того, чтобы просто использовать целочисленный тип?
ну, воля ваша. хотите использовать вещественный тип - используйте, я не против.


Цитата Сообщение от Cyborg Drone Посмотреть сообщение
В этой задаче переменные только вводятся, переводятся в машинную форму, после чего никак не изменяются, и ошибка из-за усечения чисел может возникнуть лишь тогда, когда значащие цифры каких-либо введённого числа не могут быть выражены точно в машинном представлении
ну, судя по этой теме Вы и для вычисляемых значений сравнением вещественных чисел напрямую не заморачиваетесь.
0
Модератор
8409 / 4160 / 2875
Регистрация: 17.08.2012
Сообщений: 13,262
12.03.2020, 17:26 8
Ах, да. Две вещественные переменные можно сравнивать напрямую друг с другом. По крайней мере, мне точно можно. Просто нужно делать так, чтобы результат сравнения не зависел от ошибок усечения.

Добавлено через 10 минут
Странно. В указанной теме я как раз применил один из способов избавления от ошибок усечения при прямом сравнении вещественных чисел, а именно, избавление от операции деления. По крайней мере, пусть редкая, но всё же возможная ошибка при сравнении двух произведений, каждое из которых из трёх чисел, всё равно лучше, чем ложное равенство из-за применения эпсилон.

Добавлено через 18 минут
Ох, сбили Вы меня... Указанная тема в Pascal ABC, и этим всё сказано. Пример Ваш неудачен. Как думаете, чем ещё я руководствовался, кроме избавления от деления?
0
2171 / 1021 / 409
Регистрация: 19.03.2019
Сообщений: 3,284
12.03.2020, 18:05 9
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Указанная тема в Pascal ABC, и этим всё сказано.
простите, я не в курсе - а что не так с вещественными переменными в Pascal ABC ?
там какие-то особенности есть?
0
Модератор
8409 / 4160 / 2875
Регистрация: 17.08.2012
Сообщений: 13,262
12.03.2020, 18:59 10
Да, есть... В PABC самый ёмкий вещественный тип - это double, а extended как бы не используется. Это всё ради попытки упростить жизнь простым пользователям: вычисления всё равно производятся в extended, но в регистре cwr включен режим округления: поле управления точностью PC = 10 (длина мантиссы 53 бита), а поле управления округлением RC=00 (значение округляется к ближайшему числу, которое можно представить в установленной длине мантиссы).

Получается эдакий адаптивный интеллектуальный эпсилон, работающий только с мантиссой. На растерзание этому эпсилону получается аж 11 (младших) двоичных разрядов мантиссы. На порядок этот эпсилон не обращает ни малейшего значения, если только при округлении не возникает перенос в... или заём из... старшего бита мантиссы. Если у чисел одинаковый порядок, то числа, различающиеся (только по мантиссе, без учёта порядка) не более чем на 2-53, становятся равными.

Добавлено через 6 минут
Точнее, если два числа разделить на их меньший порядок, и если после этого числа различаются менее чем на 2-53, то эти числа будут после округления равными.
1
2171 / 1021 / 409
Регистрация: 19.03.2019
Сообщений: 3,284
13.03.2020, 10:01 11
не знал про эту особенность, спасибо за информацию.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2020, 10:01

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Задачка про яблоки, пряники и чай
Серёжа очень любит есть яблоки и пряники, при этом запивая их чаем. Когда Серёжа ест очень кислое...

задачка про треугольники Герона, их площадь и периметр.
добрый день/вечер! у меня возникла проблема с задачей. Pascal. звучит она так: "составьте...

Задачка про палиндромы
Задано строка s, состоящий из n маленьких английских букв. Необходимо посчитать длину наибольшей...

Задачка про пассажиров и багаж, записи
Доброго времени суток! обращаюсь к людям, умеющим написать код для паскаля с использованием...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.