dynamiczna tablica dwuwymiarowa problem

dynamiczna tablica dwuwymiarowa problem
OP
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:1
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.

Kopiuj
#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
MJ
Zapisuj kod między <cpp></cpp>
KR
  • Rejestracja:prawie 16 lat
  • Ostatnio:6 miesięcy
  • Postów:2514
0
  1. tab = (int**)malloc(rozmiarasizeof(int)); // chociaz pewnie rozmiar int i int* jest taki sam
Kopiuj
        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


░█░█░█░█░█░█░█░█░█░█░█░
MJ
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 10 lat
0
Kopiuj
#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
Zobacz pozostałe 7 komentarzy
msm
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)
KR
to był skrót myślowy od: z reguły są równe, ale nigdzie nie jest powiedziane, że to zawsze jest prawdą.
Azarien
@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”)
MJ
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.
msm
@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.

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.