Форум » Массивы, сортировка, работа с файлами » Небольшие комментарии по поводу С2 №№19-20 + опечатка » Ответить

Небольшие комментарии по поводу С2 №№19-20 + опечатка

Ion: В ответах к С2 в решении задачи №19 присутствует опечатка: в качестве вывода ответа указано следующее: [quote]writeln(min, min2);[/quote] На Паскале обе переменные в данном случае сливаются в одно число, и ответ, конечно, выходит неправильным... Кроме того, как мне кажется, вот этот фрагмент не нужен: [quote]min:=1; min2:=2; s:=abs(a[1]-a[2]);[/quote] Вместо него проще поставить s:=30000. Поскольку в диапазоне чисел типа integer ([-32768..32767]) совершенно невозможно расставить 30 элементов массива так, чтобы разность между одним элементом и каждым из остальных превышала 30000 (а в общем-то и 5000 тоже хватит за глаза). Ну а, значит, и в цикле условие "... < s" выполнится гарантированно. В ответах к задаче №20 приведены интересные познавательные сведения, но решение конкретной задачи, пожалуй, усложнено: [quote]При проверке остатка можно использовать сложное условие: if (a[ i] mod 10 = 5) or (a[ i] mod 10 = -5) then begin ... end; или перед применением операции mod взять модуль очередного элемента массива: if abs(a[ i]) mod 10 = 5 then begin ... end;[/quote] Условия "if (a[ i] mod 5 = 0) and (a[ i] mod 2 <> 0)" вполне достаточно. Первое проверяет делимость на пять и отлично работает для отрицательных чисел, а второе отсеивает все числа, которые делятся на 5, но заканчиваются на 0. Для отрицательных чисел тоже работает. Кстати, в задаче №21 Константин Юрьевич предлагает использовать условие "if a[ i] mod 2 = 1", что, конечно же, не противоречит условию данной задачи, но выглядит чуть-чуть непоследовательным. Почему бы везде не использовать условие проверки неделимости как "<> 0"? Как-то более логично выглядит. :-)

Ответов - 1

Поляков: Ion пишет: [pre2]writeln(min, min2); [/pre2] На Паскале обе переменные в данном случае сливаются в одно число, Да, вы правы, спасибо. Исправлено.Кроме того, как мне кажется, вот этот фрагмент не нужен:[pre2] min:=1; min2:=2; s:=abs(a[1]-a[2]);[/pre2] Вместо него проще поставить s:=30000. Тут могу только частично согласиться. В данном конкретном случае, вы правы. Но 1) для массива из 2 элементов не сработает 2) вы потеряли инвариант цикла (если интересно, посмотрите здесь). Поэтому я бы не рекомендовал так делать на практике, снижается надежность. На ЕГЭ - можно, если вы все внимательно просчитали. Только лучше словами объяснить ход ваших мыслей для эксперта. условия "if (a[ i] mod 5 = 0) and (a[ i] mod 2 <> 0)" вполне достаточно. Тоже неплохой вариант. Почему бы везде не использовать условие проверки неделимости как "<> 0"? Тут совершенно согласен, тем более, что это в задаче 21 позволит работать и с отрицательными числами. Спасибо за комментарии.



полная версия страницы