Jestem początkujący w programowaniu i natrafiłem dziś na taki problem. Mam napisać podprogram, w którym będzie tworzona macierz górnotrójkątna z losowo wybranymi liczbami. Do tego wyznaczam z tych liczb: liczbę maksymalna i minimalną. Następnie mam przekazać tę macierz, max i min do programu głównego. No i tu utknąłem… Gdy to skompiluje to wyświetlają mi się w macierzy same 0. Nie wiem gdzie mam wrzucić max i min, aby mi się wyświetliło w macierzy głównej. Próbowałem już na wiele sposobów, ale zawsze mi wychodziły jakieś duże liczby.
Po pierwsze skoro funkcja ma tworzyć tą macierz to powinna alokować dla niej pamięć (calloc)? Twoja natomiast używa tablicy statycznej. Tablica statyczna JEST ZAWSZE KWADRATOWA / PROSTOKĄTNA:D.
Poniżej zamieszczam kod jak ja bym to rozwiązał, funcje min i max chyba dasz radę sobie napisać wystarczy po prostu przechodzić po tablicy podobnie jak funkcja fill_table.
#include
#include
#include
int** create_table(int n)
{
int i, cols = n;
int **tab = NULL;
tab = calloc(n, sizeof(int*));
for(i=0; i
{
tab[i] = calloc(cols, sizeof(int));
cols--;
}
return tab;
}
void fill_table(int **tab, int n)
{
int i, j, cols = n;
for(i=0; i
{
for(j=0; j
{
tab[i][j] = (int)(rand()%10);
}
cols--;
}
}
void show_table(int **tab, int n)
{
int i, j, cols = n;
for(i=0; i
{
/*Ta pętla wyświetla spacje, aby uzyskać efekt górnotrójkątnej macierzy*/
for(j=0; j< n-cols; j++)
{
printf("%s", " ");
}
for(j=0; j
{
printf("%d ", tab[i][j]);
}
cols--;
printf("\n");
}
}
void destroy_table(int **tab, int n)
{
int i;
for(i=0; i
{
free(tab[i]);
}
free(tab);
}
int main()
{
const int N = 10;
int **table = NULL;
srand(time(NULL));
table = create_table(N);
show_table(table, N);
fill_table(table, N);
show_table(table, N);
destroy_table(table, N);
return 0;
}
Dzięki wielkie ! Tablicę już udało mi się wyświetlić ;D
Głowie się jednak dalej na tym max i min. @michal_93 robię tak jak mówisz [chodź nie wiem czy o to chodzi] i nic mi z tego nie wychodzi. Czy to ma polegać na czymś takim ?
Ja bym napisał raczej dwie funkcje jedną co zwraca min, a drugą co max. Robienie tego przez struktury lub wskaźniki to tylko niepotrzebny wysiłek.
meryomega chyba nie rozumiesz czegoś co się nazywa zakresem zmiennych. Zmienne min i max w funkcji f() to zupełnie inne zmienne niż te z funkcji main(). Gdy wywoływana jest funkcja f() w pamięci tworzone są zmienne min i max (zupełnie niezwiązane z tymi z main
Użyj polecenia return min; , żeby zwrócić wynik obliczeń funkcji. Możesz również wypisać wynik w samej funkcji f() ale nie jest to polecane ponieważ należy oddzielać logikę od prezentacji.
Kilka uwag praktycznych:
Nie wklejaj kodu bez wcięć, bo będziesz czekać na odpowiedź przynajmniej dzień dłużej. Osobiście jak widzę taki kod to mi się odechciewa czytać po sekundzie.
Znajdź sobie jakiś fajny edytor który zamiast tabulatorów daje np. 4 spacje. W kodzie nie powinno się używać znaków tabulatora.
Nie warto pisać tab[0][0] tylko tab. Pamiętaj nazwa tablicy to ADRES / WSKAŹNIK NA JEJ PIERWSZY ELEMENT.
Staraj się używać tablic dynamicznych (tak jak w kodzie który zamieściłem), a nie statycznych. Czyli żadnego takiego int (tab*)[100] Po co marnować pamięć i zaciemniać kod?