Problem z wyznaczeniem iloczynu elementów macierzy

0

Witam wszystkich serdecznie! Od wczoraj głowię się nad pewnym problemem, do którego nie mogę dojść. Treść zadania wygląda następująco:
Dla macierzy A[m]x[n] elementów całkowitych (m, n <10) wyznaczyć iloczyn tych elementów macierzy, które znajdują się na przekątnych przecinających się w punkcie o współrzędnych (x, y) podanych przez użytkownika. Użytkownik przy uruchomieniu programu jest pytany o rozmiar macierzy (m, n). W przypadku podania rozmiaru macierzy większych od 10 (m, n >10) program ponawia pytanie o rozmiar macierzy.

Dla lepszego zrozumienia problemu przesyłam zdjęcie:
title

Mój obecny kod wygląda następująco:

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

void wypelnijMacierz(int tab[][10], int m, int n)
{
    int min = 1, max = 10;
    int i, j;
    for(i=0; i<m; i++)
    {
        for(j=0; j<n; j++)
        {
            tab[i][j] = rand() % (max - min + 1) + min;
        }
    }
}

void wyswietlMacierz(int tab[][10], int m, int n)
{
    int i, j;
    for(i=0; i<m; i++)
    {
        for(j=0; j<n; j++)
        {
            printf("%d\t", tab[i][j]);
            if(j==(n-1)) printf("\n");
        }
    }
}

int obliczIloczyn(int tab[][10], int m, int n, int x, int y)
{
    int lewa_przekatna = 1, prawa_przekatna = 1;
    int wynik = 0, i, j;

    do {
        lewa_przekatna = lewa_przekatna * tab[x-1][y-1];
        x++;
        y++;
    } while(m-n == x-y);

    do {
        prawa_przekatna = prawa_przekatna * tab[x+1][y-1];
        x--;
        y++;
    } while(m+n == x+y);

    wynik = lewa_przekatna * prawa_przekatna;
    return wynik;
}

int main()
{
    srand(time(NULL));
    int m, n, x, y, tab[10][10];
    printf("Podaj ilosc wierszy macierzy A: ");
    scanf("%d", &m);
    printf("Podaj ilosc kolumn macierzy A: ");
    scanf("%d", &n);
    printf("\n");

    if(m<10 && n<10)
    {
        wypelnijMacierz(tab, m, n);
        wyswietlMacierz(tab, m, n);
        printf("\nPodaj wspolrzedna x macierzy A: ");
        scanf("%d", &x);
        printf("Podaj wspolrzedna y macierzy A: ");
        scanf("%d", &y);
        if(x<=m && y<=n)
        {
            printf("\nIloczyn tych przekatnych wynosi: %d",obliczIloczyn(tab, m, n, x, y));
        }
        else
        {
            system("cls");
            printf("Podales zbyt duze wspolrzedne!\n");
        }
    }
    else
    {
        while(m>10 || n>10)
        {
            printf("Podaj ponownie ilosc wierszy macierzy A (<10!): ");
            scanf("%d", &m);
            printf("Podaj ponownie ilosc kolumn macierzy A (<10!): ");
            scanf("%d", &n);
        }
    }   
}

Czy jest może ktoś, kto pomógłby mi w rozwiązaniu tego problemu?

0

Problem masz w funkcji: obliczIloczyn. Nie iterujesz tam po wszystkich elementach.

Napisałem kod, który wyświetla wszystkie punkty leżące na przekątnych przechodzących przez podany punkt:

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

#define SIZE_X 10
#define SIZE_Y 10

int main(int argc, char *argv[]) {

  if (argc != 3) {
    fprintf(stderr, "Usage: %s x y.\n", argv[0]);
    exit(EXIT_FAILURE);
  }

  unsigned int x = strtoul(argv[1], NULL, 10);
  unsigned int y = strtoul(argv[2], NULL, 10);

  if (errno == ERANGE || x >= SIZE_X || y >= SIZE_Y) {
    fprintf(stderr, "Input values out of range.\n");
    exit(EXIT_FAILURE);
  }

  for (unsigned int i = x, j = y; i < SIZE_X && j < SIZE_Y; ++i, ++j)
    printf("(%u, %u)\n", i, j);
  for (unsigned int i = x, j = y; i > 0 && j > 0; )
    printf("(%u, %u)\n", --i, --j);
  for (unsigned int i = x + 1, j = y; i < SIZE_X && j > 0; ++i)
    printf("(%u, %u)\n", i, --j);
  for (unsigned int i = x, j = y + 1; i > 0 && j < SIZE_Y; ++j)
    printf("(%u, %u)\n", --i, j);

  return EXIT_SUCCESS;
}
0

Teraz już wszystko jasne, faktycznie nie iterowałem tego element po elemencie, dziękuję!

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0