Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi / песни о паскале.pdf
Скачиваний:
62
Добавлен:
26.03.2016
Размер:
5.16 Mб
Скачать

Глава 46

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

Первое слагаемое (499 цифр):

88034474755263463811157748177169236752040135153256253684350812170455816590318

00071999794366118265182563758720378673660135839398953141512906024942788294156

87161839916961209398611500546931200667866376204115538852965830795649105020542

39766629218650967805390582667595078756176058697083583183449492998242422080009

29286578540423001609560508264356930728328745107168941254697109511365727966941

14943180905784305897765764767829886881494780038570897897494598050757092044228

9778748724626014927619547782761770630

Второе слагаемое (499 цифр):

43010563208133392591277430216910724399992657359176370031800475954810286799180

94988721008241589616753155174586670761982847129881691883312995998642786642828

13634112956964635790325217557777821776772170919033280201619190732499393489224

79685741671026466238595732664573620249024113167965874496798091533936733068022

89884085958345033422404931451426067305519212005730606726274258487491929559866

58127808673232802597523028091073608068168675926089639207972222781877706192312

8832709593717254099272079488419978116

Сумма (500 цифр):

13104503796339685640243517839407996115203279251243262371615128812526610338949

89506072080260770788193571893330704943564298296928064502482590202358557493698

50079595287392584518893671810470902244463854712314881905458502152814849850976

71945237088967743404398631533216869900520017186504945768024758453217915514803

21917066449876803503196543971578299803384795711289954798097136799885765752680

77307098957901710849528879285890349494966345596466053710546682083263479823654

18611458318343269026891627271181748746

Результат сложения нетрудно проверить в уме, — здесь калькулятор не только излишен, но и бесполезен.

Итоги

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

Встроенная процедура FillChar заполняет нужным значением массив или переменную любого типа.

Файловые переменные Input (для ввода с клавиатуры) и Output (для вывода на экран) встроены в язык. Они не требуют ни объявления, ни

356

Глава 46

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

открытия, ни закрытия, и могут передаваться в качестве параметров процедур, как и другие файловые переменные.

А слабо?

А) Постройте сверхбольшие числа на основе строковых переменных (количество цифр — не более 255).

Б) Напишите процедуру для вычитания сверхбольших чисел. Или слабо? Учтите, что разность может быть и отрицательной!

В) Автоматически объявленные файловые переменные Input и Output по умолчанию связаны соответственно с клавиатурой и экраном. Но их можно связать и с дисковыми файлами, например:

Assign(Input, 'Data.In'); Reset(Input);

Assign(Output, 'Data.Out'); Rewrite(Output);

Readln(S);

{ Чтение строки из Data.In }

Writeln(S);

{ Запись строки в Data.Out }

Close(Input);

Close(Output);

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

Задачи на темы предыдущих глав

Г) Жители райцентра Бюрократовка дневали и ночевали в очереди за справками. Всё потому, что там применяли механический текстовый файл — огромную скрипучую книгу, которая листалась лишь в одном направлении — от начала к концу файла. Если первая буква фамилии очередного посетителя следовала по алфавиту далее, чем у предыдущего, то чиновник продолжал листать страницы с текущей позиции, а иначе открывал на первой и листал от начала. Переход от одной буквы алфавита к другой и возврат в начало занимали один час. Так, если буквы следовали в порядке «АБВ», то на выдачу справок тратилось три часа, а если в обратном порядке — «ВБА», — то шесть часов (3+2+1). Если же первые буквы фамилий совпадали, то книгу всё равно листали заново, поэтому на «БББ» тратилось шесть часов. Создайте функцию, принимающую «очередь посетителей» — строку из прописных латинских букв, — и возвращающую время, необходимое для выдачи всех справок.

Д) Томясь в бюрократической очереди, свинопас Гришка нашел способ ускорить выдачу справок путем частичного упорядочения очереди (см. задачу Г). Создайте функцию, возвращающую такую частично упорядоченную строку (воспользуйтесь множеством символов). Напишите программу для сравнения времен по условиям задач Г и Д.

357

Соседние файлы в папке delphi