Помогите решить задачу на стек (очередь) - Pascal
Формулировка задачи:
Вы попали в древнюю страну "СТЕКОВИЮ", где практически все организовано по принципу стека. Перед Вами правитель страны поставил следующую задачу: составить программу для робота-казначея по приведению в порядок сокровищницы государства. Сокровищница имеет следующий вид: это два длинных тупиковых коридора, в которых в беспорядке составлены золото, бриллианты, серебро, другие драгоценности, равные друг другу по стоимости, а также имеется 2 свободных тупиковых коридора того же размера, что и заполненные. Ваша программа должна рассортировать драгоценности, разместив их при этом по различным коридорам.
Или обьясните как это можно сделать::confused:
Решение задачи: «Помогите решить задачу на стек (очередь)»
textual
Листинг программы
{з-золото с-серебро б-брилианты д-другие драгоценности} program Boris; uses StkElCh,crt; var St1,St2,St3,St4:StackC; {-----------------------------------------------------------------------} procedure Zapolnenie; var c:char; CountSt1,CountSt2,i:integer; begin write('Количество элементов в первом коридоре= ');readln(CountSt1); for i:=1 to CountSt1 do begin readln(c); St1.AddBegining(c); end; write('Количество элементов во втором коридоре=');readln(CountSt2); for i:=1 to CountSt2 do begin readln(c); St2.AddBegining(c); end; end; {-----------------------------------------------------------------------} procedure MetalsInSt3_StonesInSt4; var c:char; begin while St1.IsNotEmpty do begin c:=St1.OutBegining; if (c='з') or (c='с') then St3.AddBegining(c); if (c='б') or (c='д') then St4.AddBegining(c); end; while St2.IsNotEmpty do begin c:=St2.OutBegining; if (c='з') or (c='с') then St3.AddBegining(c); if (c='б') or (c='д') then St4.AddBegining(c); end; end; {-----------------------------------------------------------------------} procedure ZolotoInSt1_SerebroInSt2; var c:char; begin while St3.IsNotEmpty do begin c:=St3.OutBegining; if c='з' then St1.AddBegining(c); if c='с' then St2.AddBegining(c); end; end; {-----------------------------------------------------------------------} procedure BrilliantInSt3_DrugoeInSt2; var c:char; begin while St4.IsNotEmpty do begin c:=St4.OutBegining; if c='б' then St3.AddBegining(c); if c='д' then St2.AddBegining(c); end; end; {-----------------------------------------------------------------------} procedure DrugoeInSt4; var c:char; begin if St2.IsEmpty then exit; c:=St2.Begining; if c<>'д' then exit; c:=St2.OutBegining; while (c='д') and (St2.IsNotEmpty) do begin St4.AddBegining(c); c:=St2.OutBegining; end; if c='с' then St4.AddBegining(c) else St2.AddBegining(c); end; {-----------------------------------------------------------------------} begin St1.BeginWork; St2.BeginWork; St3.BeginWork; St4.BeginWork; Zapolnenie; MetalsInSt3_StonesInSt4; ZolotoInSt1_SerebroInSt2; BrilliantInSt3_DrugoeInSt2; DrugoeInSt4; write('Первый коридор ');St1.Show;writeln; write('Второй коридор ');St2.Show;writeln; write('Трейтий коридор ');St3.Show;writeln; write('Четвертый коридо ');St4.Show;writeln; St1.Finishing; St2.Finishing; St3.Finishing; St4.Finishing; readkey; end.