Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c] - uzupełnianie tablicy dwuwymiarowej za pomocą wskaźnika

Ostatnio zmodyfikowano 2014-11-11 23:27
Autor Wiadomość
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:

C/C++
#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 ]; //deklaruje wskaznik
    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; // a tu probuje uzupelnic je za pomoca wskaznikow
            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;
}
P-120361
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.
P-120390
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
P-120402
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"
P-120404
« 1 »
  Strona 1 z 1