Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.05.2008, 12:21
Cathrinka Cathrinka вне форума
Прохожий
 
Регистрация: 23.04.2008
Сообщения: 9
Репутация: 10
По умолчанию Проблемы с задачей

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

используя следующий фрагмент программы, найдите наибольшее расстояние d между точками, рассматривая элементы массива М, как координаты точек плоскости:
type точка=array [(x,y)] of real; var M: array [1..40] of точка; d:real
Ответить с цитированием
  #2  
Старый 12.05.2008, 12:59
Ozerich Ozerich вне форума
Новичок
 
Регистрация: 11.04.2008
Адрес: В городе-герой Минск
Сообщения: 69
Репутация: 10
По умолчанию

Волновой алгоритм используй
Ответить с цитированием
  #3  
Старый 12.05.2008, 14:22
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Какой алгоритм???
Тут тупое вычисление расстояний между всеми точками и выбор максимального значения. Расстояние высчитывается по формуле пифагора: d := sqrt(sqr(x1-x2) + sqr(y1-y2));

Дальше перебираешь все точки массива попарно и считаешь расстояние между ними.

Код:
uses math;

var
 i, j : integer;
begin
 d := 0;
 for i := 1 to 39 do
   for j := i+1 to 40 do
     d := max(d,sqrt(sqr(M[i][x]-M[j][x]) + sqr(M[i][y]-M[j][y])));
end;
Ответить с цитированием
  #4  
Старый 12.05.2008, 16:14
Cathrinka Cathrinka вне форума
Прохожий
 
Регистрация: 23.04.2008
Сообщения: 9
Репутация: 10
По умолчанию

Спасибочки за идею, только там еще элемент Delphi надо использовать: StringGrid с двумя строками и 20 столбцами, я потом с его элементами сделать ничего не могу, там столько ошибок выдается: и real не подходит, и элементы введены неправильно...
Ответить с цитированием
  #5  
Старый 12.05.2008, 17:50
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

За место real используй double.
Не совсем понятно зачем именно такой StringGrid. Даже если вводить через него данные, то все-равно нужно либо 2 столбца и 40 строк, либо 40 столбцов и 2 строки.

вообще, когда писал код думал что это некоторая абстрактная задача, т.к. ни Дельфи, ни Паскаль НЕ ПОНИМАЮТ ИДЕНТИФИКАТОРОВ на русском языке.

для начала я бы постановку задачи переписал следующим образом:
Код:
type
  TDblPoint = record
    x : double;
    y : double;
  end;
 
var
  M : Array [1..40] Of TDblPoint;
  d : double;

Тогда мой код надо немного поменять:

Код:
uses math;

var
 i, j : integer;
begin
 d := 0;
 for i := 1 to 39 do
   for j := i+1 to 40 do
     d := max(d,sqrt(sqr(M[i].x-M[j].x) + sqr(M[i].y-M[j].y)));
end;

И вот это вполне скомпилится и должно работать.
Здесь нет задачи значений для точек. Его как раз можно сделать через StringGrid.

Предполягаем, что в StringGrid 3 колонки (1 фиксированная с названиями кординат - х и у) и 41 строка (1 фиксированая с номерами точек). Тогда считывание значений будет выглядеть так:

Код:
var
  i : integer;
begin
  For i := 1 To 40 Do
    Try
       M[i].x := StrToFloat(StringGrid1.Cells[1,i]);
       M[i].y := StrToFloat(StringGrid1.Cells[2,i]);
    Except
       // Если не удалось конвертировать из строки в число.
       M[i].x := 0;
       M[i].y := 0;
    End;
end;
Ответить с цитированием
  #6  
Старый 13.05.2008, 00:35
Cathrinka Cathrinka вне форума
Прохожий
 
Регистрация: 23.04.2008
Сообщения: 9
Репутация: 10
По умолчанию

Что значит сообщение "ProjectProject1.exe raised exception class EConvertError winh message "is not a valid integer value". Process stopped. Use step or Run to continue.".

Admin: Не стоит выделять жирным/курсивом и т.п. все подряд, и без этого все прекрасно читается.

Последний раз редактировалось Admin, 13.05.2008 в 11:16.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:28.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025