40гг первые цифровые компьютеры программирование путем коммутации проводов

Вид материалаДокументы

Содержание


С: character
Epsilon —
Буквы, цифры, спец_сиmb)
FIRST — минимальное значение указанного типа имя_типа' LAST
Рабочие дни
Ключевые слова
Список ключевых слов
Примеры констант
Описание функции
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   12

С: 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

Вертикальная табуляция

\\



Обратная косая черта

\’

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. Выполнение программы начинается с первого оператора этой функции.

Описание функции