Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Уважаемые программисты!

57K
11 октября 2010 года
Torah
12 / / 11.10.2010
Прошу Вас помочь мне с задачей, которую я не могу решить.

Задача:
Составить программу, определяющую, находится ли круг, заданный координатами центра и радиусом в пределах квадрата, заданного координатами двух противоположных вершин.
P.S. если они не //, значит нужно осуществить поворот.

Программа, которую я написала, преподавателя не особо устроила. Просто интересно, как ещё ее можно получить верный результат.
2.1K
11 октября 2010 года
Norgat
452 / / 12.08.2009
Цитата: Torah
Программа, которую я написала, преподавателя не особо устроила. Просто интересно, как ещё ее можно получить верный результат.



Если хотите услышать ответ - выложите своё решение\наработки кода. Иначе у нас может сложиться мнение, что вы пытаетесь получить решение своей задачи `на халяву` так сказать.

57K
11 октября 2010 года
Torah
12 / / 11.10.2010
Код:
var xv1,yv1,xv2,yv2,x0,y0,R,x,y:integer;
begin
writeln ('vvedite koordinati verwini x y');
readln(xv1,yv1);
writeln ('vvedite koordinati verwini x y');
readln(xv2,yv2);
writeln ('vvedite koordinati centra okryjnosti x y');
readln(x0,y0);
writeln ('vvedite radius okryjnosti');
readln(R);
if (xv1>xv2) then
 Begin
x:=xv1;
y:=yv1;
xv1:=xv2;
yv1:=yv2;
xv2:=x;
yv2:=y;
end;
if (abs(xv1-xv2))<>(abs(yv1-yv2)) then
writeln ('dannie koordinati ne yavlyautcya vershinami kvadrata')
else
Begin
if yv1>yv2 then
Begin
if ((x0+R)<=xv2) and ((x0-R)>=xv1) and ((y0+R)<=yv1) and ((y0-R)>=yv2) then
writeln ('krug v predelax kvadrata')
else
writeln ('krug ne v predelax kvadrata');
end
else
Begin
if ((x0+R)<=xv2) and ((x0-R)>=xv1) and ((y0+R)<=yv2) and ((y0-R)>=yv1) then
writeln ('krug v predelax kvadrata')
else
writeln ('krug ne v predelax kvadrata');
end;
end;
end.



Сразу прощу прощение за то, что в данной программе будут небольшие синтаксические ошибки, т.к я это все перепечатала из тетради, а сами ошибки исправляла на компьютере в институте, где и сохранено мое решение.:o
2.1K
11 октября 2010 года
Norgat
452 / / 12.08.2009
во-первых, код нужно оформлять тегами CODE(см. мою подпись), так что исправь своё сообщение и в будущем оформляй его правильно(сохранится табуляция и код будет значительно читабельнее).

по коду:

на вскидку код правильный, только не учитывает отрицательные части координатных осей (если задать отр. коорд. вершин квадрата, то неправильно будет подсчитывать).

преподаватель сделал конкретные замечания или сказал, что метод опр. вложенности плохой?

п.с. я так понимаю это Pascal, поэтому вместо integer можно было бы использовать byte, раз не учитываются отр. части коорд. осей (точности [0 .. 255] должно было бы хватить вполне).
297
11 октября 2010 года
koodeer
1.2K / / 02.05.2009
[offtop]
Цитата: Torah
я это все перепечатала из тетради


Надо же! В наше время ещё пишут код в тетрадку... Меня аж на слезу прошибло, когда представил девушку, старательно переписывающую код из компьютера в тетрадь...

Torah, почему бы не использовать флэшку для этой цели? Самую маленькую, дешёвенькую. Неужто запрещают в институте подключать флэшки к компам?

[/offtop]

2.1K
11 октября 2010 года
Norgat
452 / / 12.08.2009
Цитата: koodeer
[offtop]

Надо же! В наше время ещё пишут код в тетрадку... Меня аж на слезу прошибло, когда представил девушку, старательно переписывающую код из компьютера в тетрадь...

