• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Оператор Цикла For И Одномерные Массивы

  • Автор темы Автор темы Lomanu4
  • Дата начала Дата начала

Lomanu4

Команда форума
Администратор
Регистрация
1 Мар 2015
Сообщения
1,467
Баллы
155
Сегодня один из подписчиков у меня попросил помощи решить задачу,а я решил написать по этому поводу урок.
  • Координаты точек - обычно числа вещественные. Пусть они будут не более 100 - по модулю. Чтобы не тратить время на ввод данных, используем генератор случайных чисел. Функция random возвращает случайные числа, равномерно распределенные в диапазоне 0..1. Чтобы они были не более 100 по модулю, естественно применить преобразование: (random - 0.5)*200. Чтобы каждый запуск программы давал новую серию случайных чисел, в начале программы вызовем процедуру randomize.
  • Опишем константу Nmax=20 - количество точек и массивы координат
    const NMax=20;
    var X,Y: array [1..Nmax] of double;
  • Будем применять оператор цикла
    for ii:=1 to Nmax - чтобы выполнить какое-либо действие для всех точек.
  • Расстояние между ii-ой и jj-ой точками вычислим по формуле Пифагора:
    Rast := sqrt(sqr(X[ii] - X[jj])+sqr(Y[ii] - Y[jj]));
    (Здесь каждая разность есть катет треугольника).
  • Поиск максимума выполним последовательным сравнением расстояний между точками ii-ой и jj-ой, где для ii=1 jj будет меняться от 2..Nmax; для ii=2 jj будет меняться от 3..Nmax; и т д - для ii=Nmax-1 jj будет равно Nmax;
  • Вначале примем RMax = <расстояние между точками 1 и 2>, Na=1 и Nb=2; Это стандартный приём при вычислении максимума последовательности значений: вначале принять за максимум первое из значений.
  • Каждое вычисленное расстояние будем сравнивать с RMax, и если оно больше, чем RMax - присвоим RMax:=<это новое расстояние> и также обновим номера Na и Nb.
  • Программа должна показать координаты всех точек, округленные до сотых, номера максимально удаленных взаимно точек и расстояние между ними. Для проверки полезно вывести на экран все расстояния между точками.
Текст программы
Код:
Program POints;
const NMax=20;
var x,y:array[1..NMax] of double; ii,jj,Na,Nb: integer;
  RMax,Rast: double;
begin randomize;
  writeln('     Таблица координат');
  writeln('№':4,'  X  ':8,'   Y   ':8 );
  {форматирование при выводе - для правильного
   вида таблицы}
  for ii:=1 to NMax do
    begin
      {заполняю массив координат
       случайными числами -100..100 и
       печатаю таблицу координат}
      X[ii]:= (random - 0.5)*200;
      Y[ii]:= (random - 0.5)*200;
      writeln(ii:4,X[ii]:8:2,Y[ii]:8:2);
    end;
  RMax:= 0;
  for ii:=1 to NMax do
    for jj:=ii+1 to NMax do
      begin
        Rast:= sqrt(sqr(X[ii]-X[jj])+sqr(Y[ii]-Y[jj]));
        if (ii=1) and (jj=2) then RMax:=Rast;
        if Rast >= RMax then
          begin
            RMax:= Rast; Na:=ii; Nb:=jj;
            {запомнили наибольшее расстояние и номера
            точек - очередных кандидатов в наиболее
            удалённые друг от друга точки}
            write('+')
          end else write('-');
        writeln(ii:4,jj:4,Rast:8:3);
      end;

   writeln('---- Результат: ------ ');
   writeln('Макс.расстояние = ',RMax:8:3,' точки: ',Na:3,' и ',Nb);
   readln;
end.
---- Результат: -------
     Таблица координат
   №     X      Y
   1  -23.24   85.80
   2    8.91   38.03
   3   51.95    1.56
   4  -37.44  -48.25
   5  -57.27   90.04
   6  -79.94  -83.79
   7  -93.48  -65.79
   8   64.55  -98.71
   9  -51.44  -17.32
  10  -79.32   94.36
  11   35.86   16.64
. . . . . . . . . . .
-   7  17 140.172
-   7  18  68.696
-   7  19  29.550
-   7  20 213.315
-   8   9 141.702
+   8  10 240.788
-   8  11 118.863
-   8  12 112.911
-   8  13 217.281
-   8  14 175.785
. . . . . . . . .
---- Результат: ------
Макс.расстояние = 240.788 точки: 8 и 10
 
Вверх Снизу