Кем был Моисей? Найдите ответ в энциклопедии.

толик14 толик14    1   17.04.2019 04:20    7

Ответы
boykodiana57 boykodiana57  04.06.2020 11:08
#include "stdafx.h" 
#include "malloc.h" 
#include <iostream> 
using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 

// Вводим исходные данные. 
int m; 
int n; 
printf ("Введите количество столбцов? m = "); 
cin >> m; 
printf ("Введите количество строк? n = "); 
cin >> n; 

// Создаем матрицу. 
int* pMatrix = (int*) malloc (m * n * sizeof (int)); 

// Инициализируем другие переменные. 
int xMin = 0, // левая граница спирали 
xMax = m, // правая граница спирали (не включая ее, поэтому ниже будет использоваться xMax - 1) 
yMin = 0, // верхняя граница спирали 
yMax = n, // нижняя граница спирали (не включая ее, поэтому ниже будет использоваться yMax - 1) 
i = 0, // текущее число 
x, y; // расходный материал. 

// Бесконечный цикл, пока не заполним матрицу. 
while (1) 

// Заполняем верхний ряд слева направо. 
for (x = xMin; x < xMax; x++) 
pMatrix[x + yMin * m] = i++; 
// Заполнили весь верхний ряд. Подвигаем вниз верхнюю границу. 
yMin ++; 
// Если верхняя граница совпала с нижней, то заканчиваем цикл. 
if (yMin == yMax) 
break; 

// Заполняем правый ряд сверху вниз. 
for (y = yMin; y < yMax; y++) 
pMatrix[xMax - 1 + y * m] = i++; 
// Заполнили весь правый ряд. Подвигаем налево правую границу. 
xMax --; 
// Если правая граница совпала с левой, то заканчиваем цикл. 
if (xMax == xMin) 
break; 

// Заполняем нижний ряд справа налево. 
for (x = xMax - 1; x >= xMin; x--) 
pMatrix[x + (yMax - 1) * m] = i++; 
// Заполнили весь нижний ряд. Подвигаем вверх нижнюю границу. 
yMax --; 
// Если верхняя граница совпала с нижней, то заканчиваем цикл. 
if (yMin == yMax) 
break; 

// Заполняем левый ряд снизу вверх. 
for (y = yMax - 1; y >= yMin; y--) 
pMatrix[xMin + y * m] = i++; 
// Заполнили весь левый ряд. Подвигаем направо левую границу. 
xMin ++; 
// Если правая граница совпала с левой, то заканчиваем цикл. 
if (xMax == xMin) 
break; 
// если мы все еще здесь, значит идем на очередной виток спирали.. . 


// Есть предположение, что спираль заполнена. Напечатаем ее, посмотреть.. . 
for (y = 0; y < n; y++) 

// Печатаем строку. 
for (x = 0; x < m; x++) 
printf ("i, ", pMatrix[x + y * m]); 
// Переходим на другую строку. 
printf ("\r\n"); 


// Освобождаем память и выходим. 
free (pMatrix); 
pMatrix = 0; 
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Другие предметы