Suma sąsiednich elementów - podpowiedź

0

Najpierw napisze treść zadania.
a) Wczytaj macierz A liczb całkowitych (max.dwucyfrowych o 4 wierszach i 5 kolumnach i wydrukuj ją (zachowując wyrównanie liczb w kolumnach).
b)Dla każdego elementu macierzy A wyznacz sumę jego sąsiednich elementów (istnieją max. 4 elementy sąsiednie: u góry, u dołu, z lewej i z prawej). Uwaga dla skrajnych elementów sumowaniu podlegają 3, a niekiedy 2 elementy sąsiednie, nie wolno odwoływać się do nieistniejących elementów tablicy, programista jest odpowiedziallny za sprawdzanie i nie wykraczanie poza tablicę.

Przykład w załączniku.

 
#include <stdio.h>
int main()
{
    int A[4] [5];
    int i, j;

    for(i=0;i<4;i++) //petla zewnetrzna
        for(j=0;j<5;j++) //petla wewnetrzna
        {
            printf("\nPodaj element macierzy [%d.%d]: ", i,j);
            scanf("%3d", &A[i][j]);
        }

    printf("\nMacierz oryginalna:\n");
    for(i=0;i<4;i++)
    {
        for(j=0;j<5;j++)
            printf("%3d", A[i][j]);
        printf("\n");
    }

    for(i=0;i<4;i++)
    {
        for(j=0;j<5;j++)
        {
            //dalsze instrukcje
            if(i==0 && j==0) //ten warunek jest chyba dobrze
            {
                A[i][j]=A[i][j+1]+A[i+1][j];
            }
            else if(i>0 && i<4)//tutaj nie wiem jak dalej pisać warunki i wyliczać te wartości
            {
                if(j>0 && j<4)
                    A[i][j]=A[i-1][j-1]+A[i+1][j+1]+A[i+2][j];
            }

        }
        printf("\n");
    }
    printf("\nMacierz sum sasiednich elementow:\n");
    for(i=0;i<4;i++)
    {
        for(j=0;j<5;j++)
            printf("%3d", A[i][j]);
        printf("\n");
    }

    getch();
    return 0;
}

Jak zapisać kolejne warunki i które liczby dodawać? Czy może jest jakiś prostszy sposób na to? Będę wdzięczny za każdą wskazówkę.

0

jak chcesz to zrobić prościej to macierz wejściową przechowuj jako macierz o 1 większą z każdej strony, na brzegach wypełnioną zerami. wtedy będziesz miał zawsze elementy istniejące po każdej stronie (oczywiście jak będziesz iterować w zakresie 1..wymiar)

1
#include <stdio.h>
int main(int argc, char **argv)
{
        int A[4][5];
        int i, j, suma;
 
        for(i=0; i<4; i++)
                for(j=0; j<5; j++)
                {
                        printf("Podaj element (%d, %d) macierzy A: ", i, j);
                        scanf("%d", &A[i][j]);
                }
 
        for(i=0; i<4; i++)
        {
                for(j=0; j<5; j++)
                {
                        printf("%d  ", A[i][j]);
                }
                printf("\n");
        }
 
        for(i=0; i<4; i++)
        {
                for(j=0; j<5; j++)
                {        
                        suma = 0;
 
                        if(i>0)
                                suma+= A[i-1][j];
                        if(i<3)
                                suma+=A[i+1][j];
                        if(j>0)
                                suma+=A[i][j-1];
                        if(j<4)
                                suma+=A[i][j+1];
 
                        printf("suma sasiednich elementow elementu (%d, %d) = %d\n", i, j, suma);
                }                
        }
 
        return 0;
 
}
0

Ujemny niestety, ale chyba Twój kod nie jest poprawny. Wprowadziłem liczby z przykładu i program wyświetla inne wyniki niż powinien.

0

Mam jeszcze pytanie odnośnie różnicy między if, a else if. Dlaczego, gdy warunki są w if program liczy dobrze, a gdy zamienię kolejne if na else if, program już wyświetla dziwne wyniki. Na czym polega ta różnica?

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