dynamiczna tablica dwuwymiarowa problem

Odpowiedz Nowy wątek
2012-01-29 18:06
0

Witam mam problem z zadaniem takim: uzytkownik wpisuje dwie liczby i to jest nasz wymiar tablicy np 2x3 i potem ma uzupelnic liczbami a nastepnie program wypisuje ta tablice.

#include <malloc.h>
#include <stdio.h>
#include <math.h>

int main ()
{
int **tab;
int a,b, rozmiara,rozmiarb;
scanf ("%d", &rozmiara);
scanf("%d", &rozmiarb);
tab = (int**)malloc(rozmiara*sizeof(int));
for (a=0; a< rozmiara; a++)
{
    printf("podaj liczbe a ");
    scanf("%d",&tab[a]);
    tab[a]=(int*)malloc(rozmiarb*sizeof(int));
for (b=0; b<rozmiarb-1; b++)
{
    printf("podaj liczbe b ");
scanf("%d",&tab[a][b]);
printf("%d",tab [a][b]);
}
}
return 0;
}

co tutaj jest zle? nie mam pojecia jestem zielony w tym temacie i prosze o pomoc

edytowany 1x, ostatnio: madmike, 2012-01-29 19:26
Zapisuj kod między <cpp></cpp> - MJay 2012-01-29 18:49

Pozostało 580 znaków

2012-01-29 18:44
0
  1. tab = (int*)malloc(rozmiarasizeof(int)); // chociaz pewnie rozmiar int i int jest taki sam
  2.     printf("podaj liczbe a ");
        scanf("%d",&tab[a]);

    wtf? co to niby ma robić? wywal te dwie linie

  3. printf("podaj liczbe tab[%d][%d] ",a,b); // zamiast: printf("podaj liczbe b ");
  4. na końcu powinieneś zwolnić pamięć

reszta wydaje się ok, chyba że czegoś nie zauważyłem


░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

2012-01-29 18:48
#include <malloc.h>
#include <stdio.h>
#include <math.h>

int main( void ) // to jest C, wpisanie main() oznacza tyle co niezliczona ilość argumentów. Chociaż skompiluje się
{
     int** tab;
     int rozmiarA, rozmiarB;

     scanf( "%d", &rozmiarA );
     scanf( "%d", &rozmiarB );
     tab = (int**)malloc( rozmiarA * sizeof( int* ) /*sizeof( int ) != sizeof( int* )*/ );

     {
          int i;
          for( i = 0; i < rozmiarA; ++i ) // musimy zaalokować drugi wymiar, do tej pory mieliśmy tylko wskaźniki na inty
               tab[i] = (int*)malloc( rozmiarB * sizeof( int ) ); 
     }

     {
          int a, b;
          for( a = 0; a < rozmiarA; ++a )
               for( b = 0; b < rozmiarB; ++b )
               {
                    printf( "Podaj wartosc dla tab[%d][%d]: ", a, b );
                    scanf( "%d", &tab[a][b] ); // uzupełniamy tablicę przez podane inty
               }
     }

//Wypisanie tablicy
     {
          int a, b;
          for( a = 0; a < rozmiarA; ++a )
          {
               for( b = 0; b < rozmiarB; ++b )
                    printf( "%d ", tab[a][b] );
               printf( "\n" );
          }
     }
     return 0;
}

Gdy się nie wie, co się robi, to dzieją się takie rzeczy, że się nie wie, co się dzieje ;-)
edytowany 2x, ostatnio: MJay, 2012-01-29 18:57
Pokaż pozostałe 7 komentarzy
Przeczytaj swój komentarz na spokojnie, cytuję: sizeof( int ) != sizeof( int* ) &lt;- nie zgodzę się [czyli: rozmiary są równe] (...) prawdziwym jest powiedzenie że rozmiary te nie muszą być równe [czyli: rozmiary są nierówne]. Widzę sprzeczność, a wydaje mi się że myślę trzeźwo w tej chwili (myślę?). (swoją drogą ofc. masz rację że nie muszą być równe) - msm 2012-01-29 21:26
to był skrót myślowy od: z reguły są równe, ale nigdzie nie jest powiedziane, że to zawsze jest prawdą. - krwq 2012-01-29 21:33
@MJay: jesteś tego pewien? tzn. wskaźnik to niby wskaźnik, ale czy standard definiuje że int* i int** MUSZĄ być równej wielkości? (zwłaszcza że na niektórych platformach jest pojęcie wskaźników „bliskich” i „dalekich”) - Azarien 2012-01-30 20:31
Nie, to co napisałem w komentarzu to wiem, że jest błędne. Chodziło mi o coś innego a @krwq poprawił u mnie co innego. Od 3 dni siedzę z matematyką od rana do wieczora i choć wiem, że nie powinienem w tym momencie jakiegokolwiek kodu pisać, to jednak chciałem pomóc. - MJay 2012-01-30 23:09
@Azarien - jeśli cię to ciekawi, wg. C99 nie muszą. Wyszczególnione jest że void musi mieć taką samą reprezentację jak char, wskaźniki do kwalifikowanych taką samą jak do niekwalifikowanych wersji kompatybilnych typów oraz nie różnią się reprezentacją wskaźniki do różnych struktur i unii. - msm 2012-01-30 23:42

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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