![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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.
З. Ы. Ннаписал в консоли, т. к. рисовать форму мне было неохота!  |