Главная страница
Финансы
Экономика
Математика
Начальные классы
Биология
Информатика
Дошкольное образование
Медицина
Сельское хозяйство
Ветеринария
Воспитательная работа
История
Вычислительная техника
Логика
Этика
Философия
Религия
Физика
Русский язык и литература
Социология
Политология
Языкознание
Языки
Юриспруденция
Право
Другое
Иностранные языки
образование
Доп
Технология
Строительство
Физкультура
Энергетика
Промышленность
Автоматика
Электротехника
Классному руководителю
Связь
Химия
География
Логопедия
Геология
Искусство
Культура
ИЗО, МХК
Экология
Школьному психологу
Обществознание
Директору, завучу
Казахский язык и лит
ОБЖ
Социальному педагогу
Языки народов РФ
Музыка
Механика
Украинский язык
Астрономия
Психология

Лекциям по курсу Информатика


Скачать 3.84 Mb.
НазваниеЛекциям по курсу Информатика
Анкорlekcii_shiryaevoy.pdf
Дата11.07.2018
Размер3.84 Mb.
Формат файлаpdf
Имя файлаlekcii_shiryaevoy.pdf
ТипЛекция
#19640
страница9 из 9
1   2   3   4   5   6   7   8   9
Строки или массивы символов?
Для содержания набора символов в памяти Turbo Pascal позволяет использо- вать как массив символов, так и строковую переменную.
Выделение памяти для массива и строки (оба по 20 символов)
var MasChar : array[1..20] of char;
DemoStr : string[20];
Строковая переменная DemoStr предоставляет большую свободу при обработке данных, чем массив MasChar:
1.
Для занесения данных в DemoStr или вывода данных, содержащихся в этой переменной, можно использовать стандартные процедуры ввода (Read) и вы- вода (Write).
Чтение строки и массива символов
{ строка }
ReadLn(DemoStr);
{ массив }
for i := 1
to 20 do Read(MasChar[i]);
246

2.
Для занесения в переменную DemoStr строкового значения можно восполь- зоваться единственным оператором присваивания.
Присваивание
{ строка }
DemoStr := ’Dog’;
{ массив }
MasChar[1] := ’D’;
MasChar[2] := ’o’; ...
3.
Переменную DemoStr можно сравнивать со строковым значением или другой строковой переменной, используя для этого операторы сравнения.
Сравнение
{ двух строк }
DemoStr := ’Cat’;
WriteLn(DemoStr < ’cat’); { результат True}
{ двух массивов }
(* написать самостоятельно! *)
4.
Длина строковой переменной DemoStr является динамической (то есть, из- меняемой) и определяется числом символов, реально содержащихся в данный момент в строке.
12.4
Процедуры и функции для работы с переменными строкового типа
(* см. конспект *)
247

12.5
Процедуры преобразования
(необязательный раздел)
В Turbo Pascal имеются стандартные процедуры для преобразования строки в число Val и для преобразования числа в строку Str.
Преобразование строки в число
Процедура Val конвертирует строку в число. При этом конвертируемая строка должна быть числовой, т. е. удовлетворяющей синтаксическим требованиям Pascal к действительным числам (например, ’12345’, ’1.23’, ’1.2E-3’).
Синтаксис процедуры Val:
Val(числовая_строка, число, ошибка)
числовая_строка конвертируется в числовое значение, которое возвращается через пара- метр число. Тип числа, занесенного в параметр числовая_строка, соответствует типу дан- ных (Real или Integer) параметра число. Значение, возвращаемое через параметр ошибка,
указывает на первый некорректный символ (0 — нет ошибки). Параметр ошибка должен быть объявлен как относящийся к целому типа Integer.
Пример 5.1 (демонстрация работы функции Val). Перевод строки InStr, содержащей це- лое число, записанное по правилам Pascal, в соответствующее числовое значение Num.
Перевод ’123’ → 123 1
program DemoStr2;
2
var InStr : string;
{ исходная строка }
3
Num,
{ число, получающееся из строки }
4
Error : Integer;
{ ошибка }
5
begin
6
InStr := ’-1347’;
Val(InStr, Num, Error);
WriteLn(’Val
[> ’, Num);
7
end.
. Значение числа может оказаться за пределами допустимого для данного типа диапазо- на. При отключенном параметре диапазонов (установка по умолчанию; директива компиля- тора {R-}) значение, возвращенное через параметр число, в этом случае может представлять собой некорректный результат, даже если параметр ошибка вернет значение 0.
Пример 5.2. Пусть есть описания var IntNum, Error: Integer;
RealNum
: Real;
Использование процедуры Val
Вызов процедуры Val
Возвращаемые значения
Val(’-1234’, IntNum, Error)
IntNum=-1234, Error=0
Val(’-1234’, RealNum, Error)
RealNum=-1234.0, Error=0
Val(’1.23E4’, RealNum, Error)
RealNum=1.23E4, Error=0
Val(’1.23E4’, IntNum, Error)
IntNum не определено, Error=2
Val(’1.23E 4’, RealNum, Error)
RealNum не определено, Error=6
Val(’ 1234’, IntNum, Error)
IntNum не определено, Error=1 248

Преобразование числа в строку
Процедура Str выполняет действие, обратное действию процедуры Val: она конвертирует число в числовую строку.
Синтаксис процедуры Str:
Str(число: формат, числовая_строка)
Значение, переданное процедуре через параметр число, конвертируется в числовую строку,
возвращаемую через параметр числовая_строка. Спецификация формат (такая же как у процедуры Write) определяет форму и длину возвращаемой числовой_строки.
Пример 5.3 (демонстрация работы функции Str). Программа представляет числовое зна- чение Num в виде строки NumStr. Формат вывода: 6 позиций на число.
Перевод 123 → ’123’
1
program DemoStr3;
2
var NumStr : string;
3
Num
: Integer;
4
begin
5
Num := -1347;
6
Str(Num:6, ToStr);
7
WriteLn(’Str [>’, NumStr);
8
end.
Результат работы программы:
Str␣[>␣-1347.
Пример 5.4. Пусть есть описания var ToStr : string;
Num
: Real;
Использование процедуры Str
Значение Num
Вызов процедуры Str
Возвращаемое значение ToStr
-1347
Str(Num, ToStr)
-1.3470000000E+03
-1347
Str(Num:10, ToStr)
-1.347E+03
-1347
Str(Num:11, ToStr)
-1.3470E+03 1347
Str(Num:10, ToStr)
␣1.347E+03 1347
Str(Num:5, ToStr)
␣1.35E+03 1347
Str(Num:8:1, ToStr)
␣␣1347.0
-1347
Str(Num:8:1, ToStr)
␣-1347.0
-13.47
Str(Num:7:2, ToStr)
␣-13.47 249

Глава 13
Множества
Множество содержит однотипные элементы порядкового типа.
Базовым типом множества может быть любой конечный скалярный тип, состо- ящий не более чем из 256 элементов.
Примеры описания множеств var S
: set of Char;
(* множество всех символов *)
Int: set of 1..3;
(* множество целых чисел от 1 до 3 *)


¨
©
Порядок следования элементов значения не имеет.
Константы множественного типа записываются с помощью кон- структоров множеств
— списка элементов, разделенных запятыми и за- ключенных в квадратные скобки.
Константы множественного типа const AlphEng = [’A’..’Z’,’a’..’z’];
(* мн-во всех лат. букв *)
Empty = [ ];
(* пустое мн-во *)
Digits = [0..9];
(* мн-во целых чисел от 0 до 9 *)
250

13.1
Операции над множествами
13.1.1
Принадлежность элемента множеству (in)
Если ch ∈ множеству AlphEng, то...
if ch in AlphEng then...
Если ch /
∈ множеству AlphEng, то...
if not (ch in AlphEng) then...
13.1.2
Объединение, пересечение, разность
Если A и B — константы или переменные множественного типа, то
A + B —
объединение
(A ∪ B),
A * B —
пересечение
(A ∩ B),
A - B —
разность
(A \ B).
Примеры
(* см. конспект *)
13.1.3
Операции отношений
Pascal
Матем. запись
=
равенство
A = B
A = B
<> неравенство
A <> B
A = B
<= подмножество
A <= B
A ⊂ B
>= надмножество
B >= A
B ⊃ A
Примеры
(* см. конспект *)
13.1.4
Добавление и удаление элементов
Добавление элемента ch в множество S
S := S + [ch];
(* или *)
Include(S, ch);
Удаление элемента ch из множества S
S := S - [ch];
(* или *)
Exclude(S, ch);
251

13.2
Решение задач
Пример 2.1. Выделить из множества целых чисел от 1 до 20 следующие мно- жества чисел:
1) кратных 2 (переменная set2);
2) кратных 3 (set3);
3) кратных 6 (set6);
4) кратных 2 или 3 (set23).
Решение.
Достаточно сформировать два множества — set2 и set3.
Числа, кратные 6 — это числа, кратные и 2, и 3, поэтому set6 = set2 ∩ set3.
Множество чисел, кратных 2 или 3 (set23) — это set2 ∪ set3.
Работа с множествами
1
const
SetMax = 20;
2
type
TSetOfDig = set of 1..SetMax;
3
var set2, set3, set6, set23 : TSetOfDig;
4
k
: Byte;
5
procedure PrintSet(setN: TSetOfDig);
(* проц. печати мн-ва *)
6
var i: Byte;
7
begin
8
for i := 1
to
SetMax do
9
if i in setN
then Write(i:4);
10
WriteLn;
11
end;
12
begin
13
set2 := [];
set3 := [];
(* инициализация множеств *)
14
for k := 1
to
SetMax do (* формирование set2, set3 *)
15
begin
16
if k mod 2 = 0
then set2 := set2 + [k];
17
if k mod 3 = 0
then set3 := set3 + [k];
18
end;
19
set6 := set2 * set3;
set23 := set2 + set3;
20
WriteLn(’Кр. 2’);
PrintSet(set2);
21
WriteLn(’Кр. 3’);
PrintSet(set3);
22
WriteLn(’Кр. 6’);
PrintSet(set6);
23
WriteLn(’Кр. 2 или 3’);
PrintSet(set23);
24
end.
252

Результат выполнения программы:
Кр. 2 2
4 6
8 10 12 14 16 18 20
Кр. 3 3
6 9
12 15 18
Кр. 6 6
12 18
Кр. 2 или 3 2
3 4
6 8
9 10 12 14 15 16 18 20
Добавить в программу операторы для создания множества чисел, кратных
2 или 3, но не кратных 6.
Пример 2.2. Проверить, верно ли, что все символы во введенной строке яв- ляются цифрами, и выдать об этом сообщение на экран.
Строки и множества
1
var D : set of Char;
2
S : string;
3
i : Integer;
4
begin
5
Write(’S = ’);
ReadLn(S);
6
D := [];
7
for i := 1 to Length(S) do
Include(D, S[i]);
8
if D <= [’0’..’9’] then WriteLn(’Yes’)
9
else WriteLn(’No’);
10
end.
253

13.3
Решето Эратосфена
Постановка задачи:
найти все простые числа из промежутка [2, n].
Решето Эратосфена
— алгоритм нахождения всех простых чисел до некоторого целого числа n.
Пример для n = 20.
(* см. конспект *)
Алгоритм поиска простых чисел на компьютере
:
1) Создать решето (множество SetN), в которое поместить все числа задан- ного диапазона.
2) Создать пустое множество SetP, в которое будем помещать простые числа.
3) В переменную Next поместить первое простое число.
4) Пока исходное множество SetN не пусто делать:
4.1) Поместить простое число Next во множество простых чисел SetP.
4.2) Удалить из исходного множества натуральных чисел SetN все числа,
кратные Next.
4.3) Найти следующее простое число — новое значение переменной Next.
repeat
Next := Next+1;
until (Next in SetN) or (Next > N);
Реализовать алгоритм поиска простых чисел на языке Pascal.
254

Приложение A
Системы счисления
Система счисления
— это способ наименования и представления чисел с помощью символов. Символы, используемые при записи чисел, называ- ются цифрами
Алфавит системы счисления
— это совокупность символов, использу- емых в данной системе счисления.
Системы счисления разделяют на позиционные с.с.
непозиционные с.с.
Величина, обозначаемая цифрой в записи числа,
зависит от ее позиции.
не зависит от ее позиции.
Десятичная (0..9), двоичная (0, 1),. . .
Римская
A.1
Позиционные с.с.
A.1.1
Развернутая запись числа
В произвольной позиционной системе счисления любое число представляется суммой
N
p
= ±(a i−1
p i−1
+ . . . + a
1
p
1
+ a
0
p
0
+ a
−1
p
−1
+ a
−2
p
−2
+ . . . + a
−m p
−m
),
где p —
основание с.с.
(p > 1), т.е. число цифр, доступных для записи чисел;
i — число целых разрядов числа; a k
— цифры данной с.с.
В частности любое целое положительное число представляется в виде:
N
p
= a i−1
p i−1
+ . . . + a
1
p
1
+ a
0
p
0
(1.1)
255

Например,
Система счисления p
Запись
Десятичная
10 342 10
= 3 · 10 2
+ 4 · 10 1
+ 2 · 10 0
Двоичная
2 10 2
= 1 · 2 1
+ 0 · 2 0
Свернутая форма записи числа (
1.1
):
N
p
= a i−1
. . . a
1
a
0
, a
−1
a
−2
. . .a
−m
Например: 345,8 (a
2
= 3, a
1
= 4, a
0
= 5, a
−1
= 8).
A.1.2
Разряды числа
Отдельные слагаемые в сумме
N
p
= a i−1
p i−1
+ . . . + a
1
p
1
+ a
0
p
0
называются разрядами числа
, старшинство разрядов определяется множите- лем p k
, k = 0, . . . , i − 1, а коэффициенты a k
принимают одно из значений:
Основание с.с.
2 8
10 16
Алфавит с.с.
0, 1 0..7 0..9 0..9, A, B, C, D, E, F
. Умножение или деление числа на величину основания приводит к переме- щению запятой, отделяющей целую часть от дробной, на один разряд соответ- ственно вправо или влево. Например,
777,77 10
· 10 = 7777,7 10
;
777,77 10
: 10 = 77,777 10
;
101,01 2
· 2 = 1010,1 2
;
101,01 2
: 2 = 10,101 2
Во сколько раз увеличатся числа 10,1 10
, 10,1 2
, 39,F
16

при переносе запятой на один знак вправо?
A.2
Системы счисления с основаниями 2, 8, 16
Пример 2.1 (Удобный пример — «двоичный счет»). 1, 10, 11, 100, 101 — вышел зайчик погулять.
256

A.2.1
Восьмеричная система счисления (2 3
= 8)
Цифра Триада
Цифра Триада
0 000 4
100 1
001 5
101 2
010 6
110 3
011 7
111
A.2.2
Шестнадцатиричная система счисления (2 4
= 16)
Цифра
Тетрада
Цифра
Тетрада
Цифра
Тетрада
Цифра
Тетрада
0 0000 4
0100 8
1000
C
1100 1
0001 5
0101 9
1001
D
1101 2
0010 6
0110
A
1010
E
1110 3
0011 7
0111
B
1011
F
1111
A.3
Перевод чисел в десятичную систему счисления
Правило перевода
: число необходимо записать в развернутой форме и вычислить его значение.
Пример 3.1 (Примеры перевода). 101 2
= 2 2
+ 2 0
= 5 10 1001,01 2
= 2 3
+ 2 0
+ 2
−2
= 9,25 10 54 8
= 5 · 8 1
+ 4 · 8 0
= 44 10
;
12C
16
= 16 2
+ 2 · 16 1
+ 12 · 16 0
= 256 + 32 + 12 = 300 10
A.4
Перевод чисел из десятичной системы счисления
A.4.1
Правило перевода целой части числа
Целая часть числа делится на основание p новой системы счисления,
остаток от деления запоминается. Полученное частное вновь делится на p, остаток запоминается. Процесс продолжается до тех пор, пока частное не станет меньше делителя.
Остатки от деления на p выписываются в порядке, обратном их получению.
257

Пример 4.1. Перевод числа 35 10
в с.с. с основанием p (p = 2, 8, 16):
35 1 17 1 8 0 4 0 2 0 1 1 ↑
Ответ: 35 10
= 100011 2
35 3 4 4 ↑
Ответ: 35 10
= 43 8
35 3 2 2 ↑
Ответ: 35 10
= 23 16
A.4.2
Правило перевода дробной части числа
Дробная часть числа последовательно умножается на p
, после чего целая часть запоминается и отбрасывается. Процесс продолжается до тех пор, пока дробная часть не станет равной нулю.
Целые части выписы- ваются после запятой в порядке из получения.
Пример 4.2. Перевод числа 0,1875 10
в восьмеричную с.с.
1875
↓ 1 5 4 0
Ответ: 0,1875 10
= 0,14 8
258

