lukaszKKK
(lukaszKKK)
21 Wrzesień 2008 18:54
#1
Witam
Mam tablice (macierz kwadratowa). Chcialbym poruszac sie po przekatnych tak jak na rysunku.
Interesuje mnie przekopiowanie danych z jednej tablicy do drugiej ale poruszajac sie po oznaczonych na czerwono
liniach. Wartosci na rogach moge pominac (czyli: 11,18,81,88). Zaczynam od wiersza 2, kolumna 1 (21), nastepnie
przechodze do wiersza 1, kolumna 2 (12). Pozniej przechodze do wiersza 3, kolumna 1 (31), wiersza 2, kolumna 2 (22),
wiersza 1, kolumna 3 (13) itp. az dojde do glownej przekatnej.
Jak powinna wygladac petla, ktora by wycinala z tabeli takie przekatne ? Moze spotkaliscie sie z algorytmem.
Fiolek
(Fiołek)
21 Wrzesień 2008 19:03
#2
Jeśli tablica jest kwadratowa, to do zmiennych oznaczających X i Y dodajesz/odejmujesz 1. Np:
[1 2 3]
[4 5 6]
[7 8 9]
Tam gdzie jest “1” to punkt 1,1. Tam gdzie “9” to punkt 3,3. Z punktu “7” do “3” jest to droga 1,3 -> 2,2 -> 3,1 czyli do zmiennej X dodajesz 1 a od Y odejmujesz 1.
system
(system)
21 Wrzesień 2008 19:25
#3
void scan(int YSize)
{
for(int i=1;i
{
for(int k=0;k<=i;++k)
{
cout<<"Tb["<<(i-k)<<"]["<<(i+k)<<"]"<
}
}
}
lub cała tablica (nieważne czy XSize równe YSize czy nie:
void scan(unsigned Y,unsigned X)
{
unsigned sy=0,sx=0;
while(sx
{
for(int y=sy,x=sx;(y>=0)&&(x
{
cout<<"Tb["<
}
++sy;
if(sy>=Y)
{
++sx;
sy=Y-1;
}
}
}
jeżeli to zoptymalizować to wyjdzie:
void scan(unsigned Y,unsigned X)
{
for(unsigned sy=0,sx=0;sx
{
for(int y=sy,x=sx;(y>=0)&&(x
{
cout<<"Tb["<
}
}
}
lukaszKKK
(lukaszKKK)
22 Wrzesień 2008 17:25
#4
Dziekuje za wskazowki i kod. Zabieram sie do pisania