Untitled

mail@pastecode.io avatarunknown
c_cpp
2 months ago
3.2 kB
0
Indexable
Never
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

// функция заполнения массива
void FillArr( int *a, const int n ); // int a[]
// функция вывода массива
void PrintArr( const int* a, const int r, const int c );
// функция поиска минимального в указанной строке
int GetMinRow( const int* a, const int c, const int numRow );
// функция сдвига столбца вниз
void ShiftLoopColDown(int* a, const int r, const int c, const int numCol);

int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const int rows = 5, cols = 6;
    const int size = rows * cols;

    // 1 4 5 6 2 0
    // 3 1 7 9 1 5
    // 0 4 2 8 6 3
    // 4 6 2 7 9 1
    // 3 1 7 9 1 8

    // 1 4 5 6 2 0     3 1 7 9 1 5     0 4 2 8 6 3     4 6 2 7 9 1     3 1 7 9 1 8
    // i = 1, j = 2
    // 8 = i * cols + j
    // i * cols = количество элементов во всех строках ДО строки с искомым элементом
    // + j = сколько элементов было ДО искомого элемента в ТЕКУЩЕЙ строке


    int arr[ size ];
    FillArr( arr, size );
    PrintArr( arr, rows, cols );

    // пользователь вводит НОМЕР строки для поиска минимального значения
    printf("введите номер строки в которой необходимо найти минимальный элемент: ");
    int numRow;
    scanf ("%d", &numRow);
    --numRow;
    printf("минимальное значение = %d\n", GetMinRow(arr, cols, numRow) );

    // пользователь вводит номер столбца, который необходимо сдвинуть циклически вниз
    printf("введите номер столбца, который необходимо сдвинуть циклически вниз: ");
    int numCol;
    scanf ("%d", &numCol);
    --numCol;

    PrintArr( arr, rows, cols );


    return 0;
}


void PrintArr( const int* a, const int r, const int c ) {
    int i, j;
    for( i = 0; i < r; ++i ) {
        for( j = 0; j < c; ++j )
            printf("%5d", a[ i * c + j ] );

        puts("");
    }

}

void FillArr( int *a, const int n ) {
    int i;
    for( i = 0; i < n; ++i )
        a[ i ] = rand() % 101 - 50;
}


int GetMinRow( const int* a, const int c, const int numRow ) {
    int minNum = a[ numRow * c ], i;
    for( i = 1; i < c; ++i )
        if ( a[ numRow * c + i ] < minNum )
            minNum = a [ numRow * c + i ];
    return minNum;
}

// 1 4 5 [6] 2 0
// 3 1 7 [9] 1 5
// 0 4 2 [8] 6 3
// 4 6 2 [7] 9 1
// 3 1 7 [9] 1 8
// 1 4 5 6 2 0     3 1 7 9 1 5     0 4 2 8 6 3     4 6 2 7 9 1     3 1 7 9 1 8
// 8 = i * cols + j

void ShiftLoopColDown(int* a, const int r, const int c, const int numCol) {
    int last = a[ ( r - 1 ) * c + numCol ], i; // 9
    for( i = r-1; i > 1; --i ) {
        a[  (i  * c) + numCol ] = a[ ((( i - 1 ) * c) + numCol) ];
    }
    a[ numCol ] = last;

}