40гг первые цифровые компьютеры программирование путем коммутации проводов
Вид материала | Документы |
СодержаниеС: character Epsilon — Буквы, цифры, спец_сиmb) FIRST — минимальное значение указанного типа имя_типа' LAST Рабочие дни Ключевые слова Список ключевых слов Примеры констант Описание функции |
- Рабочая программа учебной дисциплины «Системы коммутации» Направление подготовки, 204.68kb.
- Неоднородный полупроводниковый носитель информации в переменном магнитном поле, 107.68kb.
- Темы Лекции Практика, 13.65kb.
- Общие принципы построения вычислительных сетей, 1480.56kb.
- Курс лекций "интернет технологии", 1261.62kb.
- А) Представление информации в цифровых автоматах (ЦА), 34.28kb.
- Информатика. Лекции. Краткая история компьютерной техники Первые компьютеры: Z3, Colossus,, 3630.67kb.
- Курс лекций для студентов очного и заочного отделений по специальности 210406 «Сети, 3045.9kb.
- Радумльская средняя школа, 28.4kb.
- Лекция №7. Обобщенная задача коммутации Важной задачей построения сетей ЭВМ является, 67.2kb.
С: character;
С:=4;
С:=‘4’;
- Неявное преобразование типов может привести к непредсказуемым результатам
X,Y: real;
I,J,K: integer;
K:=X-J;
- Из-за использования неявного преобразования типов программа может иметь законную но не очевидную интерпретацию
1<2<3 – истина и 3<2<1 – истина
Сильно типизированные языки
Используется операция явного преобразования типа
X: real;
I: integer;
В: boolean;
С: character;
Х:=rеаl(I);
C:=character(10);
Эквивалентность типов
- Требования к реализации
- интуитивная привлекательность
- легкость реализации
- эффективность выполнения
- Эквивалентность по структуре (структурная эквивалентность) – совпадают описания типов
- Эквивалентность по имени (именная эквивалентность) – типы с разными именами считаются разными
type TAБЛ1 is array (1..10) of integer;
type ТАБЛ2 is array (1..10) of integer;
X: array(l. . 10) of integer;
Y: ТАБЛ1;
Z: ТАБЛ2;
- В случае эквивалентности по структуре типы переменных X, Y, Z будут считаться одинаковыми, а в случае эквивалентности по имени — различными
Преимущества эквивалентности типов по имени
- Сильно упрощается распознавание эквивалентности типов по имени
- Запрещение взаимодействия различных типов, даже если они имеют одинаковую структуру.
Поколения языков
- Конкретная система типов представляет собой компромисс между эффективностями реализации и контроля типов.
- Первое поколение - языки с минимальными возможностями типизации
- Предоставляют лишь средства для описания переменных простых типов и массивов; никаких новых типов вводить нельзя.
- Фортран, Алгол-60.
- Второе поколение – языки, предоставляющие программисту основные конструкторы типов: массивы, записи, объединения
- ПЛ/1, Алгол-68, Паскаль, С
- Тип рассматривается как множество значений, получаемых из базисных множеств с помощью конструкторов.
- Все операции над типами данных предопределенные — определяемые языком, а не программистом.
- Новые типы могут получать имена, но с ними нельзя связывать новых, специально вводимых операций.
- Третье поколение – языки, предоставляющие программисту средства определения абстрактных типов данных
- С++, C#, Java
- Типы понимаются как множества с операциями.
Простые типы данных
Простые типы данных
Объекты простых типов не имеют внутренней структуры, они могут содержать лишь одно неделимое значение.
Числовые типы
- Целые числа – бесконечное множество дискретных значений.
- Действительные числа - неограниченный континуум значений
Целые типы
- Описание типа имеет вид
- type имя_типа is integer range нижняя_граница..верхняя_граница;
- Переменные такого типа могут принимать любые целые значения в указанном диапазоне
- Указание диапазона позволяет:
- повысить надежность и удобочитаемость
- выбрать компилятору наиболее эффективный способ представления значений
Эффективность реализации
- Указание диапазона позволяет строить мобильные программы, сохраняя эффективность их реализации.
- Желание отказаться от указания диапазона сталкивается со сложностью реализации.
type BIG_INT is integer
range -2147483648..2147483647,
INT is integer range -32768..32767,
SMALLINT is integer range -128..127;
Атрибуты целого типа
- Атрибуты типа – конструкция языка, позволяющая получить информацию о свойствах типа
- имя_типа'FIRST
- имя_типа'LAST
или
- имя_переменной'FIRST
- имя_переменной'LAST
Операции над переменными целых типов
- сложение (+)
- вычитание (-)
- умножение (*)
- деление (/)
- остаток от деления (mod)
- возведение в степень (**)
- сравнение на равенство (=)
- сравнение на неравенство (/=)
- сравнение на меньше (<)
- сравнение на меньше или равно (<=)
- сравнение на больше (>)
- сравнение на больше или равно (>=)
- унарный плюс (+)
- унарный минус (-)
- абсолютное значение (abs)
Деление и остаток от деления
- Результат операции деления всегда целый
- Округление производится в сторону нуля как для положительных, так и для отрицательных значений
- Остаток от деления
X mod У = Х-(Х/У)*У
Действительные типы
- Описание имеет вид
- type имя_типа is real range нижняя_граница..верхняя_граница digits количество значащих цифр;
- или
- type имя_типа is real
range нижняя_граница..верхняя_граница delta абсолютная_точность;
- В случае если диапазон не указан предполагается, что значения лежат в некотором предопределенном диапазоне, зависящем от конкретной реализации
- Переменные могут принимать любые действительные значения в указанном диапазоне, которые будут храниться либо с указанным количеством значащих цифр — плавающие типы, либо с указанной абсолютной точностью — фиксированные типы.
type
FLOAT is real range -7.2E75..7.2E75
digits 6,
FIXED is real range -2.0..2.0 delta 0.01;
Атрибуты действительных типов
- вместо имени типа можно указывать имя переменной
- имя_типа' FIRST — нижняя граница значений
имя_типа' LAST — верхняя граница значений
- имя_типа' DIGITS — количество цифр мантиссы
- имя_типа' EPSILON — абсолютное значение разности между 1.0 и ближайшим к 1.0 большим его числом данного типа
- имя_типа' SMALL — значение минимального положительного числа
- имя_типа' LARGE — значение максимального положительного числа
- имя_типа' DELTA — абсолютная точность
Запись констант
- запись с точкой:
- 10.4
- -0.000000000145
- запись с порядком:
- 104Е-1
- -145Е-12
- запись с точкой и порядком:
- 1.04Е1
- -1.45Е-10
Операции над переменными действительных типов
- сложение (+)
- вычитание (-)
- умножение (*)
- деление (/)
- возведение в степень (**)
- сравнение на равенство (=)
- сравнение на неравенство (/=)
- сравнение на меньше (<)
- сравнение на меньше или равно (<=)
- сравнение на больше (>)
- сравнение на больше или равно (>=)
- унарный плюс (+)
- унарный минус (-)
- абсолютное значение (abs)
Особенности округления
- При вычислении выражения с действительными числами с конечной точностью представления возникают погрешности, которые могут оказать существенное влияние на получаемые результаты
- Следует сравнивать действительные числа лишь на приближенное равенство и неравенство, например
if abs(X-Y)<0.00001*abs(X) then ...
Уменьшение погрешностей вычислений
- складывать наименьшие члены сумм первыми;
- определять все положительные и отрицательные слагаемые и складывать их поочередно;
- избегать вычитания двух почти равных чисел; если это все же необходимо, производить вычитание до умножения или деления (т.е. лучше записать А*(В-С), чем А*В-А*С);
- избегать показателей степени в форме действительных чисел, так как в этом случае степень вычисляется через log и ехр; напротив, G**2 (если такая операция допускается) вычисляется как G*G;
- использовать операцию извлечения квадратного корня sqrt (если она есть) вместо G**0.5, так как sqrt обычно вычисляется точнее;
- использовать в процессе вычисления максимально возможную точность, если это необходимо;
- уменьшать число операций;
- избегать цепочек операций, в которых используются неточные значения;
Перечислимые типы
- Описание типа имеет вид:
- type имя-типа is
(значение1, значение2, ... );
- type АЛФАВИТ is (БУКВЫ, ЦИФРЫ, СПЕЦ_СИMB);
- type ДНИ_НЕДЕЛИ is (ПН, ВТ,СР,ЧТ, ПТ,СБ, ВС);
- Переменная такого типа может принимать значения только из списка в описании типа.
Операции над переменными перечислимых типов
- Всегда определены
- сравнение на равенство (=)
- сравнение на неравенство (/=)
- Определены в некоторых языках
- сравнение на меньше (<)
- сравнение на меньше или равно (<=)
- сравнение на больше (>)
- сравнение на больше или равно (>=)
Атрибуты перечислимых типов
- вместо имени типа можно указывать имя переменной
- имя_типа' POS — функция с одним параметром перечислимого типа, значением которой является порядковый номер значения параметра
- имя_типа' VAL — функция с одним параметром любого целого типа, значением которой является значение перечислимого типа, чьим порядковым номером является значение параметра
- имя_типа' FIRST — минимальное значение указанного типа имя_типа' LAST — максимальное значение указанного типа имя_типа' SUCC — функция с одним параметром перечислимого типа, значением которой является следующее по порядку значение этого перечислимого типа
- имя_типа' PRED — функция с одним параметром перечислимого типа, значением которой является предыдущее по порядку значение этого перечислимого типа
Логический тип
- Описание типа имеет вид:
- type boolean is (false, true);
- Операции
- сравнение на равенство (=)
- сравнение на неравенство (/=)
- логическое дополнение (not)
- логическое И (and)
- логическое ИЛИ (or)
Подтипы
- Подтипы используются для ограничения множества значений типа
- Например:
type ДНИ_НЕДЕЛИ is (ПН, ВТ,СР,ЧТ, ПТ, СБ, ВС);
subtype РАБОЧИЕ ДНИ is ДНИ_НЕДЕЛИ range ПН. . ПТ;
X: РАБОЧИЕ ДНИ;
- Объекты типа РАБОЧИЕ_ДНИ могут свободно смешиваться с объектами типа ДНИ_НЕДЕЛИ, не требуя явного применения преобразования типа
Анонимные типы
- Если нет необходимости вводить имя нового типа (будут описаны лишь один или два объекта этого типа) можно записать определение типа в том месте, где требуется имя типа.
- Например:
type КЛЮЧ is (ВКЛ,ВЫКЛ);
P,Q: КЛЮЧ;
можно описать, используя механизм анонимных типов:
P.Q: (ВКЛ.ВЫКЛ);
Эквивалентность анонимных типов
- Переменные P и Q имеют один тип
P.Q: (ВКЛ.ВЫКЛ);
- Переменные P и Q имеют различные типы
Р: (ВКЛ.ВЫКЛ);
Q: (ВКЛ.ВЫКЛ);
Базовые средства языка С++
Основные вопросы
- Состав языка
- Простые типы данных
- Переменные
- Структура программы
- Этапы создания исполняемой программы
Алфавит языка С++
- Прописные и строчные латинские буквы и знак подчеркивания
- Арабские цифры от 0 до 9;
- Cпециальные знаки:
"{}.![]()+-/%*.\’:?<=>!~;
- Пробельные символы: пробел, символы табуляции, символы перехода на новую строку.
- Из символов алфавита формируются:
- идентификаторы;
- ключевые (зарезервированные) слова;
- знаки операций;
- константы;
- разделители (скобки, точка, запятая, пробельные символы).
Идентификаторы
- Идентификатор — это имя программного объекта.
- В идентификаторе могут использоваться латинские буквы, цифры и знак подчеркивания.
- Прописные и строчные буквы различаются, например, sysop, SySoP и SYSOP — три различных имени.
- Первым символом идентификатора может быть буква или знак подчеркивания, но не цифра.
- Пробелы внутри имен не допускаются.
Выбор идентификатора
- Длина идентификатора по стандарту не ограничена, но некоторые компиляторы и компоновщики налагают на нее ограничения.
- Идентификатор не должен совпадать с ключевыми словами
- Не рекомендуется начинать идентификаторы с символа подчеркивания, поскольку они могут совпасть с именами системных функций или переменных
- На идентификаторы, используемые для определения внешних переменных, налагаются ограничения компоновщика (использование различных компоновщиков или версий компоновщика накладывает разные требования на имена внешних переменных).
Ключевые слова
- Ключевые слова — это зарезервированные идентификаторы, которые имеют специальное значение для компилятора. Их можно использовать только в том смысле, в котором они определены.
Список ключевых слов
asm | else | new | this |
auto | enum | operator | throw |
bool | explicit | private | true |
break | export | protected | try |
case | extern | public | typedef |
catch | false | register | typeid |
char | float | reinterpret_cast | typename |
class | for | return | union |
const | friend | short | unsigned |
const cast | goto | signed | using |
continue | if | sizeof | virtual |
default | inline | static | void |
delete | int | static_cast | volatile |
do | long | struct | wchar_t |
double | mutable | switch | while |
dynamic_cast | namespace | template | |
Константы
- Константами называют неизменяемые величины.
- Различаются целые, вещественные, символьные и строковые константы.
Примеры констант
Константа | Формат | Примеры |
Целая | Десятичный: последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль Восьмеричный: нуль, за которым следуют восьмеричные цифры (0,1,2,3,4,5,6,7)Шестнадцатеричный: Ох или ОХ, за которым следуют шестнадцатеричные цифры (0,l,2,3,4,5,6,7,8,9,A,B,C,D,E,F) | 8, 0, 199226 01, 020, 07155 ОхА, 0xlB8, 0X00FF |
Вещественная | Десятичный: [цифры]. [цифры] Экспоненциальный: [цифры] [.] [цифры]{Е|е}[+-] [цифры] | 5.7, .001, 35. 0.2Е6, .lle-3, 5E10 |
Символьная | Один или два символа, заключенных в апострофы | 'А', 'ю', '*', 'db', \0', \п\ •\012\ \xO7\xO7' |
Строковая | Последовательность символов, заключенная в кавычки | "ПЯВУ", «\tЗначение r=\0xF5\n" |
Управляющие последовательности
Изображение | Шестнадцатеричный код | Наименование |
\а | 7 | Звуковой сигнал |
\b | 8 | Возврат на шаг |
\f | С | Перевод страницы (формата) |
\n | А | Перевод строки |
\r | D | Возврат каретки |
\t | 9 | Горизонтальная табуляция |
\v | 6 | Вертикальная табуляция |
\\ | 5С | Обратная косая черта |
\’ | 27 | Апостроф |
\" | 22 | Кавычка |
\? | 3F | Вопросительный знак |
\0ddd | - | Восьмеричный код символа |
\0xddd | ddd | Шестнадцатеричный код символа |
Комментарии
Комментарий предназначается для записи поясняющей программу информации
Существует два вида комментариев
- Строчный – начинается с двух символов «прямая косая черта» (//) и заканчивается символом перехода на новую строку
- Блочный –заключается между символами-скобками /* и */.
Внутри комментария можно использовать любые допустимые на данном компьютере символы, а не только символы из алфавита языка C++, поскольку компилятор комментарии игнорирует.
Вложенные блочные комментарии стандартом не допускаются, хотя в некоторых компиляторах разрешены.
Простые типы данных
- Для описания простых типов определены следующие ключевые слова:
- int (целый);
- char (символьный);
- wchar_t (расширенный символьный);
- bool (логический);
- float (вещественный);
- double (вещественный с двойной точностью).
- Первые четыре типа называют целочисленными (целыми), последние два — типами с плавающей точкой. Код, который формирует компилятор для обработки целых величин, отличается от кода для величин с плавающей точкой.
- Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений стандартных типов:
- short (короткий);
- long (длинный);
- signed (знаковый);
- unsigned (беззнаковый).
Целый тип (int)
- Размер типа int зависит от компьютера и компилятора.
- Размер short int <= Размер int <= Размер long int
- Внутреннее представление величины целого типа — целое число в двоичном коде. При использовании спецификатора signed старший бит числа интерпретируется как знаковый (0 — положительное число, 1 — отрицательное).
- По умолчанию все целочисленные типы считаются знаковыми, то есть спецификатор signed можно опускать.
- Константам, встречающимся в программе, приписывается тот или иной тип в соответствии с их видом. Если этот тип по каким-либо причинам не устраивает программиста, он может явно указать требуемый тип с помощью суффиксов L, l (long) и U, u (unsigned).Например:
- константа 32L – signed long int
- константа 77U – unsigned int
- Можно использовать суффиксы L и U одновременно.
Символьный тип (char)
- Под величину символьного типа отводится, как правило, 1 байт.
- Тип char может быть со знаком или без знака.
- В величинах со знаком можно хранить значения в диапазоне от -128 до 127.
- При использовании спецификатора unsigned значения могут находиться в пределах от 0 до 255.
- Величины типа char применяются также для хранения целых чисел, не превышающих границы указанных диапазонов.
Логический тип (bool)
- Величины логического типа могут принимать только значения true и false, являющиеся зарезервированными словами.
- Внутренняя форма представления значения false — 0 (нуль).
- Любое другое значение интерпретируется как true.
- При преобразовании к целому типу true имеет значение 1.
Типы с плавающей точкой
(float, double и long double)
- Внутреннее представление вещественного числа состоит из двух частей — мантиссы и порядка.
- Мантисса — это число, большее 1.0, но меньшее 2.0. Поскольку старшая цифра мантиссы всегда равна 1, она не хранится.
- Константы с плавающей точкой имеют по умолчанию тип double.
- Можно явно указать тип константы с помощью суффиксов F, f (float) и L, 1 (long). Например:
- константа 2E+6L - тип long double
- константа 1.82f — тип float.
Диапазоны значений простых типов
Тип | Диапазон значений | Размер (байт) |
bool | true и false | 1 |
signed char | -128 ... 127 | 1 |
unsigned char | 0 ... 255 | 1 |
signed short int | -32 768 ... 32 767 | 2 |
unsigned short int | 0 ... 65 535 | 2 |
signed long int | -2 147 483 648 ... 2 147 483 647 | 4 |
unsigned long int | 0 ... 4 294 967 295 | 4 |
float | 3.4e-38 ... 3.4e+38 | 4 |
double | 1.7e-308 ... 1.7e+308 | 8 |
long double | 3.4e-4932 ... 3.4e+4932 | 10 |
Тип void
- Множество значений этого типа пусто.
- Он используется:
- для определения функций, которые не возвращают значения,
- для указания пустого списка аргументов функции
- как базовый тип для указателей
- в операции приведения типов
Структура программы
Программа на языке C++ состоит из функций, описаний и директив препроцессора.
Одна из функций должна иметь имя main. Выполнение программы начинается с первого оператора этой функции.
Описание функции
1>3>