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

Компьютерный форум 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 | Цитировать


Цитата Habetdin:
Вопрос в том, как найти кол-во деревьев (по какой формуле?) »
Для каждого дерева узнать длину вектора Ri(O,Ti) где Ti - i'тое дерево парка O - центр парка.
В формуле получается сумма от 1 до n при условии R1<Ri<R2 .
Для уменьшения кол-ва расчетов можно взять 1/8 круга, скорректировав конечный результат.

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


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



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

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


Аватара для Habetdin


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


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

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


Код: Выделить весь код
program Park;
var
r1,r2,rez: integer;
i,o: text;
begin
assign(i,'input.txt');
assign(o,'output.txt');
reset(i);
read(i,r1,r2);
close(i);
// Как дальше?
rez:=Ri(0,

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


Отправлено: 00:04, 22-10-2009 | #3


Аватара для lxa85

Необычный


Contributor


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

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


Habetdin,
Цитата Habetdin:
// Как дальше? »
А дальше я своих студентов заставляю писать математическую модель
И тогда введя все нужные обозначения, у них не должно возникнуть вопроса, а "что писать"?
Все это будет четко привязано к формулам. Только за абстракцией, к примеру, R=... будет стоять либо функция, либо простая арифметика, массив, и пр.
Цитата Habetdin:
assign(i,'input.txt');
assign(o,'output.txt'); »
asignfile !

" rez:=Ri(0, " - вот это надо переделать в отдельную функцию. И больше ничего подсказывать не буду


P.S. Я как-то говорил, что не буду заниматься написанием программ. Мне больше интересен процесс понимания человеком того, что он пишет. Т.е. семантика языка это одно, внутренняя логика и структура программы - другое. Вот меня интересует то самое другое.

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


Отправлено: 01:31, 22-10-2009 | #4

pva pva вне форума

Аватара для pva

Ветеран


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

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


Для экономии времени ещё можно ходить не по всему кругу, а только по его границе, потом вычести компоненту y "нижнего" круга из "верхнего". Получится имитация вычисления площади как интеграла (f2(x) - f1(x))dx

Отправлено: 07:17, 22-10-2009 | #5


Аватара для detrin

Ветеран


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

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


В школьные годы на олимпиаде была подобная задача, но с треугольником. По трем заданным точка рисуется треугольник и нужно проверить попадает ли четвертая точка в него или нет. Одноклассник очень оригинально ее решил, что мне сильно врезалось в память.
Он решил ее графически. Если сделать аналогию, то нужно нарисовать 2 окружности и залить внутреннее пространство каким-либо цветом. Ну а после нужно перебирать точки и считывать их цвет. Решение данной задачи было сделано на Бейсике, но ведь наверняка в Паскале есть подобные функции.

-------
Лучше ничего не делать, чем делать ничего.


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


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


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

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


Код: Выделить весь код
program Park;
var
r1,r2,rez,i,j: integer;
in: text;
begin
assign(in,'input.txt');
assign(o,'output.txt');
reset(in);
read(in,r1,r2);
close(i);
rez:=0;
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;
writeln(rez);
end.

Отправлено: 02:46, 26-10-2009 | #7


Аватара для Habetdin


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


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

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


Вот что имеется на данный момент:
Код: Выделить весь код
program Park;
var
r1,r2,k,x,y: integer;
begin
assign(input,'input.txt');
assign(output,'output.txt');
reset(input);
read(input,r1,r2);
close(input);
k:=0;
for x:=r1+1 to r2-1 do
begin
y:=sqrt(sqr(r2)-sqr(x));
if sqr(x)+sqr(y)=sqr(r2) then dack(y);
k:=k+y;
for x:=0 to r1-1 do
begin
if sqr(x)+sqr(y)=sqr(r1) then k:=k-y;
end;
end;
k:=k*4;
rewrite(output);
writeln(output,k);
close(output);
end.
Вот только ошибка в 13 строке (error 26: type mismatch) - наверное из-за типа данных integer?

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


Отправлено: 20:40, 26-10-2009 | #8


Аватара для lxa85

Необычный


Contributor


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

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


Цитата Drongo:
Habetdin, Небольшой совет, делайте отступы в блоках\условиях, так будет легче читать код. Иначе многие специалисты, просто не утрудят себя "ломанием" глаз чтобы прочитать не читабельный код. Понимаете? »
Позволю себе процитировать Drongo, т.к. у меня та же мысль звучит в более жестких формах.
Habetdin,
Цитата Habetdin:
наверное из-за типа данных integer? »
Разумеется.
y - определен как целое, а ему хотят назначить результат с плавающей запятой. результат работы функции sqrt.
Цитата:
if sqr(x)+sqr(y)=sqr(r2) then dack(y);
dack(y) - вот это что такое?
Цитата Habetdin:
begin
y:=sqrt(sqr(r2)-sqr(x));
if sqr(x)+sqr(y)=sqr(r2) then dack(y);
k:=k+y;
for x:=0 to r1-1 do
begin
if sqr(x)+sqr(y)=sqr(r1) then k:=k-y;
end;
end; »
Ошибку не вижу, но чую она есть. Код какой-то неправильный. Не складный.
На будущее операцию возведения в квадрат проще и читабельнее писать как x*x
Всем переменным либо дать более полные и нормальные названия, либо в var прокомментировать их и дать словесное обозначение.
Что такое k - ?
К циклу так же дать комментарии. Т.к. непонятно что делаешь, и что надо проверять.

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


Отправлено: 21:23, 26-10-2009 | #9


Аватара для Habetdin


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


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

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


lxa85, r1,r2 - см. условие задачи; k - кол-во деревьев; x,y - оси абцисс, ординат
dack(y); - то же самое, что и y:=y-1
Код: Выделить весь код
program Park;
var
r1,r2,k: integer;
x,y: real;
begin
assign(input,'input.txt');
assign(output,'output.txt');
reset(input);
read(input,r1,r2);
close(input);
k:=0;
for x:=r1+1 to r2-1 do
begin
y:=sqrt(r2*r2-x*x);
if x*x+y*y=r2*r2 then dack(y);
k:=k+y;
for x:=0 to r1-1 do
begin
if x*x+y*y=r1*r1 then k:=k-y;
end;
end;
k:=k*4;
rewrite(output);
writeln(output,k);
close(output);
end.
Теперь ошибка в 12 строке:
Цитата:
Error 97: Invalid FOR Control variable - Ошибочен тип переменной параметра цикла оператора FOR.

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


Отправлено: 21:43, 27-10-2009 | #10



Компьютерный форум 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




 
Переход