Практикум для изучения дисциплины «Основы программирования»



Pdf көрінісі
бет32/81
Дата08.07.2020
өлшемі1,55 Mb.
#74978
түріПрактикум
1   ...   28   29   30   31   32   33   34   35   ...   81
Байланысты:
А.А. Тюгашев

ЗАМЕЧАНИЕ 
Не следует проверять на равенство вещественные переменные типов float или 
double, поскольку операция эта точная, а в памяти хранятся и получаются при 
вычислениях на  компьютере  лишь приближенные  значения.  Для  проверки  на 
равенство  данных  этого  типа  можно  сравнивать  модуль  разности  чисел  с 
некоторым положительным допуском ε. 
Следующий важный тип данных — логический. Он может называться: 
 
LOGICAL
 — 
в Фортране; 
 
bool
 — 
в С++, С#; 
 
boolean
 — 
в Паскале, Аде, Java и др. 
В  большинстве  языков допустимые  значения  для  логического  типа носят 
наименования  false  и  true.  Логические  переменные  могут 
использоваться  в  условных  операторах.  К  ним  применимы  операции 
сравнения  на  равенство,  а  также  (не  побитовые)  логические  операции  И, 
НЕ, ИЛИ. 
Переменная  может  использоваться  для  хранения  одиночного  символа. 
Этот тип данных называется: 
 
char
 — 
в Си, С++, С#, Java, Паскале и др.; 
 
сharacter — в Фортране, Аде (см. уточнение о регистре символов) и 
др. 
К  переменным  символьного  типа  можно  применять  сравнение  на 
равенство.  В  языке  Си —  те  же  действия,  что  и  к  типу  int,  включая 
арифметику,  хотя  это  довольно  опасная  практика,  используемая  в 
основном для «трюков» программирования. 


56 
 
Во  многих  языках  программирования  переменная  может  связываться  с 
целой строкой символов, среди них есть как языки со строгой статической 
явной  типизацией,  так  и  иные —  Бейсик,  PHP,  Лисп,  С++,  Python, 
РАПИРА, Пролог и др. Стоит еще раз отметить, что Фортран — первый из 
созданных  языков  программирования  высокого  уровня —  имеет  весьма 
развитую систему типов и по этому критерию превосходит многие более 
поздние  языки.  В  нем  можно  использовать  то  же  ключевое  слово  для 
описания  строк,  например  объявить  переменную  CHARACTER*20  для 
хранения строки из 20 символов. 
К  строкам  обычно  применимы  операции  сравнения  на  равенство  и 
неравенство,  а  также  слияние —  конкатенация  (так  называется  действие, 
при  котором  строка  приписывается  в  конец  другой).  Во  многих  языках 
есть  операция  взятия  символа  с  указанным  порядковым  номером.  Могут 
присутствовать операции определения длины строки, вырезания подстроки 
из строки (РАПИРА, С++) и др. 
Отдельным  и  весьма  важным  моментом  является  преобразование  типов 
данных.  Допустимо  ли  в  рамках  одного  выражения  использовать 
переменные,  относящиеся  к  различным  типам  данных?  Во  многих 
ситуациях  это  представляется  полезным,  несмотря  на  пользу  строгого 
контроля типов для надежности программ. Действительно, весьма логично 
и интуитивно хочется считать допустимой запись, когда в ходе операции 
деления  целых  чисел  результат  сохраняется  в  переменной  с  плавающей 
точкой. Явно ничего страшного не произойдет, если мы к вещественному 
числу прибавим целое. 
В  языках  программирования  выделяют  явное  и  неявное  преобразования 
типов.  Неявное  преобразование  выполняется  системой  с  использованием 
встроенных правил. Явное преобразование задает программист, используя 
соответствующий синтаксис языка программирования, например: 
x = (int)d * 10 + y;   /* преобразование типа в Си */ 
y = static_cast(65534);    // преобразование в С++ 
Контрольные вопросы 
1. 
Возможно  ли  полноценное  представление  математического  понятия 
числа в ЭВМ? Почему? 
2. 
Как представляются целые числа в памяти ЭВМ? 
3. 
Как  представляются  дробные  числа  в  памяти  компьютера?  Откуда 
произошло название типа данных с плавающей запятой? 
4. 
Какие операции над числами допустимы в языках программирования? 
5. 
Понятие и назначение логического типа данных. Примеры. 


