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

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

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

Всем доброго времени суток, помогите люди добрые, закралась ошибка в мой код, никак не могу выявить. Задание видно из заголовка, матрица произвольная.
#include<stdio.h>
void main()
{
float M[5][5], k=0.00, h=1.00;
int x,y,b;
printf("\n Vvedite massiv: \n");
for(x=0;x<=4;x++)
   {
   for(y=0;y<=4;y++)
      {
      scanf("%f", &M[x][y]);           /*Vvod massiva                      */
      }
   }
 
for(y=0;y<=4;y++);
{
   for(x=0;x<=4;x++)
   {
   h=h*M[x][y];              /*Proizvedenie vsex elementov stolbca */
   }
printf("\n h = %f", h);              /*Otlado4naya pe4at'                  */
if(h>=k)                             /*esli proizvedenie predidushego stlbc*/
 {                                   /*bolshe chem proizvedenie dannogo    */
 k=h;                                /*prisvaivaem ego k*/
 b=y;                                /*zapisivaem nomer stolbca*/
 }
h=1;                                 /*sbros peremennoi h*/
}
     printf("\n Stolbec s maximalnim proizvedeniem - %d",b);
     printf("\n Ego proizvedenie = %f", k);
}
Неправильно высчитывает произведение и номер столбца, не могу понять почему Всем заранее спасибо, бобра, любви и тепла.

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

textual
Листинг программы
#include<stdio.h>
#include <stdlib.h>
 
int main()
{
    int const size = 3;
    float M[ size ][ size ], k = 0.00, h = 1.00;
    int x, y, b;
    printf ( "\n Vvedite massiv: \n" );
    for ( x = 0; x < size; ++x )
        for ( y = 0; y < size; ++y )
            scanf ( "%f", &M[ x ][ y ] );           /*Vvod massiva                      */
 
    for ( x = 0; x < size; ++x )
    {
       for ( y = 0; y < size; ++y )
            printf ( "%5f ", M[ x ][ y ] );
        puts("");
    }
    puts("");
 
    for ( y = 0; y < size; ++y )
    {
        for ( x = 0; x < size; ++x )
            h = h * M[ x ][ y ];                      /*Proizvedenie vsex elementov stolbca */
 
        printf ( "\n h = %f", h );              /*Otlado4naya pe4at'                  */
        if ( h >= k )
        {                                   /*bolshe chem proizvedenie dannogo    */
            k = h;                                /*prisvaivaem ego k*/
            b = y;                                /*zapisivaem nomer stolbca*/
        }
        h = 1;                                 /*sbros peremennoi h*/
    }
    printf ( "\n Stolbec s maximalnim proizvedeniem - %d", b );
    printf ( "\n Ego proizvedenie = %f", k );
    exit(EXIT_SUCCESS);
}

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

  1. Объявлены переменные:
    • size - размер матрицы (3);
    • M[size][size] - матрица (3x3);
    • k - общее произведение столбца;
    • h - текущее произведение столбца;
    • x, y, b - счётчики для циклов.
  2. Ввод матрицы с помощью цикла и функции scanf.
  3. Вывод матрицы на экран с помощью цикла и функции printf.
  4. Инициализация h произведением первого элемента каждого столбца.
  5. Цикл по всем столбцам (y) и внутренний цикл по всем элементам столбца (x). Внутренний цикл вычисляет произведение элементов текущего столбца и присваивает его переменной h.
  6. Если произведение текущего столбца больше k, то обновляем k и b (номер столбца).
  7. После внутреннего цикла сбрасываем h в 1.
  8. После цикла по всем столбцам выводим на экран номер столбца с максимальным произведением и его произведение.
  9. Выход из программы с помощью функции exit.

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


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

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

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