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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2010, 12:41   #1
Multiman
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 91
По умолчанию Динамические массивы. delphi

Здравствуйте! задание дали на лабораторной никак сделать не могу:

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

Из выше изложенного у меня только получилось объявить массив:
A : array of array of integer;
и длину его задать:
SetLength(A,StrToInt(Edit1.Text),St rToInt(Edit2.Text));

Остальное не получается у меня.

Помогите пожалуйста разобраться:
1. Как заполнить динамический массив рандомом, если его размер и диапазон задаются пользователем.
2. Как реализовать подпрограмму.

С динамическими массивами работаю первый раз поэтому возникли трудности. Если не сложно наглядно продемонстрируйте как реализовать данное задание.(основные моменты желательно объяснить) Язык DELPHI.

Заранее благодарен!
Multiman вне форума Ответить с цитированием
Старый 28.11.2010, 13:10   #2
Ybn2
Форумчанин
 
Регистрация: 18.11.2010
Сообщений: 183
По умолчанию

За символическую плату я могу тебе сделать с коментариями.
Ybn2 вне форума Ответить с цитированием
Старый 28.11.2010, 13:27   #3
Multiman
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 91
По умолчанию

Хотя бы рандом можете бескорыстно помочь сделать? задание то не сложное для знающих людей.
Multiman вне форума Ответить с цитированием
Старый 28.11.2010, 13:40   #4
Ybn2
Форумчанин
 
Регистрация: 18.11.2010
Сообщений: 183
По умолчанию

Вот заполнения массива Mas и вывод в TStringGrid; Edit1- Строки, Edit2 - Столбцы
Диапазон: Edit3 - Начало диапазона, Edit4 - Конец Диапазона

Код:
procedure TForm1.Button1Click(Sender: TObject);
Var mas:array of array of integer;
    i,j:integer;
begin
Randomize;
  SetLength (Mas,StrToInt(Edit1.Text),strToInt(Edit2.Text));
  StringGrid1.ColCount:=StrToInt(Edit1.Text);
  StringGrid1.RowCount:=strToInt(Edit2.Text);
  For i:=0 to Length(mas)-1 do
    For j:=0 to Length (mas[i])-1 do
     Begin
       Mas[i,j]:=StrToInt(Edit3.text)+Random(StrToInt(Edit4.Text)-StrToInt(Edit3.text)+1);
       StringGrid1.Cells[i,j]:=IntToStr(Mas[i,j]);
     end;
end;
end.
Посмотри, я изменил заполнения для заданного диапазона

Последний раз редактировалось Stilet; 28.11.2010 в 16:34.
Ybn2 вне форума Ответить с цитированием
Старый 28.11.2010, 13:48   #5
Multiman
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 91
По умолчанию

Спасибо большое все работает!)

Вопрос с подпрограммой остается открытым.

Mas[i,j]:=Random(strtoint(Edit3.Text)); да в принципе и так бы прокатило)

Последний раз редактировалось Stilet; 28.11.2010 в 16:35.
Multiman вне форума Ответить с цитированием
Старый 28.11.2010, 13:53   #6
Ybn2
Форумчанин
 
Регистрация: 18.11.2010
Сообщений: 183
По умолчанию

Цитата:
Сообщение от Multiman Посмотреть сообщение
Mas[i,j]:=Random(strtoint(Edit3.Text)); да в принципе и так бы прокатило)
Вам виднее, просто если так, то нижняя часть диапазона будет равна 0 и не когда не будет равна последниму числу из диапазона. т.е. Random (10) - выдает случайные числа от [0 до 9]
Ybn2 вне форума Ответить с цитированием
Старый 28.11.2010, 13:55   #7
Multiman
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 91
По умолчанию

а точно спасибо большое) я ваш вариант использовал.
Multiman вне форума Ответить с цитированием
Старый 28.11.2010, 14:18   #8
Ybn2
Форумчанин
 
Регистрация: 18.11.2010
Сообщений: 183
По умолчанию

К стати, Вам необходимо делать проверку, чтобы правильно вводился диапазон (нижний и верхний) приблизительно так:
Код:
  If StrToInt(Edit3.text)>StrToInt (Edit4.txt) then
    Begin
       ShowMessage ('Не правельный диапазон');
       exit;
   end;
или
Код:
  If StrToInt(Edit3.text)>StrToInt (Edit4.txt) then 
      Begin 
         st:=Edit3.text; //Var St:String;
         Edit3.text:=Edit4.text;
         edit4.text:=st;
     end;
Ybn2 вне форума Ответить с цитированием
Старый 28.11.2010, 14:21   #9
Multiman
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 91
По умолчанию

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

Поможет кто-нибудь подпрограмму написать???

Последний раз редактировалось Stilet; 28.11.2010 в 16:36.
Multiman вне форума Ответить с цитированием
Старый 28.11.2010, 15:03   #10
Ybn2
Форумчанин
 
Регистрация: 18.11.2010
Сообщений: 183
По умолчанию

Ты говори, какие еще вопросы?
Ybn2 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические массивы Цветик Общие вопросы C/C++ 1 22.11.2010 08:46
динамические массивы - C++ ? denes Общие вопросы C/C++ 31 18.06.2010 10:57
Динамические массивы и массивы варианты N@stya Помощь студентам 0 11.06.2010 21:09
Динамические массивы Matr1x Общие вопросы C/C++ 5 07.12.2009 13:38