![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Дан двумерный массив из четного числа строк, строки верхней половины массива поменять местами со строками нижней половины! Помогите пожалуйста или намекните
![]() |
|
#2
|
||||
|
||||
|
Ну и какие мысли есть у вас на эту тему, хоть что нибудь проблеснуло?
Например, объясните пжлст, каково ваше понимание что есть Цитата:
|
|
#3
|
|||
|
|||
|
например массив такой:
123 456 789 356 123 и 456 это верхние строки 789 и 356 нижние поменять их местами |
|
#4
|
||||
|
||||
|
Стесняюсь спросить, а зачем тогда двумерный массив нужен, в другую размерность нужно результат положить что ли?
З.Ы. And then there was another influence... ![]() Ну да ладно, не хотите обучаться - ваше дело, потом аукнется, да будет поздно. Вот вам немного говнокода, через одномерный массив, на форму нужно кинуть кнопку и мемо и скопипастить вот это Код:
procedure TForm1.Button1Click(Sender: TObject);
var
m: array of string;
i: integer;
s1, s2: string;
begin
// Для примера
SetLength(m,4);
m[0]:='123';
m[1]:='456';
m[2]:='789';
m[3]:='356';
for i:= Low(m) to High(m) do Memo1.Lines.Add(m[i]);
for i:= Low(m) to High(m) mod 2 do
begin
s1:= m[i];
s2:= m[(High(m) mod 2) + i+1];
m[i]:= s2;
m[(High(m) mod 2) + i+1]:= s1
end;
Memo1.Lines.Add('');
for i:= Low(m) to High(m) do Memo1.Lines.Add(m[i]);
end;Последний раз редактировалось Alegun, 25.06.2013 в 10:48. |
|
#5
|
|||
|
|||
|
Зачем мне одномерный если в задании двумерный. Т.е. вводим число строк и число столбцов, затем вводим элементы, которые имеют свою строку и столбец. Программу я условно говоря решил, код программы вроде верный.
Но запускается она и меняет половины, если вместо n и k(размерность массива) вводить конкретное число (н-р 4 и 3). По-другому не работает. Не соображу в чем ошибка. Вот код: Код:
var
Form9: TForm9;
Ar: array of array of integer;
n,k:integer;
implementation
{$R *.dfm}
procedure TForm9.Button3Click(Sender: TObject);
begin
n:=strtoInt(InputBox('Размер массива', 'Введите число строк в массиве','0'));
k:=strtoInt(InputBox('Размер массива', 'Введите число столбцов в массиве','0'));
SetLength(Ar,n,k);
//установка размера массива
end;
procedure TForm9.Button1Click(Sender: TObject);
var
i,j:integer;
begin
for i:=1 to n do
for j:=1 to k do
Ar[i,j]:=strtoint(InputBox('Элементы массива', 'Введите'+inttostr(i)+inttostr(j)+' элемент массива','0'));
//Ввод элементов массива
end;
procedure TForm9.Button2Click(Sender: TObject);
var x,i,j:integer;
s,s1:string;
begin
for i:=1 to n do // Вывод элементов массива в виде матрицы
begin
s:='';
for j:=1 to k do
begin
s:=s+inttostr(Ar[i,j])+' ';
end;
ListBox1.Items.Add(s);
end;
for i:=1 to n div 2 do begin
S1:='';
for j:=1 to k do
begin
x:=Ar[i,j];
Ar[i,j]:=Ar[(n div 2)+i,j];
Ar[(n div 2)+i,j]:=x;
end;
end;
for i:=1 to n do // Вывод элементов массива в виде матрицы
begin
s1:='';
for j:=1 to k do
begin
s1:=s1+inttostr(Ar[i,j])+' ';
end;
ListBox2.Items.Add(s1);
end;
end;
end.Последний раз редактировалось Admin, 25.06.2013 в 22:26. |
|
#6
|
||||
|
||||
|
Пока ни кто не видел
заключите пжлст ваш код в тег [СODE]код[/СODE], а по теме, у вас переменные n и k объявлены как глобальные, а вы их в циклах используете, компилятор от такого впадает в ступор, вдруг они обнулятся кемнить прям во время исполнения, перенесите их в локальную секцию var |
|
#7
|
|||
|
|||
|
Раньше он хоть как-то запускал, пусть с ошибкой, а теперь при вводе элементов даже на кнопку не нажимает. Мы всегда эти переменные объявляем как глобальные, и всё работает. В чем ошибка хз?!
|
|
#8
|
||||
|
||||
|
Переименуйте глобальные n и k в n1 k1 и делайте так
Код:
procedure TForm9.Button3Click(Sender: TObject);
//-----
var
n, k: integer;
//-----
begin
n1:=strtoInt(InputBox('Размер массива', 'Введите число строк в массиве','0'));
k1:=strtoInt(InputBox('Размер массива', 'Введите число столбцов в массиве','0'));
//-----
n:=n1;
k:=k1;
//-----
SetLength(Ar,n, k);
//установка размера массива
end;Последний раз редактировалось Alegun, 26.06.2013 в 06:34. |
|
#9
|
|||
|
|||
|
Здравствуйте. Подключаюсь к этому вопросу. Уточните пжл как это до и после begin? А то я тут навтыкала практически везде, результата 0. Код программы такой же как и выше.
|
|
#10
|
||||
|
||||
|
Код:
procedure TForm1.Button1Click(Sender: TObject); //----- До var n, k: integer; //----- begin //----- После n:= n1; k:= k1; //----- ... .. . end; |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Frosya (27.06.2013)
| ||
|
#11
|
|||
|
|||
|
Спасибо, ошибку нашла, но в другом
|
|
#12
|
|||
|
|||
|
Решите пожалуйста, соображений вообще нет, мы решали двумерки намного проще, найти там сумму и тп. На контроль дали вот эту и наподобие. Как делать, никто не знает, сами преподы не хотят нам помогать. Решите пжл, обратиться больше не к кому. Знаю конечно, что это просто и нужно учиться.
Поменять местами второй столбец и столбец, в котором находится последний элемент, больший 100 . Принять, что элементы ,большие 100, в массиве есть и что массив просматривается слева направо и сверху вниз. |