Pisze program w języku c(kompilator MinGW )mający za zadanie wypisać średnie wartości wierszy tablicy dwuwymiarowej wypełnionej przez użytkownika
#include <stdio.h>
#define WIERSZE 3
#define KOLUMNY 5
void srednia_poj(double (*wsk)[5]);
void pobierz(double tab[]);
int main(void)
{
double liczby[WIERSZE][KOLUMNY]; // Tablica dwuwymiarowa
int j; // Licznik w pętli
printf("Podaj trzy zbiory po 5 liczb:");
printf("\n\nWpisz pierwszy zbior:"); // Pętal pobierająca
for(j = 0; j < KOLUMNY; j++) // pięć pierwszych liczb
scanf("%lf", &liczby[0][j]);
printf("\nPodaj drugi zbior:"); // Pobranie kolejnego
for(j = 0;j < KOLUMNY; j++) // zbioru
scanf("%lf", &liczby[1][j]);
printf("\nPodaj ostatni zbior:"); // Pobrannie ostatnigo zbioru
for(j = 0; j < KOLUMNY; j++)
scanf("%lf", &liczby[2][j]);
for(j = 0; j<WIERSZE; j++) // Wyświetlenie tablicy
for(int i = 0; i<KOLUMNY; i++) //
printf(" %lf ", liczby[j][i] ); //
printf("%\n%p\n", liczby); //Wskaźnik przydał się podczas
srednia_poj(liczby); //debugowania(nic nie dało)
return 0;
}
void srednia_poj(double tab[][KOLUMNY])
{
double suma = 0;
double srednia;
int wiersz = 1;
for(int i = 0; i < WIERSZE; i++, wiersz++)
{
for(int j = 0, suma = 0; j < KOLUMNY; j++)
{
suma += tab[i][j]; // Dodanie wsystkich wartości do zminnej
printf("\ni :%d j: %d suma: %lf", i , j,(double)suma); //Wyświetlenie wartości zmiennych
}
srednia = suma / (double)KOLUMNY;
printf("\nSrednia wiersza %d wynosi %lf: \n", wiersz, srednia);
}
for(int j = 0; j<WIERSZE; j++) // Wy
for(int i = 0; i<KOLUMNY; i++)
printf(" %lf ", tab[j][i] );
}
Program przy wyświetlaniu tablicy wyświetla same zera, suma też jest równa zero, średnia również. Według gdb tablica jest wypełniona danymi podanymi przez użytkownika i funkcja otrzymuje poprawny wskaźnik.
zamieniłeś nazwy zmiennych, wcześniej miałeś i/j, aż się prosi o pomyłkę w nazwach zmiennych przy wyświetlaniu. Poza tym jak raz ustalasz że i to wiersze to się tego trzymaj, a nie co chwila zmieniaj zdanie bo to negatywnie wpływa na czytelność kodu.
Inna definicja funkcji od jej deklaracji - masz 2 różne funkcje, jedna jeszcze niezadeklarowana a druga zdefiniowana i zadeklarowana za późno. Wywołanie funkcji o tej nazwie w funkcji main, nie wywołuje żadnego kodu, dlatego pewnie nic nie jest zwracane. Dziwie się że program nie sypnął jakimś błędem.
Błąd pierwszy polega na tym że masz 2 zmienne które inkrementujesz w pętli. Wystarczy ci zmienna i, a gdy chcesz wyświetlić numer wiersza robisz i+1 i to wszystko.
Po zedytowaniu wszystkich błędów w instrukcjach printf() program nadal nie działa, ale dostaje według mnie dziwny wynik działania programu przy podanych samych dwójkach: