[c] - uzupełnianie tablicy dwuwymiarowej za pomocą wskaźnika
Ostatnio zmodyfikowano 2014-11-11 23:27
zugaj_90 Temat założony przez niniejszego użytkownika |
[c] - uzupełnianie tablicy dwuwymiarowej za pomocą wskaźnika » 2014-11-11 12:36:46 Witam, mam mały problem z programem. Chciałem zdefiniować wartości tablicy dwumiarowej (macierz kwadratowa). Za pomocą indeksów wszystko mi działa, chciałem jednak zrobić to za pomocą wskaźników. Z góry dzięki za pomoc. Poniżej kod: #include <stdio.h> #include <stdlib.h>
void definicja_macierzy() { int rozmiar; int kolumna; int wiersz; printf( "Zdefiniuj rozmiar macierzy kwadratowej...\n" ); scanf( "%i", & rozmiar ); printf( "\n" ); int * wsk_macierz, macierz[ rozmiar ][ rozmiar ]; wsk_macierz =& macierz[ 0 ][ 0 ]; printf( "Macierz ma wyglad dla i,j nalezacych od 1 do %i: \n", rozmiar ); for( wiersz = 0; wiersz < rozmiar; wiersz++ ) { for( kolumna = 0; kolumna < rozmiar; kolumna++ ) { printf( "%i,%i\t", wiersz + 1, kolumna + 1 ); } printf( "\n" ); } printf( "a teraz ja uzupelnij =)\n" ); for( wiersz = 0; wiersz < rozmiar; wiersz++ ) { for( kolumna = 0; kolumna < rozmiar; kolumna++ ) { printf( "%i,%i=", wiersz + 1, kolumna + 1 ); scanf( "%i", *( wsk_macierz + wiersz ) + kolumna; printf( "\n" ); } } printf( "\nStworzyles cos takiego\n" ); for( wiersz = 0; wiersz < rozmiar; wiersz++ ) { for( kolumna = 0; kolumna < rozmiar; kolumna++ ) { printf( "%i\t", macierz[ wiersz ][ kolumna ] ); } printf( "\n" ); } }
int main()
{ definicja_macierzy(); return 0; }
|
|
Tomek_z_W11 |
» 2014-11-11 21:12:04 Doprecyzuj pytanie, bo nie bardzo rozumiem w czym problem.
Chcesz stworzyć dynamiczną tablice dwuwymiarową? Czyli "przy pomocy wskaźników"? Jeżeli tak, to w ten sposób:
int **macierz = new int* [wiersze];
for(i=0; i<wiersze; i++) { macierz=new int [kolumny]; //lub *(macierz+i) = new int [kolumny]; }
No a wypełnianie w ten sposób:
for(i=0; i<wiersze; i++) { for(j=0; j<kolumny; j++) { macierz[j]=i*j; //lub*(*(macierz+i)+j)=i*j } }
Jeżeli chcesz wskaźnikiem wypełniać tablice, to zrobisz zbędną robotę, będzie n instrukcji więcej w pętli, więc dodatkowo wolniej wszystko będzie szło. |
|
michal11 |
» 2014-11-11 23:12:59 Jaki konkretnie masz problem z tym zadaniem ?
@up Czytaj ze zrozumieniem. po 1. chodzi o C a nie C++ więc nie można używać new. po 2. zugaj_90 chce wypełnić tablice korzystając z wskaźnika a nie po indeksach. Czyli w pseudo kodzie wyglądało by to tak:
1. Ustaw wskaźnik na element [0][0] 2. wpisz wartość 3. Przesuń wskaźnik |
|
Tomek_z_W11 |
» 2014-11-11 23:27:18 Nie zauważyłem, że w C.
Czyli tak jak napisałem w komentarzu:
macierz[j]=i*j; //lub *(*(macierz+i)+j)=i*j
wkradł mi się drobny błąd, mianowicie powinno być "macierz[j]=i*j" |
|
« 1 » |