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.