Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Помогите с задачей /Pascal/

Ответить
Настройки темы
Delphi - [решено] Помогите с задачей /Pascal/

Аватара для Habetdin


Автор проектов


Сообщения: 3652
Благодарности: 1498

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Habetdin
Дата: 21-10-2009
Собственно, задача:
Цитата:
В центре городского парка, имеющего форму круга радиуса R2, находится круглый фонтан радиусом R1. Деревья в парке растут в узлах координатной сетки, начало которой находится в центре фонтана. Шаг координатной сетки равен 1. На границах парка и фонтана деревья не растут. Посчитайте количество деревьев в парке.

Вводятся два целых числа R1 и R2. Вывести количество деревьев.
Вопрос в том, как найти кол-во деревьев (по какой формуле?)

-------
Рекомендую: $25 на тест виртуального сервера (VPS) за регистрацию по ссылке


Отправлено: 14:08, 21-10-2009

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Drongo, Habetdin, Ошибка логическая, поэтому я так сильно ругаюсь. Мы до Паскаля еще не дошли.
Скобки в данном случае не причем. Ну причем конечно, но не в них дело.
Кстати я бы их оставил, они погоды не сделают, но и не помешают.
В ниже написанное углубляться не следует :)

(Паскаль есть выражение мысли в семантике языка.
Мысль -> Математика, логика -> Семантический перевод в язык программирования -> код Pascal)
Мысль - ясна
Мат., логика - присутствует ошибка. Ошибка. Однотипная 1ая и 2ая.
Семантический перевод в язык программирования - проблем нет.
код Pascal - ошибочен в силу ошибки в логике, но не в силу семантического перевода.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Последний раз редактировалось lxa85, 28-10-2009 в 22:32. Причина: поправил


Отправлено: 22:02, 28-10-2009 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Сутки прошли.
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*j<r2) and(i*i+j*j>r1)) then rez:=rez+1; »
.
Да, решение более удачно чем ввязываться в вычисление корня (хотя требует вдвое большую разрядную сетку), но ошибка была пропущена, и далее начался твой копи-паст.

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

P.S. emTPy, простите, если задел.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 22:56, 29-10-2009 | #22


Аватара для Habetdin


Автор проектов


Сообщения: 3652
Благодарности: 1498

Профиль | Сайт | Отправить PM | Цитировать


Вот что получилось, работает:
Код: Выделить весь код
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, оптимизация возможна..

-------
Рекомендую: $25 на тест виртуального сервера (VPS) за регистрацию по ссылке


Отправлено: 11:04, 10-11-2009 | #23


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 22:46, 11-11-2009 | #24



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Помогите с задачей /Pascal/

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Всё о TURBO PASCAL (обсуждение, помощь в написание программ, ошибки, Pascal ABC) Loading Программирование и базы данных 41 20-05-2015 15:28
C/C++ - помогите с задачей по СИ!!! feliks2009 Программирование и базы данных 4 16-11-2009 00:18
C/C++ - [решено] Помогите с задачей! FeuerEngel Программирование и базы данных 3 28-05-2009 09:58
Delphi - [решено] Помогите с комбинаторной задачей! ALI Программирование и базы данных 16 01-01-2009 14:10
C/C++ - Помогите с задачей по Тройкам Пифагора quaker_strelok Программирование и базы данных 10 01-12-2008 16:44




 
Переход