Tablice dwuwymiarowe i pętle

Tablice dwuwymiarowe i pętle
Szczur son
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 20
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.

Kopiuj
#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;
}
dub.raf
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 82
2

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

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

Powinno być:

Kopiuj
fillUP(Macierz,a,b);
display(Macierz,a,b);
jedrzejd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
0
Kopiuj
#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ć
WY
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 134
0
Kopiuj
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.

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.