Sumowanie kolumn w macierzy 5x5

Sumowanie kolumn w macierzy 5x5
M9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 54
0

Jak obliczyć sumy bo mi źle pokazuje wynik? Gdzieś mam błąd :/

Kopiuj
#include <stdio.h>

int main() {
    int a[5] = {0, 0, 0, 0, 0};
    int b[5] = {0, 0, 0, 0, 0};
    int c[5] = {0, 0, 0, 0, 0};
    int d[5] = {0, 0, 0, 0, 0};
    int e[5] = {0, 0, 0, 0, 0};
    int i, a6 = 0, b6 = 0, c6 = 0, d6 = 0, e6 = 0, k1 = 0, k2 = 0, k3 = 0,
           k4 = 0, k5 = 0;
    printf("\nPodaj 1. wiersz: ");
    for (i = 1; i <= 5; i++) {
        scanf("%d", &a[5]);
    }
    printf("\nPodaj 2. wiersz: ");
    for (i = 1; i <= 5; i++) {
        scanf("%d", &b[5]);
    }
    printf("\nPodaj 3. wiersz: ");
    for (i = 1; i <= 5; i++) {
        scanf("%d", &c[5]);
    }
    printf("\nPodaj 4. wiersz: ");
    for (i = 1; i <= 5; i++) {
        scanf("%d", &d[5]);
    }
    printf("\nPodaj 5. wiersz: ");
    for (i = 1; i <= 5; i++) {
        scanf("%d", &e[5]);
    }
    a6 = a[1] + a[2] + a[3] + a[4] + a[5];
    b6 = b[1] + b[2] + b[3] + b[4] + b[5];
    c6 = c[1] + c[2] + c[3] + c[4] + c[5];
    d6 = d[1] + d[2] + d[3] + d[4] + d[5];
    e6 = e[1] + e[2] + e[3] + e[4] + e[5];
    k1 = a[1] + b[1] + c[1] + d[1] + e[1];
    k2 = a[2] + b[2] + c[2] + d[2] + e[2];
    k3 = a[3] + b[3] + c[3] + d[3] + e[3];
    k4 = a[4] + b[4] + c[4] + d[4] + e[4];
    k5 = a[5] + b[5] + c[5] + d[5] + e[5];
    printf("Sumy w wierszach: %d %d %d %d %d", a6, b6, c6, d6, e6);
    printf("Sumy w kolumnach: %d %d %d %d %d", k1, k2, k3, k4, k5);
    return 0;
}
M9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 54
0

Chyba już wiem wstawiam tablice [4] i jest od a0 do a4 czyli 5. Czy dobrze myślę i wtedy zmieniam. Zmieniłem i nadal mi nie sumuje tak jak trzeba?

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
2

https://godbolt.org/z/cYoEEb17T

Kopiuj
<source>: In function 'main':
<source>:31:39: error: array subscript 5 is above array bounds of 'int[5]' [-Werror=array-bounds=]
   31 |     a6 = a[1] + a[2] + a[3] + a[4] + a[5];
      |                                      ~^~~
<source>:4:9: note: while referencing 'a'
    4 |     int a[5] = {0, 0, 0, 0, 0};
      |         ^
<source>:32:39: error: array subscript 5 is above array bounds of 'int[5]' [-Werror=array-bounds=]
   32 |     b6 = b[1] + b[2] + b[3] + b[4] + b[5];
      |                                      ~^~~
<source>:5:9: note: while referencing 'b'
    5 |     int b[5] = {0, 0, 0, 0, 0};
      |         ^

Kwiatków jest więcej, bo są takie co kompilator nie wykrywa.

Kopiuj
    for (i = 1; i <= 5; i++) {
        scanf("%d", &a[5]);
    }
złoty
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 115
2

Tablice w C są indeksowane od 0, to apropos sumowania:

Kopiuj
    a6 = a[1] + a[2] + a[3] + a[4] + a[5];

powinno być

Kopiuj
    a6 = a[0] + a[1] + a[2] + a[3] + a[4];

Po drugie źle wczytujesz dane - wczytujesz do tej samej komórki w dodatku poza zakresem tablicy.
Powinieneś wczytywać:

Kopiuj
    for (i = 0; i <= 4; i++) {
        scanf("%d", &a[i]);
    }
MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
0

Zacznij od tego: https://godbolt.org/z/hdo9qTMoj
Może nawet poużywaj tej strony tak jak ją skonfigurowałem.

G1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 55
0

@gaborek1987: link tu masz dużo krótsze rozwiązanie

BR
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 55
0
gaborek1987 napisał(a):

@gaborek1987: link tu masz dużo krótsze rozwiązanie

Takiego rozwiązania się nie spodziewałem. Nawet ciekawe bo rozwiązuje problem bez ' zbędnych ' operacji. Tylko czy te operacje są faktycznie zbędne?
Co by było gdyby trzeba rozszerzyć kod o inne działanie? Na przykład mnożenie, liczenie wyznacznika lub cokolwiek innego co potrzebuje szerszy obraz macierzy?

  • drugi program?
  • nowy program (tj. zamiast tego pierwszego)?
  • coś innego?

Z drugiej strony nie ma powodu dodawać / używać operacji których się nie potrzebuje. Nie mniej warto o tym pomyśleć a jest o czym myśleć, choć może ja akurat myślę za dużo.

Poza tym dlaczego podajesz kod przez odnośnik (szczególnie że to tylko kod, nie blog ani stack albo coś)? To zmniejsza użyteczność wiadomości w dłuższym ale i krótszym okresie.

  • trzeba kliknąć. To nie jest duży problem jednak to dodatkowa czynność i moim zdaniem niepotrzebna
  • co jeśli odnośnik przestanie działać? Odpowiedź staje się wtedy bezużyteczna.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.