Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.06.2013, 07:27
GoryachevEugeneS GoryachevEugeneS вне форума
Прохожий
 
Регистрация: 05.06.2013
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
Восклицание Двумерный массив. Строки

Дан двумерный массив из четного числа строк, строки верхней половины массива поменять местами со строками нижней половины! Помогите пожалуйста или намекните
Ответить с цитированием
  #2  
Старый 25.06.2013, 08:11
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Ну и какие мысли есть у вас на эту тему, хоть что нибудь проблеснуло?

Например, объясните пжлст, каково ваше понимание что есть
Цитата:
...строки верхней половины массива...
, с нижними аналогично. От этого и начнём плясать.
Ответить с цитированием
  #3  
Старый 25.06.2013, 08:14
GoryachevEugeneS GoryachevEugeneS вне форума
Прохожий
 
Регистрация: 05.06.2013
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

например массив такой:
123
456
789
356

123 и 456 это верхние строки
789 и 356 нижние

поменять их местами
Ответить с цитированием
  #4  
Старый 25.06.2013, 08:18
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Стесняюсь спросить, а зачем тогда двумерный массив нужен, в другую размерность нужно результат положить что ли?

З.Ы. 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  
Старый 25.06.2013, 10:50
GoryachevEugeneS GoryachevEugeneS вне форума
Прохожий
 
Регистрация: 05.06.2013
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Зачем мне одномерный если в задании двумерный. Т.е. вводим число строк и число столбцов, затем вводим элементы, которые имеют свою строку и столбец. Программу я условно говоря решил, код программы вроде верный.
Но запускается она и меняет половины, если вместо 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  
Старый 25.06.2013, 11:00
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Пока ни кто не видел заключите пжлст ваш код в тег [СODE]код[/СODE], а по теме, у вас переменные n и k объявлены как глобальные, а вы их в циклах используете, компилятор от такого впадает в ступор, вдруг они обнулятся кемнить прям во время исполнения, перенесите их в локальную секцию var
Ответить с цитированием
  #7  
Старый 25.06.2013, 14:52
GoryachevEugeneS GoryachevEugeneS вне форума
Прохожий
 
Регистрация: 05.06.2013
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Раньше он хоть как-то запускал, пусть с ошибкой, а теперь при вводе элементов даже на кнопку не нажимает. Мы всегда эти переменные объявляем как глобальные, и всё работает. В чем ошибка хз?!
Ответить с цитированием
  #8  
Старый 25.06.2013, 16:03
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Переименуйте глобальные 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;
и так во всех процедурах добавьте во первых строках до и после begin

Последний раз редактировалось Alegun, 26.06.2013 в 06:34.
Ответить с цитированием
  #9  
Старый 25.06.2013, 17:15
Frosya Frosya вне форума
Прохожий
 
Регистрация: 25.06.2013
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Здравствуйте. Подключаюсь к этому вопросу. Уточните пжл как это до и после begin? А то я тут навтыкала практически везде, результата 0. Код программы такой же как и выше.
Ответить с цитированием
  #10  
Старый 25.06.2013, 17:19
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
 
//----- До
var
n, k: integer;
//-----

begin

//----- После
n:= n1;
k:= k1;
//-----

...
..
.
end;
Локальным переменным передаются значения глобальных
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Frosya (27.06.2013)
  #11  
Старый 27.06.2013, 21:39
Frosya Frosya вне форума
Прохожий
 
Регистрация: 25.06.2013
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо, ошибку нашла, но в другом
Ответить с цитированием
  #12  
Старый 27.06.2013, 21:43
Frosya Frosya вне форума
Прохожий
 
Регистрация: 25.06.2013
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Решите пожалуйста, соображений вообще нет, мы решали двумерки намного проще, найти там сумму и тп. На контроль дали вот эту и наподобие. Как делать, никто не знает, сами преподы не хотят нам помогать. Решите пжл, обратиться больше не к кому. Знаю конечно, что это просто и нужно учиться.

Поменять местами второй столбец и столбец, в котором находится последний элемент, больший 100 . Принять, что элементы ,большие 100, в массиве есть и что массив просматривается слева направо и сверху вниз.
Ответить с цитированием
  #13  
Старый 28.06.2013, 02:27
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Frosya
Решите пожалуйста...
Да совсем недавно такую задачу просили решить, вот решение. Код не мой, лишь доработка.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:39.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter