Tablice dwuwymiarowe i pętle

0

witam mam problem z kodem, wiem że to podstawowe podstawy ale nie moge sobie z tym poradzić. Program wysypuje sie przy macierzy [5,5] w górę. Powiedzcie proszę dlaczego.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void fillUP(int tab[10][10], int a,int b)
{
        srand(time(NULL));
        int i,j;
        for(i=0; i<a; i++)
            for(j=0; j<b; j++)
                tab[i][j]=rand()% 10+1;
}
void display(int tab[10][10], int a,int b)
{
        int i,j;
        for(i=0; i<a; i++){
            for(j=0; j<b; j++){
                printf("%3d",tab[i][j]);}
                printf("\n");}
}
int main()
{
    int Macierz[10][10];
    int a,b;

    printf("Podaj wymiar macierzy:\n");
    scanf("%d",&a);
    scanf("%d",&b);

    fillUP(Macierz[10][10],a,b);
    display(Macierz[10][10],a,b);
    return 0;
}
2

W zły sposób przekazujesz tablice do funkcji :

fillUP(Macierz[10][10],a,b);
display(Macierz[10][10],a,b);

Powinno być:

fillUP(Macierz,a,b);
display(Macierz,a,b);
0
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void fillUP(int tab[][10], int a,int b)
{
        srand(time(NULL));
        int i,j;
        for(i=0; i<a; i++)
            for(j=0; j<b; j++)
                tab[i][j]=rand()% 10+1;
}
void display(int tab[][10], int a,int b)
{
        int i,j;
        for(i=0; i<a; i++){
            for(j=0; j<b; j++){
                printf("%3d",tab[i][j]);}
                printf("\n");}
}
int main()
{
    int Macierz[10][10];
    int a,b;
 
    printf("Podaj wymiar macierzy:\n");
    scanf("%d",&a);
    scanf("%d",&b);
 
    fillUP(Macierz,a,b);
    display(Macierz,a,b);
    return 0;
}
Tak powinno to wyglądać
0
void fillUP(int tab[][10], int a,int b)
{
        srand(time(NULL));
        for(int i=0; i<a; i++)
            for(int j=0; j<b; j++)
                tab[i][j]=rand()% 10+1;
}
void display(int tab[][10], int a,int b)
{
        for(int i=0; i<a; i++){
            for(int j=0; j<b; j++){
                printf("%3d",tab[i][j]);}
                printf("\n");}
}
int main()
{
    int Macierz[10][10];
    int a,b;
 
    printf("Podaj wymiar macierzy:\n");
    scanf("%d",&a);
    scanf("%d",&b);
 
    fillUP(Macierz,a,b);
    display(Macierz,a,b);
    return 0;
}

Poza tym, na logikę. Skoro do funkcji przekazywałeś int tab[10][10] to po co chciałbyś robić macierz [5,5]?

PS. Poczytaj o tablicach dynamicznych, wtedy będzie Ci łatwiej zmieniać rozmiar tablicy. Nie będziesz musiał alokować tablicy większej niż potrzebuje użytkownik. Jeśli użytkownik będzie chciał korzystać z tablicy [5,5] tyle pamięci mu zarezerwujesz i analogicznie do innych rozmiarów. Wyobraź sobie, co by było gdyby maksymalną wielkością tablicy mogło być [10000,10000] a użytkownik skorzystałby z macierzy [4,4]? Po co marnować tyle pamięci.

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