Iloczyn przekątnych dla dowolnie wybranego punktu w tablicy

Odpowiedz Nowy wątek
2016-01-22 17:35
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;
}

Pozostało 580 znaków

2016-01-22 22:06
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];

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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