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

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

Размеры переменных и типов данных

Иногда требуется знать не только содержимое переменных, но и объём занимаемой ими памяти. Разумеется, вы можете узнать это из таблиц, приведенных в справке или руководстве по языку. Размеры сложных типов данных тоже поддаются расчету. И все же лучший способ определить размер переменной некоторого типа – вызов псевдофункции SizeOf. В качестве параметра она принимает либо имя переменной, либо имя типа, а возвращает целое число – объём занимаемой памяти в байтах. Вот примеры.


>Type TMonth = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);

>Var m : TMonth;

>      ...

>      Writeln ( SizeOf(m) );             { 1 }

>      Writeln ( SizeOf(TMonth) );       { 1 }

>      Writeln ( SizeOf(Integer) );       { 2 }

>      Writeln ( SizeOf(Extended) );       { 10 }



Рис.76 – Совместимость и преобразования типов

Я обозвал SizeOf псевдофункцией за то, что никаких вычислений она не делает, – результат вычисляется при компиляции программы. Ведь компилятор сам «знает» объём памяти, занимаемой любым типом данных, и подставляет в программу уже готовое число.

Псевдофункция SizeOf удобна, и вдобавок улучшает переносимость программ. Например, в разных режимах компиляции Free Pascal и в разных компиляторах размер типа Integer может отличаться (2 или 4 байта). Применяя функцию SizeOf, вам не придется задумываться об этом и менять вручную одни числа на другие, – компилятор сделает это за вас.

Итоги

• Для представления дробных, а также очень больших и очень маленьких чисел используют вещественные типы данных. Разные вещественные числа различаются размером, диапазоном хранимых значений и точностью их представления.

• Тип Extended предпочтительней использовать для вычислений, тип Single – для хранения больших объёмов данных в памяти и на диске.

• Вещественные числа печатаются либо в форме с плавающей точкой, либо в форме с фиксированной точкой.

• Вещественные числа, в отличие от целых, – приближенные. Сравнивать их между собой можно лишь с некоторой точностью.

• Вещественным переменным разрешено присваивать целые значения, при этом преобразование типов происходит автоматически.

• Целым переменным нельзя присвоить вещественные значения непосредственно, для этого используют либо функцию отсечения дробной части Trunc, либо функцию округления Round.

• Порядковые типы данных допускают взаимное преобразование посредством псевдофункций, имена которых совпадают с именами типов данных.

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

• Размер памяти, занимаемый переменной любого типа, определяют псевдофункцией SizeOf. Её применение снижает зависимость программы от особенностей компиляторов и компьютерных платформ.

А слабо?

А) Напишите две функции, округляющие вещественное число:

• до большего значения (например: 3.1 –> 4; 3.9 –> 4);

• до меньшего значения (например: 3.1 –> 3; 3.9 –> 3).

Б) Ваша процедура принимает строковую переменную, вычисляет среднее арифметическое кодов её символов и печатает его с двумя цифрами после точки.

В) Напечатайте с тремя знаками после точки 20 случайных вещественных чисел в диапазоне от 0 до 10. Подсказка: для формирования дробных чисел можно делить случайное число на другое число, например, Random(10000)/1000.

Г) Напечатайте с тремя знаками после точки 20 случайных чисел в диапазоне от 0 до 10 так, чтобы числа следовали по возрастанию. Подсказка: сравнивайте очередное число с предыдущим.

Д) Программа для подсчета стоимости покупок. Для каждой покупки пользователь вводит два действительных числа: вес покупки и цену за 1 кг в рублях. Признак завершения ввода данных – нулевой вес. Программа должна напечатать общую стоимость с точностью до копейки (два знака после точки) с округлением в большую сторону. Проверьте результат на калькуляторе.

Е) Квадратный корень. Квадрат – это равносторонний прямоугольник, его площадь вычисляется по формуле S=D•D, где D – сторона квадрата. А когда площадь S известна, и надо определить сторону D? Тогда из S извлекают квадратный корень (обозначается символом V). Так, если S=9, то D=V9=3.

Для извлечения корня в Паскале есть функция SQRT. Напишите собственную функцию MySQRT, прибегнув к методу последовательных приближений. В грубом, нулевом приближении примем D>0=1. Последующее, более точные значения D будем вычислять по формуле

D>i+1 = (D>i + S/D>i)/2

Так, при S=9 получим D>1=(1+9/1)/2= 5, D>2=(5+9/5)/2= 3.4 и так далее, пока абсолютная разность между двумя последовательными значениями D станет пренебрежимо мала. Функция MySQRT должна принять число и вычислить его корень с точностью 0.0001. Внутри функции напечатайте промежуточные значения D. Подсказка: для D>i и D>i+1 вам потребуются лишь две локальные переменные.

Ж) В тесто кладут четырех главных ингредиента: муку, сахар, яичный порошок и молоко. Все это смешивается в пропорции, заданной рецептом. Например, рецепт 100:5:7:500 означает, что на 100 граммов муки кладут 5 граммов сахара, 7 граммов яичного порошка и 500 граммов молока. У пекаря есть некоторое количество всех ингредиентов, и он хочет замесить из них максимально возможное количество теста, соблюдая рецепт. Ваша программа должна ввести:


Рекомендуем почитать
Он идет за мной

Главная героиня юная карьеристка, Татьяна Лунева, живет в своем неприметном городе, работает на не приметной работе и мечтает об отпуске. В один из июльских вечеров в ее жизнь врывается незнакомец. Он представляется как убийца теней и увозит ее в свой мир, что бы защитить от темных душ, охотившихся за ней. Вскоре Татьяна узнает, что она не просто человек, и что отныне ей придётся бороться за свою жизнь и свободу. Читайте захватывающие приключения юной девушки в мире призраков. И узнайте, каково быть человеком с серебреной душой.


Необычайный Эйдан Ходж 1

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


Мое Черное Сердце

Его мир это ночь. Злой дух. Живой мертвец. Слуга тьмы. Он продал свою душу ради любви. И теперь каждую ночь ровно в полночь он приходит в этот мир чтобы убивать. Тысяча невинных душ это цена одной души… той единственной. Ради любви к которой он покончил с собой и заключил сделку с дьяволом. Но черная испепеляющая страсть не самое возвышенное чувство, за которое он выдавал свою любовь. Но есть ли время, чтобы это понять? Поздно начинать жить, когда ты уже мертв. Будет ли у него шанс почувствовать искреннюю нежность, которая не разольется жгучим ядом по его венам?.


Зеркала

Неожиданно подобранный с улицы кот может оказаться вовсе и не котом, а ещё выясняется, что зеркала способны перенести человека в совершенно иной мир. Благодаря тому самому не-коту, конечно же.


Шептунья

Легко ли быть не такой как все? Безусловно, если твои магические силы вызывают восхищение, страх или любые другие сильные эмоции. Но если это всего лишь непонятная смесь странностей? Что делать? И как быть, если родной отец вдруг «продаёт» пугающему вампиру, совершенно не интересуясь твоим мнением? Быть женой ненавистного существа или же попытаться скрыться, устроив всем незабываемое прощание?


Фарг. Проблему решаю кардинально.

Два года! Два года сохнуть по нему и стесняться признаться... Отдых с подругой решит твою проблему!