Iloczyn przekątnych dla dowolnie wybranego punktu w tablicy

0

"Dana jest tablica dwywymiarowa elementów całkowitych, gdzie liczba kolumn i wierszy jest
podana przez użytkownika ale mniejsza niż 10. Napisać program, który policzy iloczyn tych
elementów macierzy, które znajdują się na przekątnych przecinających się w punkcie o
współrzędnych (i, j) podanych przez użytkownika. Macierz wypełnić losowo wygenerowanymi
liczbami całokowitymi z przedziału <1 – 100>. Wymusić poprawność wprowadzanych danych."

Witajcie kochani mam taki problem, że program mi działa i zlicza iloczyn po danej przekątnej, ale w kilku przypadkach niestety wychodzi po za zakres.. mógłby ktoś mi poradzić co zmienić w kodzie , aby program działał poprawnie dla każdego dowolnie wybranego punktu przez użytkownika? ;) (Wybrałam generowanie liczby z zakresu 1-10, aby łatwiej było się doliczyc )

MÓJ KOD ;)

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	srand(time(NULL));
	int i,n,min,max,buf,j,w,k,punkt,punkt2,iloczyn2,iloczyn,iloczyn3;
	iloczyn=1;
	iloczyn2=1;
	iloczyn3=1;
	do
	{
	printf("Podaj ilosc wierszy	");
	scanf("%i",&w);
	}while(w<=0 || w>10);
	do
	{
	printf("Podaj ilosc kolumn	");
	scanf("%i",&k);
	}while(k<=0 || k>10);
	min=1;
	max=10;
	int tab[w][k];
	for(i=0;i<w;i++)
	{
		for(j=0;j<k;j++)
		{
		tab[i][j]=min+rand()%(max-min+1);
		printf("%i	",tab[i][j]);
		}
	printf(" \n");	
	}
	puts("PAMIETAJ PIERWSZY ELEMENT TABLICY TO [0][0]");
	do
	{
	printf("Podaj punkt od ktorego liczymy iloczyn po przekatnych");
	scanf("%i",&punkt);
	}while(punkt<0 || punkt>w-1);
	do
	{
	printf("Podaj drugi punkt od ktorego liczymy iloczyn po przekatnych");
	scanf("%i",&punkt2);
	}while(punkt2<0 || punkt2>k-1);
	j=punkt2;
	i=punkt;
	do
	{
		iloczyn=iloczyn*tab[i][j];
		j--;
		i--;
		printf("iloczyn = %i\n",iloczyn);
	}while(i>=0);
	i=punkt+1;
	j=punkt2+1;
	do
	{
		iloczyn2=iloczyn2*tab[i][j];
		j++;

		i++;
			printf("iloczyn2 = %i\n",iloczyn2);
	}while(i<k-1);
	iloczyn3=iloczyn*iloczyn2;
printf("Przekatna od lewej w doł %i",iloczyn3);

	j=punkt2;
	i=punkt;
	iloczyn=iloczyn2=iloczyn3=1;
	do
	{
		iloczyn=iloczyn*tab[i][j];
		j++;
		i--;
		printf("iloczyn = %i\n",iloczyn);
	}while(i>=0);
	i=punkt+1;
	j=punkt2-1;
	do
	{
		iloczyn2=iloczyn2*tab[i][j];
		j--;

		i++;
			printf("iloczyn2 = %i\n",iloczyn2);
	}while(i<=0);
	iloczyn3=iloczyn*iloczyn2;
printf("Przekatna od lewej w góre %i",iloczyn3);
	return 0;
}
1
  1. Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
  2. Zapoznaj się z inkrementacją bo jej nie rozumiesz: http://4programmers.net/Forum/1101404
  3. Padłeś ofiarą bezsensownego nazewnictwa
  4. W każdej pętli sprawdź czy nie wyszedłeś poza zakres chociażby jedną współrzędną. a jeszcze lepiej:
product=1;
for(size_t y=0;y<Y;++y) for(size_t x=0;x<X;++x) if(abs(sy-y)==abs(sx-x)) product*=tab[y][x];

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