Консультация № 188452
18.12.2015, 19:23
0.00 руб.
0 2 1
Доброго времени суток! Уважаемые эксперты! У меня возникла проблема с написанием программы. Условие: Дана матрица размера M × N. Найти номер ее столбца с наименьшим произведением элементов и вывести данный номер, а также значение наименьшего произведения.
Заранее спасибо!

Обсуждение

давно
Посетитель
399277
11
18.12.2015, 19:25
общий
19.12.2015, 02:55
Код:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{ SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int i,j,m,n;
printf("Введите количество строк в матрице : ");
scanf("%d",&m);
printf("Введите количество столбцов в матрице : ");
scanf("%d",&n);
if (m<=0 || n<=0)
{
printf("Были указаны неправильные значения\n");
system("pause");
return 0;
}
//Заполнение массива случайными числами
int A[m][n];
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
A[i][j]=-10 + rand()%56;
printf("%3d ", A[i][j]);
}
printf("\n");
}
int jmin;
int p, pmin;
for (j=1;j<m;j++){
for(i=1;i<n;i++){
p*=A[i][j];
if (i==1)
pmin=p;
else if (p<pmin){
pmin=p;
jmin=j;
}
printf("%3d",p);
}
printf("\n");
}
system("pause");
printf("Минимальное произведение: %d", pmin);
printf("\nИндекс столбца: %d", jmin);
return 0;
}

ps:исползуйте кнопку код. К. Зенченко
давно
Посетитель
7438
7205
20.12.2015, 17:11
общий
это ответ
Здравствуйте, fridge!
Смотрите мой вариант.
[code h=200]
/*
Дана матрица размера M х N.
Найти номер ее столбца с наименьшим произведением элементов
и вывести данный номер, а также значение наименьшего произведения
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

#include <time.h>
#include <malloc.h>
#include <conio.h>

//функция нахождения произведения столбца col матрицы matrix[rows,cols]
int mul(int *matrix, int col, int rows, int cols)
{
int i;
int p=1; // произведение
for(i=0; i<rows; i++) // по строкам
p *= matrix[i*cols+col];
return p;
}

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

int i,j,m,n;

printf("Введите количество строк в матрице : ");
scanf("%d",&m);
printf("Введите количество столбцов в матрице : ");
scanf("%d",&n);

if (m<=0 || n<=0)
{
printf("Были указаны неправильные значения\n");
system("pause");
return 0;
}

srand(time(NULL)); //инициируем генератор псевдослучайных чисел

//так как m и n вводятся, то матрицу строим динамически в куче
// причем строим как одномерный массив. Доступ к элеменам по формуле
// A[row*colmax+col]
int *A = (int*)malloc(m*n*sizeof(int));

//Заполнение массива случайными числами
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
A[i*n+j] = rand()%10 + 1; //числа возьмем не очень большими, чтобы умножение "не зашкалило"
printf("%3d ", A[i*n+j]); // +1, чтобы убрать 0
}
printf("\n");
}
int jmin = 0;
int p;
int pmin = mul(A, 0, m, n); //произведение первого (0-го) столбца считаем минимальным

for (j=1; j<n; j++) //по всем остальным столбцам
{
p = mul(A, j, m, n); //считаем произведение
if (p<pmin) //ищем минимальное произведение
{
pmin = p;
jmin = j;
}
}

printf("Минимальное произведение: %d", pmin);
printf("\nНомер столбца: %d\n", jmin+1); //+1, чтобы нумеровать с 1
system("pause");
free(A); //освобождаем память
return 0;
}
[/code]
5
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа