Учительница на уроке: - Ребята, должна сказать, что у вас очень плохо обстоят дела с математикой. Я думаю, что 90 процентов из вас не сдаст годовую контрольную.
Голос из класса: - Да нас здесь столько и не наберется.
Пример качественной консольной программы на C++ для первого курса(качественный код). Хочется подметить, что качественный он только для уровня первого-второго курса. До четвёртого недотягивает в силу некоторых вещей (конечно если Вы не хотите быть быдлокодером)...
Fill_matrix_by_squares.cpp : Заполняет матрицу задаваемого размера квадратами из единиц
Размер самого большого квадрата и расстояние между квадратами задаётся
(самый большой квадрат в левом верхнем углу) . . . . . . . . . . #include "stdafx.h" #include <conio.h> #include <stdio.h> //#include "testing.h"
const char MAX_SIZE = 30; // Максимальный размер матрицы
// Заполнить матрицу квадратами из единичных элементов int fillArrBySquares( int arr[MAX_SIZE][MAX_SIZE], int height, int width, int sizeOfSquare, int sizeOfSpaces );
// Записать в матрицу элементы, образующие квадрат из единиц void squareInMatrix( int matr [MAX_SIZE][MAX_SIZE], int indexOfCornerH, int indexOfCornerW, int size );
// ************************************************** int _tmain(int argc, _TCHAR* argv[]) { // ''''''''''''''''''''''''''''''''''''' int matr[MAX_SIZE][MAX_SIZE] = {0}; // Заполняемая квадратная матрица int height, width; // Размеры матрицы
bool isErrorInput = 0; // 1 ~ произошла ошибка при вводе
int sizeOfSquare; // Размер самого большого квадрата int sizeOfSpace; // Расстояние между квадратами // ''''''''''''''''''''''''''''''''''''''
// Заполнить матрицу квадратами из единичных эелементов // // matr - заполняемая матрица // height - ширина матрицы // width - длина матрицы // sizeOfBigestSquare - размер самого большого квадрата // sizeOfSpaces - величина промежутка между квадратами // // Возвращаемое значение: величина самого маленького получившегося квадрата // ======================================================================== int fillArrBySquares( int matr[MAX_SIZE][MAX_SIZE], int height, int width, int sizeOfBigestSquare, int sizeOfSpaces ) { int iSquare; // Индекс квадрата (счёт ведём снаружи) int sizeSquare = 0; // Размер обрабатываемого квадрата под индексом iSquare int indexOfCorner; // Индекс верхнего левого угла квадрата
int sizeOfSmallestSquare; // Размер самого маленького квадрата
iSquare = 0; sizeSquare = sizeOfBigestSquare;
// Пока очередной квадрат имеет положительный размер while ( sizeSquare > 0 ) { // Предполагаем, что этот квадрат будет самым маленьким sizeOfSmallestSquare = sizeSquare;
// находим индекс левого верхнего угла квадрата indexOfCorner = iSquare * ( sizeOfSpaces + 1 );
// Вычислить индекс и размер нового квадрата iSquare++; sizeSquare = sizeOfBigestSquare - iSquare * ( sizeOfSpaces + 1 ) * 2; }
return sizeOfSmallestSquare; }
// Записать в матрицу элементы, образующие квадрат из единиц // // matr - Матрица, в которую будет вестись запись // indexOfCornerH и indexOfCornerW - индексы левого верхнего угла квадрата // sizeOfSquare - размер квадрата (количество жлементов в его стороне) // =================================================================== void squareInMatrix( int matr [MAX_SIZE][MAX_SIZE], int indexOfCornerH, int indexOfCornerW, int sizeOfSquare ) { // Каждую сторону достаточно обрабатывать без одного её элемента for ( int k = 0; k < sizeOfSquare - 1; k++ ) { // Записать элемент левой стороны (начиная со второго сверху) matr [ indexOfCornerH + k + 1 ] [ indexOfCornerW ] = 1;
// Записать элемент верхней стороны matr [ indexOfCornerH ] [ indexOfCornerW + k ] = 1;
// Записать элемент правой стороны matr [ indexOfCornerH + k ] [ sizeOfSquare + indexOfCornerW - 1 ] = 1;
// Записать элемент нижней стороны (начиная со второго слева) matr [ sizeOfSquare + indexOfCornerH - 1 ] [ k + indexOfCornerW + 1 ] = 1; }
// Заполнить левый верхний элемент квадрата, // на случай, если квадрат состоит из одного элемента и стороны не заполнялись matr [ indexOfCornerH ][ indexOfCornerW ] = 1;