Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмизация и языки программирования. Учебно-методический комплекс.pdf
X
- •1. СИЛЛАБУС ДИСЦИПЛИНЫ ДЛЯ СТУДЕНТОВ
- •Тема 1. Понятие алгоритма, свойства, типы, исполнители
- •Структура программы.
- •Имена, ключевые слова и знаки операций
- •Тема 7. Символьные типы данных.
- •Обработка символьных данных.
- •Тема 9. Строки. Строковые процедуры.
- •Функции
- •Тема 11. Множества (Set)
- •Работа с текстовыми файлами
- •Тема 13. Записи
- •Тема 14. Построение изображений на экране
- •Отображение точки на экране
- •Отображение линий на экране
- •Построение прямоугольников на экране
- •Построение многоугольников
- •Построение дуг, эллипсов и окружностей
- •Основная литература
- •Дополнительная литература
- •ГЛОССАРИЙ

write (p[i,j]:3)
end;
writeln;
end
end.
ПРИМЕР 2: Из матрицы А[3,4] получить вектор В, элементами
которого являются наибольшие элементы столбцов матрицы.
П Р О Г Р А М М А
program mag_max;
type x=array[1..3,1..4] of integer;
y=array[1..4] of integer;
var i,j:integer;
a:x; b:y;
begin
writeln ('Введите матрицу А');
for i:=1 to 3 do begin
for j:=1 to 4 do begin
read(a[i,j]);
write (' ')
end;
writeln
end;
writeln ('Массив В');
for j:=1 to 4 do
begin
b[j]:=a[1,j];
for i:=2 to 3 do
if b[j]<a[i,j]
then b[j]:=a[i,j];
write(b[j]:4:1)
end
end.
Упражнения:
1. Для матрицы В(10,8) на место последнего элемента каждой
строки записать сумму предыдущих ему элементов в этой строке.
101

