Главная Язык Си (консольные) » Файлы » Выполненные работы » Язык Си (консольные) [ Добавить материал ]

Программа на 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) | Категория: Язык Си (консольные)
Просмотров: 5395 | Загрузок: 1083 | Рейтинг: 5.0/2 |
Теги: программа, с++, Литовкин, консольные приложения, Сычёв
Комментарии (2)
0   Спам
1. Дмитрий   13.10.2012   14:07 [Материал]
fillSquares_my(int matr[ MAX_SIZE ][ MAX_SIZE ], int heigth, int width, int size)
{
//ОСНОВНОЙ КОД ПРОГИ
int m=0; //необходимая для хранения данных о смешении нижеследующего квадрата
//(для того чтобы квадраты выстраивались по диагонали)
for (int i=0; i<heigth; i++)
{
for (int j=0; ((j<width) && (j<size)) ; j++)
{
if ( i%size==0 )
{
matr[i][j+m]=1;
matr[i+(size-1)][j+m]=1;
}
else
{
matr[i][j+m]=1;
j=j+(size-2);
}
}
if((i+1)%size==0)
{
m=m+size;
}
}
return(0);

}
а вот что я напрограммировал на первом, знал бы про эт сайт , не мучился))
0   Спам
2. mauzer   13.10.2012   15:15 [Материал]
Спасибо за пример.
Теперь можно увидеть разницу в качестве кода

Имя *:
Email *:
Код *: