Сформировать матрицу по правилу - C (СИ) (79381)
Формулировка задачи:
Всем привет!
Помогите перевести программу с паскаля на си, пытался найти трансляторы, не получилось, не могу разобраться никак в них
чтобы было понятнее вот само задание:
Дана целочисленая квадратичная матрица А размером 8x8. Получить целочисленную одномерную последовательность B1, B2,..B64, Элементами которой являются числа полученые из квадротичной матрици предложеной на рисунке схеме тоесть B1=A11, B2=A21, B64=A18
Код на паскале:
const n=8;
var a: array [1..n,1..n] of integer;
b: array [1..n*n] of integer;
i,j,k: integer;
BEGIN
randomize;
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=random(20)-3;
write(a[i,j]:4)
end;
writeln
end;
k:=0;
for j:=1 to n do
if j div 2 = j/2 then
for i:= n downto 1 do
begin
inc(k);
b[k]:=a[i,j]
end;
else
for i:=1 to n do
begin
inc(k);
b[k]:=a[i,j]
end;
writeln('Полученный одномерный массив');
for i:=1 to n*n do
write(b[i]:4);
END.Решение задачи: «Сформировать матрицу по правилу»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 8
int main(void) {
int matrix[SIZE][SIZE], array[SIZE * SIZE], i, j, * pArr;
/* заполнение матрицы случайными числами */
srand(time(NULL));
printf("Matrix:\n");
for ( i = 0; i < SIZE; ++i ){
for ( j = 0; j < SIZE; ++j )
printf("%02d ", ( matrix[i][j] = rand() % 100 ));
printf("\n");
}
/* хитрое копирование в массив */
pArr = array;
for ( j = 0; j < SIZE; j += 2 ) {
for ( i = 0; i < SIZE; ++i )
*pArr++ = matrix[i][j];
for ( i = SIZE - 1; i >= 0; --i )
*pArr++ = matrix[i][j+1];
}
printf("Array:\n");
for ( i = 0; i < SIZE * SIZE; ++i )
printf("%02d ", array[i]);
printf("\n");
exit(EXIT_SUCCESS);
}
Объяснение кода листинга программы
Вывод программы: Matrix: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 0A 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 Array: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 Список действий:
- Объявление переменных: — matrix[SIZE][SIZE] - двумерный массив (матрица) размером SIZE на SIZE; — array[SIZE SIZE] - одномерный массив (буфер) размером SIZE SIZE; — i, j - индексы для обхода матрицы и массива; — pArr - указатель на элемент массива array.
- Заполнение матрицы случайными числами от 0 до 99 с помощью функции rand() и оператора % (остаток от деления).
- Хитрое копирование в массив array по следующему правилу: сначала заполняются четные строки матрицы, начиная с первой строки, затем нечетные строки, начиная с последней строки.
- Вывод на экран содержимого массива array.
- Вход из программы.