Подскажите с двумерным массивом Delphi

Ответить
K_Sergey
Сообщения: 5
Зарегистрирован: 26 мар 2009, 21:48

Всем привет!

Подскажите с такой задачей есть массив:

1.0 2.0 3.0 4.0 5.0

7.8 8.9 7.2 6.2 5.2

Пример:
1. Пользователь вводит значение x=2, программа должна перебрать значения и присвоить значение y1=8.9
2. Пользователь вводит значение x=2.5, тогда программа должна перебрать значения и присвоить значение y1=8.9, y2=7.2

P.S. Подскажите литературу где массивы разобраны подробно (с нуля), с этой темой у меня большие проблемы.

Заранее большое спасибо!
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Код: Выделить всё

const
  arr:array[1..5,1..2] of real = ((1,2,3,4,5),(7.8,8.9,7.2,6.2,5.2));
var
  x:real;
  i,j:byte;
  y:array[1..5 of real];
begin
  write('Введите X:');readln(x);
  i:=1;
  while (i<=5) and (X<arr[i]) do begin
    y[i]:=x[i,2];
    inc(i);
  end;
  for j:=1 to pred(i) do writeln(y[i]);
end.
K_Sergey
Сообщения: 5
Зарегистрирован: 26 мар 2009, 21:48

У меня вылетает ошибка на второй строчке. На запятой в между этими скобками (1,2,3,4,5),(7.8,8.9,7.2,6.2,5.2)

Еще вопрос этот код на Pascal, сильно будет отличаться если его использовать в Delphi? Вводиться число будет в Edit1, выводиться результат в Edit2. Процедура будет выполняться по клику на кнопку Button1
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Извиняюсь за опечатки. Так правильно

Код: Выделить всё

const
  arr:array[1..5,1..2] of real = ((1,7.8),(2,8.9),(3,7.2),(4,6.2),(5,5.2));
var
  x:real;
  i,j:byte;
  y:array[1..5] of real;
begin
  write('Введите X:');readln(x);
  i:=1;
  while (i<=5) and (X>arr[i,1]) do begin
    y[i]:=arr[i,2];
    inc(i);
  end;
  for j:=1 to pred(i) do writeln(y[j]);
end.
K_Sergey
Сообщения: 5
Зарегистрирован: 26 мар 2009, 21:48

Сейчас все запускается, но работает не правильно. При вводе 2 выводит 7.8, при вводе 2.5 выводит 7.8 и 8.9

Может быть не совсем корректно задал вопрос в самом начале.

В конечном итоге мне нужно привести программу к такому виду, например:
при вводе значения x=2.3 программа находит пограничные значения 8.9 и 7.2. В дальнейшем будет произведена интерполяция и значение y будет равно 8.39
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

K_Sergey писал(а):с этой темой (массивыми) у меня большие проблемы.
Что такое массив: обьеденение однотипных элементов.
Какие бывают массивы:
1.одномерные, которые называют векторы (к направленному отрезку отношения не имеет) и
2. двумерные - матрицы.
К каждому элементу массива можно обратиться по его индексу(ам), который характеризизует его положение в этом массиве. Соответственно у элементов вектора будет один индекс, так все элементы располагаются в одну строку. Т.е. если у нас есть массив A[1..10] (10 элементов), то чтобы обратиться к 7-ому элементу мы должны записать A[7], к 5-ому A[5] и так к любому.
Если наш массив матрица (аналог матриц в математике), тогда каждый элемент характеризуется положением в этой матрице, т.е. номерами строки и столбца. Другими словами, если у нас есть матрица A[1..5,1..7] (5 строк, 7 столбцов), то запись такого вида A[2,7] будет значить: элемент матрицы А, находящийся на пересечении 2-ой строки и 7-ого столбца.
Опираясь на вышеизложенное, алгоритм для Вашей задачки может иметь вид:
в цикле если <введенное число>-a[1,j]<1 тогда вывести a[2,j] и a[2,j+1], закончить цикл. Разберайтесь и учите массивы - это одна из основопалагающих тем. Good luck!
Нет религии выше истины
Ответить