Программа на C, заполняет матрицу задаваемого размера квадратами из единиц 2008
[Скачать с сервера (88.7 Kb) - бесплатно] | 13.08.2009, 22:23 |
Пример качественной консольной программы на 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; // Расстояние между квадратами // '''''''''''''''''''''''''''''''''''''' //MAIN_TESTING // ВВЕСТИ ПАРАМЕТРЫ // Ввести ширину матрицы printf( "Input size of matrix (2 integers): " ); scanf( "%d", & height ); // Проверить ввод на наличие ошибок if ( height > MAX_SIZE || height < 0 ) isErrorInput = 1; else { // Ввести длину матрицы scanf( "%d", & width ); // Проверить ввод на наличие ошибок if ( width > MAX_SIZE || width < 0 ) isErrorInput = 1; else { // Ввести размер самого большого квадрата printf( "Input size of bigest square: " ); scanf( "%d", & sizeOfSquare ); // Проверить ввод на наличие ошибок if ( sizeOfSquare > width || sizeOfSquare > height || sizeOfSquare <= 0 ) isErrorInput = 1; else { // Ввести расстояние между квадратами printf( "Input size of space between squares: " ); scanf( "%d", & sizeOfSpace ); // Проверить ввод на наличие ошибок if ( sizeOfSpace < 0 ) isErrorInput = 1; } } } // ЗАПОЛОНИТЬ МАТРИЦУ КВАДРАТАМИ if ( !isErrorInput ) // Если не происходило ошибок ввода { fillArrBySquares( matr, height, width, sizeOfSquare, sizeOfSpace ); } // ВЫВОД РЕЗУЛЬТАТА if ( isErrorInput ) // Если произошла ошибка при вводе printf ( "invalid input data" ); else { // Иначе, выводим преобразованную матрицу for ( int i = 0; i < height; i++ ) { printf( "\n" ); for ( int j = 0; j < width; j++ ) { printf( "%d ", matr[i][j] ); } } } getch(); //WAIT_ANY_KEY return 0; } // ************************************************************* // Заполнить матрицу квадратами из единичных эелементов // // 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 squareInMatrix( matr, indexOfCorner, indexOfCorner, sizeSquare ); // Вычислить индекс и размер нового квадрата 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; } Добавил: COBA (13.08.2009) | Категория: Язык Си (консольные) Просмотров: 5373 | Загрузок: 1076 | Рейтинг: 5.0/2 | Теги: |
Комментарии (2) | ||
| ||