Untitled
unknown
c_cpp
2 years ago
3.2 kB
8
Indexable
#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;
}
Editor is loading...