Заполнить двумерный массив по правилу
Перед решением задачи необходимо найти правило расположения чисел в данной матрице. Можно увидеть несколько:
- На главной диагонали располагаются единицы. Далее по диагоналям над и под главной идут двойки, затем диагонали троек и четверок. Заканчивается все угловыми пятерками.
- От единиц главной диагонали по столбцам и по строкам, т. е. по вертикали и по горизонтали, натуральные числа последовательно увеличиваются на 1.
- Числа в строках последовательно смещаются на одну ячейку вправо. При этом освободившиеся ячейки слева заполняются числами в обратном порядке.
Под каждую описанную выше закономерность можно составить программу. Однако она будет достаточно сложной.
Вместо этого обратим внимание на следующее.
- Значения элементов матрицы можно связать с их же индексами. На главной диагонали первый индекс ( i ) равен второму ( j ). В этом случае в ячейки записывается единица.
- Если мы возьмем вторую ячейку первой строки, у которой i = 1, j = 2, то разница между ними составляет единицу. Однако нам надо записать в ячейку число 2. Значит прибавим к разнице число 1.
- Если взять первую ячейку второй строки [2, 1], разница между индексами составляет 1. Прибавив 1, получим 2.
Таким образом, приходим к формуле abs(i — j) + 1 .
const N = 7; var arr: array[1..N, 1..N] of byte; i, j: byte; begin for i := 1 to N do begin for j := 1 to N do begin arr[i, j] := abs(j - i) + 1; write(arr[i, j]:3); end; writeln; end; end.
Результат выполнения программы:
1 2 3 4 5 6 7 2 1 2 3 4 5 6 3 2 1 2 3 4 5 4 3 2 1 2 3 4 5 4 3 2 1 2 3 6 5 4 3 2 1 2 7 6 5 4 3 2 1
Двумерные массивы. Заполнение двумерного массива по заданному правилу
Тема: Двумерные массивы. Заполнение двумерного массива по заданному правилу.
Цели:отработать навыки работы с элементами двумерного массива, научиться заполнять двумерные массивы по заданному правилу, научиться выводить зависимость между номером строки и номером столбца; развитие логического мышления учащихся.
1. Актуализация знаний
Массивы, положение элементов в которых описывается двумя индексами, называются двумерными. Структура такого массива может быть представлена прямоугольной матрицей. Каждый элемент матрицы однозначно определяется указанием номера строки и столбца, номер строки – i, номер столбца – j.
Рассмотрим матрицу А размером n*m:
| а11 | а12 | а13 | а14 |
| а21 | а22 | а23 | а24 |
| а31 | а32 | а33 | а34 |
Матрица из 3 строк и 4 столбцов, количество строк n=3, количество столбцов m=4. Каждый элемент имеет свой номер, который состоит из двух чисел – номера строки, в которой находится элемент, и номера столбца. Например, а23 – это элемент, стоящий во второй строке и в третьем столбце.
Двумерный массив на языке Турбо Паскаль можно описать по-разному. Чтобы описать двумерный массив, надо определить какого типа его элементы, и каким образом они пронумерованы (какого типа его индекс). Существует несколько способов описания двумерного массива.
1 способ
Type Mas = array [1..maxN] of ;
Type TMas = array [1..maxM] of Mas;
2 способ
Type TMas = array [1..maxN] of array [1..maxM] of ;
3 способ
Предпочтение отдается третьему способу описания двумерного массива.
Const N=3; M=4;
Type TMas= array [1..N, 1..M] of integer;
Формирование двумерного массива можно осуществлять четырьмя способами: ввод с клавиатуры, через генератор случайных чисел, по заданному правилу или с помощью файла.
1) Формирование двумерного массива при помощи ввода с клавиатуры и алгоритм построчного вывода элементов матрицы.
Const N=10;M=10;
Type Tmas= array [1..N,1..M] of integer;
Var A:Tmas; i,j:integer;
Begin
For i:=1 to N do
For j:=1 to M do
Read(A[i,j]);
For i:=1 to N do begin
For j:=1 to M do
Write(A[i,j]:4);
Writeln
end;
End.
2) Фрагмент программы формирования двумерного массива через генератор случайных чисел.
2. Изучение нового материала. Заполнение массива по правилу
Рассмотрим несколько фрагментов программ заполнения двумерного массива по некоторому закону. Для этого необходимо вывести правило заполнения.
1. Заполнить массив А размером n*m следующим образом, например
1 2 3 4 5 6 7 8
16 15 14 13 12 11 10 9
17 18 19 20 21 22 23 24
32 31 30 29 28 27 26 25
33 34 35 36 37 38 39 40
48 47 46 45 44 43 42 41
Массив заполняется по принципу «змейки». Правило заполнения: если номер строки – нечетное число, то A[i,j]=(i-1)*m+j, иначе A[i,j]=i*m-j+1.
program M1А;
var A:array[1..100,1..100] of integer;
n,m,i,j: integer;
begin
readln(n,m);
for i:=1 to n do begin
for j:=1 to m do
begin
if i mod 2 = 1 then
A[i,j]=(i-1)*m+j
else
A[i,j]=i*m-j+1;
write(A[i,j]:3);
end;
writeln;
end;
readln;
end.
Приведем пример программы другого способа заполнения по заданному правилу:
program M1В;
var A:array[1..100,1..100] of integer;
n,m,i,j: integer;
c: integer;
begin
readln(n,m);
c:=1;
for i:=1 to n do
begin
for j:=1 to m do
begin
A[i,j]:=c;
if (i mod 2 = 0) and (j<>m) then
dec(c)
else
inc(c);
write(A[i,j]:3);
end;
c:=c+m-1;
writeln;
end;
readln;
end.
2. Заполнить массив A по следующему принципу:
1 0 2 0 3 0 4
0 5 0 6 0 7 0
8 0 9 0 10 0 11
0 12 0 13 0 14 0
program M2;
var A:array[1..100,1..100] of integer;
n,m,i,j: integer;
c: integer;
begin
readln(n,m);
c:=0;
for i:=1 to n do
begin
for j:=1 to m do
begin
if (i-1+j) mod 2 = 0 then
A[i,j]:=0
else
begin
inc(c);
A[i,j]:=c;
end;
write(A[i,j]:5);
end;
writeln;
end;
readln;
end.
3. Заполнить массив A по следующему принципу:
1 12 13 24 25 36
2 11 14 23 26 35
3 10 15 22 27 34
4 9 16 21 28 33
5 8 17 20 29 32
6 7 18 19 30 31
var A:array[1..100,1..100] of integer;
n,m,i,j: integer;
c: integer;
begin
readln(n,m);
c:=1;
for j:=1 to m do
begin
for i:=1 to n do
begin
A[i,j]:=c;
if (j mod 2 = 0) and (i<>n) then
dec(c)
else
inc(c);
end;
c:=c+n-1;
end;
for i:=1 to n do
begin
for j:=1 to m do
write(A[i,j]:5);
writeln;
end;
readln;
end.
4. Заполнить массив A по следующему принципу:
1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4
var i,j,m,c,d: integer;
A:array[1..100,1..100] of integer;
begin
c:=1;
readln(m);
for j:=1 to m do
begin
i:=c;
d:=1;
repeat
A[i,j]:=d;
inc(i);
if i>m then
i:=1;
inc(d);
until i=c;
dec(c);
if c c:=m-c;
end;
for i:=1 to m do
begin
for j:=1 to m do
write(A[i,j]:2);
writeln;
end;
end.
5. Заполнить массив A по следующему принципу:
1 0 0 0 1
0 1 0 1 0
0 0 1 0 0
0 1 0 1 0
1 0 0 0 1
var m,i,j: integer;
A:array[1..100,1..100] of integer;
begin
readln(m);
for i:=1 to m do
begin
for j:=1 to m do
begin
if (i=j) or (m-i+1=j) then
A[i,j]:=1
else
A[i,j]:=0;
write(A[i,j]:2);
end;
writeln;
end;
end.
3. Задачи для самостоятельного решения
1) Заполнить массив по следующему принципу:
6 5 4 3 2 1
7 8 9 10 11 12
18 17 16 15 14 13
19 20 21 22 23 24
30 29 28 27 26 25
31 32 33 34 35 36
2) Заполнить массив по следующему принципу:
36 25 24 13 12 1
35 26 23 14 11 2
34 27 22 15 10 3
33 28 21 16 9 4
32 29 20 17 8 5
31 30 19 18 7 6
3) Заполнить массив по следующему принципу:
0 1 1 1 0
1 0 1 0 1
1 1 0 1 1
1 0 1 0 1
0 1 1 1 0
4) Заполнить массив по следующему принципу:
31 32 33 34 35 36
25 26 27 28 29 30
19 20 21 22 23 24
13 14 15 16 17 18
7 8 9 10 11 12
1 2 3 4 5 6
5) Заполнить массив по следующему принципу:
31 25 19 13 7 1
32 26 20 14 8 2
33 27 21 15 9 3
34 28 22 16 10 4
35 29 23 17 11 5
36 30 24 18 12 6
Домашние задание:
1) Заполнить массив по следующему принципу:
6 7 18 19 30 31
5 8 17 20 29 32
4 9 16 21 28 33
3 10 15 22 27 34
2 11 14 23 26 35
1 12 13 24 25 36
2) Заполнить массив по следующему принципу:
31 32 33 34 35 36
30 29 28 27 26 25
19 20 21 22 23 24
18 17 16 15 14 13
7 8 9 10 11 12
6 5 4 3 2 1
3) Заполнить массив по следующему принципу:
0 1 1 1 0
1 0 1 0 1
1 1 0 1 1
1 0 1 0 1
0 1 1 1 0
morozkod / main.cpp
Clone via HTTPS Clone with Git or checkout with SVN using the repository’s web address.
Learn more about clone URLs
Заполнить двумерный массив рандомными числами от 0 до 2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| # include |
| # include |
| # include |
| using namespace std ; |
| int main () |
| const int n = 10 ; |
| int a; |
| int mas[n][n]; |
| // смысловая нагрузка |
| srand ( time ( NULL )); |
| for ( int i = 0 ; i < n; i++) |
| for ( int j = 0 ; j < n; j++) |
| a = rand () % 3 ; |
| mas[i][j] = a; |
| > |
| > |
| // вывод |
| for ( int i = 0 ; i < n; i++) |
| for ( int j = 0 ; j < n; j++) |
| cout. width ( 3 ); |
| cout |
| > |
| cout |
| > |
| return 0 ; |
| > |
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Как заполнить двумерный массив на C++
Во всех вариантах для проверки работы программы используется функция вывода содержимого массива на экран:
void printArray(int array[][4], const int row, const int column) < cout >
Как заполнить двумерный массив с клавиатуры
Довольно часто приходится заполнять массивы с клавиатуры, поэтому подробно рассмотрим этот момент на примере следующей программы
#include #include using namespace std; int main() < const int row = 3, column = 4; //размеры массива int array[row][column]; //двумерный массив for(int i = 0; i < row; i++) //строки массива < cout > array[i][j]; //запоминаем введенное значение > > printArray(array, row, column); //печатаем полученный массив >
Мы просто проходим двумя циклами for (один вложен в другой) по массиву. Первый цикл считает строки, второй столбцы. Когда все столбцы (значения) первой строки пройдены, то основной цикл переходит на вторую строку, а вложенный цикл опять начинает проходить по строке с начала, считая ее столбцы.
Как заполнить двумерный массив случайными числами
Иногда приходится рандомно заполнять массив. На примере следующей программы мы разберем то, как заполнять двумерный массив случайными числами. Смотрим код
#include #include #include #include using namespace std; int main() < const int row = 5, column = 4; //размеры массива int array[row][column]; //двумерный массив srand(time(NULL)); for(int i = 0; i < row; i++) //строки массива for(int j = 0; j < column; j++) //столбцы массива array[i][j] = 1 + rand() % 100; //заполняем текущую ячейку printArray(array, row, column); //печатаем полученный массив >
Для генерации случайных величин в С++ служит функция rand(). В данном случае она генерирует псевдослучайные величины в интервале от 1 до 100, т.к. началом у нас задана величина 1, а смещением величина 100.
Как заполнить двумерный массив из файла
Рассмотрим последний вариант заполнения — это заполнение двумерного массива из файла. Естественно, что в папке с проектом у нас должен быть заранее подготовленный текстовый файл array.txt, с которого мы будем читать числа в массив. У меня был подготовлен файл, содержащий 35 чисел, разделенных символами пробела, табуляции или перевода строки (матрица 5 на 7).
Кстати, на форуме есть тема, посвященная чтению и записи из файлов. Смотрим код
#include #include #include using namespace std; int main() < const int row = 5, column = 7; int array[row][column]; //создаем объект класса ifstream //и сразу указываем файл, с которого будем читать ifstream f("array.txt"); //читаем файл и прочитанное запоминаем в массив for(int i = 0; i < row; i++) for(int j = 0; j < column; j++) f >> array[i][j]; //печатаем полученный заполненный массив printArray(array, row, column); return 0; >
Как видите, стандартное чтение из файла выполняется достаточно просто. Для этого мы используем класс ifstream , на основе которого создаем объект f и указываем файл, с которого будем выполнять чтение. Далее в циклах (они нужны, как вы знаете, для похода по двумерному массиву и, соответственно, по файлу) мы с помощью уже привычного оператора ( >> ) «взять из потока», берем из потока (в потоке у нас находится очередное считанное из файла значение) значение и сохраняем его в очередную ячейку массива.
