Lab Pascal zadanie 1

Zadanie 1 z laboratorium programowania na Informatyce UW.

 Zadanie 1 (termin wysylania rozwiazan: 18 I 2008, godz. 23:59)

(Lamiglowka "Pietnascie")

Dana jest plansza o rozmiarach cztery na cztery, na ktorej znajduje sie
pietnascie "klockow" oznaczonych duzymi literami. W pierwszym wierszu
planszy sa cztery klocki: "A", "B", "C" i "D", w drugim "E", "F", "G" i
"H", w trzecim "I", "J", "K", "L", w czwartym "M", "N", "O". Pole
w czwartym wierszu i czwartej kolumnie jest puste.

Klocek mozna przesunac na sasiadujace z nim wolne pole, zwalniajac tym
samym pole, na ktorym klocek znajdowal sie do tej pory.

W kazdej chwili na planszy jest co najwyzej jeden klocek, ktory mozna
przesunac w dol (ten, ktory znajduje sie nad pustym polem), co najwyzej
jeden, ktory mozna przesunac w prawo itd.

Napisz program, ktory umozliwi przesuwanie klockow na planszy i bedzie
wypisywal na wyjscie wynik.

Program wczyta z wejscia ciag liter ze zbioru {'l', 'p', 'g', 'd'}
zakonczony znakiem, ktory do tego zbioru nie nalezy. Kazda litera
jest poleceniem przesuniecia klocka na planszy:

'l' - w lewo
'p' - w prawo
'g' - w gore
'd' - w dol

Program wypisze na wyjscie stan poczatkowy planszy, a nastepnie dla kazdej
litery z wejscia bedzie probowal wykonac reprezentowane przez nia
przesuniecie klocka. Jesli przesuniecie nie bedzie mozliwe, bo np. puste
pole jest w ostatnim wierszu planszy, a wczytana litera to 'g', stan planszy
sie nie zmieni. Dla kazdej litery wczytanej z wejscia, niezaleznie od tego,
czy spowodowala ona przesuniecie klocka, wypisujemy wynikowy stan planszy.

Stan planszy wypisujemy w pieciu wierszach. W czterech pierwszych podajemy
znaki z klockow znajdujacych w kolejnych wierszach planszy, oznaczajac
spacja miejsce puste; piaty wiersz ma byc pusty.

Np. dla danych, znajdujacych sie w dolaczonym do tresci tego zadania pliku
zsi07z01.dane, program powinien wypisac to, co jest w pliku zsi07z01.wynik.

I oto rozwiązanie:

program zad1;
//Program napisany na zajęcia z Laboratorium Języka Pascal i C. Zadania nr 1.
var znak:char;
//W x i y przechowujemy pozycję pustego pola.
x,y:integer;
plansza : array [1..4,1..4] of char;

procedure wypisz;
//Wypisuje naturalnie zawartosc tablicy.
var i,j:integer;
begin
for i:=1 to 4 do
begin
for j:=1 to 4 do
begin
write(plansza[i,j]);
end;
writeln('');
end;
writeln('');
end;

begin

//Inicjujemy tablice.

plansza[1,1]:='A';
plansza[1,2]:='B';
plansza[1,3]:='C';
plansza[1,4]:='D';
plansza[2,1]:='E';
plansza[2,2]:='F';
plansza[2,3]:='G';
plansza[2,4]:='H';
plansza[3,1]:='I';
plansza[3,2]:='J';
plansza[3,3]:='K';
plansza[3,4]:='L';
plansza[4,1]:='M';
plansza[4,2]:='N';
plansza[4,3]:='O';
plansza[4,4]:=' ';

//Wolne pole jest na pozycji 4,4
x:=4;
y:=4;

//Wczytujemy znaki z wejscia
wypisz;

while not eof() do
begin
read(znak);

if znak='l' then
begin
//Jeśli jest cos na prawo.
if x1 then
begin
//Przesuwamy litere
plansza[y,x]:=plansza[y,x-1];
//Wstawiamy puste pole
x:=x-1;
plansza[y,x]:=' ';
end
end
else if znak='g' then
begin
//Jeśli jest cos na dole.
if y1 then
begin
//Przesuwamy litere
plansza[y,x]:=plansza[y-1,x];
//Wstawiamy puste pole
y:=y-1;
plansza[y,x]:=' ';
end
end
else
break;

wypisz;

end;

end.

Leave a Reply