Тема: Допоможіть з функціями підпрограми в С

У мене задано 2 матриці А(4,4) та Е(3,3). Потрібно знайти добуток елементів, які лежать вище головної діагоналі. Пошук добутку оформити у вигляді підпрограми. На друк вивести вхідні матриці та результат.
Я написав код, але не знав як написати цю функцію добутку, тому взяв з С++, але не знаю як переписати останній рядок, хоча можливо ще є помилки.

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int A[4][4], E[3][3];
int main()
{
    printf("Вхідна матриця A\n");
    srand(time(NULL));
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            A[i][j] = (rand() % 10) + 1;
            printf("%i\t", A[i][j]);
        } ;
        printf("\n");
        
    }
    int mult = 1;
    for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
      mult = j > i ? mult * A[i][j] : mult;
    }
  }
    printf("Добуток А: \n", mult);

    printf("Вхідна матриця E\n");
    srand(time(NULL));
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            E[i][j] = (rand() % 10) + 1;
            printf("%i\t", E[i][j]);
        } ;
        printf("\n");
    
} 
    int multi = 1;
    for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
      multi = j > i ? multi * E[i][j] : multi;
    }
  }
    printf("Добуток Е: \n", multi);
}

2

Re: Допоможіть з функціями підпрограми в С

Я трохи виправив код, тепер так. Але все одно не працює(

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int A[4][4], E[3][3];
int main()
{
    printf("Вхідна матриця A\n");
    srand(time(NULL));
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            A[i][j] = (rand() % 10) + 1;
            printf("%i\t", A[i][j]);
        } ;
        printf("\n");
        
    }
    int mult = 1;
    for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
      if (mult == j > i) {
      mult * A[i][j];
          
      }
    }
  }
    printf("Добуток А: \n", mult);

    printf("Вхідна матриця E\n");
    srand(time(NULL));
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            E[i][j] = (rand() % 10) + 1;
            printf("%i\t", E[i][j]);
        } ;
        printf("\n");
    
} 
    int multi = 1;
    for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
      if (multi == j > i) {
      multi * E[i][j]; 
          
      }
    }
  }
    printf("Добуток Е: \n", multi);
}

3

Re: Допоможіть з функціями підпрограми в С

stovbanolexandr написав:

У мене задано 2 матриці А(4,4) та Е(3,3). Потрібно знайти добуток елементів, які лежать вище головної діагоналі. Пошук добутку оформити у вигляді підпрограми. Вивести вхідні матриці та результат.
Я написав код, але не знав як написати цю функцію добутку, тому взяв з С++, але не знаю як переписати останній рядок, хоча можливо ще є помилки.

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int A[4][4], E[3][3];
int main()
{
    printf("Вхідна матриця A\n");
    srand(time(NULL));
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            A[i][j] = (rand() % 10) + 1;
            printf("%i\t", A[i][j]);
        } ;
        printf("\n");
        
    }
    int mult = 1;
    for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
      mult = j > i ? mult * A[i][j] : mult;
    }
  }
    printf("Добуток А: \n", mult);

    printf("Вхідна матриця E\n");
    srand(time(NULL));
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            E[i][j] = (rand() % 10) + 1;
            printf("%i\t", E[i][j]);
        } ;
        printf("\n");
    
} 
    int multi = 1;
    for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
      multi = j > i ? multi * E[i][j] : multi;
    }
  }
    printf("Добуток Е: \n", multi);
}

4

Re: Допоможіть з функціями підпрограми в С

Напишіть хоч щось...

5

Re: Допоможіть з функціями підпрограми в С

https://replace.org.ua/post/147585/

6

Re: Допоможіть з функціями підпрограми в С

Я студент, вивчаю С. У мене завдання. У мене задано 2 матриці А(4,4) та Е(3,3). Потрібно знайти добуток елементів, які лежать вище головної діагоналі. Пошук добутку оформити у вигляді підпрограми. Вивести вхідні матриці та результат.

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int A[4][4], E[3][3];
int main()
{
    printf("Вхідна матриця A\n");
    srand(time(NULL));
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            A[i][j] = (rand() % 10) + 1;
            printf("%i\t", A[i][j]);
        } ;
        printf("\n");
        
    }
    int mult = 1;
    for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
      if (mult == j > i) {
      mult = mult * A[i][j];
          
      }
    }
  }
    printf("Добуток А: \n", mult);

    printf("Вхідна матриця E\n");
    srand(time(NULL));
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            E[i][j] = (rand() % 10) + 1;
            printf("%i\t", E[i][j]);
        } ;
        printf("\n");
    
} 
    int multi = 1;
    for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
      if (multi == j > i) {
      multi = multi * E[i][j]; 
          
      }
    }
  }
    printf("Добуток Е: \n", multi);
}

Компілятор видає:

main.c:27:12: warning: too many arguments for format [-Wformat-extra-args]
   27 |     printf("Добуток А: \n", mult);
      |            ^~~~~~~~~~~~~~~~~~~~~~~
main.c:48:12: warning: too many arguments for format [-Wformat-extra-args]
   48 |     printf("Добуток Е: \n", multi);
      |            ^~~~~~~~~~~~~~~~~~~~~~~
Вхідна матриця A
10      3       9       2
5       8       1       1
5       3       4       1
10      4       1       6
Добуток А: 
Вхідна матриця E
10      3       9
2       5       8
1       1       5
Добуток Е: 

Що робити?

7 Востаннє редагувалося mamkin haker (24.01.2022 18:09:05)

Re: Допоможіть з функціями підпрограми в С

8

Re: Допоможіть з функціями підпрограми в С

можете хоча б сказати чи все добре з функцією?

9 Востаннє редагувалося mamkin haker (24.01.2022 18:06:11)

Re: Допоможіть з функціями підпрограми в С

