| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Различные типы данных
Сегодня мы с вами начнем большую и довольно сложную тему, которая откроет вам новые возможности программирования на Паскале. Итак, чем же мы будем сегодня заниматься? Сегодня мы серьезно вернемся к изучению различных типов данных. Мы с вами завершили довольно большой этап обучения и теперь перейдем к другому, не менее важному. Изучать мы будем вещественные типы или числа с плавающей запятой. Сразу хочу сделать некоторые уточнения, которые вам необходимо учесть в дальнейшем. Хочу заметить, что вам уже самим придется кое в чем поразбираться. Будет очень много нюансов, на которых я не то, чтобы не могу останавливаться, но просто запутаю вас. Кроме того, размер и периодичность рассылки довольно ограничены, поэтому я постараюсь давать в выпусках как можно больше информации. В небольшой ущерб объяснениям. Ну а теперь, пожалуй, будет уместно начать непосредственное изучение новых типов данных.
Не знаю, обращали ли вы серьезное внимание на известные нам типы. Если да, то знаете, что они довольно разнообразны и подходят под все случаи жизни. Например, WORD - хранит тот же диапазон, что и Integer, но без отрицательной стороны. Она как бы прибавляется к нему в качестве положительной, в два раза увеличивая возможное значение типа выше нуля. Тип Byte - экономит нам память. Тип LongInt - позволяет при необходимости использовать числа огромного диапазона значений. И т.д. Их достоинства и недостатки можо перечислять бесконечно. Возможно, я и уделю когда-нибудь этому внимание в выпуске. Вполне возможно. Ну а сейчас я хочу, чтобы вы вспомнили, что за числа умеют хранить известные нам типы. Да, они все разные по диапазону и размеру, но они все целые. Невозможно в переменную типа Integer записать значение 3.14 (пи) или 182.1555. Мы не можем этого сделать. Но понятно, что в программировании нельзя ограничиться только целыми значениями. Возьмем даже такой примитивный пример: решение квадратных уравнений. Эту задачу невозможно выполнить без вещественных чисел. В большинстве случаев в них возникает необходимость. И естественно, они существуют в Паскале. Как и целых, вещественных типов тоже довольно много. Они разнообразны и в их разнообразии лежит тот же принцип, что и у целых: по возможности использвать числа меньшего диапазона для экономии памяти и оптимизации программы. Еще раз напомню, именно поэтому в Паскале (как в многих других серьезных языках) существует целая шкала целых и вещественных типов. Надо заметить, что вещественные типы необходимо использовать даже более рационально, чем целые. Они обычно занимают в памяти больший размер (целая часть+значения после запятой) и дольше вычисляются. Итак, привожу таблицу всех вещественных типов языка Turbo PASCAL 7.0:
Здесь значок "^" обозначает степень. Думаю, вы знаете (помните) такую запись чисел. Если не знаете, что делать... на математику у нас времени нет. Ограничусь самым минимальным комментарием: К примеру, запись типа Real: 2.9x10^-39 .. 1.7x10^38 обозначает следующее: Минимальной границей типа является число 2.9 * 10 в степени -39. Число получается оччччень большое (точнее наоборот, маленькое :)) - я имел ввиду длинное). И писать его в обычном виде довольно нудно. Таже история и с максимальной границей типа: 1.7 * 10 в степени 38. Число опять длинное. На сей раз действительно большое, даже громадное! Если это для вас сложно, найдите учебник математики, точно не помню за какой класс.... за 7-ой кажется, и почитайте данную тему. А мы двигаемся дальше. Итак, мы определились с вещественными типами. Теперь нужно немного подучиться работе с ними. Давайте начнем с простого ввода и вывода этих чисел. Напишем небольшую программку:
Запустите программу. При вводе чисел используйте точку как разделитель целой и дробной части:
178.13 Именно точку, а не запятую! Вы видите, что творит Паскаль? Он выводит ужасные числа, пририсовывая к ним экспоненту. Зачем? Может, вы не хотите видеть на своем мониторе такое некрасивое число? Я вас пониманию. Для этого как раз и существует форматный вывод процедуры Write. Что же это такое? Форматный вывод - это задание диапазона вывода. То есть мы сразу в процедуре Write (Writeln) определяем, сколько распечатывать знаков до точки и после нее. К примеру, мы хотим, чтобы целая часть выводилась по максимуму пятью цифрами, а дробная - двумя. Чтобы реализовать это, мы припишем к переменной, стоящей в процедуре два числа, разделив их двоеточием: Write('Real: ', A:5:2); Теперь у нас будет выводиться в более читабельном виде. Измените в программе эти значения по своему усмотрению. Вполне нормально, не так ли? Ну а я с превеликим сожалением констатирую, что это все про форматный вывод. Думаю, многие не до конца поняли всю суть. Это ничего, после небольшой тренировки вы без труда разберетесь. Уверяю вас, попробуйте! Сотрите написанную мной программу и напишите свою! Посмотрите, как влияет форматный вывод на представление чисел на экране. Сразу же разберетесь, точно вам говорю. Переходим к манипулированию с вещественными числами. Следующей будет программа, производящая действия с новыми типами, ну а пока я покажу, что же можно с ними делать:
То есть все действия как и с целыми, за исключением деления. Важное замечание: в качестве одного из элементов в арифметических операциях может быть и целый тип. Пример:
Помните об этом. Не зацикливайтесь на различиях целых и дробных чисел, ищите сходства и возможности совместимости. Ну а теперь примера ради давайте напишем программу, манипулирующюю с целыми и дробными числами, а также использующюю форматный вывод. Думаю, программа, печатающая цикл из вещественныз чисел от 1.00 до 1.90 с шагом в 0.1 будет уместной.
Разобрались? Хочу сделать несколько комментариев к программе.
Ну а теперь я думаю, вы полностью разобрались с вещественными типами данных и пора написать новую программу. На сей раз посложнее и более функциональную. Итак, что же мы будем делать? А давайте напишем программу решения квадратных уравнений. Кстати, она полезна не только для написания, но и для использования. Итак, мы определились. С чего начнем? С определения квадратного уравнения. (Извиняюсь, конечно, но меня терзают смутные сомнения, что кто-нибудь, да не знает, что это такое... Говорю по собственным наблюдениям!!) Усложнять мы не будет, на этом этапе сделаем все по минимуму. Давайте вспомним вид квадратного уравнения (^ - это степень):
Ax^2 + Bx + C = 0, A<>0. А корни находятся так: X 1,2 = (+,- B - sqrt(D)) / 2A, D = B^2 - 4AC. Не пугает вид такой формулы? На самом деле здесь все элементарно: X 1,2 - это X1 и X2. Соответсвенно находим их сложением и вычитанием дискриминанта.
Вот так мы с вами и разобрались, что же такое квадратное уравнение. Я хочу обратить ваше внимание на возникшие по ходу рассуждения условия: A <> 0, а также правила, связанные с дискриминантом. Естественно, при вводе А нужно его соответсвующе проверить. Также сначала надо найти дискриминант и выдать соответсвующие данные. Вот программа, выполняющая эти действия:
Посмотрите внимательно на эту программу. В ней появились новые для вас слова:
Сама по себе программа довольно проста и я думаю, вам не составит труда в ней разобраться. Для демонстрации удачного решения попробуйте ввести следующие данные:
При таких данных ответ будет: X1 := -0.50, X2 := -2; Кроме того, у меня к вам есть задание: Постарайтесь сделать данную программу интерактивной: пусть при возникновении недопустимых условий программа не завершает работу по HALT, а начинается сначала; при удачном выполнении спрашивает, 'Сначала? (Y/N): ' и принимает соответсвующее решение: завершает работу или начинается сначала. Ну вот собственно и все на сегодня. В этом выпуске мы прошли довольно много нового и полезного материала, который определенно расширит ваши возможности в программировании. Кроме того, обратите внимание, что наши программы становятся все больше и сложнее. Это радует, так как является показателем продвижения. Думаю вы тоже так считаете. Рубрика: Работа с Pascal
Вышел MySQL 5.1.30, первый стабильный рели....
После публикации 29 тестовых версий анонсирован первый стабильный релиз MySQL 5.1, пригодный для промышленной эксплуатации и обеспечивающий увеличение производительности для "тяжелых" SQL запросов, по сравнению с MySQL 5.0, примерно на 15-20%. Главные новшества появившиеся в MySQL 5.1:
Подробнее... |
Рубрика: MySQL
| Добавлено: 28.11.2008
Тестирование параллельных программ.
Тестирование параллельного программного обеспечения представляет собой более сложную задачу по сравнению с тестированием последовательной программы. Программист должен знать о подводных камнях при тестировании параллельного кода, имеющихся методологиях и инструментарии.
Подробнее... |
Рубрика: Тестирование
| Добавлено: 28.11.2008
Архитектура AMD64 (EM64T).
Аннотация. В статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.
Подробнее... |
Рубрика: Архитектура AMD
| Добавлено: 27.11.2008
Остальные статьи: |
Цитата дня (все,добавить):
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|