Перед первым столбцом матрицы, содержащим только положительные элементы, вставить столбец из единиц - 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
для вставки дополнительного столбца из единиц перед первым столбцом матрицы - Выводится на экран полученная матрица
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д