Delphi - [решено] Помогите с задачей /Pascal/

Аватара пользователя
Drongo

Re: Delphi - [решено] Помогите с задачей /Pascal/

Сообщение Drongo »

Drongo, Habetdin, Ошибка логическая, поэтому я так сильно ругаюсь. Мы до Паскаля еще не дошли.

Скобки в данном случае не причем. Ну причем конечно, но не в них дело.

Кстати я бы их оставил, они погоды не сделают, но и не помешают.


В ниже написанное углубляться не следует :)



(Паскаль есть выражение мысли в семантике языка.

Мысль -> Математика, логика -> Семантический перевод в язык программирования -> код Pascal)

Мысль - ясна

Мат., логика - присутствует ошибка. Ошибка. Однотипная 1ая и 2ая.

Семантический перевод в язык программирования - проблем нет.

код Pascal - ошибочен в силу ошибки в логике, но не в силу семантического перевода.
Аватара пользователя
lxa85

Re: Delphi - [решено] Помогите с задачей /Pascal/

Сообщение lxa85 »

Сутки прошли.

Habetdin, вспоминаем теорему Пифагора. "Сумма квадратов катетов равна квадрату гипотенузы."

Мы воспользовались ей для нахождения расстояния от центра до дерева.

С математической точки зрения, операция извлечения квадратного корня - не представляет сложностей.

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



Из теоремы имеем:

A^2+B^2=C^2; (1)

sqrt(A^2+B^2) = C; (2)

Что имеем :

x*x+y*y < r2; -> X^2 + Y^2 = R2 (3)

Проводим аналогию формулы 3 и 1, разницу видишь? Вот она ошибка. У тебя была правильная попытка ввести квадратный корень, но затем он потерялся.

Самым элегантным, по моему, решением является возведение R2 в квадрат.

if ((x*x+y*y< r2*r2 ) and (x*x+y*y> r1*r1)) then k:=k+1;



В таком случае программа выдает верное решение.



Неверное условие началось с 7ого сообщения от участника emTPy.


Цитата emTPy:



for i:=-r2 to r2 do

for j:=-r2 to r2 do

if ((i*i+j*jr1)) then rez:=rez+1;
Delphi - [решено] Помогите с задачей /Pascal/




.

Да, решение более удачно чем ввязываться в вычисление корня (хотя требует вдвое большую разрядную сетку), но ошибка была пропущена, и далее начался твой копи-паст.



Habetdin, не в обиду, но на будущее. Внимательно смотри, что ты копируешь!

Успехов! Изображение



P.S. emTPy, простите, если задел.
Аватара пользователя
Habetdin

Re: Delphi - [решено] Помогите с задачей /Pascal/

Сообщение Habetdin »

Вот что получилось, работает:



Код:

Код: Выделить всё

program Park;
var r1,r2,x,y,n: integer;
l:real;
begin
assign(input,'input.txt');
reset(input);
read(input,r1,r2);
close(input);
n:=0;
for x:=-r2 to r2 do begin
for y:=-r2 to r2 do begin
l:=sqrt(x*x+y*y);
if (l>r1) and (l<r2) then
n:=n+1;
end;
end;
assign(output,'output.txt');
rewrite(output);
write(output,n);
close(output);
end.

Вопрос: возможна ли оптимизация этого кода? Изображение



Upd: судя по незамеченному посту #23, оптимизация возможна..

Изображение
Аватара пользователя
emTPy

Re: Delphi - [решено] Помогите с задачей /Pascal/

Сообщение emTPy »

оптимизация возможно если рассмотреть одну четверть полученный результат умножить на 4

и положительные части осей умножив результат осей на 2
Ответить

Вернуться в «Программирование и базы данных»