Перед первым столбцом матрицы, содержащим только положительные элементы, вставить столбец из единиц - C (СИ)
Формулировка задачи:
Дана матрица размера M × N. Перед первым столбцом, содержащим только положительные элементы, вставить столбец из единиц. Если требуемых столбцов нет, то вывести матрицу без изменений.
Уже 5 часов не могу доделать программу, подскажите пожалуйста. Столбец с положительными элементами нахожу, а вставить столбец из единиц не могу. Пытался сделать через дополнительную матрицу, вот код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
int main()
{
setlocale(LC_CTYPE,"Russian");
printf("Введите размер матрицы N = ");
int N,M;
srand(time(NULL));
scanf("%d",&N);
if(N<2){
printf("В матрице должно быть минимум 2 строки!");
return 0;
}
printf("Введите размер матрицы M = ");
scanf("%d",&M);
int arr[N][M];
int i,j;
///Initialize
printf("Ввести матрицу вручную или автоматически?\n1. Вручную\n2. Автоматически\n");
int sw;
scanf("%d",&sw);
if(sw == 2){
for(i=0;i<=N-1;i++){
for(j=0;j<=M-1;j++){
arr[i][j] = rand()/400-20;
}
}
} else {
printf("\nВведите элементы матрицы:\n");
for(i=0;i<=N-1;i++){
for(j=0;j<=M-1;j++){
scanf("%d",&arr[i][j]);
}
}
}
printf("\nПервоначальная матрица:\n");
///M - строки N - столбцы
///Вывод первоначальной матрицы
for(i=0;i<=N-1;i++){
printf("\n");
for(j=0;j<=M-1;j++){
printf("%3d ",arr[i][j]);
}
}
///program
///-------------------поиск столбца с положительными членами------------------
int current = 0,z=0,stl = -1;
for(j=0;j<M;j++){
for(i=0;i<N;i++){
if(arr[i][j]>0 && current == j){
z++;///Если строка одна и элемент больше нуля увеличиваем счётчик
if(z == N){ ///z == N-1 если счётчик равен количеству элементов столбца
stl = j; ///Присваиваем номер столбца в котором все члены положительны
break;
}
}
if(i == N-1){///если последняя итерация то увеличиваем строку на 1
current++;
z = 0;
}
}
}
printf("Положительные члены в %d столбце",stl);
///---------------нашли столбец и засунули в stl------------------------
int siz = M+1;
int narr[N][siz];
int temp;
int k = 1; ///Счётчик для сдвига матрицы
if(stl != -1){
printf("\nНовая матрица:\n");
for(i=0;i<N;i++){
for(j=0;j<siz;j++){
narr[i][j] = 1; ///заполняем массив единицами
}
}
j = 0;
for(i=0;i<N;i++){
for(j=0;j<siz;j++){
if(j == stl){
narr[i][j] = arr[i][stl];
narr[i][j+1] = arr[i][stl];
///j+=2;
continue;
///narr[i][j] = arr[i][j]; ///заполняем массив таким же массивом кроме последнего столбца
///printf("\n--------\n%d\n--------\n",narr[i][j+1]);
}
}
}
for(i=0;i<N;i++){
for(j=0;j<siz;j++){
/**if(j == stl && stl == 0){
temp = narr[i][j];
narr[i][j] = narr[N-1][siz-1];
narr[i][j+1] = temp;
continue;
}
if(j == stl){
temp = narr[i][j];
narr[i][j] = narr[N-1][siz-1];
narr[i][j+1] = temp;
}
*/
}
k++;
}
for(i=0;i<N;i++){
printf("\n");
for(j=0;j<siz;j++){
printf("%3d ",narr[i][j]);
}
}
} else {
for(i=0;i<=N-1;i++){
printf("\n");
for(j=0;j<=M-1;j++){
printf("%3d ",arr[i][j]);
}
}
}
return 0;
}Решение задачи: «Перед первым столбцом матрицы, содержащим только положительные элементы, вставить столбец из единиц»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#define M 10
#define N 3
int matrix_insert(int mat[N][M], int m){
int i, j, a, b;
for(j = 0; j < m; ++j){
i = 0;
while((i < N) && (mat[i][j] > 0))
++i;
if(i == N){
for(a = 0; a < N; ++a){
for(b = m; b > j; --b)
mat[a][b] = mat[a][b - 1];
mat[a][b] = 1;
}
++m;
++j;
}
}
return m;
}
int main(void){
int i, j, m;
int mat[N][M];
m = M / 2;
for(i = 0; i < N; ++i){
for(j = 0; j < m; ++j)
mat[i][j] = ((rand() % 10) < 7) ? (2 + rand() % 3) : -(2 + rand() % 3);
}
m = matrix_insert(mat, m);
for(i = 0; i < N; ++i){
for(j = 0; j < m; ++j)
printf("% 2d ", mat[i][j]);
putchar('\n');
}
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с массивами и вводом-выводом
- Объявление матрицы с фиксированным размером
- Определение функции, которая будет вставлять дополнительный столбец из единиц перед первым столбцом матрицы
- В функции
mainсоздается матрица случайных чисел - Вызывается функция
matrix_insertдля вставки дополнительного столбца из единиц перед первым столбцом матрицы - Выводится на экран полученная матрица