Torah, почему бы не использовать флэшку для этой цели? Самую маленькую, дешёвенькую. Неужто запрещают в институте подключать флэшки к компам?

[/offtop]



можешь посмеяться, но я вот недавно узнал, что в одном из ВУЗов Саратова(не в моём) для того, чтобы подключать флешку к компьютерам университета её требудется заверить у админов университетских...

может в этом траблы? (лень до админов дойти или что-то из той же серии бреда нашего образования...)

57K
12 октября 2010 года
Torah
12 / / 11.10.2010
Флешка у меня есть, но в тот день её не взяла. И действительно, у нас в Университете нельзя их в компьютеры вставлять ( мол, перегорают ) и тоже разрешение нужно получать :)
На счёт тетради - это привычка, над которой все в группе смеются.
Преподавателю не понравилось, что я не закодировала случай, если они не параллельны, то почему я не осуществила поворот. Я в принципе догадываюсь, что его можно осуществить через тригонометрическую формулу, но как именно это сделать, увы, не совсем понимаю.
842
12 октября 2010 года
sigmov
301 / / 16.09.2008
Цитата: Torah
Я в принципе догадываюсь, что его можно осуществить через тригонометрическую формулу, но как именно это сделать, увы, не совсем понимаю.



Тригонометрия.
Есть вектор (x,y), задача повернуть его вокруг цента координат на fi градусов.
r = sqrt(x^2+y^2);
x = r Sin(fi);
y = r Cos(fi);

Поскольку у Вас система относительная(круг и квадрат) центр квадрата вполне можно представить за центр системы координат.
А величиной r будет соответственно 1/2 диагонали квадрата.

Теперь вопрос насколько градусов поворачивать?
Вот тут нужно подумать )))

Придумал:
Поворачивать нужно так, чтобы центр окружности лег на диагональ квадрата.
После этого - новая проверка. Если не помогло - крутение не помогает.

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

P.S. Хотя если делать это в тетрадке - я бы утопился.
P.P.S. Даже если нельзя использовать флэшку у каждого института где есть кафедра информатики есть файловый сервер. Неужели нельзя на нем было сохранить?

57K
12 октября 2010 года
Torah
12 / / 11.10.2010
Слёзно прошу, чтобы Вы мне помогли доделать программу до конца, а именно, что лучше вставить или наоборот убрать, просто со стороны видней.
Буду безумно счастлива, если программа будет до конца сделана )
А так, я сегодня сидела и написала программу иначе.


Код:
var
x0,y0,x1,x2,y1,y2,r,x3,x4,y3,y4:integer;
k:longint;
begin
writeln('Vvedite dannie');
writeln('X okr');
read(x0);
writeln('Y okr');
read(y0);
writeln('X pervoi vershini');
read(x1);
writeln('Y pervoi vershini');
read(y1);
writeln('X vtoroi vershini');
read(x2);
writeln('Y vtoroi vershini');
read(y2);
writeln('Radius');
read(r);
k:=1;
        if ((sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))/2)*sqrt(2)) < (r) then
                k:=0;
//Dalee rabotaet tol`ko esli storoni || osiam koordinat
If ((x1<x2)and(k=1)) then
      begin
       if ((x0+r)>x2)or((x0-r)<x1)or((y0+r)>y2)or((y0-r)<y1) then k:=0
      end;
if ((x1>x2)and(k=1)) then
        begin
       if ((x0+r)>x1)or((x0-r)<x2)or((y0+r)>y2)or((y0-r)<y1) then k:=0
        end;
if k=1 then writeln('Vse ok')
        else writeln('Oblom');
readln;
readln;
end.


P.s. думаю, что это вообще не важная, даже можно сказать, не нужная информация о том, что мы работаем в Lazarus.
842
13 октября 2010 года
sigmov
301 / / 16.09.2008
1е что бросается в глаза - нужно объявить перменные типом double или float.

2е без понятия как это выполнить на Паскале. Потому как сам Паскаль 5 лет как не трогал.

На C++, C# - другое дело было бы.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог