Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2013, 15:59   #1
LLIALLIJIbIK
Пользователь
 
Регистрация: 26.08.2010
Сообщений: 51
По умолчанию Установка граничного числа элементов в массиве через Edit

Подскажите, как объявить массив, чтобы верхний диапазон элементов можно было ввести с клавиатуры.
LLIALLIJIbIK вне форума Ответить с цитированием
Старый 20.04.2013, 17:37   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

как-то так:
Код:
var
 a:array of array of Integer;
begin
 SetLength(a,10,StrToIntDef(Edit1.Text,1));
Человек_Борща вне форума Ответить с цитированием
Старый 20.04.2013, 18:52   #3
LLIALLIJIbIK
Пользователь
 
Регистрация: 26.08.2010
Сообщений: 51
По умолчанию

Спасибо. А вот такой вопрос:
for i:=1 to 5 do begin
if Mechanism[i]>max then
max:=Mechanism[i];
end;
Что произойдет, если размерность массива будет меньше 5?
LLIALLIJIbIK вне форума Ответить с цитированием
Старый 20.04.2013, 19:05   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

ничего! проверит только первые пять элементов и покажет максимум из них
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 20.04.2013, 19:58   #5
LLIALLIJIbIK
Пользователь
 
Регистрация: 26.08.2010
Сообщений: 51
По умолчанию

А почему в данной ситуации ошибка Incompatible types?
Код:
if (Ordinate[2]=nil) and (Abscissa[2]=nil) then
Mass[1]:=Mpp*exp(ln((1+((36*power(Ordinate[1],2))/power(Bp,2))+((36*power(Abscissa[1],2))/power(Lp,2))))*(-1/2))
else if (Ordinate[3]=nil) and (Abscissa[3]=nil) then begin
Mass[1]:=Mpp*exp(ln((1+((36*power(Ordinate[1],2))/power(Bp,2))+((36*power(Abscissa[1],2))/power(Lp,2))))*(-1/2));
Mass[2]:=Mpp*exp(ln((1+((36*power(Ordinate[2],2))/power(Bp,2))+((36*power(Abscissa[2],2))/power(Lp,2))))*(-1/2));
end
else if (Ordinate[4]=nil) and (Abscissa[4]=nil) then begin
Mass[1]:=Mpp*exp(ln((1+((36*power(Ordinate[1],2))/power(Bp,2))+((36*power(Abscissa[1],2))/power(Lp,2))))*(-1/2));
Mass[2]:=Mpp*exp(ln((1+((36*power(Ordinate[2],2))/power(Bp,2))+((36*power(Abscissa[2],2))/power(Lp,2))))*(-1/2));
Mass[3]:=Mpp*exp(ln((1+((36*power(Ordinate[3],2))/power(Bp,2))+((36*power(Abscissa[3],2))/power(Lp,2))))*(-1/2));
end
else if (Ordinate[5]=nil) and (Abscissa[5]=nil) then begin
Mass[1]:=Mpp*exp(ln((1+((36*power(Ordinate[1],2))/power(Bp,2))+((36*power(Abscissa[1],2))/power(Lp,2))))*(-1/2));
Mass[2]:=Mpp*exp(ln((1+((36*power(Ordinate[2],2))/power(Bp,2))+((36*power(Abscissa[2],2))/power(Lp,2))))*(-1/2));
Mass[3]:=Mpp*exp(ln((1+((36*power(Ordinate[3],2))/power(Bp,2))+((36*power(Abscissa[3],2))/power(Lp,2))))*(-1/2));
Mass[4]:=Mpp*exp(ln((1+((36*power(Ordinate[4],2))/power(Bp,2))+((36*power(Abscissa[4],2))/power(Lp,2))))*(-1/2));
end
else begin
Mass[1]:=Mpp*exp(ln((1+((36*power(Ordinate[1],2))/power(Bp,2))+((36*power(Abscissa[1],2))/power(Lp,2))))*(-1/2));
Mass[2]:=Mpp*exp(ln((1+((36*power(Ordinate[2],2))/power(Bp,2))+((36*power(Abscissa[2],2))/power(Lp,2))))*(-1/2));
Mass[3]:=Mpp*exp(ln((1+((36*power(Ordinate[3],2))/power(Bp,2))+((36*power(Abscissa[3],2))/power(Lp,2))))*(-1/2));
Mass[4]:=Mpp*exp(ln((1+((36*power(Ordinate[4],2))/power(Bp,2))+((36*power(Abscissa[4],2))/power(Lp,2))))*(-1/2));
Mass[5]:=Mpp*exp(ln((1+((36*power(Ordinate[5],2))/power(Bp,2))+((36*power(Abscissa[5],2))/power(Lp,2))))*(-1/2));
end;
Или например, так тоже:
Код:
for q:=2 to 5 do begin
if (Ordinate[q]=nil) and (Abscissa[q]=nil) then begin
Mass[q-1]:=Mpp*exp(ln((1+((36*power(Ordinate[q-1],2))/power(Bp,2))+((36*power(Abscissa[q-1],2))/power(Lp,2))))*(-1/2));
break;
end
else
Continue;
end;
From Stilet: Почему код не оформляешь по правилам!?
Это последнее предупреждение - следующие подобные посты будут удалятся.

Последний раз редактировалось Stilet; 20.04.2013 в 21:02.
LLIALLIJIbIK вне форума Ответить с цитированием
Старый 20.04.2013, 20:13   #6
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

может вместо nil вам просто 0 проставить?
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 20.04.2013, 20:30   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,427
По умолчанию

Mad_Cat, так вне массива не нулевые значения лежат.

И вообще, нужно самому следить за границами массива, а не пытаться проверять элементы, которые не принадлежат Вашему массиву.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.04.2013, 20:32   #8
LLIALLIJIbIK
Пользователь
 
Регистрация: 26.08.2010
Сообщений: 51
По умолчанию

Честно говоря я не очень понимаю, как мне замутить такую ситуацию: сейчас я не знаю сколько элементов будет в моем массиве (смотря сколько добавит пользователь), но нужно прописать, что если столько-то, то считаются такие значения. Ноль не подходит потому что значение ноль может быть введено и с ним нужно будет считать так же, как и с другими значениями. То есть если я сравниваю второй элемент с нулем то этот ноль может быть введен пользователем и тогда надо его считать либо это ноль от пустого значения массива и тогда его не надо считать. Если я не ошибаюсь, то в данном случае меня спасет nil. Но не работает.
LLIALLIJIbIK вне форума Ответить с цитированием
Старый 20.04.2013, 21:58   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Спасибо. А вот такой вопрос:
for i:=1 to 5 do begin
if Mechanism[i]>max then
max:=Mechanism[i];
end;
Что произойдет, если размерность массива будет меньше 5?
Если массив начинается с 0 и меньше 5 то будет ошибка(предел 0..4).
Если массив 0..9 то ваш цикл отработает на 1..5 элементах и забудет про 0 и 6..9 элементы.

Цитата:
А почему в данной ситуации ошибка Incompatible types?
Потому что массив целых чисел а у вас там явно дробные.

Цитата:
Честно говоря я не очень понимаю, как мне замутить такую ситуацию:
Вас спасет тип variant. О нем в гугле тонны текста. Вкратце это тип данных принимающий любые типы данных(не одновременно). Он может быть как 0, '0', и nil соответственно. В Модуле variants полно всяких полезных функций.
Человек_Борща вне форума Ответить с цитированием
Старый 20.04.2013, 22:25   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Что произойдет, если размерность массива будет меньше 5?
кирдык произойдет
есть хорошие функции low и high
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить в двумерном массиве числа, равные наименьшим значениям элементов строк Chopper Помощь студентам 14 28.12.2012 01:33
В массиве из 20 элементов числа образуют неубывающую Genius94 Паскаль, Turbo Pascal, PascalABC.NET 1 14.06.2012 13:14
Подсчёт числа элементов в массиве halloman Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 31.05.2011 10:07
В массиве из п элементов много совпадающих элементов. Найти количество различных элементов Strax Фриланс 11 12.06.2010 20:13
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива HazelHen Общие вопросы C/C++ 2 29.03.2009 15:16