- •ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ
- •Требования к оформлению лабораторных работ
- •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
- •ПРИЛОЖЕНИЕ А
- •ПРИЛОЖЕНИЕ Б
- •СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ
- •ОГЛАВЛЕНИЕ
17.ЛАБОРАТОРНАЯ РАБОТА №15 «ТЕКСТОВЫЕ ФАЙЛЫ»
Цель работы: Сформировать навыки по созданию и использованию текстовых файлов средствами изучаемого языка программирования
13.1 Примеры решения задач с использованием текстовых файлов
Пример 17.2 Найти слово максимальной длины в текстовом файле.
В листинге 17.2 приводится решение этой задачи с использованием динамического массива, что позволит модернизировать данное решение для других задач, связанных с анализом слов в файле, таких как: сортировка слов, поиск одинаковых слов и т.д.
Процедура strToArray(var mas:tarr; strTmp:string) преобразует
все передаваемые в нее строки strTmp в слова, причем слова помещаются в динамический массив mas.
Процедура printArray(mas:tArr;mode:boolean;count:word=0) печа-
тает на экране слова из массива mas. Если параметр mode=true, то слова печатаются каждое с новой строки, в противном случае слова печатаются через пробел в одну строку. Опциональный параметр count позволяет указать количество печатаемых слов, когда count=0 и когда count больше длины передаваемого массива печатаются все слова из этого массива, в противном случае печатается count первых слов.
Функция maxWord(mas:tarr):string возвращает самое длинное слово из массива слов.
Листинг 17.2
type Tarr=array of string[20]; //процедура преобразующая передаваемые //в нее строки в массив //Задаем константу-множество разделителей
const delimeters:set of char =[chr(9),chr(10), chr(13), chr(32)..chr(34),chr(37)..chr(47), chr(58)..chr(63), chr(91)..chr(94),chr(123)..chr(127)];
procedure strToArray(var mas:tarr; strTmp:string); var
i:byte;
len:word; begin
setlength(mas,length(mas)+1);
len:=length(mas);
strTmp:=trim(strTmp);
115
for i := 1 to length(strTmp) do begin
if not (strTmp[i] in delimeters) then mas[len-1] := mas[len-1] + strTmp[i]
else
if length(mas[len-1]) > 0 then begin
setlength(mas,len+1);
inc(len);
end;
end;
end;
//Печать массива
procedure printArray(mas:tArr;mode:boolean;count:word=0); var
i:word; begin
i:=0;
if (count=0)or (count>=length(mas)) then while length(mas[i])>0 do
begin |
//false - write, true - writeln |
if mode then |
writeln(mas[i])
else write(mas[i],' '); inc(i);
end
else
for i:=0 to count do writeln(mas[i]);
end;
//функция поиска слова с максимальной длиной function maxWord(mas:tarr):string;
var i:word;
max_word:string; lenMax:byte; begin
max_word:=mas[0]; lenMax:=length(max_word); i:=1;
while length(mas[i])>0 do begin
if lenMax<length(mas[i]) then begin
max_word:=mas[i];
116
lenMax:=length(max_word); end;
inc(i);
end; result:=max_word;
end;
var f:text; i:word;
mas_str:tarr; strtmp:string; begin
repeat
write('Input file name: '); readln(strtmp);
{$I-} AssignFile(f,strtmp); reset(f);
{$I+}
if IOResult<>0 then writeln('File not found')
else break; until false;
//чтение строк из файла и формирование массива while not Eof(f) do
begin readln(f,strtmp);
strToArray(mas_str,strtmp); end;
printArray(mas_str,false); //печать всего массива writeln;
writeln('word with max length: ',maxWord(mas_str)); readln;
end.
13.2Задания к лабораторной работе №15
Взаданиях 1—30 исходные текстовые файлы создаются с помощью ка- кого-либо текстового процессора.
1.Дан файл, содержащий текст, записанный строчными русскими буквами. Получить в другом файле тот же текст, записанный заглавными буквами.
2.Дан файл, содержащий произвольный текст. Выяснить, чего в нем больше: русских букв или цифр.
117
3.Дан файл, содержащий текст на русском языке. Выяснить, входит ли данное слово в указанный текст, и если да, то сколько раз.
4.Дан файл, содержащий текст на русском языке. В предложениях некоторые из слов записаны подряд несколько раз (предложение заканчивается точкой или восклицательным знаком). Получить в новом файле отредактированный текст, в котором удалены повторные вхождения слов в предложение.
5.Дан файл, содержащий текст, набранный заглавными русскими буквами. Провести частотный анализ текста, т.е. указать (в процентах), сколько раз встречается та или иная буква.
6.Дан файл, содержащий текст на русском языке. Определить, сколько раз встречается в нем самое длинное слово.
7.Дан файл, содержащий произвольный текст. Проверить, правильно ли в нем расставлены круглые скобки (т.е. находится ли правее каждой открывающейся скобки закрывающаяся и левее закрывающейся — открывающаяся).
8.Дан файл, содержащий текст на русском языке. Составить в алфавитном порядке список всех слов, встречающихся в этом тексте.
9.Дан файл, содержащий текст на русском языке. Определить, сколько раз встречается в нем самое короткое слово.
10.Дан файл, содержащий текст на русском языке и некоторые два слова. Определить, сколько раз они встречаются в тексте и сколько из них — непосредственно друг за другом.
11.Дан файл, содержащий текст на русском языке. Выбрать из него те символы, которые встречаются в нем только один раз, в том порядке, в котором они встречаются в тексте.
12.Дан файл, содержащий текст и арифметические выражения вида a(x)b, где ®— один из знаков +, -, , /. Выписать все арифметические выражения
ивычислить их значения.
13.Даны файл, содержащий текст на русском языке, и некоторые буквы. Найти слово, содержащее наибольшее количество указанных букв.
14.Дан файл, содержащий текст на русском языке, и некоторая буква. Подсчитать, сколько слов начинается с указанной буквы.
15.Дан файл, содержащий текст на русском языке. Найти слово, встречающееся в каждом предложении, или сообщить, что такого слова нет.
16.Дан файл, содержащий текст, включающий русские и английские слова. Подсчитать, каких букв в тексте больше — русских или латинских.
17.Дан файл, содержащий текст. Сколько слов в тексте? Сколько цифр
в тексте?
18.Дан файл, содержащий текст, включающий в себя русские и английские слова. Получить новый файл, заменив в исходном все заглавные буквы
118
строчными и наоборот.
19.Дан файл, содержащий зашифрованный русский текст. Каждая буква заменяется на следующую за ней (буква я заменяется на а). Получить в новом файле расшифровку данного текста.
20.Даны два текстовых файла f1 и f2. Файл f1 содержит произвольный текст. Слова в тексте разделены пробелами и знаками препинания. Файл f2 содержит не более 30 слов, которые разделены запятыми. Эти слова образуют па-
ры: каждое второе является синонимом первого. Заменить в файле f1 те слова, которые можно, их синонимами. Результат поместить в новый файл.
21.Дан текстовый файл. Удалить из него все лишние пробелы, оставив между словами не более одного пробела. Результат поместить в новый файл.
22.Дан текстовый файл и некоторое слово. Напечатать те строки файла, которые содержат данное слово.
23.Дан текстовый файл. Напечатать в алфавитном порядке все слова из данного файла, имеющие заданную длину n.
24.Текстовый файл содержит запись многочлена некоторой степени с одной переменной х, коэффициенты многочлена — целые. Например, 5x^4- 3x^3+15x^2-4. Указать степень многочлена, его коэффициенты. Дописать в указанный файл таблицу значений этого многочлена на данном отрезке [а, b].
25.Дан файл, содержащий текст на русском языке. Подсчитать количество слов, начинающихся и заканчивающихся на одну и ту же букву.
26.Дан файл, содержащий текст на русском языке. Подсчитать количество слов, длиной 3 буквы.
27.В файл вместо букв через запятую записаны их кода в CP-866, записать в новый файл буквы соответствующие кодам из первого файла.
28.Дан текстовый файл, определить, сколько в нем предложений.
29.Дан текстовый файл, определить, сколько в нем абзацев. Переписать содержимое этого файла в новый файл, причем в начале каждого абзаца записать цифру с его номером.
30.В файле слова зашифрованы — каждое из них записано наоборот. Расшифровать файл.
119