Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
196 / 8 / 3
Регистрация: 30.04.2016
Сообщений: 733
1

Заполнить случайным образом двумерный массив размерностью n на n

19.11.2017, 12:14. Показов 2995. Ответов 6
Метки нет (Все метки)

Заполнить случайным образом двумерный массив размерностью
n на n. Поменять местами элементы следующих столбцов:
1) 1-й столбец – n-й столбец
2) 2-й столбец - (n – 1)-й столбец
3) 3-й столбец - (n - 2)-й столбец
4) …
Вывести оба массива на экран.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{Вариант Var64}
uses Crt;
const N = 5;  M = 5:
Var A: array [1..N, 1..M] of integer;
            i, j: integer;
begin
ClrScr;
    for i:= 0 to N-1 do begin
       for j:= 0 to M-1 do
        write(i * n + j + 1:4);
         writeln;  writeln;
     end;
          writeln;
    for i:= 0 to 4 do begin
       for j:= 0 to 5 down 1 do
          write(i * 5 + 1 + j – 1:4);
          writeln;  writeln;
      end;
   readln
end.
На выходе имеем:
Pascal
1
2
3
4
5
6
7
8
9
10
11
1     2     3    4      5
6     7     8     9     10
11   12   13   14   15 
16   17   18   19   20
21   22   23   24   25
 
5    4      3     2     1
10   9     8     7     6  
15   14   13   12   11
20   19   18   17   16
25   24   23   22   21
Такое условие задачи я сумел выполнить. Но вопросы такие:

Вопрос 1: требуется поменять попарно столбцы массива (как в одномерном массиве, что с божьей помощью, т. е. с вашей, наловчился это делать). А вот в двумерном массиве поменять местами попарно столбцы не получилось. Вы уж и эту задачку покажите как её делать.
Вопрос 2: Эти два столбца надо расположить рядом. Как это сделать.
Со случайными числами это получается (используя координаты).А вот с этими порядковыми числами не получается.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2017, 12:14
Ответы с готовыми решениями:

Заполнить случайным образом двумерный массив размерностью n на n
Заполнить случайным образом двумерный массив размерностью n на n. Обнулить минимальные элементы...

Заполнить случайным образом двумерный массив размерностью N x N
Заполнить случайным образом двумерный массив размерностью N x N. Поменять местами элементы...

Заполнить случайным образом двумерный массив размерностью N x N
Заполнить случайным образом двумерный массив размерностью N x N. Поменять местами элементы...

Заполнить порядковым образом двумерный массив размерностью N x M
Заполнить порядковым образом двумерный массив размерностью N x M. Поменять местами элементы...

6
Почетный модератор
64089 / 47498 / 32734
Регистрация: 18.05.2008
Сообщений: 115,182
19.11.2017, 12:31 2
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
uses Crt;
const n=5;
var a:array [1..n,1..n] of integer;
    i,j,x:integer;
begin
clrscr;
randomize;
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    a[i,j]:=10+random(90);{заполнить случайным образом}
    write(a[i,j]:3);
   end;
  writeln;
 end;
writeln;
for i:=1 to n div 2 do
for j:=1 to n do
 begin
  x:=a[i,j];
  a[i,j]:=a[n-i+1,j];
  a[n-i+1,j]:=x;
 end;
for i:=1 to n do
 begin
  for j:=1 to n do
  write(a[i,j]:3);
  writeln;
 end;
readln
end.
0
196 / 8 / 3
Регистрация: 30.04.2016
Сообщений: 733
26.11.2017, 16:00  [ТС] 3
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Program PStolb_4;
uses Crt;
const N = 4;  M = 4;
Var A: array{1..N, 1..M] of integer;
            i, j, X: integer;
begin
ClrScr;
     for i:= 0 to N-1 do begin
        for j:= 0 to M-1 do
         write(i * n + j + 1:3);
        writeln;  writeln;
    end;
         writeln;
{Блок попарного обмена столбцами}
       i:= 1;  j:= 1;
    while I < 5 do begin
        X:= A[i, j];
A[i, j]:= A[i, j + 1];
A[i, j+1]]:= X;
    j:= j + 1;
  end;
writeln(' Изменённый массив:');
   for i:= 0 to N-1 do begin
    for j:= 0 to M-1 do
       write(i * n + j + 1:3);
      writeln;  writeln;
   end;
  readln