2. В матрице С(9,5) найти среднее арифметическое всех
5,
10
5,
0 ≤
≤
ij
c
!
nk
=
n
),...(
101
xxX
1010 ≤≤−
ij
x
. Образовать из этих сумм пятый
),...,(
121
bbB
−
=
случаепротивномв
элементнулевойестьстолбцемjвесли
b
j
,0
,1
элементов, удовлетворяющих условию
.
3. В матрице А(7,9) определить max и min элементы и
переставить их местами.
4. В матрице А(8,9) определить среднее арифметическое
положительных и отрицательных элементов. Подсчитать количество
нулевых элементов.
5. Вычислить
, где
- количество нулевых элементов в
четных строках матрицы В(10,10).
6. В матрице А(6,6) все поддиагональные элементы заменить
нулями.
7. В матрице D(10,15) найти сумму элементов каждой четной
строки и произведение элементов каждой нечетной строки. Из
полученных сумм и произведений образовать массив
.
8. В матрице X(12,4) в каждой строке найти сумму элементов,
лежащих в интервале
столбец исходной матрицы.
9. Задана матрица X(7,11). Образовать матрицу Y(7,11) путем
деления всех элементов исходной матрицы на ее элемент, наибольший по абсолютной величине.
10. В матрице А(10,10) найти сумму элементов, расположенных
в строках с отрицательным элементом на главной диагонали.
11. Задана матрица X(6,6). Вычислить сумму элементов, распо-
ложенных на линиях, параллельных главной диагонали и находящихся выше нее.
12. В матрице X(8,8) найти среднее арифметическое элементов,
расположенных под главной диагональю; на главной диагонали; над
главной диагональю.
13. Задана матрица А(8,12). Построить вектор
правилу:
по следующему
.
ЛАБОРАТОРНАЯ РАБОТА 8
ОБРАБОТКА СИМВОЛЬНЫХ СТРОК
ЦЕЛЬ РАБОТЫ:
102

1. Овладеть навыками составления алгоритмов и программ на
языке Паскаль по обработке символьных строк.
2. Научиться использовать встроенные функции для обработки
строк.
КРАТКИЕ СВЕДЕНИЯ ИЗ ТЕОРИИ
Строковые переменные аналогичны массивам типа char. Их
отличием является то, что число символов (длина строковой пере-
менной) может динамически меняться в интервале от единицы до
заданного верхнего значения.
Перед выполнением данной лабораторной работы необходимо
ознакомиться с правилами описания и использования переменных
типа string, допустимыми операциями над ними, соответствующими
стандартными процедурами и функциями.
ПРИМЕР 1: Удалить из строки все "лишние" (парные) пробелы.
П Р О Г Р А М М А
begin
writeln ('Удаление парных пробелов.');
writeln ('Введите строку:' );
readln (s);
I:=pos (' ', s);
if l=0 then
writeln ('Удаления не было')
else
begin
while l >0 do {пока в строке есть парные пробелы}
begin
delete (s,pos (' ',s), 1);
I:=pos (' ',s)
end;
writeln ('Получена строка:');
writeln (s);
end;
end.
103

ПРИМЕР 2: В данном массиве из слов подсчитать количество
Даны два различных слова, в каждом из которых от 1 до 8
слов, начинающихся и заканчивающихся гласной буквой.
П Р О Г Р А М М А
program glasn;
const maxn = 100;
var s: array [1..maxn] of string;
l,n,i,k:integer;
begin
writeln ('n=');
readln (n);
writeln ('вводите элементы массива s');
for i:=1 to n do
readln (s[i]);
k:=0;
for i:=1 to n do
begin
l:= length (s[i]);
if (pos(s[i][1],'аоиуеыэюя АОИУЕЫЭЮЯ') > 0)
and (pos(s[i][1],'аоиуеыэюя АОИУЕЫЭЮЯ') > 0)
then k:=k+1
end;
writeln ('k=',k)
end.
Упражнения:
1.
строчных латинских букв и за каждым из которых – пробел.
Напечатать эти слова в алфавитном порядке.
2. В заданном тексте удалить часть текста, заключенную в
скобки.
3. Напечатать самое длинное слово из заданного текста.
4. Найти сколько раз в тексте встречается заданное слово.
5. Написать программу, которая зашифрует заданный текст,
представляя в словах символы наоборот.
6. В заданном тексте заменить символ пробел на символ запятая.
104

7. Написать программу, которая находить на какую букву
начинается больше всего слов в тексте.
8. Дан текст. Если первый символ в тексте не является малой
латинской буквой, то оставить без изменения. Если же это малая
латинская буква, то заменить символом «*».
9. В заданном тексте везде заменить слово А1 на слово А2.
10. Задан текст длиной 255 символов. Найти сколько раз в тексте
встречаются различные буквы русского алфавита.
ЛАБОРАТОРНАЯ РАБОТА 9
ЗАПИСИ. ФАЙЛЫ
ЦЕЛЬ РАБОТЫ:
1. Изучить правила описания и использования переменных типа
запись в языке Паскаль.
2. Получить практические навыки работы с файлами.
КРАТКИЕ СВЕДЕНИЯ ИЗ ТЕОРИИ
Под записью понимается структура данных, об"единяющая под
одним именем данные различных типов. Записи состоят из
фиксированного числа элементов, называемых полями. Поле - это
переменная определенного типа. Различные поля могут иметь (в
отличии от элементов массива) различный тип. Обращение к
элементу записи выполняется с помощью составного (уточненного)
имени. Первая часть составного имени - это имя записи, вторая часть
- имя поля. Между именем записи и именем поля ставится точка:
ZAP.IMP, где ZAP - имя записи, IMP - имя поля.
При решении многочисленных задач обработки больших
об"емов информации, бухгалтерского учета, ведения различных
картотек, справочников и баз данных используются файлы, которые
позволяют запоминать, изменять, хранить и читать различную
информацию на внешних носителях (магнитных дисках). Файл
представляет собой структурированный тип данных, содержащий
последовательность компонентов (чаще всего записей) одного типа и
одной длины. Число элементов в файле (длина файла) не
фиксировано. Это является основным отличием файла от массива.
105

Файл, не содержащий ни одного элемента, называется пустым, его
длина равна нулю.
Файл можно представить как магнитную ленту, у которой есть
начало, а конец не фиксирован. Элементы файла записываются на эту
ленту последовательно, друг за другом с помощью некоторого
устройства (указателя файла). При чтении или записи этот указатель
перемещается к следующему элементу и делает его доступным для
обработки. В каждый момент доступен для записи (чтения) только
этот элемент файла, на который установлен указатель.
При необходимости формирования или использования файла в
разделе описаний программы должна быть описана файловая
переменная. Описание файловой переменной имеет следующий вид:
type имя-типа=file of базовый-тип;
var имя-файловой-переменной : имя-типа;
или
var имя-файловой переменной : file of базовый-тип;
В качестве базового типа элементов файла можно использовать
любой тип данных (как простой, так и сложный), за исключением
типа file.
Так как, по определению, число элементов файла не задается, то
в Turbo Pascal введена стандартная функция
Eof(var F:file):boolean;
Когда будет достигнут конец файла, Eof(F) примет значение
True, в в противном случае - False.
ПРИМЕР 1: Создать файл для хранения записей вида:
Запрос выводится с новой строки для каждого поля. Например:
Телевизор
Название . . . . . . . . . РЕКОРД
106

Цена (тыс.) . . . . . . . 3000
Диагональ . . . . . . . . 59
Изображение (ц/ч) . . Ц
Производитель . . . . .
Завод . . . . . . . . Фотон
Город . . . . . . . . Москва
Директор . . . . . Иванов
После записи файла осуществить поиск в нем названий телевизоров стоимостью менее 2 млн. руб.
program zapis;
const maxn = 30;
type TV = record
Name : string[20];
Price : 1 .. 32000;
Diagonal : 1 .. 50;
Color : char;
Proizv : record
city : string[25];
factory : string[50];
director : string[30];
end;
end;
tele = file от TV;
var f : tele;
was : boolean;
z:TV;
begin
writeln ('Ввод записей');
writeln ('Признак окончания ввода - *');
assing (f,'f.dat');
rewrite(f);
writeln (' Телевизор ');
write (' Название . . . . . .');readln(z.name);
while z.name <> ' * ' do
begin
write (' Цена (тыс.). . . . . .');readln(z.Price);
write (' Диагональ . . . . . .');readln(z.Diagonal);
107

write (' Изображение (ц/ч). . .');readln(z.Color);
writeln (' Производитель. . . . . ');
with z.Proizv do
begin
write (' Завод . . . . . . .');readln(city);
write (' Город . . . . . . .');readln(factory);
write (' Директор. . . . . .');readln(director);
tnd;
write (f,z)
writeln (' Телевизор');
write ('Название .......'); readln (z.name)
end;
close (f);
writeln ('Файл сформирован');
reset (f);
was:=false; {признак того, что искомые телевизоры найдены)
writeln ('Названия телевизоров стоимостью менее 2 млн.руб.');
while not eof(f) do
begin
read (F,Z);
if z.price < 2000 then
begin
writeln (z.name);
was:=true
end
end;
if was=false then
writeln ('Не найдены');
close(f)
end.
Упражнения:
1. Дан файл f, компоненты которого являются целыми числами.
Найти наибольший и наименьший из компонентов файла.
2. Дан файл f, компоненты которого являются целыми числами.
Найти количество четных чисел и количество квадратов нечетных
чисел среди компонентов файла.
108

3. Даны символьные файлы f1 и f2.Поменять местами содер-
жимое файлов, не используя стандартных процедур.
4. Дан файл f, компоненты которого являются действительными
числами. Найти сумму и произведение компонентов файла, а также
значение последнего элемента.
5. Дан файл f, компоненты которого являются символами. По-
лучить копию файла в файле g, не используя стандартных процедур.
6. Дан файл f, компоненты которого являются целыми числами.
Записать в файл g все четные числа файла f, а в файл n-все нечетные.
7. Дан файл f, компоненты которого являются символами.
Записать в файл g компоненты файла f в обратном порядке.
8. Дан файл f, компоненты которого являются целыми чис-
лами.. Переписать компоненты файла f в файл g, так чтобы в файле g
сначала или отрицательные, затем положительные числа.
9. Даны символьные файлы f и g. Определить, совпадают ли
компоненты файла f с компонентами файла g. Если нет, то получить
номер первой компоненты, в которой файлы f и g отличаются между
собой.
10. Дан символьный файл f. Найти самое длинное слово в файле.
11. Дан текстовый файл f. Получить самую длинную строку файла.
12. Дан текстовый файл f. Записать в перевернутом виде строки
файла f в файл g.
13. Дан текстовый файл f и строка s. Получить все строки файла
f, содержащие в качестве фрагмента строку s.
14. Дан текстовый файл f. Получить самую короткую строку файла.
15. Дан текстовый файл f. Проверить соответствие числа
открывающих и закрывающих скобок.
16. Даны текстовые файлы f и g. Определить совпадают ли
компоненты файлов.
17. Дан текстовый файл f. Определить сколько строк в файле
начинаются с символа 'р'.
18. Дан текстовый файл f. Вывести на печать последнюю из
строк длиною 45 символов.
19. Дан текстовый файл f. Исключить пробелы, стоящие в начале
его строк. Результат поместить в файл f1.
20. Дан текстовый файл f. Записать в файл g строки, содержащие
менее 50 символов.
109

ЛАБОРАТОРНАЯ РАБОТА 10
ПРОЦЕДУРЫ
ЦЕЛЬ РАБОТЫ:
1. Научиться использовать процедуры в языке Паскаль.
2. Изучить механизм передачи параметров в процедурах.
КРАТКИЕ СВЕДЕНИЯ ИЗ ТЕОРИИ
Часто в программе обнаруживаются однотипные участки,
которые выполняют одни и те же вычисления, но с различными
данными. Такие части программ целесообразно оформлять в виде
подпрограмм. В языке Паскаль выделяют два вида подпрограмм:
процедуры и функции. Процедурой называется особым образом
оформленный фрагмент программы, имеющий собственное имя.
В заголовке процедуры может быть задан список формальных
параметров.
При вызове процедуры эти формальные параметры заменяются
фактическими параметрами. Различают формальные параметры значения и параметры-переменные. Параметры значения можно
передавать только в одном направлении: из программы в подпрограмму. Параметры-переменные передаются в обоих направ-
лениях: из программы в подпрограмму и, наоборот, из подпрограммы
в программу.
ПРИМЕР 1: Массив A(n) отсортировать в порядке возрастания
элементов.
П Р О Г Р А М М А
program SORT;
type x=array [1..20] of real;
var a:x;
i,j,n,k: integer;
R: real;
procedure max (q: integer; var nmax: integer);
var m: real;
l: integer;
begin
110
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
