Wypełnianie tablicy dwuwymiarowej [c]

Tu dyskutujemy i rozwiązujemy problemy związane z innymi językami programowania.
pablo663
Początkujący
Początkujący
Posty: 17
Dołączył(a): sobota, 10 września 2011, 09:45

Wypełnianie tablicy dwuwymiarowej [c]

Post przez pablo663 »

Witam. Mam takie zadanie:

Użyj konstukcji FOR do wypełnienia tablicy dwuwymiarowej wartościami podanymi przez użytkownika (program pyta o rozmiar tablicy n,m a następnie pyta o kolejne wartości tablicy) - Język C

Jak się za nie zabrać? Nie wiem jak powinien wyglądać algorytm do rozwiązania tego zadania

Z góry dziękuję
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Wypełnianie tablicy dwuwymiarowej [c]

Post przez Morfidon »

Tworzysz przy pomocy funkcji malloc tablicę dwuwymiarową, aby była dwuwymiarowa potrzebujesz najpierw stworzyć wskaźnik, który będzie przechowywał adres pierwszego wskaźnika zarezerwowanego przy pomocy malloc. Musisz najpierw stworzyć dynamicznie tablice wskaźników, a później ją wykorzystać w pętli.

Nie zapomnij, że musisz zwolnić w obu przypadkach pamięć.
pablo663
Początkujący
Początkujący
Posty: 17
Dołączył(a): sobota, 10 września 2011, 09:45

Re: Wypełnianie tablicy dwuwymiarowej [c]

Post przez pablo663 »

Zrobiłem coś takiego ale nie działa:

Code: Zaznacz cały

#include<stdio.h>



int main()
{
int a,b,lp=0;

printf("Podaj ilosc wierszy tablicy: ");
scanf("%d", a);
printf("Podaj ilosc kolumn tablicy: ");
scanf("%d", b);


int tab[a][b];


for(int i=0;i<a;i++)
for(int j=0;j<b;j++)
{
tab[i][j] = lp;
lp++;
}


for(int i=0;i<a;i++)
for(int j=0;j<b;j++)
{
scanf (tab[i][j]);
}

system("pause");
return 0;
} 




Błąd:

Code: Zaznacz cały

laptop@laptop:~$ gcc forek.c
forek.c: In function ‘main’:
forek.c:9: warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘int’
forek.c:11: warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘int’
forek.c:17: error: ‘for’ loop initial declarations are only allowed in C99 mode
forek.c:17: note: use option -std=c99 or -std=gnu99 to compile your code
forek.c:18: error: ‘for’ loop initial declarations are only allowed in C99 mode
forek.c:25: error: redefinition of ‘i’
forek.c:17: note: previous definition of ‘i’ was here
forek.c:25: error: ‘for’ loop initial declarations are only allowed in C99 mode
forek.c:26: error: redefinition of ‘j’
forek.c:18: note: previous definition of ‘j’ was here
forek.c:26: error: ‘for’ loop initial declarations are only allowed in C99 mode
forek.c:28: warning: passing argument 1 of ‘scanf’ makes pointer from integer without a cast
/usr/include/stdio.h:428: note: expected ‘const char * __restrict__’ but argument is of type ‘int’
forek.c:28: warning: format not a string literal and no format arguments

Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Wypełnianie tablicy dwuwymiarowej [c]

Post przez Morfidon »

Jeżeli user podaje wielkość, musisz stworzyć tablicę dynamicznie - dlaczego tak jest tłumaczę dokładnie w kursie poświęconym C++.

Jeżeli chcesz stworzyć tablicę dynamiczną w C musisz skorzystać z funkcji malloc

Dodatkowo w funkcji scanf powinieneś wysłać jako drugi argument adres zmiennej, a nie wartość.

W C nie możesz definiować wewnątrz pętli for przed pierwszym średnikiem jak w C++ zmiennych. Możesz im nadać wartość.
tzn.:

Code: Zaznacz cały

for (int i = 0; i < 10; i++);
jest nieprawidłowe, natomiast

Code: Zaznacz cały

int i;
for (i = 0; i < 10; i++);
jest prawidłowe
Adi-1
Nowicjusz
Posty: 1
Dołączył(a): poniedziałek, 21 listopada 2011, 22:06

Re: Wypełnianie tablicy dwuwymiarowej [c]

Post przez Adi-1 »

Witam też mam problem z tym zadaniem, a utknąłem w tym miejscu :

Code: Zaznacz cały

 #include <stdio.h>
 int main()
{
  int k;
  int tablica[k];
  int w;
  int tab[w];
    printf ("podaj liczbę kolumn:") ;       
    scanf("%d",&tablica[k]);
    printf("podaj liczbę wierszy:");
    scanf ("%d",&tab[w]);
 int i,j; /*do poruszania się po tablicy*/
 for(i=1;i>tablica[k];i++)
{ 
 for(j=1;j>tab[w];j++)
 scanf("%d", i);
} 
 
    
  system("pause");
  return 0;
}
Te moje dzieło jakoś nie chce działać :/
Post Reply