10

Re: Допоможіть з функціями підпрограми в С

то я правильно "запрограмував" множення вище головної діагоналі у матриці? значить проблема тільки у printf?

11 Востаннє редагувалося mamkin haker (24.01.2022 18:06:02)

Re: Допоможіть з функціями підпрограми в С

12

Re: Допоможіть з функціями підпрограми в С

Для того, щоби дізнатися чи правильно ви запрограмували множення елементів вище головної діагоналі сперше зробіть людський вивід результатів, потім на декількох прикладах порівняйте отрмані результати з потрібними вам. Якщо вони відрізняються, значить функція працює неправильно. Ви маєте знати чи правильно працює ваша функція, а не ми чи одногрупники.

Подякували: leofun011

13

Re: Допоможіть з функціями підпрограми в С

я зробив, виводить постійно 10, не розумію чому

14

Re: Допоможіть з функціями підпрограми в С

stovbanolexandr написав:

Компілятор видає:

main.c:27:12: warning: too many arguments for format [-Wformat-extra-args]
   27 |     printf("Добуток А: \n", mult);
      |            ^~~~~~~~~~~~~~~~~~~~~~~
main.c:48:12: warning: too many arguments for format [-Wformat-extra-args]
   48 |     printf("Добуток Е: \n", multi);
      |            ^~~~~~~~~~~~~~~~~~~~~~~
Вхідна матриця A
10      3       9       2
5       8       1       1
5       3       4       1
10      4       1       6
Добуток А: 
Вхідна матриця E
10      3       9
2       5       8
1       1       5
Добуток Е: 

Що робити?


Якщо ви хочете передати в текст integer, то варто це вказати в самому тексті:

printf("Добуток А: %d\n", mult);

Глядіть у документацію.

Подякували: mamkin haker, stovbanolexandr, koala3

15

Re: Допоможіть з функціями підпрограми в С

stovbanolexandr написав:

я зробив, виводить постійно 10, не розумію чому

У вас там, здається, ваші printf'и, які кидають помилку, поза for loop'ами, після них, тому видають число тільки з останньої ітерації циклу.

16

Re: Допоможіть з функціями підпрограми в С

Я помилився, виводить не 10, а 2 елемент матриці, проблема у функції, але яка?

17

Re: Допоможіть з функціями підпрограми в С

Варто розібратися з тим як працює printа та цикли. Також пораджу оформлювати код в одному стилі, це набагато полегшує читання й розробку.

Виводило однакові результати множення, бо srand(NULL) сідувало за поточну секунду, а програмка біжить менше, ніж за секунду, отже, «випадкові» числа однакові. Я додав sleep(), однак певен, що ви знайдете ліпший спосіб.

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <unistd.h>

int A[4][4], E[3][3];
int main()
{
  printf("Вхідна матриця A\n");
  srand(time(NULL));
  for (int i = 0; i < 4; i++)
  {
    for (int j = 0; j < 4; j++)
    {
      A[i][j] = (rand() % 10) + 1;
      printf("%i\t", A[i][j]);
    }
    printf("\n");
  }

  int mult = 1;
  printf("Добуток А: \n");
  for (int i = 0; i < 4; i++)
  {
    for (int j = 0; j < 4; j++)
    {
      if (mult == j && mult > i)
      {
        mult = mult * A[i][j];
        printf("%i\n", mult);
      }
    }
  }

  sleep(1);
  printf("Вхідна матриця E\n");
  srand(time(NULL));
  for (int i = 0; i < 3; i++)
  {
    for (int j = 0; j < 3; j++)
    {
      E[i][j] = (rand() % 10) + 1;
      printf("%i\t", E[i][j]);
    }
    printf("\n");
  }

  int multi = 1;
  printf("Добуток Е: \n");
  for (int i = 0; i < 3; i++)
  {
    for (int j = 0; j < 3; j++)
    {
      if (multi == j && multi > i)
      {
        multi = multi * E[i][j];
        printf("%i\n", multi);
      }
    }
  }

}

18

Re: Допоможіть з функціями підпрограми в С

Також, замінив mult == j > i та аналогічне на mult == j && mult > i. Не тямлю вашого технічного завдання.

19

Re: Допоможіть з функціями підпрограми в С

десь у вас помилка, бо воно як виводило 2ий елемент матриці у добутку, так і далі виводить

20

Re: Допоможіть з функціями підпрограми в С

О, глянув C++ код і стало дещо зрозуміліше:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int A[4][4], E[3][3];
int main()
{
  printf("Вхідна матриця A\n");
  srand(time(NULL));
  for (int i = 0; i < 4; i++)
  {
    for (int j = 0; j < 4; j++)
    {
      A[i][j] = (rand() % 10) + 1;
      printf("%i\t", A[i][j]);
    }
    printf("\n");
  }

  int mult = 1;
  printf("Добуток А: \n");
  for (int i = 0; i < 4; i++)
  {
    for (int j = 0; j < 4; j++)
    {
      if (j > i)
      {
        mult = mult * A[i][j];
        printf("%i\n", mult);
      }
      else
      {
        printf("%i\n", mult);
      }
    }
  }

  printf("Вхідна матриця E\n");
  srand(time(NULL));
  for (int i = 0; i < 3; i++)
  {
    for (int j = 0; j < 3; j++)
    {
      E[i][j] = (rand() % 10) + 1;
      printf("%i\t", E[i][j]);
    }
    printf("\n");
  }

  int multi = 1;
  printf("Добуток Е:\n");
  for (int i = 0; i < 3; i++)
  {
    for (int j = 0; j < 3; j++)
    {
      if (j > i)
      {
        multi = multi * E[i][j];
        printf("%i\n", multi);
      }
      else
      {
        printf("%i\n", multi);
      }
    }
  }

}