- •Государственное образовательное учреждение высшего профессионального образования «Тульский государственный университет»
- •Конспект лекций
- •Информатика
- •Содержание
- •Системы счисления. Позиционные и непозиционные системы
- •2.1. Кодирование текста
- •2.2. Растровая и векторная графика
- •2.3. Представление цвета
- •2.4. Представление звука. Ацп. Цап
- •3.1. Принцип фон Неймана
- •3.2. Общая структурная схема процессора
- •3.3. Арифметико-логическое устройство (алу)
- •3.4. Адрес ячейки памяти
- •3.5. Регистры процессора
- •3.6. Как процессор складывает два числа
- •4.1. Эволюция средств вычислений
- •4.2. Эволюция эвм
- •4.3. Поколения эвм
- •5.1. Эволюция персональных эвм
- •5.2. Классификация эвм
- •6.1. Программное обеспечение
- •6.2. Функции ос
- •6.3. Трансляция программ
- •6.5. Декомпозиция
- •6.6. Объектно-ориентированное программирование
- •7.1. Понятие алгоритма. Свойства алгоритма
- •7.2. Способы записи алгоритма: псевдокод, блок-схема
- •7.3. Преобразование программы в машинные коды. Интерпретаторы и компиляторы
- •7.4. Оптимизация кода для повышения эффективности
- •7.5. Структура ide. Отладка программ
- •8.1. Описание структуры проекта
- •8.2. Описание структуры модуля
- •8.3. Описание элементов программ
- •8.4. Алфавит языка программирования
- •8.5. Идентификаторы, константы, выражения
- •9.1. Целая и вещественная арифметика
- •9.2. Приоритет операций
- •9.3. Встроенные функции. Построение сложных выражений
- •10.1. Встроенные типы данных. Целые типы. Представление знака числа. Арифметическое переполнение
- •10.1.1. Встроенные типы данных
- •10.1.2. Целые типы
- •10.1.3. Представление знака числа
- •10.1.4. Арифметическое переполнение
- •10.2. Вещественные типы. Сопроцессор
- •10.3. Текстовые типы
- •10.4. Логический тип
- •10.5. Оператор присваивания. Совместимость типов по присваиванию
- •11.1. Устройства вывода
- •11.2. Объекты, обеспечивающие вывод данных на экран
- •11.2.1. Перечень компонентов ввода и отображения текстовой информации
- •11.2.2. Отображение текста в надписях компонентов Label, StaticText и Panel
- •11.2.3. Окна редактирования Edit и MaskEdit
- •11.2.4. Многострочные окна редактирования Memo и RichEdit
- •11.2.5. Группа радиокнопок – компонент RadioGroup
- •Ввод и отображение целых чисел — компоненты UpDown и SpinEdit
- •11.2.6. Компоненты выбора из списков — ListBox, CheckBox, CheckListBox и ComboBox
- •11.2.7. Таблица строк — компонент StringGrid
- •11.2.8. Функция InputBox
- •11.2.9. Процедура ShowMessage
- •11.3. Вывод в текстовый файл
- •11.3.1. Объявление файла
- •Назначение файла
- •11.3.2. Вывод в файл
- •11.3.3. Открытие файла для вывода
- •11.3.4. Ошибки открытия файла
- •11.3.5. Закрытие файла
- •11.4. Устройства ввода. Ввод с клавиатуры. Реакция на действия пользователя
- •11.4.1. Устройства ввода
- •11.5. Ввод из файла
- •11.5.1. Открытие файла
- •11.5.2. Чтение данных из файла
- •11.5.3. Чтение чисел
- •11.5.4. Чтение строк
- •12.1. Ветвление
- •12.2. Логические (булевские) операции
- •12.3. Составной оператор
- •12.4. Оператор ветвления if
- •12.5. Оператор ветвления case
- •12.6. Исключительные ситуации
- •13.1. Функции цикла в программе. Циклы с пред- и постусловием
- •13.2. Оператор While. Вечные циклы
- •13.3. Вечные циклы
- •13.4. Оператор repeat. Процедуры inc и dec
- •13.5. Цикл с переменной for
- •13.6. Команды break и continue
- •13.7. Вложенные циклы
- •13.8. Примеры задач с циклами
- •14.1. Объявление массива
- •14.2. Операции с массивами
- •14.2.1. Вывод массива
- •14.2.2. Ввод массива
- •14.2.3. Поиск минимального (максимального) элемента массива
- •14.2.4. Поиск в массиве заданного элемента
- •14.3. Ошибки при использовании массивов
- •15.1. Создание пользовательских функций. Передача аргументов
- •15.2. Глобальные и локальные переменные
- •15.3. Примеры написания пользовательских функций
- •15.4. Процедуры
- •15.5. Процедуры программиста
- •15.6. Передача параметров по ссылке и значению
- •15.7. Перегрузка процедур и функций
- •15.8. Упреждающее объявление процедур и функций (forward)
- •16.1. Основные понятия компьютерной графики
- •16.2. Получение сведений о режимах экрана. Эффекты прозрачности
- •16.3. Графические построения
- •16.4. Построение графиков функций
- •16.5. Использование компонента tChart
- •16.6. Обновление изображения
- •17.1. Анимация на основе операции xor
- •17.2. Буферизация фона
- •17.3. Работа с таймером
- •18.1. Виды диалога
- •18.2. Стандарты пользовательского интерфейса
- •18.2.3. Размеры окон
- •18.2.2. Размеры элементов управления
- •Надписи на элементах управления:
- •18.2.4. Схема расположения
- •19.1. Технология mmx
- •19.2. Мультимедийные аппаратные интерфейсы
- •20.1. Тест Тьюринга
- •20.2. Представление знаний и вывод на знаниях
- •20.3. Модели представления знаний
- •20.4. Вывод на знаниях
- •21.1. Основы телекоммуникаций и распределенной обработки информации
- •21.2. Каналы связи
- •21.2.1. Аналоговые и цифровые каналы
- •21.2.2. Коммутируемые и выделенные каналы
- •21.2.3. Двух- и четырехпроводные каналы
- •21.3. Семиуровневая модель osi
- •21.3.1. Физический уровень
- •21.3.2. Канальный уровень
- •21.3.3. Верхние уровни osi
- •21.4. Управление потоком
- •21.5. Технология "клиент-сервер"
- •22.1. Методы защиты информации
- •22.2. Основы криптографии
- •22.3. Симметричные криптосистемы
- •22.3.1.Моно- и многоалфавитные подстановки
- •22.3.2. Перестановки
- •22.3.3. Гамирование и блочные шифры
- •22.4. Алгоритмы цифровой подписи
- •22.5. Сжатие данных
- •22.5.1. Методы сжатия изображений
- •22.6. Понятие об экономических и правовых аспектах информационных технологий
9.2. Приоритет операций
При вычислении значений выражений следует учитывать, что операторы имеют разный приоритет.
В Object Pascal определены следующие операции:
-
унарные not, @ ;
-
мультипликативные *, /, div, mod, and, shi, shr;
-
аддитивные +, -, or, xor;
-
отношения =, <>, <, >, <=, >=, in.
Приоритет операций убывает в указанном порядке, т. е. наивысшим приоритетом обладают унарные операции, низшим - операции отношения. Порядок выполнения нескольких операций равного приоритета устанавливается компилятором из условия оптимизации кода программы и не обязательно слева направо. При исчислении логических выражений операции равного приоритета всегда вычисляются слева направо, причем будут вычисляться все или только достаточные операции в зависимости от установленного в среде Delphi переключателя Project | Options | Compiler | Complete Boolean eval: при установленном переключателе вычисляются все операции отношения, при неустановленном - только те, что необходимы для однозначного определения результата исчисления.
Для задания нужного порядка выполнения операций в выражении можно использовать скобки, например:
(r1+r2+r3)/(r1*r2*r3)
Выражение, заключенное в скобки, трактуется как один операнд. Это означает, что операции над операндами в скобках будут выполняться в обычном порядке, но раньше, чем операции над операндами, находящимися за скобками. При записи выражений, содержащих скобки, должна соблюдаться парность скобок, т. е. число открывающих скобок должно быть равно числу закрывающих скобок. Нарушение парности скобок - наиболее распространенная ошибка при записи выражений.
9.3. Встроенные функции. Построение сложных выражений
В языке Object Pascal основной программной единицей является подпрограмма. Различают два вида подпрограмм: процедуры и функции. Как процедура, так и функция, представляют собой последовательность инструкций, предназначенных для выполнения некоторой работы. Чтобы выполнить инструкции подпрограммы, надо вызвать эту подпрограмму. Отличие функции от процедуры заключается в том, что с именем функции связано значение, поэтому имя функции можно использовать в выражениях.
Для выполнения часто встречающихся вычислений и преобразований язык Delphi предоставляет программисту ряд стандартных функций.
Значение функции связано с ее именем. Поэтому функцию можно использовать в качестве операнда выражения, например в инструкции присваивания. Так, чтобы вычислить квадратный корень, достаточно записать k:=Sqrt(n), где Sqrt — функция вычисления квадратного корня, п — переменная, которая содержит число, квадратный корень которого надо вычислить.
Функция характеризуется типом значения и типом параметров. Тип переменной, которой присваивается значение функции, должен соответствовать типу функции. Точно так же тип фактического параметра функции, т. е. параметра, который указывается при обращении к функции, должен соответствовать типу формального параметра. Если это не так, компилятор выводит сообщение об ошибке.
Математические функции (табл. 9.6) позволяют выполнять различные вычисления.
Таблица 9.6
Математические функции
Функция |
Значение |
Аbs (n) |
Абсолютное значение n |
Sqrt (n) |
Квадратный корень из n |
Sqr (n) |
Квадрат n |
Sin (n) |
Синус n |
Cos (n) |
Косинус n |
Arctan (n) |
Арктангенс n |
Ехр(n) |
Экспонента n |
Ln(n) |
Натуральный логарифм n |
Random(n) |
Случайное целое число в диапазоне от 0 до n- 1 |
Величина угла тригонометрических функций должна быть выражена в радианах. Для преобразования величины угла из градусов в радианы используется формула (а*3.141525б)/180, где: а— величина угла в градусах; 3.1415926 — число π. Вместо дробной константы 3.1415926 можно использовать стандартную именованную константу PI. В этом случае выражение пересчета угла из градусов в радианы будет выглядеть так: a*Pi/180.
Функции преобразования (табл.9.7) наиболее часто используются в инструкциях, обеспечивающих ввод и вывод информации. Например, для того чтобы вывести в поле вывода (компонент Label) диалогового окна значение переменной типа real, необходимо преобразовать число в строку символов, изображающую данное число. Это можно сделать при помощи функции FloatToStr, которая возвращает строковое представление значения выражения, указанного в качестве параметра функции.
Например, инструкция Label1.caption:= FioatTostr(x) выводит значение переменной х в поле Label1.
Таблица 9.7
Функции преобразования
Функция |
Значение функции |
Chr(n) |
Символ, код которого равен n |
IntToStr (k) |
Строка, являющаяся изображением целого k |
FloatToStr (n) |
Строка, являющаяся изображением вещественного n |
FloatToStrF(n, f , k,m) |
Строка, являющаяся изображением вещественного п. При вызове функции указывают: f — формат (способ изображения); k — точность (нужное общее количество цифр); m — количество цифр после десятичной точки |
StrToInt (s) |
Целое, изображением которого является строка s |
StrToFloat (s) |
Вещественное, изображением которого является строка s |
Round (n) |
Целое, полученное путем округления n по известным правилам |
Trunc (n) |
Целое, полученное путем отбрасывания дробной части n |
Frac(n) |
Дробное, представляющее собой дробную часть вещественного n |
Int (n) |
Дробное, представляющее собой целую часть вещественного n |
Обычно функции используют в качестве операндов выражений. Параметром функции может быть константа, переменная или выражение соответствующего типа. Ниже приведены примеры использования стандартных функций и функций преобразования.
n := Round((x2-x1)/dx);
x1:= (-b + Sqrt(d)) / (2*а);
m := Random(10);
cena := StrToInt(Edit1.Text);
Edit2.Text := IntToStr(100);
mes := 'x1=' + FloatToStr(xl);
Лекция 10. Типы данных
В математике переменные классифицируются в соответствии с некоторыми важными характеристиками. Производится строгое разграничение между вещественными, комплексными и логическими переменными и так далее.
Рисунок 10.1 - Структура типов данных.
При обработке данных на компьютере такая классификация еще более важна. Фундаментальным понятием программирования является тип данных.
Тип данных – множество допустимых значений, которые может иметь тот или иной объект (константа, переменная, выражение, функция), а также множество допустимых операций, которые применимы к нему. Кроме того, тип определяет также и формат внутреннего представления данных в памяти ПК.
Типы в Object Pascal играют огромную роль. Связано это с тем, что лежащий в его основе язык Pascal был специально придуман как средство обучения студентов программированию. Поскольку начинающий программист легко может допустить ошибку или неточно описать свои действия, компилятор Pascal должен был иметь средства контроля за действиями программиста, чтобы вовремя предостеречь его от последствий неверных действий. Первоначально типы как раз и предназначались для того, чтобы программист явно указывал компилятору, какого размера память нужна ему в программе и что он собирается делать с этой памятью. Практика применения типов показала их высокую эффективность для защиты программы от случайных ошибок, так что практически все современные языки программирования в той или иной степени реализуют механизм типов. В Object Pascal значение типов возросло в еще большей степени, т.к. с их помощью определяются классы - основной инструмент программиста.
Object Pascal относится к языкам программирования, имеющим строгую типизацию. В таких языках программист явно описывает множество значений, которые может принимать каждая переменная. Такой подход требует большей ответственности и аккуратности при написании программы, зато в конечном итоге это приводит к более высокой надежности создаваемых программ.
Транслятор языка следит за тем чтобы "стулья не складывались с помидорами", то есть отслеживает правильность выполняемых действий по типу данных. Если неопытный программист напишет следующее:
VAR a:REAL; b:STRING;
BEGIN
a:=10.0;
b:='20.0';
Label1.Caption:=a+b;
END;
то еще до запуска программы транслятор выдаст сообщение об ошибке: "Type mismatch".
Object Pascal характеризуется разветвленной структурой типов данных (рис. 10.1). В языке предусмотрен механизм создания новых типов, благодаря чему общее количество используемых в программе типов может быть сколь угодно большим.
Очевидно, понятие типа данных неразрывно связано с понятием переменной. Именно переменная обладает тем или иным типом. А что же такое "переменная"? Можно рассматривать переменную как "коробочку" в оперативной памяти компьютера (рис.10.2), у которой есть:
- имя или адрес;
- размер;
- тип данных;
- текущее значение.
Рисунок 10.2 – Понятие переменной.
Размер "коробочки" измеряется в байтах. Если мы сделали переменную для хранения целых чисел в диапазоне от 0 до 255, на это понадобится ровно один байт. Почему? Потому что байт состоит из восьми бит. Каждый бит может принимать два значения: 0 и 1. Если мы переберем все комбинации битов в байте (от 00000000 до 11111111), то их число будет равно 28=256. Ноль - такое же равноправное число, из-за этого 256 значений представляют диапазон от 0 до 255. В Object Pascal описание такой переменной будет выглядеть примерно так:
VAR x:BYTE;
Тип данных можно сравнить с "формой коробочки". Если нам нужно хранить не целые числа, а символ (букву, цифру, знак препинания…), то размер коробочки останется точно таким же – один байт, и в нее поместится один из 256 символов, определенных кодовой таблицей компьютера. Но программа должна знать, что в данной коробочке лежат не числа, а коды символов. Для этого и нужен тип данных. Опишем нашу переменную следующим образом:
VAR x:CHAR;
Такое описание резервирует в памяти один байт и говорит компьютеру: "В этом байте лежат коды символов. С ними нельзя делать арифметические операции". Если мы по ошибке напишем:
a:=b+x;
транслятор Object Pascal тут же укажет на возникновение ошибки несоответствия типов: "Type mismatch".
Разберем более подробно простые типы. Такой выбор связан с тем, что все остальные типы являются производными простых типов и довольно детально изучаются в специализированных источниках литературы [1, 2].