- •ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ
- •Требования к оформлению лабораторных работ
- •1. ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ
- •13.1 План разработки алгоритмов и программ
- •Таблица 1.1 Результат ручной прокрутки после первого этапа
- •Таблица 1.2 Результат ручной прокрутки после первого этапа
- •Таблица 1.3 Итог выполнения ручной прокрутки
- •13.2 Перевод алгоритма в Паскаль-программу
- •13.3 Использование готовых алгоритмов при решении задач
- •Подсчет элементов, обладающих заданным свойством
- •Поиск максимального и минимального элементов
- •Поиск элементов, обладающих заданным свойством
- •Задача 1. Подсчет ненулевых элементов
- •Задача 2. Подсчет элементов, абсолютная величина которых больше 7
- •Задача 3. Поиск элемента равного 7
- •Задача 5. Найти количество элементов массива больших среднего арифметического этих элементов
- •Задача 6. Поиск максимального элемента и подсчет частоты его появления в массиве
- •Задача 7. Поиск нулевого элемента
- •Задача 8. Поиск отрицательного числа с конца массива
- •13.4 Стандартная обработка двумерных массивов
- •Двумерный массив и его части
- •Индексы элементов двумерного массива
- •Индексы строки и столбца двумерного массива
- •Индексы диагоналей двумерного массива
- •Перенос простейших алгоритмов на двумерные массивы
- •13.5 Отладка и тестирование программ
- •2. СОЗДАНИЕ КОНСОЛЬНЫХ ПРИЛОЖЕНИЙ СРЕДСТВАМИ DELPHI 7.0
- •13.1 Создание консольного приложения средствами Delphi
- •13.2 Структура программы в Delphi
- •Таблица 2.1
- •13.3 Введение в типы данных Delphi
- •13.4 Венгерская нотация
- •13.5 Отладка и тестирование программ средствами среды Delphi 7
- •3. ЛАБОРАТОРНАЯ РАБОТА №1 «ЛИНЕЙНЫЕ ПРОГРАММЫ»
- •13.1 Пояснения и примеры к лабораторной работе
- •13.2 Задания к лабораторной работе №1:
- •4. ЛАБОРАТОРНАЯ РАБОТА №2 «АЛГОРИТМЫ С ВЕТВЛЕНИЯМИ»
- •13.3 Пояснения и примеры к лабораторной работе
- •13.2 Реализация алгоритмов с ветвлениями средствами C#
- •13.3 Задания к лабораторной работе №2
- •5. ЛАБОРАТОРНАЯ РАБОТА №3 «ОПЕРАТОР ВЫБОРА»
- •13.1 Пояснения и примеры к лабораторной работе
- •13.2 Реализация оператора выбора в языке C#
- •13.3 Задания к лабораторной работе №3
- •6. ЛАБОРАТОРНАЯ РАБОТА №4 «ЦИКЛИЧЕСКИЕ АЛГОРИТМЫ»
- •13.1 Основные разновидности циклов
- •Цикл с постусловием
- •Цикл с предусловием
- •Цикл с параметром
- •Программное прерывание выполнения циклов
- •13.2 Примеры решения задач с использованием операторов цикла
- •Проверка корректности введенных данных
- •Решение задач с использованием диапазонов чисел
- •Решение задач полным перебором
- •Пояснения к задачам 18, 23, 24, 25:
- •13.3 Задания к лабораторной работе №4
- •7. ЛАБОРАТОРНАЯ РАБОТА №5 «РЯДЫ И ПОСЛЕДОВАТЕЛЬНОСТИ»
- •13.1 Примеры решения задач
- •Вычисление суммы n-первых членов ряда
- •Вычисление суммы n-первых членов последовательности, удовлетворяющих условию
- •Нахождение наименьшего номера члена последовательности, для которого выполняется некоторое условие
- •13.2 Задания к лабораторной работе №5
- •8. ЛАБОРАТОРНАЯ РАБОТА №6 «ТАБУЛИРОВАНИЕ ФУНКЦИЙ»
- •13.1 Пример решения задачи на табулирование функции
- •8.1.2 Организация перенаправления ввода-вывода средствами C#
- •13.2 Задания к лабораторной работе №6
- •9. ЛАБОРАТОРНАЯ РАБОТА №7 «ПОДПРОГРАММЫ»
- •13.1 Задания к лабораторной работе №7
- •13.2 Задания к лабораторной работе №8
- •13.1 Примеры и пояснения к лабораторной работе
- •13.2 Задания к лабораторной работе №9
- •Задания к лабораторной работе №10
- •13.1 Примеры работы со строками
- •Пример 13.2 Удалить из строки символ, указанный пользователем.
- •Пример 13.3 Удалить из строки лишних пробелов (пробелы в начале и в конце строки, между словами также должен быть один пробел).
- •Пример 13.4 Определить количество слов в заданном тексте.
- •13.2 Задания к лабораторной работе №11
- •13.1 Задания к лабораторной работе №12
- •13.1 Пояснения к работе
- •13.1 Задания к лабораторной работе №13
- •13.1 Пояснения к лабораторной работе №14
- •Формирование файла случайных чисел
- •Анализ файла случайных чисел
- •13.2 Задания к лабораторной работе №14
- •13.1 Примеры решения задач с использованием текстовых файлов
- •13.2 Задания к лабораторной работе №15
- •13.1 Задания к лабораторной работе №16
- •13.1 Задания к лабораторной работе №17
- •13.2 Задания к лабораторной работе №18
- •13.1 Задания к лабораторной работе №19
- •ПРИЛОЖЕНИЕ А
- •ПРИЛОЖЕНИЕ Б
- •СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ
- •ОГЛАВЛЕНИЕ
16.ЛАБОРАТОРНАЯ РАБОТА №14 «ТИПИЗИРОВАННЫЕ ФАЙЛЫ ЦЕЛЫХ ЧИСЕЛ»
Цель работы: Сформировать навыки создания и работы с типизированными файлами, заполненными целыми числами, средствами изучаемого языка программирования.
13.1 Пояснения к лабораторной работе №14
Пример 16.1 Сформировать типизированный файл целых случайных чисел, записать в другой файл все повторяющиеся числа.
Задача также как и впредыдущем примере может быть разбита на подза-
дачи:
•Формирование файла случайных чисел
•Анализ файла случайных чисел
Вотличие от пре6дыдущего примера напишем две отдельные программы для решения каждой задачи.
Формирование файла случайных чисел
Данная задача может быть решена за счет следующих шагов:
•Создание нового типизированного файла произвольного доступа
•Определение количества записываемых в файл чисел
•Формирование случайного числа, вывод его на экран и запись его в
файл
Листинг 16.1 var
f:file of byte; filename:string; max,min:byte; i,x,amount:byte;
begin
//Создание файла произвольного доступа repeat
write('Input file name: '); readln(filename);
{$I-} AssignFile(f,filename); rewrite(f);
{$I+}
if IOResult<>0 then writeln('File not create')
else break; until false;
109
//Определение верхней и нижней границ необходимого количества //чисел в файле
write('High margin for amount:'); readln(max); write('Low margin for amount:'); readln(min); randomize;
//Количество записываемых чисел amount:=min+random(max-min+1); writeln('Digits in file:');
//Получение случайных чисел для записи в файл for I := 1 to amount do
begin x:=random(256);
write(x:4);//вывод на экран write(f,x);//вывод в файл
end;
writeln;
writeln('Amount of digits in file=',amount); Close(f);
readln;
end.
Анализ файла случайных чисел
Данная задача может быть решена за счет следующих шагов:
•Открытие на чтение типизированного файла произвольного доступа
•Считывание находящихся в нем чисел в динамический массив
•Создание нового типизированного файла произвольного доступа
•Анализ динамического массива на предмет совпадения чисел и помещение совпадающих элементов в другой динамический массив
•Запись совпадающих элементов в файл
Вданном примере мы все числа поместим в динамический массив, хотя для текущей задачи этого не требуется, но в некоторых случаях возникает необходимость постоянно обращаться к числам, хранящимся в файле, что вызывает определенные временные задержки, проще считать эти данные из памяти.
Второй динамический массив мы создали для демонстрации записи данных из динамического массива в файл.
Листинг 16.2 var
f,f1:file of byte; filename:string; i,j,k,amount:byte; all,repdig:array of byte;
begin repeat
110
//Открытие файла на чтение
write('Input name of file with digits: '); readln(filename);
{$I-} AssignFile(f,filename); reset(f);
{$I+}
if IOResult<>0 then writeln('File not found')
else break; until false;
amount:=filesize(f);
setlength(All,amount);
writeln('Amount of digits in file=',amount); writeln('All digits:');
//Запись в массив 'All чисел из файла for I := 0 to amount-1 do
begin read(f,all[i]);
write(all[i]:4);//вывод на экран end;
Close(f);
//Формирование массива совпадающих чисел k:=0;
for I := 0 to amount - 2 do begin
for j := i+1 to amount - 1 do if all[i]=all[j] then begin
inc(k);
setlength(repdig,k); repdig[k-1]:=all[i]; break;
end;
end;
writeln;
//Открытие файла на запись из массива repeat
write('Input file name for record: '); readln(filename);
{$I-} AssignFile(f1,filename); rewrite(f1);
{$I+}
if IOResult<>0 then writeln('File not create')
111
else break; until false;
writeln('In file ',filename,' record digits:'); //Запись массива repdig в файл
for I := 0 to k-1 do begin
write(repdig[i]:4);
write(f1,repdig[i]);
end;
close(f1);
readln;
end.
13.2Задания к лабораторной работе №14
1.Заполнить файл последовательного доступа f целыми числами, полученными с помощью генератора случайных чисел. Получить в файле g те компоненты файла f, которые являются четными.
2.Записать в файл последовательного доступа N действительных чисел. Вычислить произведение компонентов файла и вывести на печать.
3.Заполнить файл последовательного доступа f целыми числами, полученными с помощью генератора случайных чисел. Получить в файле g все компоненты файла f, которые делятся на m и не делятся на n.
4.Записать в файл последовательного доступа N целых чисел, полученных с помощью генератора случайных чисел. Подсчитать количество пар противоположных чисел среди компонентов этого файла.
5.Заполнить файл последовательного доступа f целыми числами, полученными с помощью генератора случайных чисел. Из файла f получить файл g, исключив повторные вхождения чисел. Вывести файл g на печать.
6.Записать в файл последовательного доступа произвольных натуральных чисел. Переписать в другой файл последовательного доступа те элементы, которые кратны К. Вывести полученный файл на печать.
7.Заполнить файл последовательного доступа действительными числами, полученными с помощью датчика случайных чисел. Найти сумму минимального и максимального элементов этого файла.
8.Записать в файл последовательного доступа N натуральных чисел:
a1, a2, … , an (числа получить с помощью датчика случайных чисел). Сформировать новый файл последовательного доступа, элементами которого являются
числа a1, a1 a2, a1 a2 a3, … , a1 a2 a3 … an.
9. Записать в файл f последовательного доступа N натуральных чисел. Получить в другом файле последовательного доступа все компоненты файла f, кроме тех, которые кратны К. Вывести полученный файл на печать.
112
10.Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел. Найти количество удвоенных нечетных чисел среди компонентов файла.
11.Заполнить файл f натуральными числами, полученными с помощью генератора случайных чисел. Найти количество квадратов нечетных чисел среди компонентов.
12.Записать в файл прямого доступа действительных чисел. Найти наибольшее из значений модулей компонентов с нечетными номерами.
13.Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел. Из файла f получить файл g, исключив повторные вхождения чисел. Порядок следования чисел сохранить.
14.Записать в файл последовательного доступа N действительных чисел. Найти разность первого и последнего компонентов файла.
15.Записать в файл f N целых чисел, полученных с помощью генератора случайных чисел. Заполнить файл g числами, которые являются произведениями соседних компонентов файла f.
16.Багаж пассажира характеризуется количеством вещей и их общим весом. Дан файл bagazh, содержащий сведения о багаже нескольких пассажиров. Сведения о багаже каждого пассажира представляют собой запись с двумя полями: одно поле целого типа (количество вещей) и одно — действительного (вес в килограммах).
Найти багаж, средний вес одной вещи в котором отличается не более чем на т кг от общего среднего веса одной вещи.
17.В условиях предыдущей задачи найти число пассажиров, имеющих более двух вещей, и число пассажиров, количество вещей которых превосходит среднее число вещей.
18.В условиях задачи 18 выяснить, имеется ли пассажир, багаж которого состоит из одной вещи весом менее т кг.
19.Дан файл Bibl, содержащий сведения о книгах. Сведения о каждой из книг — это фамилия автора, название и год издания. Найти названия книг данного автора, изданных начиная с 1960 г.
20.В условиях предыдущей задачи определить, имеется ли книга с названием «Информатика». Если да, то напечатать фамилию автора и год издания. Если таких книг несколько, то напечатать сведения обо всех этих книгах.
21.Дан файл т, который содержит номера телефонов сотрудников учреждения: указываются фамилия, инициалы и номер телефона. Найти номер телефона сотрудника по его фамилии и инициалам.
22.Дан файл, содержащий различные даты. Каждая дата — это число, месяц и год. Найти год с наименьшим номером.
113
23.Дан файл, содержащий различные даты. Каждая дата — это число, месяц и год. Найти все весенние даты.
24.В условиях предыдущей задачи найти самую позднюю дату.
25.Дан файл, содержащий различные даты. Каждая дата — это число, месяц и год. Найти все весенние даты.
26.В условиях предыдущей задачи найти самую позднюю дату.
27.Дан файл Tovar, содержащий сведения об экспортируемых товарах: указываются наименование товара, страна, импортирующая товар, и объем поставляемой партии в штуках. Составить список стран, в которые экспортируется данный товар, и указать общий объем его экспорта.
28.Дан файл Assort, содержащий сведения об игрушках: указываются название игрушки, ее стоимость в рублях и возрастные границы (например, игрушка может предназначаться для детей от двух до пяти лет).
а) Получить название игрушек, цена которых не превышает 140 руб. и которые подходят детям 5 лет;
б) определить стоимость самого дорогого конструктора; в) напечатать название наиболее дорогих игрушек (цена которых от-
личается от цены самой дорогой игрушки не более чем на 50 руб.); г) получить названия игрушек, которые подходят детям как четырех,
так и десяти лет;
29.Дан файл Assort, (смотри задание 28).
а) получить сведения о том, можно ли подобрать игрушку, любую, кроме мяча, подходящую ребенку трех лет;
б) получить название самой дешевой игрушки; в) получить название самой дорогой игрушки для детей до трех лет;
г) получить названия игрушек для детей четырех-пяти лет;
30.Дан файл Assort, (смотри задание 28).
а) получить название самой дорогой игрушки, подходящей детям двух-трех лет;
б) определить стоимость самой дорогой куклы; в) определить стоимость кукол для детей шести лет;
г) для детей, какого возраста предназначается конструктор?
д) для детей, какого возраста предназначены кубики? Указать их среднюю стоимость.
114