Песни о Паскале - [99]

Шрифт
Интервал

>begin

>if Length(aStack) = 0 { если стек пуст }

>      then Pop:= false       { сообщаем об этом }

>      else begin

>      { возвращаем последний элемент }

>      arg:= aStack[Length(aStack)];

>      { и удаляем его из стека }

>      Delete(aStack, Length(aStack), 1);

>      Pop:= true; { признак того, что стек не был пуст }

>      end;

>end;


>var S : string;       { исходный состав }

>      SA, SB, SC : string; { три сортировочных тупика A,B,C}

>      c : char;       { очередной вагон }

>begin

>S:= 'HEjd31kDJK62px912se3BKdwL9'; { Исходный состав }

>Writeln('Исходный состав: '+S);

>SA:=’’; SB:=’’; SC:=’’; { очистка тупиков }

>{ Отцепляем вагоны от исходного состава и заталкиваем в тупики }

>while Pop(S, c) do begin

>      if c in ['A'..'Z'] then Push(SA, c);

>      if c in ['a'..'z'] then Push(SB, c);

>      if c in ['0'..'9'] then Push(SC, c);

>end;

>{ Теперь исходный состав пуст, то есть S='' }

>{ Выкатываем вагоны из тупика A и цепляем к первому составу }

>while Pop(SA, c) do Push(S, c);

>Writeln('На станцию A : '+S);

>S:=''; { Освобождаем пути }

>{ Выкатываем вагоны из тупика B и цепляем ко второму составу }

>while Pop(SB, c) do Push(S, c);

>Writeln('На станцию B : '+S);

>S:=''; { Освобождаем пути }

>{ Выкатываем вагоны из тупика C и цепляем к третьему составу }

>while Pop(SC, c) do Push(S, c);

>Writeln('На станцию C : '+S);

>Readln;

>end.


Вы познакомились с механизмами очередей и стеков. Мы построили их на основе символьных строк, но в системном программировании это делается иначе, и скоро вы узнаете об этом больше.

Итоги

• Очереди и стеки – это механизмы, применяемые в системных программах. Элементами очередей и стеков могут быть любые объекты.

• Очередь обслуживает элементы по принципу «первый пришел – первый ушел» или сокращенно FIFO (First-In, First-Out).

• Стек обслуживает элементы по принципу «последний пришел – первый ушел» или сокращенно LIFO (Last-In, First-Out).

А слабо?

А) Исследуя модель танцевального кружка, можно заметить, что в любой момент одна из двух очередей обязательно пуста. В самом деле, если приходит больше мальчиков, то будет пуста девчоночья очередь и наоборот. Можно ли обойтись одной очередью? Придумайте, как это сделать.

Подсказка: добавьте функцию для тестирования очереди с тем, чтобы выяснить, не пуста ли она. И, если не пуста, то кто томится в ней – мальчик или девочка? Эта функция не должна изменять состояние очереди.

Б) На реальных станциях на горку последовательно загоняют несколько составов, а уж потом освобождают тупики. Добавьте в модель сортировочной горки возможность такой обработки. Исходные составы (строки) должны вводиться с клавиатуры, признак окончания ввода – пустая строка. Совет: выделите действия по сортировке одного состава в отдельную процедуру.

В) Постройте механизмы очереди и стека на базе массива символов, а не на базе строки. Какие дополнительные переменные здесь понадобятся?

Глава 46

Огромные числа



Давно минули времена, когда для счета всем хватало своих пальцев – первого «калькулятора» человечества, а наши потребности в счете все растут и растут…

Сколько звезд на небе?

Некий король – любитель науки, порядка и немножко чудак – распорядился пересчитать все, что ни есть, в своих владениях. Ладно бы, его интересовали крупные предметы вроде домов, машин и всего такого… Но нет, король велел пересчитать и капли в морях, и песчинки на берегах, и травинки в степях! Пока ученые придумывали способы подсчета, программисты возились с другой задачей – обработкой всего этого на компьютере. Они искали подходящий тип данных для хранения тех огромных чисел, что нужны ученым! Обратившись к описанию языка Паскаль, программисты заинтересовались двумя числовыми типами, которые на первый взгляд подходили для такого случая.

Первый из них – тип LongInt – длинное целое число. Наибольшее значение для этого типа чисел составляет 2'147’483’647, то есть несколько больше двух миллиардов. Маловато будет, – рассудили мудрецы, и продолжили поиск.

Вскоре они наткнулись на другой тип чисел – Extended, который мог вмещать сказочные значения – вплоть до 10>4932! Иначе говоря, эти числа могли содержать почти пять тысяч цифр! Но радость математиков была недолгой; рассмотрев тип Extended пристальней, они отвергли его. Оказалось, что из этих пяти тысяч цифр только первые двадцать – точные (их называют значащими), а остальные не внушают доверия, и могут быть замены чем угодно, хоть нулями.

