Strona 1 z 1

Wypełnianie tablicy dwuwymiarowej [c]

Napisane: środa, 16 listopada 2011, 17:07
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ę

Re: Wypełnianie tablicy dwuwymiarowej [c]

Napisane: środa, 16 listopada 2011, 18:50
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ęć.

Re: Wypełnianie tablicy dwuwymiarowej [c]

Napisane: poniedziałek, 21 listopada 2011, 11:26
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


Re: Wypełnianie tablicy dwuwymiarowej [c]

Napisane: poniedziałek, 21 listopada 2011, 13:22
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

Re: Wypełnianie tablicy dwuwymiarowej [c]

Napisane: poniedziałek, 21 listopada 2011, 23:07
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ć :/