end.
На выходе имеем:
Pascal
1
2
3
4
1     2    3    4   
5     6    7    8  
9    10  11  12
13  14  15  16
Изменённый массив:
Pascal
1
2
3
4
1    2    3    4
5    6    7    8
9   10  11  12
13  14  15  16
1. Почему столбцы не меняются попарно? Со случайными
числами получается, а с порядковыми нет. В чём дело?
2. Да ещё бы расположить эти два массива рядом. Ваша строка
в одной из программ со вставкой в нужном месте:
write(' ' : W + 1); не помогла (такая вставка была в программе
с оператором while … do).
Как бы всё это выполнить. И почему попарная перестановка
столбцов из случайных чисел получается, а из порядковых нет.
0
Почетный модератор
64089 / 47498 / 32734
Регистрация: 18.05.2008
Сообщений: 115,182
26.11.2017, 16:10 4
Почему, почему... Не умеете писать возьмите мой код и не лезьте туда. Если хотите по другому, создавайте новую тему со своими вопросами.
0
196 / 8 / 3
Регистрация: 30.04.2016
Сообщений: 733
03.12.2017, 11:23  [ТС] 5
Заполнить случайным образом двумерный массив
размерностью N x N. Поменять местами элементы
следующих столбцов:
1) 1-й столбец – n-й столбец
2) 2-й столбец – (n-1)-й столбец
3) 3-й столбец – (n-2)-й столбец и т. д.
Вывести оба массива на экран.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Program PStolb_1;
uses Crt;
Var array [1..N, 1..M] of integer;
                 i, j, X: integer;
begin
ClrScr;
writeln(' Введённый массив:');
    for i:= 1 to N do
      for j:= 1 to M do
       A[i, j]:= Random(80)20;
{Вывод матрицы на экран по строкам}
     for i:= 1 to N do begin
        for j:= 1 to M do
           write(A[i, j]:3);
              writeln;
     end;
              writeln;
{Блок перестановки столбцов}
        i:= 1;   j:= 1;
    while i <= 6 do begin
         X:= A[i, j]:
         A[i, j]:= A[i, j + 1];
         A[i, j+1]:= X;
              j:= j + 2;
     end;
writeln(' Изменённый массив:');
    for i:= 1 to N do begin
       for j:= M downto 1 do
           write(A[i, j]:3);
              writelln;
     end;
   readln
end.
На выходе имеем:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
-20   -18    48   -4     1    33
   5     -4      9   14  -14   17
-15    47  -16     3    53     9
 41      6    35   47    37    4
  -7     6    17     -1    46    2
 18    -9    49      2    41    58
 
Изменённый массив:  
   1     33    48    -4   -20   -18
-14     17     9    14      5     -8
 53      9    -16     3   -15    47
 37      4     35    47    41      6
 46      2     17     -1    -7      6
 41    58     49      2    18    -9
Почему получилось так, а не так как надо?
1-й меняется с 5-м, а надо с 6-м;
2-й меняется с 6-м, а надо с 5-м;
а 3-й и 4-й остаются без изменения.
А как сделать так, чтобы было как надо.
0
Почетный модератор
64089 / 47498 / 32734
Регистрация: 18.05.2008
Сообщений: 115,182
03.12.2017, 11:36 6
Скопируйте свой код и попробуйте запустить программу.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
6186 / 3708 / 2562
Регистрация: 22.11.2013
Сообщений: 10,601
Записей в блоге: 1
03.12.2017, 16:59 7
Цитата Сообщение от Petro29 Посмотреть сообщение
ещё бы расположить эти два массива рядом
Pascal
1
2
3
4
5
6
7
for i:=1 to n do begin
  for j:=1 to m do Write(a[i,j]:3); Write('':3);
  for j:=1 to m div 2 do begin
    x:=a[i,j]; a[i,j]:=a[i,1+m-j]; a[i,1+m-j]:=x;
  end;
  for j:=1 to m do Write(a[i,j]:3); WriteLn;
end;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2017, 16:59

Заполнить случайным образом одномерный массив из n элементов
Заполнить случайным образом одномерный массив из n элементов и определить минимальную сумму...

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

Заполнить массив из десяти элементов случайным образом
Помогите пожалуйста решить задачу) Заполнить массив из десяти элементов случайным образом:целыми...

Заполнить порядковыми числами двумерный массив размерностью N x N
Заполнить порядковыми числами двумерный массив размер- ностью N x N. Поменять местами попарно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru