Problem z wypełnieniem tablicy dwuwymiarowej

Problem z wypełnieniem tablicy dwuwymiarowej
BO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Witam. Mam takie pytanie. W jaki sposób wypełnić tablice dwuwymiarową (10x7) samymi jedynkami, na pewno pętla for musi być dwa razy użyta na kolumnie i wierszu, ale jak zrobić żeby jedynki były w tej tablicy?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

A jak ustawiłbyś pojedynczy element tablicy na wartość 1?

na pewno pętla for musi być dwa razy użyta

Nie musi, ale nie będę Cię nęcił do korzystania z bezpośrednich operacji na pamięci, skoro jesteś - jak wnioskuję - początkującym ;)

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Tb[y][x]=1;

gswidwa
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 839
0
Kopiuj
 
char* Tab[10][5];
for(int y=0; y<10; y++)
 for(int x=0; x<5; x++)
  Tab[y][x] = '1';
kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

Jeśli inicjalizujesz nową tablicę, możesz to zrobić bezpośrednio:

Kopiuj
int tab[7][10] = { {1,1,1,1,1,1,1,1,1,1},
		   {1,1,1,1,1,1,1,1,1,1},
		   {1,1,1,1,1,1,1,1,1,1},
		   {1,1,1,1,1,1,1,1,1,1},
		   {1,1,1,1,1,1,1,1,1,1},
		   {1,1,1,1,1,1,1,1,1,1},
		   {1,1,1,1,1,1,1,1,1,1} };

przykład: https://ideone.com/mhrMK7

mto9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 380
0

Możesz też tak:

Kopiuj
const int x = 7, y = 10;
int tab[x][y];
int* p = tab;
for(int i = 0, i < x*y; i++, p++) p[i] = 1;
kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
4
mto9 napisał(a):

Możesz też tak:

Kopiuj
const int x = 7, y = 10;
int tab[x][y];
int* p = tab;
for(int i = 0, i < x*y; i++, p++) p[i] = 1;

O ile można domniemywać, że w większości przypadków to będzie działać zgodnie z założeniami, to wywołujesz tutaj tzw. undefined behaviour (UB), ponieważ dokonujesz dereferencji wskaźnika innego typu (int(*)[10] na int*) niż wskazywane na niego dane. (§5.2.10.7 §3.10.10 w standardzie). Ponadto, nawet gdybyś przypisywał p jako p = tab[0]; to wywołałbyś UB w momencie wykroczenia poza 10-ty element tablicy (§5.7.5 w standardzie)

mto9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 380
0
mto9 napisał(a):

Możesz też tak:

Kopiuj
const int x = 7, y = 10;
int tab[x][y];
int* p = tab;
for(int i = 0, i < x*y; i++, p++) p[i] = 1;

Tak oczywiście że jest tu błąd, moja pomyłka :D
Raczej chodziło mi o coś takiego:

Kopiuj
const int x = 7, y = 10;
int tab[x][y];
int* p = tab;
for(int i = 0; i < x*y; i++, p++) *p = 1;
gswidwa
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 839
0

A można zrobić tak? Bo nie jestem pewien:

Kopiuj
 
const int x=5, y=7;
int tab[y][x];

//3 element (x) drugiej kolumny (y)
int *wsk = ( ( &tab[0][0] ) + ( 2 * 5 ) + 3 ); 

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.