57 
 
6. 
Что  такое  символьный  тип  данных,  допустимые  операции,  строковый 
тип? 
7. 
Зачем  нужно  преобразование  типов  данных  в  программах?  Приведите 
примеры. 
Указатели 
В  ряде  языков  программирования,  например  Си,  Паскаль,  С#,  допустимо 
использование  так  называемых  указателей.  Они  относятся  к  еще  одной 
разновидности  встроенных  типов  данных.  Указатель —  константа  или 
переменная,  задающая  адрес  в  памяти,  где  располагаются  некоторые 
другие объекты (данные, функция). 
Допустимо,  в  частности,  объявить  некую  переменную,  которая  будет 
указывать на находящееся в памяти целое. 
Пример на языке С++: 
int* pA; // переменная pA указывает на целое число 
Теперь можно присваивать переменной-указателю значение ссылки (адрес) 
целого  и  после  этого  обращаться  к  объекту  в  памяти  через  указатель  на 
него. 
Пример на языке С++: 
int a=10; 
pA=&a; // pA теперь указывает на a 
*pA=100; // эта запись присваивает переменной a значение 100 
Смешивать  типы  при  использовании  указателей  в  общем  случае 
недопустимо.  Ссылки  могут  использоваться  и  для  составных  структур 
данных, в частности, они активно применяются при обработке массивов и 
списков. 
В языках программирования встречается предопределенное наименование 
для пустой ссылки — указателя, еще не связанного с каким-либо объектом 
в памяти, часто это NULL или NIL. 
Контрольные вопросы 
1. 
Что  такое  указатели?  Приведите  пример  их  использования  в  языках 
программирования. 
2. 
Что такое пустой указатель? 
 
Перечисления 
 


58 
 
В  некоторых  языках  программирования  допускается  задание  так 
называемых перечислений. Бывает удобно называть объекты в программе 
привычными  именами,  а  не  раз  и  навсегда  заданными  наименованиями 
типов. Перечисления отвечают указанной потребности, например: 
Type DAY=(Monday,Tuesday, Wednesday,Thursday, Friday, Saturday, 
Sunday);  (* 
Паскаль*) 
type Cardsuit is (clubs, diamonds, hearts, spades); -- 
Ада 
enum MyColors {Red = 100, Green = 110, Blue = 120} // C# 
В них явным образом указывается набор значений, допустимых для данной 
переменной, —  фактически,  создается  новый  тип  данных.  После  его 
введения  допускается  объявление  переменной  данного  типа  наряду  с 
базовыми, например: 
MyColors cwet=Green; // С# 
Обычно при компиляции значения перечислений представляются целыми 
числами. В зависимости от языка программирования представление может 
быть  либо  полностью  скрыто  от  программиста,  либо  доступно  ему, 
например,  путем  принудительного  преобразования  значения  типа 
«перечисление»  к  значению  типа  «целое  число»,  либо  даже  управляемо 
явно, как показано в примере. 
При  попытке  присвоить  переменной  перечислимого  типа  значение,  не 
указанное при его определении, будет выдаваться ошибка. Это позволяет 
еще  более  повысить  надежность  программ  по  сравнению  с  простой 
статической  типизацией.  Перечислимый  тип  используется  довольно 
широко  и  воспринимается  как  сама  собой  разумеющаяся  особенность 
современных  языков  программирования.  Тем  не  менее  не  обходится  без 
критики  со  стороны  теоретиков  и  практиков  программирования.  При 
разработке языка программирования Оберон перечислимые типы попали в 
список  особенностей,  которые  были  удалены  из  него.  Никлаус  Вирт, 
разработчик  языка,  назвал  следующие  причины:  «Во  все  возрастающем 
числе программ непродуманное  использование  перечислений… приводит 
к демографическому взрыву среди типов, что, в свою очередь, ведет не к 
ясности программ, а к многословию». 


Достарыңызбен бөлісу:
1   ...   28   29   30   31   32   33   34   35   ...   81




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет