Страница 1 из 2

найти трёхзначные числа квадрат которых равен ...

СообщениеДобавлено: 27.09.2013 16:47:38
rotkart
Доброго всем дня!
Решаю задачу из сборника по подготовке к ЕГЭ:
Определить, равен ли квадрат заданного трехзначного числа кубу суммы цифр этого числа.
Вроде ничего сложного, но проверочных чисел в книге не дано :(

Набросал программу поиска таких чисел для проверки программы:
Код: Выделить всё
var c0,c1,c2 : byte;
   ch, s, i: integer;
BEGIN
   for i:=100 to 999 do
      begin
      ch:=i;
      c0:= ch mod 10; ch:= ch div 10;
      c1:= ch mod 10;
      c2:= ch div 10;
      s:=c0+c1+c2;
      if sqr(i)=s*s*s then writeln (i);
      end   
END.

И оказалось, что таких чисел просто НЕТ! Программа отрабатывает молча.
Это я затупил и неверно понял задание или книжка наврала?

Re: найти трёхзначные числа квадрат которых равен ...

СообщениеДобавлено: 27.09.2013 17:17:46
Лекс Айрин
rotkart, Постать после end ";". Лучше в конце добавить вывод сообщения типа найдено ... решений.Чтобы программа не молчала.

Гугление показало, что задача не имеет решений в данном диапазоне.

Re: найти трёхзначные числа квадрат которых равен ...

СообщениеДобавлено: 27.09.2013 17:21:09
svk12
Может быть, так?
Код: Выделить всё
var c0,c1,c2 : byte;
   ch, s, i: integer;
BEGIN
   for i:=100 to 999 do
      begin
      ch:=i;
      c0:= ch div 100; ch:= ch - c0*100; //сотни
      c1:= ch div 10; //десятки
      c2:= ch mod 10; //единицы
      s:=c0+c1+c2;
      if sqr(i)=s*s*s then writeln (i);
      end   
END.

Re: найти трёхзначные числа квадрат которых равен ...

СообщениеДобавлено: 27.09.2013 20:26:42
bormant
Таких чисел действительно нет.
Код: Выделить всё
var
  n, s: longint;
begin
  for n := round(sqrt(27*27*27)) downto 100 do begin
    s := n div 100 + (n div 10) mod 10 + n mod 10;
    if sqr(n) = sqr(s) * s then writeln(n);
  end;
end.
ps. Для случая for n:=100 to 999 и Turbo Pascal нужен longint, integer там 32-разрядный, до 32767, 999^2=998001 не влезет. В приведённом примере достаточно integer и для TP, поскольку sqrt(27*27*27)=140, 140^2=19600.

Re: найти трёхзначные числа квадрат которых равен ...

СообщениеДобавлено: 27.09.2013 21:46:17
rotkart
Лекс Айрин писал(а):после end ";"


Это прям обязательно? Вроде после последнего оператора перед финальным end-ом можно не ставить точку с запятой?

svk12 писал(а):Может быть, так?


А всё равно действий меньше не стало. Мне так, как я сделал, понятнее - mod определяет цифру, div убирает разряд.
Тогда уж интереснее вариант от bormant - в один оператор.

bormant писал(а):Таких чисел действительно нет.


Это я понял, спасибо. Смущает, что эта задача из сборника для подготовки к ЕГЭ - чему она учит?

Re: найти трёхзначные числа квадрат которых равен ...

СообщениеДобавлено: 27.09.2013 22:26:49
Little_Roo
rotkart писал(а):Смущает, что эта задача из сборника для подготовки к ЕГЭ - чему она учит?

Думать, анализировать....
И отсутствие результата - это тоже результат (с)старое....

И как эксперт ЕГЭ (не плюйте в мордочку :) скажу - сборники подготовки к ЕГЭ, как правило, макулатура, изданная идиотами для идиотов :(

Re: найти трёхзначные числа квадрат которых равен ...

СообщениеДобавлено: 27.09.2013 23:08:40
Лекс Айрин
rotkart писал(а):Это прям обязательно? Вроде после последнего оператора перед финальным end-ом можно не ставить точку с запятой?


не обязательно. А потом придется дописывать еще пару строк и тогда это вылезет. Поэтому лучше не привыкать к подобным умолчаниям. К тому же за подобное могут и оценку снизить.

Re: найти трёхзначные числа квадрат которых равен ...

СообщениеДобавлено: 27.09.2013 23:40:52
Little_Roo
Лекс Айрин писал(а):К тому же за подобное могут и оценку снизить.


Нет, это считается корректным - баллы не снижаются...
И, кстати, открою стра-а-а-а-а-шную тайну :( :( :( Орфографический кретинизм (другими словами не обозначтиь), если он НЕ искажает сути решения - НЕ учитывается :shock:
Это, к примеру:
.......
reade(X);
y =: x + 1;;
vrite(x)
writ(y};
конец.
.........

Обязаны, по критериям оценивания, засчитать по-полной :shock:

Re: найти трёхзначные числа квадрат которых равен ...

СообщениеДобавлено: 28.09.2013 00:43:22
Лекс Айрин
Little_Roo, обидно. Хотя и не удивительно.

Re: найти трёхзначные числа квадрат которых равен ...

СообщениеДобавлено: 28.09.2013 08:26:04
rotkart
Лекс Айрин писал(а):А потом придется дописывать еще пару строк и тогда это вылезет. Поэтому лучше не привыкать к подобным умолчаниям.

Это аргумент, согласен.

Little_Roo писал(а):И как эксперт ЕГЭ (не плюйте в мордочку :) скажу - сборники подготовки к ЕГЭ, как правило, макулатура, изданная идиотами для идиотов :(

:D
И что порекомендуете для программирования? Хочется просто сборник задач - числа, строки, массивы и т.д.

Re: найти трёхзначные числа квадрат которых равен ...

СообщениеДобавлено: 28.09.2013 10:24:06
Лекс Айрин
rotkart, очень хороша, имхо, книга Ч. Уэзерелла "Этюды для программистов".

Конечно, это старая книга, но, как я понял, тебе нужен пока классический паскаль. Да, в ней нет привязки к конкретному языку, и задачи могут быть сложноваты. Но зато они не являются академическими.

Re: найти трёхзначные числа квадрат которых равен ...

СообщениеДобавлено: 28.09.2013 11:54:31
rotkart
Лекс Айрин писал(а):rotkart, очень хороша, имхо, книга Ч. Уэзерелла "Этюды для программистов".


Хмм....

Предполагается, что новичок, берущийся за этюд, уже написал несколько программ и знает сравнительно хорошо хотя бы один язык

Спасибо за хороший совет.
Приберегу эту книгу на потом - в вступлении к ней, имхо, правильно советуется сначала выработать навыки программирования, только затем к этюдам приступать.

Re: найти трёхзначные числа квадрат которых равен ...

СообщениеДобавлено: 28.09.2013 12:02:34
Лекс Айрин
rotkart, ну да, без навыков никуда... но это дело наживное.

Лично у меня все эти задачи типа: "получить сумму двух чисел" вызывают некоторое раздражение.

Re: найти трёхзначные числа квадрат которых равен ...

СообщениеДобавлено: 28.09.2013 12:05:25
rotkart
Little_Roo писал(а):
Лекс Айрин писал(а):К тому же за подобное могут и оценку снизить.


Нет, это считается корректным - баллы не снижаются...
И, кстати, открою стра-а-а-а-а-шную тайну :( :( :( Орфографический кретинизм (другими словами не обозначтиь), если он НЕ искажает сути решения - НЕ учитывается :shock:
Это, к примеру:
.......
reade(X);
y =: x + 1;;
vrite(x)
writ(y};
конец.
.........

Обязаны, по критериям оценивания, засчитать по-полной :shock:

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

В Вашем примере синтаксических ошибок я насчитал восемь, так что 0 баллов.
Хотя, конечно, это дурь - писать программы от руки на листочке.

Re: найти трёхзначные числа квадрат которых равен ...

СообщениеДобавлено: 28.09.2013 13:12:52
Little_Roo
rotkart писал(а):В Вашем примере синтаксических ошибок я насчитал восемь, так что 0 баллов.


Не 0, а все 3!
А критерии Статграда не являются официальными - они указываются в конкретном КИМе