Есть ли толк от этих неточных чисел? Есть. Дело в том, что в инженерных и научных расчетах этой точности вполне хватает. Но здесь был иной случай, – требовался абсолютно точный подсчет, государь не терпел огрехов. «Точность – вежливость королей!» – говаривал он. И программисты ткнулись, как обычно, в тупик.

Сложение «в столбик» никто не отменял

Выход из тупика нашелся случайно. Один из королевских программистов помогал сынишке справиться со школьными уроками – складывали числа «в столбик». Тут его и осенило: почему бы и нам, – смекнул папаша, – не складывать числа тем же способом? Так тряхнем стариной и вспомним это сложение «в столбик»? Рис. 102 освежит вашу память.



Рис.102 – Пример сложения в столбик

Рекомендуем почитать
Трудный выбор. Радужная

В день 21-летия мне подарили два странных артефакта. Кто бы еще вчера сказал, что я - не человек, как и вся моя семья, я бы покрутила пальцем у виска. Но теперь все иначе, сказка оказалась правдой, а я - наследной принцессой в трех государствах другого мира, да и с сущностью моей совсем неясно. Кто я? Дракон или эльф? А может обычный человек, которому судьба приготовила испытания? Когда мир на грани катастрофы, семья на краю пропасти, останется ли место для всепоглощающей любви? Как сделать выбор и не допустить ошибку? А может ну его, этот мир?..


Разбитый Адам

Бог умер на кресте и сгнил, согласно научной картине мира, оставив своих детей. Либеральная Цивилизация решает покончить с "колыбелью человечества" и запускает в Солнце шаттлы с ядерными боеголовками. Теперь над Землей довлеет Багровый глаз. И он растет каждый час. Сможет ли Цивилизация сделать новый эволюционный шаг в виртуальный мир и вырезать из своих мозгов Архетип? Или Рай и жизнь для удовольствия – лишь дегенеративная сказка? Выдержит ли Прогресс экспансию Евразии или он обречен быть утопленным в животной религиозности? Знакомьтесь! Дьявол, заточенный в теле инвалида-гомосексуалиста, хлыстовка, ставшая Великой блудницей, самозванец, занявший опустевший трон Бога, а также отважные психонавты и другие неординарные личности сойдутся в напряженной схватке, чтобы решить, сохранит ли человек Образ Божий или станет чем-то другим? Роман-антиутопия "Разбитый Адам" повествует о развитии и столкновении апокалиптических проектов Евразии и западной цивилизации в середине 27-го столетия.


Круг Камней: Кровь эльфов

Давняя вражда между эльфами и людьми вспыхнула с новой силой. Эльфы завоевывают все новые территории и мечтают уничтожить Империю людей. Армия чудовищ, запечатанная в древнем эльфийском городе, оказалась на свободе. Неведомым образом все это связано с магией Круга Камней, о которой люди ничего не знают. Дознаватель Кристиан Уорден, несостоявшийся боевой маг, мечтавший о спокойной жизни советника лорда-правителя, оказался в эпицентре войны. Теперь ему придется совершить невозможное, чтобы выяснить правду о таинственном Круге и остановить врагов.


Столократия

15/09/2017rusamlib.ruhttp://samlib.rusamlib.ru2017-09-15 11:40:17http://samlib.ru/w/wbirjuk/zver_kc20doc.shtmlsamlib59bb91f724b474.929370741.0Бирюк В.Зверь Лютый. Книга 20. СтолократияЗверьлютыйКнига 20. СтолократияЧасть 77. "Увидишь клад, какого не..."Глава 419-- Шолом алейхем.-- Алейхем ашшалом. Э-э-э...-- Ну и что вы хочите сказать этим своим бесконечным "э-э-э", которое звучит как призыв взволнованной беременной овцы к заезжему акушеру в тот волнительный момент, когда уже поздно и опорос пошёл?-- Уважаемые! Я не знаю об чём вы тут спорите, но ехать уже пора!-- Золотые слова.


Новая религия

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Ряска Правды

Люди до смерти боятся нечисти, обходят болото стороной. Нечисть, в свою очередь, презрительно фыркает, воротит нос и выбираться из чащоб не спешит. Впрочем, везде встречаются мечтатели — неправильную кикимору по имени Златеника тянет прочь, на свободу. Когда на берегу болота откуда ни возьмись является очаровательный принц, Ника принимает его деловое предложение. Вот только болото не отпускает так просто. Да и люди так просто не принимают. Во дворце гадюк больше, чем на топи. А если ещё и помочь темному магу…