A.5
Перевод чисел из двоичной системы счисления в 8- и 16-ричные системы счисления
1)
Разбить цифры двоичного числа на группы по столько цифр,
каков показатель степени двойки в новой с.с. При этом:
Для целого числа разбиение на группы производится справа налево
, при необходимости дополняя нулями крайнюю левую группу.
Для дробного числа разбиение на группы производится слева направо
, при необходимости дополняя нулями крайнюю правую группу.
При переводе в 8-ричную с.с. (8 = 2 3
) — двоичные триады; при пере- воде в 16-ричную с.с. (16 = 2 4
) — двоичные тетрады
1 1 1 1 0 1 0 1 0 1 , 1 1 2
=
00 1 111 010 101,11 0
2
=
00 11 1101 0101,11 00 2
2) Каждая группа заменяется соответствующей цифрой новой системы.
Пример 5.1. Перевести в 8- и 16-ричную с.с. целые числа: а) 1111 2
, б) 1010101 2
Решение:
1111 2
Двоичные триады 001 111 8-ричные цифры
1 7
1111 2
Двоичные тетрады 1111 16-ричные цифры
F
1010101 2
Двоичные триады 001 010 101 8-ричные цифры
1 2
5 1010101 2
Двоичные тетрады 0101 0101 16-ричные цифры
5 5
Ответ: а) 1111 2
= 17 8
= F
16
, б) 1010101 2
= 125 8
= 55 16 259

Пример 5.2. Перевести в 8- и 16-ричную с.с. числа: а) 11,01 2
,
б) 110,101 2
Решение:
11,01 2
Двоичные триады 011 , 010 8-ричные цифры
3
,
2 11,01 2
Двоичные тетрады 0011 , 0100 16-ричные цифры
3
,
4 110,101 2
Двоичные триады 110 , 101 8-ричные цифры
6
,
5 110,101 2
Двоичные тетрады 0110 , 1010 16-ричные цифры
6
,
A
Ответ: а) 11,01 2
= 3,2 8
= 3,4 16
, б) 110,101 2
= 6,5 8
= 6,A
16
A.6
Перевод чисел из 8- и 16-ричных с.с. в двоичную с.с.
Для перевода из 8-ричной (16-ричной) с.с. в двоичную с.с. необходимо каждую цифру числа преобразовать в группу из трех (четырех)
двоичных цифр
Пример 6.1. а) 0,47 8
→ X
2
;
б) AB
16
→ X
2
Решение:
Восьмеричные цифры
4 7
Двоичные триады
100 111
Шестнадцатеричные цифры
A
B
Двоичные триады
1010 1011
Ответ: а) 0,47 8
= 0,100111 2
;
б) AB
16
= 10101011 2
260

A.7
Арифметические операции в позиционных системах счисления
Арифметические действия в любой позиционной системе счисления выпол- няются подобно аналогичным операциям с десятичными числами.
Выполнение арифметических операций в системе счисления с основанием P
удобно проводить по таблицам сложения и умножения. Например,
Двоичная система счисления
+ 0 1 0
0 1
1 1 10
× 0 1 0
0 0 1
0 1
Восьмеричная система счисления
+ 0 1 2
3 4
5 6
7 0
0 1
2 3
4 5
6 7
1 1
2 3
4 5
6 7
10 2
2 3
4 5
6 7
10 11 3
3 4
5 6
7 10 11 12 4
4 5
6 7
10 11 12 13 5
5 6
7 10 11 12 13 14 6
6 7
10 11 12 13 14 15 7
7 10 11 12 13 14 15 16
× 0 1 2 3 4 5 6 7 0
0 0 0
0 0
0 0
0 1
0 1 2
3 4
5 6
7 2
0 2 4
6 10 12 14 16 3
0 3 6
11 14 17 22 25 4
0 4 10 14 20 24 30 34 5
0 5 12 17 24 31 36 43 6
0 6 14 22 30 36 44 52 7
0 7 16 25 34 43 52 61 261

Пример 7.1. Сложение чисел.
а) 100000100
(2)
+ 111000010
(2)
= 1011000110
(2)
100000100
+
111000010 1011000110
б) 147,14
(8)
+ 350,34
(8)
= 517,5
(8)
147,14
+
350,34 517,50
в) 12C,3
(16)
+ 3B3,5
(16)
= 4DF,8
(16)
12C,3
+
3B3,5 4DF,8
Пример 7.2. Вычитание чисел.
а) 1001,01
(2)
− 110,1
(2)
= 10,11
(2)
1001,01

110,1 10,11
б) 411,2
(8)
− 231,54
(8)
= 157,44
(8)
411,2

231,54 157,44
в) 4D2,8
(16)
− 3B3,5
(16)
= 11F,3
(16)
4D2,8

3B3,5 11F,3 262

Пример 7.3. Умножение чисел.
а) 100111
(2)
× 1000111
(2)
= 101011010001
(2)
100111
×
1000111 100111 100111
+
100111 100111 101011010001
б) 170,3
(8)
× 6,4
(8)
= 1416,34
(8)
170,3
×
6,4
+
7414 13222 1416,34 263
1   2   3   4   5   6   7   8   9
написать администратору сайта