program w pascalu na tablicy dwuwymiarowej

0

Witam

Mam problem muszę napisać program który wstawia kolejne liczby naturalne do tablicy dwuwymiarowej w taki sposób jak tu ( http://poczta.rybnik.pl/~raflp/prog.JPG ) Nie mam pojęcia jak się do tego zabrać :(
Proszę o pomoc w napisaniu tego programu.

0

Ciekawy problem :)

Można zrobić bruta ;)
Algorytm 4 krokowy:

  1. Idź 1 pole w dół - jak się nie da to idź w prawo
  2. Idź tyle pól na ukos w górę-prawo, aż dojdziesz do brzegu tablicy
  3. Idź 1 pole w prawo - jak się nie da to idź w dół
  4. Idź tyle pól na ukos w dół-lewo, aż dojdziesz do brzegu tablicy
    Przy każdym przejściu o jedno pole niech zwiększa licznik i liczbę, którą ten licznik przechowuje zapisuje do tablicy w miejscu, do którego właśnie doszedł.

PS: Co do tego obrazka, to chyba tam powinno być przejście 28->29->30, a nie 28->30->31?

Pozdrawiam.

0

no tak by trzeba było zrobić tylko umiał bys np konkretnie napisać instrukcje IF bo niewiem jak napisac to ze jeśli przyjdzie do końca i nie umi dalej isc idz w prawo abo w doł jak to napisac

i jeszcze jedno jaka instrukcja odpowiada temu ze ma isc po skosie do góry i w dół

0

Nie jestem za gotowcami, ale ten program jest tak bardzo zrozumiały, że zamieszczę. Oto on:

uses Crt;
const xMax =6;
      yMax =5;
var Tab  : array[1..xMax, 1..yMax] of LONGINT;
    i, j,
    iter : BYTE;
    k    : LONGINT;

begin
 ClrScr;
 i :=1;
 j :=1;
 k :=1;
 iter :=1;
 while (i <=xMax) and (j <=yMax) do {póki nie doszliśmy do końca tablicy}
  begin
   Tab [i, j] :=k;
   Inc (k);
   case iter of
   1: if j <yMax then Inc (j) else Inc (i); {idziemy w dół - ew. w prawo}
   2: begin
       while (j >1) and (i <xMax) do {idziemy w górę-prawo}
        begin
         Dec (j);
         Inc (i);
         Tab [i,j] :=k;
         Inc (k);
        end;
       Dec (k);
      end;
   3: if i <xMax then Inc (i) else Inc (j); {idziemy w prawo - ew. w dół}
   4: begin
       while (j <yMax) and (i >1) do {idziemy w dół-lewo}
        begin
         Inc (j);
         Dec (i);
         Tab [i,j] :=k;
         Inc (k);
        end;
       Dec (k);
      end;
   end;
   iter :=iter mod 4 +1;
  end;
 for j :=1 to yMax do
  begin
   for i :=1 to xMax do Write (Tab [i, j]:5);
   Writeln;
  end; {wyświetlenie tablicy}
 ReadKey;
end.

Oczywiście można go nieco usprawnić, ale wcale się nad tym nie zastanawiałem - to tylko szkic.
yMax i xMax to rozmiary tablicy - mogą być dowolne.

Pozdrawiam.

0

Dzięki :) szczerze mówiąc sam bym tego nie zrobił ;) jeszcze raz dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1