Вставить столбец из нулей перед минимальным элементом матрицы - 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;
}
Объяснение кода листинга программы
В этом коде:
- Объявлены переменные: n, m, k, l.
- С помощью функции scanf считываются значения n и m.
- Создается матрица a размером n на (m+1).
- С помощью двух циклов for и функции scanf считываются значения элементов матрицы a.
- С помощью двух циклов for и функции printf выводятся значения элементов матрицы a.
- В цикле for проверяется, есть ли в матрице отрицательные числа. Если есть, то переменная k запоминает номер столбца с минимальным отрицательным числом.
- Если k не равно -1, то в цикле for и двух вложенных циклах for происходит перестановка элементов матрицы a так, чтобы слева от столбца с минимальным отрицательным числом были нули.
- Увеличивается значение m на единицу.
- С помощью двух циклов for и функции printf выводятся значения элементов измененной матрицы a.
- Возвращается 0, что означает успешный конец работы программы.