IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Графическая задача
Tribunal
сообщение 17.05.2006 12:04
Сообщение #21


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


выкладываю то,что у меня получилось.
делала на Delphi...
если нужно,могу создать аналогичную тему в соответсвующем разделе.

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

буду очень благодарна за вашу помощь...

сдавать просто завтра((


Прикрепленные файлы
Прикрепленный файл  graph_b.rar ( 21.87 килобайт ) Кол-во скачиваний: 133


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.05.2006 12:34
Сообщение #22


Гость






Чтобы программа компилировалась, нужно добавить один End, ты его упустила...
procedure TForm1.N5Click(Sender: TObject);
var
   popal,max,xp,x1,x2,x3,x1_max,x2_max,x3_max,i:byte;
begin
  max:=0;
  x1_max:=1; x2_max:=2; x3_max:=3;
  for x1:=1 to kol-2 do
    for x2:=x1+1 to kol-1 do
      for x3:=x2+1 to kol do begin
        popal:=0;
        for xp:=1 to kol do
          if posession(xp,x1,x2,x3)=true then inc(popal);

        // Проверку на максимум надо бы делать ВНУТРИ циклов ...
        if popal>max then begin
          max:=popal;
          x1_max:=x1; x2_max:=x2; x3_max:=x3;
        end;
      end;

  // Начальное значение I присвой, и изменение добавь в конце цикла
  while i<>kol do begin
    if i=x1_max then begin
      x1_res:=point[i].x;
      y1_res:=point[i].y;
    end;
    if i=x2_max then begin
      x2_res:=point[i].x;
      y2_res:=point[i].y;
    end;
    if i=x3_max then begin
      x3_res:=point[i].x;
      y3_res:=point[i].y;
    end;
  end; // <--- Вот этого End-а не было у тебя ...
end;
Проверь, у меня нет кириллицы, а все переделывать на транслит неохота... Должно работать.
 К началу страницы 
+ Ответить 
Tribunal
сообщение 17.05.2006 14:18
Сообщение #23


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


я тут кое-что еще исправила...
у меня возник вопрос.

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


кстати,в смысле нет кириллицы?комментарии?или что?я могу переделать...

Сообщение отредактировано: Tribunal - 17.05.2006 16:38


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Tribunal
сообщение 17.05.2006 14:43
Сообщение #24


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


и еще у меня что-то не то с процедурой удаления
(ради которой я ,собственно,и сделала считывание из файла в список)

//ввод-правка-удаление
procedure TForm1.N7Click(Sender: TObject);
begin
Label3.Caption:='Введите номер точки';
edit.Visible:=false;
del.Visible:=true;
add.Visible:=false;
end;

procedure TForm1.delClick(Sender: TObject);
var
   ne:byte;
   t:t_ptr;
begin
  ne:=strtoint(n_edit.Text);

  pos := first;
{ищем в списке точку с нужным номером}
while (pos<>nil) and (ne>0) do
begin
  dec(ne);
  if ne=0 then begin
               t:=pos^.next;
               pos^.next:=t^.next;
               dispose(t);
               end
  else pos := pos^.next;
end;
{сохраняем в файл}
if SaveDialog1.Execute then
assignfile(f,SaveDialog1.FileName);
rewrite(f);
pos := first;
while pos<>nil do
begin
  writeln(f,pos^.infx:8:2,pos^.infy:8:2);
  pos:=pos^.next;
end;
closefile(f);

end;


Сообщение отредактировано: volvo - 2.11.2006 13:18


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Tribunal
сообщение 17.05.2006 15:02
Сообщение #25


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


я понимаю,что я вас уже достала...(
но я очень надеюсь на вашу помощь...

вот еще проблема вылезла...
здесь я пытаюсь добавить еще один элемент...
но не получается...может лучше через список?

procedure TForm1.addClick(Sender: TObject);
var
   i:byte;
   xe,ye:real;
begin
xe:=strtofloat(x_edit.Text);
ye:=strtofloat(y_edit.Text);
inc(kol);
point[kol].x:=xe;
point[kol].y:=ye;

{сохраняем в файл}
if SaveDialog1.Execute then
assignfile(f,SaveDialog1.FileName);
rewrite(f);
i:=1;
while i<kol do
 begin
   writeln(f,point[i].x:8:2,point[i].y:8:2);
   inc(i);
 end;
closefile(f);
end;


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Tribunal
сообщение 17.05.2006 16:33
Сообщение #26


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


вот текущий вариант моей программы


Прикрепленные файлы
Прикрепленный файл  graph_b.rar ( 23.37 килобайт ) Кол-во скачиваний: 138


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Tribunal
сообщение 18.05.2006 5:32
Сообщение #27


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


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

что-то не то либо в процедуре поиска точек нужного координат:
var
   popal,max,xp,x1,x2,x3,x1_max,x2_max,x3_max,i:byte;
begin
max:=0;
x1_max:=1;
x2_max:=2;
x3_max:=3;
for x1:=1 to kol-2 do {точка 1}
 for x2:=x1+1 to kol-1 do  {точка 2}
  for x3:=x2+1 to kol do  {точка 3}
    begin
      popal:=0;
      for xp:=1 to kol do {перебор всех точек}
      if posession(xp,x1,x2,x3)=true then inc(popal);
      if popal>max then
        begin
          max:=popal;
          x1_max:=x1;
          x2_max:=x2;
          x3_max:=x3;
        end;
    end;
i:=1;
while i<>kol do
 begin
   if i=x1_max then begin
               x1_res:=point[i].x;
               y1_res:=point[i].y;
               end;
   if i=x2_max then begin
               x2_res:=point[i].x;
               y2_res:=point[i].y;
               end;
   if i=x3_max then begin
               x3_res:=point[i].x;
               y3_res:=point[i].y;
               end;
   inc(i);
 end;
end;


либо в проверке условия принадлежности точки треугольнику:

//принадлежность точки треугольнику
function posession(x,t1,t2,t3:byte):boolean;
begin
if  square(line(t1,t2),line(t2,t3),line(t3,t1))=square(line(x,t1),line(t1,t2),line(t
 2,x))+square(line(x,t2),line(t2,t3),line(t3,x))+square(line(x,t1),line(t1,t3),li
ne(t3,x))
then posession:=true
else posession:=false;
end;


помогите,пожалуйста...


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 18.05.2006 10:51
Сообщение #28


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(Tribunal @ 18.05.2006 5:32) *

помогите,пожалуйста...

У меня, к сожалению, делфи стоит 4.5, поэтому проверить не могу, но на вскидку:
Мне не нравится вот эта формула:
Код
if square(1)=square(2)+square(3)+square(4)
в функции posession.
Я не думаю, что после вычислений с типом real получится точное равенство, нужно сравнить с какой нибудь точностью.
т.е.
Код
if abs(square(1)-(square(2)+square(3)+square(4)))<0.001 then
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Tribunal
сообщение 19.05.2006 13:25
Сообщение #29


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


спасибо большое,...я действительно упустила из виду,что числа вещественные...
теперь треугольник ищется верно...


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Tribunal
сообщение 19.05.2006 15:17
Сообщение #30


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


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


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Tribunal
сообщение 19.05.2006 16:10
Сообщение #31


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


в общем,вот оно...


Прикрепленные файлы
Прикрепленный файл  Triangle_v.last.rar ( 25.49 килобайт ) Кол-во скачиваний: 139


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 18.07.2025 8:08
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"