![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Помогите пожалуйста с данной задачкой:
Одномерный массив а длиной М. Переместить нулевые элементы массива в конец, сдвинув остальные элементы влево. Приведу то, что я сделал на данный момент: настроил 2 стрингрида и Код:
var k:integer; a:array[1..30] of integer; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin k:=strtoint(edit1.Text); if (k>0) and (k<=30) then s1.ColCount:=k else ShowMessage('Введи размер массива >0 и <=30 ') end; procedure TForm1.Button3Click(Sender: TObject); var i,j,n:integer; begin for i:=1 to k do a[i]:=strtoint(S1.Cells[i-1,0]); end; Последний раз редактировалось Admin, 17.12.2012 в 16:07. |
#2
|
||||
|
||||
![]() Решил Вашу задачу 2-мя способами, но в консоли (я надеюсь, что не составит труда вывести массив в StringGrid, а не в консоль). И ещё кое что: приучайтесь сразу нумеровать элементы массива с нуля, поскольку в Си-подобных языках нумерация элементов с нуля.
Код:
program Forum2Project1; {$APPTYPE CONSOLE} uses SysUtils; Var // основной и дополнительный массивы Mas, Mass: Array[0..29] Of Integer; i, k, N: Byte; // переменные begin Repeat Write('Vvedi razmer (2 <= N <= 30): N = '); ReadLn(N); // ввод размера Until ((N >= 2) And (N <= 30)); // проверка границ размера N:=N-1; Randomize; // инициализация генератора СЧ WriteLn('Ishodnii massiv:'); For i:=0 To N Do Begin // генерация элементов массива и вывод на экран Mas[i]:=Random(5); WriteLn(Mas[i]); // так вывод производится в столбик // Write(Mas[i], '; '); а так - в строчку End; WriteLn; WriteLn('Poluchennii massiv:'); WriteLn; // этот закоментированный код тоже работает // этот код использует дополнительный массив {k:=0; // начальное значение количества ненулевых элементов For i:=0 To N Do If (Mas[i]<>0) Then // если элемент ненулевой Begin Mass[k]:=Mas[i]; // он попадает в массив k:=k+1; // индекс массива ненулевых элементов +1 End; For i:=0 To N Do Begin // если i меньше кол-ва ненулевых эл-тов If (i<k) Then Mas[i]:=Mass[i] // беру элемент из массива Else // иначе, присваиваю ему нуль Mas[i]:=0; WriteLn(Mas[i]); // вывод на экран End;} // этот код не использует дополнительный массив For i:=0 To N-1 Do // мотаю цикл от 0 до кол-ва эл-тов массива -1 For k:=i+1 To N Do // мотаю цикл, который перемещает эл-ты If ((Mas[i]=0) And (Mas[k]<>0)) Then Begin // если левый элемент нуль, а правый нет, то: Mas[i]:=Mas[k]; // левому присвоил значение правого Mas[k]:=0; // а правому нуль End; // для закомментированного метода этот цикл НЕ нужен! For i:=0 To N Do // просто вывод массива на экран WriteLn(Mas[i]); WriteLn; WriteLn('Press ENTER!'); ReadLn; end. З. Ы. Ннаписал в консоли, т. к. рисовать форму мне было неохота! Чем больше знаешь, тем сильнее осознаёшь, что знаешь гораздо меньше, чем не знаешь!.. |