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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2011, 02:04   #1
ArsGo
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 17
По умолчанию Упрощение кода. Паскаль.

Кому не трудно и кто разбирается, помогите, пожалуйста, в упрощении кода, проверяющего число на возможность разложения на сумму 2-х квадратов.

Код:
var a,b,n:longint;
begin
//reset(input,'squares.in');
//rewrite(output,'squares.out');
readln(n);
for a:=1 to round(sqrt(n))+1 do
begin
b:=round(sqrt(n-a*a));
if a*a+b*b=n then begin
writeln('YES');
if a>b then writeln(b,' ',a)
else writeln(a,' ',b);
readln;halt;
end;end;
write('NO');
readln;readln;
end.

Последний раз редактировалось ArsGo; 21.09.2011 в 02:09.
ArsGo вне форума Ответить с цитированием
Старый 21.09.2011, 02:41   #2
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Куда уж проще то?
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 21.09.2011, 03:06   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

выскажу исключительно своё мнение...
т.к. при первом же нахождении нужного разложения программа завершается по halt, то a будет всегда меньше b, поэтому проверку if a>b then - можно выкинуть и оставить только writeln(a,' ',b);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.09.2011, 03:07   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Rin Посмотреть сообщение
Куда уж проще то?
Там заложен излишне широкий диапазон, и поэтому автор ввел упорядочивание (хотя оно никогда не работает реально)). Можно сузить диапазон и убрать упорядочивание. Как-то так:
Код:
var
  a,b,n:longint;

begin
  //reset(input,'squares.in');
  //rewrite(output,'squares.out');
  readln(n);
  for a:=1 to Round(sqrt(n/2)) do begin
    b:= Round(sqrt(n-a*a));
    if a*a+b*b=n then begin
      writeln('YES, ',a,' ',Round(b));
      readln;
      halt;
    end;
  end;
  write('NO');
  readln
end.
[joke]Да, и форматирование - это тоже упрощение (для тех, кто понимает))[/joke].
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 21.09.2011, 03:10   #5
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Упс, Серж меня опередил )).
Но подчеркну, что сужение диапазона уменьшает время работы программы в случае "NO".
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
упрощение SQL запроса Frosts Помощь студентам 1 30.05.2011 13:23
Упрощение кода программы Alex TGM Общие вопросы C/C++ 7 30.06.2010 22:40
Упрощение кода R@Ziel Помощь студентам 0 26.12.2009 20:27
Упрощение дроби k1r1ch Общие вопросы Delphi 2 10.10.2009 16:16
Упрощение кода программы за счет использования процедур uraura Общие вопросы Delphi 10 26.03.2009 21:54