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