- •1. Системы счисления
- •Десятичная система счисления
- •Двоичная система счисления
- •Восьмеричная и шестнадцатеричная системы счисления
- •Перевод чисел из любой системы счисления в десятичную
- •Перевод чисел из десятичной системы счисления в любую другую
- •2. Алгебра логики
- •2.1. Логические операции
- •Инверсия
- •Конъюнкция
- •Дизъюнкция
- •Эквиваленция (равнозначность)
- •Импликация
- •Антиконъюнкция
- •Антидизъюнкция
- •2.2. Нормальные формы
- •Конъюнктивная нормальная форма
- •Дизъюнктивная нормальная форма
- •3. Применение средств алгебры логики для описания функционирования устройств компьютера
- •Логические схемы
- •Построение логических схем
- •4. Практическая работа 1. Системы счисления
- •Вопросы для самоконтроля
- •5. Практическая работа 2. Алгебра логики
- •Решение логических задач средствами алгебры логики
- •Индивидуальное задание к модулю 1. Построение логических схем по заданным булевым выражениям
- •Приложение 1. Практическое занятие 1 «Системы счисления»
- •Приложение 2. Практическое занятие 2 «Алгебра логики»
- •Приложение 3. Индивидуальное задание. Модуль №1
- •Приложение 4
- •6. Введение в алгоритмизацию
- •7. Знакомство со средой Турбо Паскаль
- •7.1. Общие сведения
- •7.2. Запуск Турбо-Паскаля на выполнение
- •7.4. Работа с текстовым редактором Турбо-Паскаля
- •Клавиши перемещения курсора
- •Работа с блоками текста
- •8. Основы алгоритмизации
- •8.1. Алгоритм
- •8.2. Алгоритмические структуры
- •Самоконтроль
- •9.1. Алфавит языка
- •9.2. Арифметические выражения и правила их записи
- •Знаки операций
- •Операции div и mod
- •9.3. Типы данных
- •Целые типы
- •Логический тип
- •Символьный тип
- •Строковый тип
- •Вещественный тип
- •9.4. Стандартные функции
- •9.5. Структура программы на языке Паскаль
- •9.6. Описательная часть программы
- •9.7. Исполнительная часть программы
- •9.8. Оператор присваивания
- •9.9. Операторы ввода-вывода
- •Оператор ввода
- •Оператор вывода
- •9.10. Комментарии в программе
- •Самоконтроль
- •Задание
- •Пример программы линейной структуры
- •Приложение 1. Таблица вариантов задания №2
- •10. Ветвления
- •10.1. Операторы условия и перехода
- •Логический оператор
- •Операции отношения
- •Логические операции
- •10.2. Оператор выбора
- •Самоконтроль
- •Задание
- •Пример программы разветвленной структуры
- •Приложение 1. Таблица вариантов задания 3
- •11.2. Оператор цикла с постусловием
- •11.3. Оператор цикла с предусловием
- •11.4. Вложенные циклы
- •11.5. Оператор прерывания цикла
- •Самоконтроль
- •Задание
- •Пример программы циклической структуры
- •Приложение 1. Таблица вариантов задания 4
- •12. Операции с индексированными переменными
- •12.1. Массивы одномерные
- •12.2. Описание массивов
- •Ввод элементов массива
- •Вывод элементов массива
- •12.3. Обработка одномерных массивов
- •Самоконтроль
- •Задание
- •Пример программы обработки одномерного массива
- •Приложение 1. Таблица вариантов задания 5
- •13. Двумерные массивы
- •13.1. Матрицы
- •13.2. Описание двумерного массива
- •Ввод элементов двумерного массива
- •Вывод элементов двумерного массива
- •13.3. Обработка двумерных массивов
- •Самоконтроль
- •Задание
- •Пример программы обработки двумерного массива
- •Приложение 1. Таблица вариантов задания 6
- •Структура программы, содержащей процедуру (функцию)
- •14.2. Процедуры
- •14.3. Вложенные процедуры
- •Директива forward
- •14.4. Функции
- •Самоконтроль
- •Задание
- •Пример программы с использованием подпрограмм
- •Приложение 1. Таблица вариантов задания 7
- •15. Обработка строк текста
- •15.1. Символьные переменные
- •Фрагмент таблицы ASCII-кодов букв латинского алфавита
- •Фрагмент таблицы ASCII-кодов букв русского алфавита
- •15.2. Функции обработки символьных переменных
- •15.3. Строковые переменные
- •15.4. Функции обработки строковых переменных
- •15.5. Процедуры обработки строковых переменных
- •15.6. Примеры обработки строковых переменных
- •Самоконтроль
- •16. Структурированные типы данных
- •Записи
- •Самоконтроль
- •Задание
- •Пример программы использования массива записей
- •Приложение 1
- •Приложение 2. Таблица вариантов ИДЗ 2
4 |
Индекс |
i |
Program word_text2; var text,word1,word2:string; i:integer;
begin
writeln(‘Введите исходный текст’); readln text);
writeln(‘Введите первое слово’); readln(word1);
writeln(‘Введите второе слово’); readln(word2);
repeat i:=pos(word1,text) if i<>0 then begin
delete(text,i,length(word1));
insert(word2,text,i);
end; until i=0;
writeln(‘Преобразованный текст’); writeln(text);
readln;
end.
Самоконтроль
1.Какие типы данных используются для обработки текста?
2.Сколько байт памяти занимает символьная переменная?
3.Какие операции допустимы над символьными переменными?
4.Перечислите функции обработки символьных переменных?
5.Что такое строка?
6.Сколько байт памяти занимает строковая переменная?
7.Какие операции допустимы над строковыми переменными?
8.Перечислите функции и процедуры обработки строковых переменных?
9.Как можно обратиться к отдельным символам строки?
16.Структурированные типы данных
При решении задач обработки большого количества данных используют массивы. Но при работе с массивами основное ограничение заключается в том, что все элементы массива должны быть одного типа. Для работы с комбинированными типами данных применяют записи.
104
Записи
Записи – это структурированный тип данных, позволяющих хранить вместе различные типы данных.
Запись состоит из нескольких полей, для каждого из которых при объявлении (описании) указывается имя и тип.
Например: type
student = record; {запись} surname : string[20];
year : integer; bal : real;
end; {завершает список полей} var
st:student;
Сформирован пользовательский тип данных – student, он базируется на стандартных типах
(string, integer,real).
Переменная st - имеет тип student (запись), состоит из 3-х полей: surname – фамилия студента;
year – год рождения; bal – средний бал.
Каждое поле хранит информацию разного типа. При обращении к отдельным полям указывается имя всей записи и имя отдельного поля через точку.
st.surname:='Иванов'; st.year:=1905; st.bal:=4.5;
Для уменьшения записи обращения к отдельным полям используют оператор with … do Например:
with st do begin
surname:='Иванов'; year:= 1905; bal:=4.5;
end;
Для обработки большого объема информации комбинированного типа целесообразно строить массивы записей, где каждый элемент массива – запись, состоящая из нескольких полей разного типа.
Например, чтобы сохранить информацию о студентах группы в 25 человек, можно создать следующий массив записей:
type
student = record; {запись} surname : string[20];
year : integer; bal : real;
105
end; var
st:array[ 1..25 ] of student;
st – массив записей. Каждый элемент массива(St[i])содержит информацию об одном студенте:
St[i].surname – фамилия; St[i].year - год рождения; St[i].bal - средний бал.
Задача.
Создать массив записей, содержащий информацию о студентах группы. Каждая запись содержит поля – фамилия, год рождения, пол. Подсчитать средний возраст студентов мужского пола группы.
Таблица идентификаторов
№ |
Наименование переменной |
Обозначения в программе |
1 |
Имя массива |
st |
|
|
|
2 |
Количество студентов |
n |
|
|
|
3 |
Индекс массива |
i |
|
|
|
4 |
Средний возраст |
p |
5 |
Количество мужчин |
k |
6 |
Текущий год |
t |
program rec; uses crt; type
student = record; {запись} surname : string[20];
year : integer; pol : char; end;
var
st:array[ 1..30 ] of student; i,n,t:integer; p:real;
begin clrscr;
writeln(‘Введите текущий год’); readln(t)
writeln(‘Введите количество студентов’); readln(n)
for i:=1 to n do
106
with st[i] do begin
writeln(‘Сведения о ’,i,‘ студенте’); writeln(‘Введите фамилию’); readln(surname); writeln(‘Введите год рождения’); readln(year); writeln(‘Введите средний бал’); readln(bal); end;
p:=0;
for i:=1 to n do begin
if st[i].pol=’m’ then begin p:=p+(t-st[i].year); k:=k+1;
end;
writeln(‘Средний возраст мужчин =’,(p/k):8:3 ); readln;
end.
Самоконтроль
1.В чем состоит основное преимущество записи?
2.Почему записи называют комбинированным типом записи?
3.Чем записи отличаются от массивов?
4.Что называется полем записи?
5.Какие требования предъявляются к идентификаторам поля записи?
6.Как определить объем памяти, требуемый для размещения записи?
7.С какой целью при обращении к полю записи используется оператор with … do?
Задание
•ответить на вопросы самоконтроля;
•выполнить индивидуальное задание (ИДЗ №2), на примере программы использования массива записей. ИДЗ №2 выбрать из таблицы по номеру варианта (Приложение 2).
Пример программы использования массива записей
1.Титульный лист (Приложение 1).
2.Формулировка задачи:
Создать массив записей, содержащий сведения о сотрудниках фирмы. Каждая запись содержит поля – фамилия сотрудника, наименование отдела, оклад, трудовой стаж. Написать программу, выдающую следующую информацию:
107
•список сотрудников отдела Х с указанием оклада и трудового стажа;
•подсчитать среднюю заработную плату сотрудников отдела Х. Название отдела Х вводится по запросу с клавиатуры.
3.Таблица идентификаторов
№ |
|
Наименование переменной |
Обозначения в |
Тип переменной |
|
|
|
программе |
|
|
|
|
|
|
1 |
|
Имя массива |
f |
record |
|
|
|
|
(запись) |
|
|
|
|
|
2 |
|
Количество сотрудников |
n |
integer |
|
|
|
|
|
3 |
|
Поле фамилия |
surname |
string |
|
|
|
|
|
4 |
|
Поле отдел |
otdel |
string |
5 |
|
Поле оклад |
oklad |
real |
6 |
|
Поле стаж |
Stag |
integer |
7 |
|
Средняя зарплата |
Sred |
real |
8 |
|
Отдел поиска Х |
X |
string |
9 |
|
Количество сотрудников в отделе |
K |
integer |
|
|
Х |
|
|
|
|
|
|
|
10 |
|
Индексы массива |
i |
integer |
|
|
|
|
|
4. |
Листинг программы |
|
|
program rec_1; uses crt;
type
firma = record; {запись} surname : string[20]; otdel : string[20];
oklad : real; Stag : integer; end;
var
f:array[ 1..30 ] of firma; {массив записей} X:string[20];
i,n,k:integer;
sred:real; begin clrscr;
writeln(‘Введите n’); readln(n); writeln(‘Введите информацию о сотрудниках’); for i:=1 to n do
with f[i] do begin
writeln(‘Введите фамилию ’); readln(surname);
108
writeln(‘Введите отдел ’); readln(otdel); writeln(‘Введите оклад ’); readln(oklad); writeln(‘Введите стаж ’); readln(Stag); end;
writeln(‘Введите название отдела’); readln(X); sred:=0; k:=0;
writeln(‘Список сотрудников отдела ’,X); for i:=1 to n do
if f[i].otdel=X then begin
writeln(f[i].surname,’ ‘,f[i].oklad:8:3); sred:=sred+f[i].oklad;
k:=k+1;
end;
writeln(‘Средняя зарплата отдела=’,(sred/k):8:3); readln;
end.
5. Результаты вычислений
109