Вставить столбец из нулей перед минимальным элементом матрицы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Написал прогу которая находит в матрице минимальный элемент и вставляет перед ним столбец из нулей. Прога работает, но не совсем верно: первая строка выводиться нормально, а остальные начинаются с последнего элемента предыдущей строки причем дальше строка выводится нормально (т.е. что-то не то с выводом первого столбца).
{
    int n,m,i,j;
    printf("Vvedite razmer matrizi N*M: \n");
    scanf("%d %d", &n, &m);
    double a[n][m], b[n][m];
     for(i=0; i<n; i++) 
        for(j=0; j<m; j++) 
            scanf("%lf", &a[i][j]);
    int min = a[0][0];
    int imin = 0;
        for(int i=0; i<n; i++)
            for(int j=0; j<m; j++)  {
                if(min > a[i][j]) {min = a[i][j]; imin = j;}
                }
 
        for(int i=0; i<n; i++) 
            for(int j=0; j<imin; j++) 
                b[i][j]=a[i][j];
        for(int i=0; i<n; i++)
            for(int j=imin; j<imin+1; j++)
                b[i][j]=0;
        for(int i=0; i<n; i++)
            for(int j=imin+1; j<m+1; j++)
                b[i][j]=a[i][j-1];
 
    for(i=0; i<n; i++) {
        for(j=0; j<m+1; j++)
            printf("%2.1lf ", b[i][j]);
              printf("\n");
            }
    return 0;
}

Решение задачи: «Вставить столбец из нулей перед минимальным элементом матрицы»

textual
Листинг программы
#include <stdio.h>
 
int main(int argc, char *argv[])
{
    int n,m,k=-1,l;
    printf("Vvedite stroki and stolbcy ");
    scanf("%d",&n);
    scanf("%d",&m);
    int a[n][m+1];
    printf("Vvedite matrix\n");
    for (int i=0;i<n;i++)
        for (int j=0;j<m;j++)
        {
            printf("a[%d][%d]=",i+1,j+1); 
            scanf("%d",&a[i][j]);
        }
    for (int i=0;i<n;i++)
        {
            for (int j=0;j<m;j++) 
            printf("%3d",a[i][j]);
            printf("\n");
        }
    for (int j=0;j<m;j++)
        {
            l=1; 
            for (int i=0;i<n;i++) 
                if (a[i][j]>=0) 
                    l=0;
                else
                { 
                    k=j;
                }
        }
            if (k!=-1) 
            {
                for (int i=0;i<n;i++)
                { 
                    for (int j=m;j>k;j--) 
                    a[i][j]=a[i][j-1];
                    a[i][k+1]=0; 
                }
                    m++;
            }
    printf("\n");
    for (int i=0;i<n;i++)
        {
            for (int j=0;j<m;j++) 
            printf("%3d",a[i][j]);
            printf("\n");
        }
    return 0;
}

Объяснение кода листинга программы

В этом коде:

  1. Объявлены переменные: n, m, k, l.
  2. С помощью функции scanf считываются значения n и m.
  3. Создается матрица a размером n на (m+1).
  4. С помощью двух циклов for и функции scanf считываются значения элементов матрицы a.
  5. С помощью двух циклов for и функции printf выводятся значения элементов матрицы a.
  6. В цикле for проверяется, есть ли в матрице отрицательные числа. Если есть, то переменная k запоминает номер столбца с минимальным отрицательным числом.
  7. Если k не равно -1, то в цикле for и двух вложенных циклах for происходит перестановка элементов матрицы a так, чтобы слева от столбца с минимальным отрицательным числом были нули.
  8. Увеличивается значение m на единицу.
  9. С помощью двух циклов for и функции printf выводятся значения элементов измененной матрицы a.
  10. Возвращается 0, что означает успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5
Похожие ответы