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ę
Wypełnianie tablicy dwuwymiarowej [c]
Re: Wypełnianie tablicy dwuwymiarowej [c]
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ęć.
Nie zapomnij, że musisz zwolnić w obu przypadkach pamięć.
Re: Wypełnianie tablicy dwuwymiarowej [c]
Zrobiłem coś takiego ale nie działa:
Błąd:
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;
}
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]
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.:
jest nieprawidłowe, natomiast
jest prawidłowe
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++);
Code: Zaznacz cały
int i;
for (i = 0; i < 10; i++);
Re: Wypełnianie tablicy dwuwymiarowej [c]
Witam też mam problem z tym zadaniem, a utknąłem w tym miejscu :
Te moje dzieło jakoś nie chce działać :/
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;
}