Методы обработки данных при файловой организации (запись данных в файл)
Методы обработки данных при файловой организации (запись данных в файл) Организация файлов и доступ к ним Программист воспринимает файл в виде набора однородных записей. Запись — это наименьший элемент данных, который может быть обработан как единое целое прикладной программой при обмене с внешним устройством. Причем в большинстве ОС размер записи равен одному байту. В то время как приложения… Читать ещё >
Методы обработки данных при файловой организации (запись данных в файл) (реферат, курсовая, диплом, контрольная)
Методы обработки данных при файловой организации (запись данных в файл)
Введение
Цель данной работы — повысить уровень знаний используемых программ. Задача — выработать профессиональные навыки сбора и анализа информации, реализовать и развить известные методы по обработке информации на языке высокого уровня Паскаль ABC.
Курсовая работа является основным инструментом в подготовке высококлассных специалистов, востребованных на рынке труда, дает представления и навыки ведения научной деятельности, развивает мыслительные и инициативные стороны студента, углубляет теоретические знания
1. Методы обработки данных при файловой организации (запись данных в файл) Организация файлов и доступ к ним Программист воспринимает файл в виде набора однородных записей. Запись — это наименьший элемент данных, который может быть обработан как единое целое прикладной программой при обмене с внешним устройством. Причем в большинстве ОС размер записи равен одному байту. В то время как приложения оперируют записями, физический обмен с устройством осуществляется большими единицами (обычно блоками). Поэтому записи объединяются в блоки для вывода и разблокируются для ввода.
Вопросы распределения блоков внешней памяти между файлами рассматриваются в следующей лекции. ОС поддерживают несколько вариантов структуризации файлов. Последовательный файл — простейший вариант — так называемый последовательный файл. То есть файл является последовательностью записей. Поскольку записи, как правило, однобайтовые, файл представляет собой неструктурированные байты, то обработка подобных файлов предполагает последовательное чтение записей от начала файла, причем конкретная запись определяется ее положением в файле. Такой способ доступа называется последовательным (модель ленты). Если в качестве носителя файла используется магнитная лента, то так и делается. Текущая позиция считывания может быть возвращена к началу файла (rewind).
Файл прямого доступа В реальной практике файлы хранятся на устройствах прямого (random) доступа, например на дисках, поэтому содержимое файла может быть разбросано по разным блокам диска, которые можно считывать в произвольном порядке. Причем номер блока однозначно определяется позицией внутри файла.
Здесь имеется в виду относительный номер, специфицирующий данный блок среди блоков диска, принадлежащих файлу.
Естественно, что в этом случае для доступа к середине файла просмотр всего файла с самого начала не обязателен. Для специфицирования места, с которого надо начинать чтение, используются два способа: с начала или с текущей позиции, которую дает операция seek.
Файл, байты которого могут быть считаны в произвольном порядке, называется файлом прямого доступа.
Таким образом, файл, состоящий из однобайтовых записей на устройстве прямого доступа, — наиболее распространенный способ организации файла. Базовыми операциями для такого рода файлов являются считывание или запись символа в текущую позицию. В большинстве языков высокого уровня предусмотрены операторы посимвольной пересылки данных в файл или из него.
Подобную логическую структуру имеют файлы во многих файловых системах, например в файловых системах ОС Unix и MS-DOS. ОС не осуществляет никакой интерпретации содержимого файла. Эта схема обеспечивает максимальную гибкость и универсальность. С помощью базовых системных вызовов (или функций библиотеки ввода/вывода) пользователи могут как угодно структурировать файлы. В частности, многие СУБД хранят свои базы данных в обычных файлах.
Другие формы организации файлов Известны как другие формы организации файла, так и другие способы доступа к ним, которые использовались в ранних ОС, а также применяются сегодня в больших мэйнфреймах (mainframe), ориентированных на коммерческую обработку данных.
Первый шаг — хранение файла в виде последовательности записей фиксированной длины, каждая из которых имеет внутреннюю структуру. Операция чтения производится над записью, а операция записи переписывает или добавляет запись целиком.
Ранее использовались записи по 80 байт (это соответствовало числу позиций в перфокарте) или по 132 символа (ширина принтера). В ОС CP/M файлы были последовательностями 128-символьных записей. С введением CRT-терминалов данная идея утратила популярность.
Другой способ представления файлов — последовательность записей переменной длины, каждая из которых содержит ключевое поле в фиксированной позиции внутри записи (см. рис. 2.1).
Базисная операция в данном случае — считать запись с каким-либо значением ключа. Записи могут располагаться в файле последовательно (например, отсортированные по значению ключевого поля) или в более сложном порядке.
Метод доступа по значению ключевого поля к записям последовательного файла называется индексно-последовательным.
Рис. 2.1. Файл как последовательность записей переменной длины В некоторых системах ускорение доступа к файлу обеспечивается конструированием индекса файла. Индекс обычно хранится на том же устройстве, что и сам файл, и состоит из списка элементов, каждый из которых содержит идентификатор записи, за которым следует указание о местоположении данной записи. Для поиска записи вначале происходит обращение к индексу, где находится указатель на нужную запись.
Такие файлы называются индексированными, а метод доступа к ним — доступ с использованием индекса.
Предположим, у нас имеется большой несортированный файл, содержащий разнообразные сведения о студентах, состоящие из записей с несколькими полями, и возникает задача организации быстрого поиска по одному из полей, например по фамилии студента.
Рис. 2.2 иллюстрирует решение данной проблемы — организацию метода доступа к файлу с использованием индекса.
Рис. 2.2. Пример организации индекса для последовательного файла.
Способ выделения дискового пространства при помощи индексных узлов, применяемый в ряде ОС (Unix и некоторых других), может служить примером организации индекса.
В этом случае ОС использует древовидную организацию блоков, при которой блоки, составляющие файл, являются листьями дерева, а каждый внутренний узел содержит указатели на множество блоков файла. Для больших файлов индекс может быть слишком велик. В этом случае создают индекс для индексного файла (блоки промежуточного уровня или блоки косвенной адресации).
Операции над файлами Операционная система должна предоставить в распоряжение пользователя набор операций для работы с файлами, реализованных через системные вызовы.
Чаще всего при работе с файлом пользователь выполняет не одну, а несколько операций. Во-первых, нужно найти данные файла и его атрибуты по символьному имени, во-вторых, считать необходимые атрибуты файла в отведенную область оперативной памяти и проанализировать права пользователя на выполнение требуемой операции. Затем следует выполнить операцию, после чего освободить занимаемую данными файла область памяти.
Основные файловые операции Создание файла, не содержащего данных. Смысл данного вызова — объявить, что файл существует, и присвоить ему ряд атрибутов. При этом выделяется место для файла на диске и вносится запись в каталог.
Удаление файла и освобождение занимаемого им дискового пространства.
Открытие файла. Перед использованием файла процесс должен его открыть. Цель данного системного вызова — разрешить системе проанализировать атрибуты файла и проверить права доступа к нему, а также считать в оперативную память список адресов блоков файла для быстрого доступа к его данным.
Закрытие файла. Если работа с файлом завершена, его атрибуты и адреса блоков на диске больше не нужны. В этом случае файл нужно закрыть, чтобы освободить место во внутренних таблицах файловой системы.
Позиционирование. Дает возможность специфицировать место внутри файла, откуда будет производиться считывание (или запись) данных, то есть задать текущую позицию.
Чтение данных из файла. Обычно это делается с текущей позиции. Пользователь должен задать объем считываемых данных и предоставить для них буфер в оперативной памяти.
Запись данных в файл с текущей позиции. Если текущая позиция находится в конце файла, его размер увеличивается, в противном случае запись осуществляется на место имеющихся данных, которые, таким образом, теряются.
2. Программирование с использованием встроенных функций ввода/вывода Задача 1. Перевести гектары в квадратные метры Выполнение
I. Разрабатываем алгоритм решения задачи:
1. Для того чтобы перевести гектары в квадратные метры, необходимо задать константу, которая будет хранить значение количество квадратных метров в гектаре. Назовем эту константу m2_ga = 10 000.
2. Вводим переменные: gectars — начальное значение, количество гектар, которые необходимо перевести в квадратные метры; metr2 — итоговое значение, количество квадратных метров, соответствующее введенным гектарам.
3. Начальное значение gectars вводим с помощью оператора readln.
4. Выполняем расчет по формуле:
mert2= gectars*m2_ga, (1)
где metr2 — количество квадратных метров;
gectars — количество гектар;
m2_ga — количество квадратных метров в гектаре.
5. Выводим полученный результат на экран с помощью оператора writeln в соответствующем формате.
II. Разрабатываем блок — схему решения задачи:
Схем 1.
III. Программа имеет вид:
program perevod;
const m2_ga =10 000;
var gectars, metr2: real;
begin
write (' Введите количество гектар: ');
readln (gectars);
metr2:= gectars*m2_ga;
writeln (gectars, ' гектар составляет ', metr2 ,' квадратных метров');
end.
IV. Тестовый пример
1. После щелчка по кнопке «Выполнить программу» в среде PascalABC, появляется окно ввода, в которое вводится значение, соответствующее количеству гектаров, которые необходимо перевести в квадратные метры (рис. 1):
Рисунок 1 — Ввод количества гектар
2. После щелчка по кнопке Enter появляется результат (рис. 2):
Рисунок 2 — Вывод результата Задача 2. Вычислить сколько секунд в сутках, неделе, году Выполнение
I. Разрабатываем алгоритм решения задачи:
1. Для того чтобы вычислить сколько секунд в сутках, неделе, году, необходимо задать константу, которая будет хранить количество секунд в одном дне. Назовем ее s_day = 86 400.
2. Вводим начальные значения — day — количество дней, week — количество недель, year — количество лет; s — итоговое значение, секунд в днях, неделях, годах.
3. Начальные значения day, week, year вводим с помощью оператора readln.
4. Выполняем расчет по формуле:
s:=day*s_day, (2)
s:=week*s_day*7, (3)
s:=year*s_day*365, (4)
где s — количество секунд;
day — количество дней;
s_day — количество секунд в дне;
week — количество недель;
year — количество лет.
5. Выводим полученный результат на экран с помощью оператора writeln в соответствующем формате.
II. Разрабатываем блок — схему решения задачи:
Схема 2.
III. Программа имеет вид:
program vichislenie;
const s_day = 86 400; s_week = s_day*7; y_day = s_day*365;
var s, day, week, year: real;
begin
write (' Введите количество суток: ');
readln (day);
s:=day*s_day;
writeln (' в сутках ', s,' секунд');
begin
write (' Введите количество недель: ');
readln (week);
s:=week*s_day*7;
writeln (' в неделях ', s,' секунд');
begin
write (' Введите количество лет: ');
readln (year);
s:=year*s_day*365;
writeln (' В годах ', s,' секунд');
end;
end;
end.
IV. Тестовый пример
1. После щелчка по кнопке «Выполнить"вводится количество дней (рис. 3):
Рисунок 3 — Ввод количества дней
2. После щелчка по кнопке Enter вводится количество недель (рис. 4):
Рисунок 4 — Ввод количества недель
3. После щелчка по кнопке Enter появляется окно ввода, в которое вводится количество лет (рис.5);
Рисунок 5 — Ввод количества лет
4. После щелчка по кнопке Enter появляется результат (рис.6);
Рисунок 6 — Вывод результата
3. Программирование линейных и разветвляющихся вычислительных процессов
Задача 3. Вычислить значение выражения
(5)
Выполнение
I. Разрабатываем алгоритм решения задачи:
1. Разобьем исходное выражение (5) на четыре части:
a=g*abs (d); b=exp (3*ln (sin (x))); c=Sqrt (exp (d*ln (exp (1)))); d=x+y.
2. После разбиения на части исходное выражение приобретает вид:
6)
3. Определяем область допустимых значений выражения (5):
a > 0; c > 0.
4. Вводим семь переменных: x — исходное вводимое значение; y — итоговое значение выражения; g — переменная; a, b, c, d — переменные для хранения частей рассчитываемого выражения.
5. Вводим значение x, y, g рассчитываем a, b, c, d.
6. Проверяем условия области допустимых значений с помощью условного оператора If:
— Если условия истинны, рассчитываем итоговое значение выражения y. Выводим результат.
— Если не выполняется условие c > 0, то выводим сообщение: «Подлогарифмическое выражение <= 0».
— Если не выполняется условие a > 0, то сообщение: «Знаменатель = 0».
II. Разрабатываем блок — схему решения задачи:
Схема 3.
III. Программа имеет вид:
program reshenie;
var a, x, y, b, c, g, d:real;
begin
writeln (' Введите значение х, y, g');
readln (x, y, g);
d:=x+y;
a:=g*abs (d);
b:=exp (3*ln (sin (x)));
c:=Sqrt (exp (d*ln (exp (1))));
if a>0 then
if c>0 then
writeln (sqr (ln (a))*(1/3)*(b+c))
else writeln ('Подлогарифмическое выражение <= 0 ')
else writeln ('Выражение = 0 ');
end.
IV. Тестовый пример 1
1. Вводим значение x, y, z (рис. 7):
Рисунок 7 — Ввод исходных данных
2. Щелкаем по кнопке Enter, получаем итоговый результат (рис. 8):
Рисунок 8 — Итоговый результат расчета значения выражения Тестовый пример 2
1. Запускаем программу на выполнение и вводим значение x (рис. 9):
Рисунок 9 — Ввод исходных данных
2. Щелкаем по кнопке Enter, получаем сообщение об ошибке (рис. 10):
Рисунок 10 — Сообщение об ошибке Тестовый пример 3
1. Запускаем программу на выполнение и вводим значение x, y, g (рис. 11):
Рисунок 11 — Ввод исходных данных
2. Щелкаем по кнопке Enter, получаем сообщение об ошибке (рис. 12):
Рисунок 12 — Сообщение об ошибке
4. Программирование разветвляющихся вычислительных процессов с использованием If-else и оператора выбора Case
Задача 4. Вычислить значение функции
(7)
Выполнение
I. Разрабатываем алгоритм решения задачи:
1. Вводим переменную t для хранения исходных данных и три переменные z1, z2, z3 для хранения результата.
2. Значения t будем вводить с клавиатуры оператором readln.
3. Проверяем диапазон значений по числовой оси t с помощью условного оператора If и вычисляем значения z1, z2, z3 по формуле, соответствующей диапазону значений t.
4. Выводим результат на экран.
II. Разрабатываем блок-схему решения задачи:
Схема 4.
III. Программа имеет вид:
program sistema;
var z1, z2,z3,t:real;
begin
write ('Введите значение T: ');
readln (t);
if t>=10 then begin z3:=3*sin (t)+cos (t);
writeln ('z1= ', z3);
end else
if (t>5) and (t<10) then begin z2:=¾*exp (t);
writeln ('z2= ', z2);
end else begin
if (t>0) and (t<=5) then begin z1:=sin (sqr (t))-(sqrt (exp (abs (sin (t)))*t));
writeln ('z3= ', z1);
end else
end;
end.
IV. Тестовый пример 1
1. Вводим значение переменной t (рис. 13):
Рисунок 13 — Ввод исходных данных
2. Щелкаем по кнопке Enter, получаем итоговый результат (рис. 14):
Рисунок 14 — Итоговый результат расчета значения функции Тестовый пример 2
1. Вводим значение переменной t (рис. 15):
Рисунок 15 — Ввод исходных данных
2. Щелкаем по кнопке Enter, получаем итоговый результат (рис. 16):
Рисунок 16 — Итоговый результат расчета значения функции
Тестовый пример 3
1. Вводим значение переменной t (рис. 17):
Рисунок 17 — Ввод исходных данных
2. Щелкаем по кнопке Enter, получаем итоговый результат (рис. 18):
Рисунок 18 — Итоговый результат расчета значения функции Задача 5. Конечные остановки обозначены номерами от 1 до 7. Ввести номер трамвая. Вывести название конечной остановки Выполнение
I. Разрабатываем алгоритм решения задачи:
1. Вводим переменную s для хранения исходных данных и переменную Bus для хранения результата.
2. Значение s будем вводить с клавиатуры оператором readln.
3. Выводим результат на экран.
II. Разрабатываем блок-схему решения задачи:
Схема 5.
III. Программа имеет вид:
program vetvlenija7;
var Bus: integer; s: string;
begin
writeln ('Введите номер трамвая:');
readln (s);
Bus:=length (s);
if Bus=1 then
case s[1] of
'0':writeln ('Данного трамвайного маршрута — не существует');
'1':writeln ('Конечная остановка — 19 Микрорайон');
'2':writeln ('Конечная остановка — Октябрьский рынок');
'3':writeln ('Конечная остановка — Улица Баумана');
'4':writeln ('Конечная остановка — Центральный рынок');
'5':writeln ('Конечная остановка — Кольцевая');
'6':writeln ('Конечная остановка — Завод НЛМК');
'7':writeln ('Конечная остановка — Новостроительная');
end;
if Bus<>1 then
writeln ('Пожалуйста, введите действующий номер маршрута');
end.
IV. Тестовый пример 1
1. Вводим значение s (рис. 19):
Рисунок 19 — Ввод исходных данных
2. Получаем итоговый результат (рис. 20):
Рисунок 20 — Итоговый результат
Тестовый пример 2
1. Вводим значения s (рис. 21):
Рисунок 21 — Ввод исходных данных
2. Получаем итоговый результат (рис. 22):
Рисунок 22 — Итоговый результат
5. Программирование циклических вычислительных процессов
Задача 6. Составить таблицу соответствия между британскими галлонами, американскими галлонами и граммами для нескольких значений галлонов. Известно, что 1 галлон (брит.) = 1.2 галлон (США) = 4.546 л.
Выполнение
I. Разрабатываем алгоритм решения задачи:
1. Определяем литеральную константу для оформления таблицы.
2. Определяет идентификаторы необходимых переменных: начальное значение количества унций gallon, шаг изменения shag этого значения, количество значений strok и litr — результат вычислений.
3. Вводим с клавиатуры исходные данные: начальное значение gallon, шаг изменения shag, и количество значений — строк в таблице strok.
4. Для построения таблицы выполняем следующие действия: сначала формируем пустую строку оператором writeln, далее формируем заголовок таблицы с помощью литеральной константы.
5. Открываем оператором счетного цикла for цикл, в котором вычисляем результат на основе введенных данных с выводом на экран.
6. После ввода с клавиатуры исходных значений gallon, shag, и strok, происходит расчет значений litr и вывод в виде таблицы gallonB, gallonU и litr. Результат выводится в формате gallonB:10:8, gallonU:10:8, litr:10:8.
II. Разрабатываем блок-схему решения задачи:
Схема 6.
III. Программа имеет вид:
program MERA;
const line = '———————————————————————————';
var gallon, litr, shag, gallonB, gallonU: real; i, strok: integer;
begin
write ('Введите начальное значение, шаг изменения');
writeln (' и количество значений — строк в таблице: ');
readln (gallon, shag, strok);
writeln (line);
writeln (' Брит. Галон USA.Галон Литры');
writeln (line);
for i :=1 to strok do
begin
gallonB:=gallon;
gallonU:=gallonB*1.2;
litr:=4.546 494*gallon;
gallon:=gallon+shag;
writeln (gallonB:10:8,' ', gallonU:10:8,' ', litr:10:8);
end;
writeln (line);
end.
IV. Тестовый пример
1. Вводим значения gallon, shag, strok (рис. 23):
Рисунок 23 — Ввод исходных данных
2. Получаем итоговый результат (рис. 24):
Рисунок 24 — Итоговый результат
Задача 7. Пусть x — некоторое число, a e = 0.001. Вычислить сумму элементов бесконечно убывающей знакопеременной последовательности {аk}, где аk = cos (x)/(10kk), k — 1,2,… Выяснить сколько нужно слагаемых для достижения заданной точности. Вывести на экран результаты вычислений Выполнение
I. Разрабатываем алгоритм решения задачи:
1. Определяем константу e для вычислений.
2. Определяет идентификаторы необходимых переменных: a — слагаемое, количество слагаемых, x — вводимая с клавиатуры переменная, summa, k — результаты вычислений.
3. Вводим с клавиатуры значение х.
4. Задаем первоначальное значение переменных.
5. В теле цикла, сначала находим сумму и только потом изменяем значения k, после чего вычисляется следующее значение слагаемого.
II. Разрабатываем блок-схему решения задачи:
Схема 7.
III. Программа имеет вид:
program Slogaemie;
const e = 0.001;
var summa, x, a: real; k: integer;
begin
writeln ('Введите число x:');
readln (x);
summa:= 0;
k:= 1;
a:= cos (x);
while abs (a) > e do
begin
summa := summa + a;
k := k + 1;
a := (cos (x)) / ((exp (ln (10*k)*k)));
end;
writeln ('Сумма =', summa:5:2);
writeln ('Количество слагаемых = ', k-1);
end.
IV. Тестовый пример
1. Вводим значение x (рис. 25):
Рисунок 25 — Ввод исходных данных
2. Получаем итоговый результат (рис. 26):
Рисунок 26 — Итоговый результат В процессе выполнения расчетов могут появляться сообщения об ошибках, если в этих точках диапазона не выполняются условия области допустимых значений.
Задача 8. Протабулировать функцию у = sin (x+ i) на отрезке [0; i ] с шагом h=0,01*i, где i — номер варианта. Результаты вычислений вывести на экран в виде таблицы пар чисел х и y. Вычислить количество отрицательных значений функции y. Определить ее максимальное значение Выполнение
I. Разрабатываем алгоритм решения задачи:
1. Определяем константу i — 6.
2. Определяем идентификаторы необходимых переменных: h, x, y, max, summa.
3. Задаем первоначальное значение переменных
h:=0.01*i, x:=0, max:= sin (x + i).
4. Организовываем цикл с помощью оператора repeat — until, в теле цикла перебираем значения у, в поиске максимального и значения, и суммы отрицательных значений y.
5. Выводим максимальное значение и сумму отрицательных значений y.
II. Разрабатываем блок-схему программы:
Схема 8.
III. Программа имеет вид:
program Tabulentnost;
const i=6;
var x, h, y, max, summa: real;
begin
summa:=0;
h:=0.01*i;
x:=0;
max:= sin (x+i);
writeln (' х у');
repeat
y:= sin (x+i);
writeln (x:7:2, y:7:2);
if y < 0 then summa:=summa+y;
if y > max then max:=y;
x:= x + h;
until x > 6 ;
writeln (' y max =', max:5:2,' Сумма отрицательных значений у = ', summa:5:2);
end.
IV. Тестовый пример:
1. Получаем итоговый результат (рис. 27):
Рисунок 27 — Итоговый результат файл вычислительный массив программирование
6. Программирование циклических вычислительных процессов с использованием массивов и матриц Задача 9. Создать массив у, элементы которого вычисляют по формуле уk = ln (k) — 3k, где k = 1, 2. Вычислить сумму первых четырех отрицательных элементов. Вывести результаты вычислений на экран Выполнение
I. Разрабатываем алгоритм решения задачи:
1. Описываем массивы x и y как одномерные массивы вещественных чисел из 8 элементов, 2 переменные как индексы соответствующих массивов.
2. Открываем цикл и, вычисляя каждый элемент, заполняем массив y, при этом проверяя каждый созданный элемент на отрицательный знак, если условия проверки истинны, то включается счетчик k, который является индексом.
3. Результат выводим на экран в виде столбца.
II. Разрабатываем блок-схему программы:
Схема 9.
III. Программный имеет вид:
program zadacha9;
var x, y: array[1.8] of real; k, m: integer; sum: real;
begin
sum := 0;
m:=0;
writeln ('y:');
for k:=1 to 8 do begin
y[k]: =ln (k)-3*k;
if (y[k]>0) then begin
m:=m+1;
x[m]: =y[k];
end;
writeln ('y (', k,')=', y[k]: 7:2);
end;
if m > 0 then
for k:=1 to m do
writeln (x[m]: 7:2)
else
sum:=y[1]+y[2]+y[3]+y[4];
writeln ('Сумма первых четырёх отрицательных элементов = ', sum:5:2)
end.
IV. Тестовый пример
1. Вывод итогового результата (рис. 28):
Рисунок 28 — Итоговый результат
Задача 10. Создать генератором случайных чисел в интервале от — 20 до 20, двумерный массив (4×4) с элементами aij. Вывести его на экран в виде таблицы (матрицы). Вычислить произведение тех элементов массива, для которых |aij| | < 3
Выполнение
I. Разрабатываем алгоритм решения задачи:
1. Определяем тип массива a как двумерный массив вещественных чисел размерностью (4×4). Переменные i, j, p целого и вещественного типа.
2. Вычисляем и заполняем массив aij построчно, создаем и выводим таблицу.
3. Задаем условие поиска значений, которые удовлетворяют |aij| | < 3.
4. Выводим результат в виде таблицы, а произведение значений в виде сообщения «Искомое произведение»
— Если значения не удовлетворяют условию, выводится сообщение «Таких элементов нет».
II. Разработаем блок-схему программы:
Схема 10.
III. Программа имеет вид:
program X;
var a: array[1.4,1.4] of real; i, j: integer; p: real;
begin
p:=1;
writeln (' Двумерный массив (4×4)');
for i:=1 to 4 do begin
writeln;
for j:=1 to 4 do begin
a[i, j]: =random*40−20;
write (a[i, j]:5:0,' ');
if (a[i, j]<3) then begin
p:=p*(a[i, j]);
end; end; end;
writeln;
if p>1 then writeln ('Искомое произведение ', p:5:0)
else
writeln ('Таких элементов нет');
end.
IV. Тестовый пример
1. Вывод итогового результата (рис. 29):
Рисунок 29 — Результат
2. Вывод итогового результата с сообщением (рис. 30):
Рисунок 30 — Результат с сообщением
7. Данные строкового типа
Задача 11. Ввести свою фамилию, имя и отчество как одно данное строкового типа. Определить длину и количество букв «а» в ней. Вывести имя и количество букв в фамилии
Выполнение
I. Разрабатываем алгоритм решения задачи:
1. Описываем s как строковую константу, dlen как переменную для определения длины строки, i, col, count, ind как переменные вещественного типа.
2. Определяем длину dlen строки.
3. Последовательно перебирая в цикле каждый символ строки s, ищем букву 'a', подсчитывая счетчиком count.
4. Определяем первый пробел путем перебора каждого символа строки.
5. Ищем «имя» в строке. Для этого ищем второй пробел, подсчитывая счетчиком ind количество букв после первого пробела.
II. Разработаем блок-схему задачи:
Схема 11.
III. Программный имеет вид:
program FIO;
var i, kol, dlen, count, ind: integer; s: string;
begin
write ('Введите ваше ФИО: ');
readln (s);
dlen := length (s);
writeln ('Длина строки = ', dlen);
ind:=0;
for i := 1 to dlen do
if (s[i] = 'а') or (s[i] = 'А') then
inc (count);
writeln ('Всего ', count, ' букв (ы) «а» в строке');
for i:=1 to length (s) do
begin
if s[i] in [' ',',','.'] then
begin
ind:=i;
break
end
else
inc (kol);
end;
write ('Количество букв в фамилии: ', kol);
writeln;
write ('Имя: ');
for i:=ind+1 to length (s) do
begin
if s[i] in [' ',',','.'] then
break
else
write (s[i])
end;
end.
IV. Тестовый пример
1. Вывод итогового результата (рис. 31):
Рисунок 31 — Итоговый результат
8. Записи
Задача 12. Используя тип массив записей, составить программу для учета и обработки данных о студентах (фамилия, имя, цвет волос). Определить и вывести записи брюнетов из всего списка студентов Выполнение
I. Разрабатываем алгоритм решения задачи:
1. Описываем переменные: n — количество студентов с характерными данными: fam — фамилия студента, im — имя студента, cvet — цвет волос студента, s — одномерный массив типа запись из n элементов.
2. Открываем цикл, в котором вводим данные о студенте: фамилию, имя, цвет волос. Так как вводимые имена составные используем команду присоединения with.
3. Организовываем второй цикл для вывода массива s в виде строк.
4. В третьем цикле работаем с переменной cvet — определяем цвет волос студента оператором If и выводим информацию студентах, чей цвет волос темный («Брюнет»).
II. Составим блок-схему к задаче:
Схеме 12.
III. Программный имеет вид:
program Studentlist;
const n = 3;
type stud = record
fam, im, cvet: string[10];
end;
var s: array[1.n] of stud; i: integer;
begin
for i:= 1 to n do
with s[i] do
begin
writeln ('Введите фамилию студента: ');
readln (fam);
writeln ('Имя студента: ');
readln (im);
writeln ('Цвет волос: ');
readln (cvet);
end;
writeln;
writeln ('Всего было описано 5 студентов:');
for i := 1 to n do
with s[i] do
writeln (fam:10, im:10, cvet:10);
writeln;
write ('Выведем информацию о студентах,');
writeln ('цвет волос которых темный (брюнеты):');
for i:= 1 to n do
with s[i] do
if cvet='Брюнет' then
writeln (fam:10, im:10);
end.
IV. Тестовый пример
1. Ввод данных о студентах (рис. 32):
Рисунок 32 — Данные о студентах
2. После щелчка по кнопке Enter выводится результат сортировки студентов по цвету волос (рис 33.)
Рисунок 33 — Вывод результата сортировки
9. Процедуры и функции Задача 13. Даны массивы: А (10), В (10), С (10). Сформировать массив D (10), каждый элемент которого есть максимальное значение соответствующих элементов, А, В, С, т. е.. Нахождение максимального значения оформить в виде подпрограммы Выполнение
I. Разрабатываем алгоритм решения задачи:
1. Описываем массивы a, b, c, d, а также переменную: i — количество элементов в массивах.
2. Создаем функцию с использованием формальных переменных: max3 — для формирования массива d из максимальных элементов трех предыдущих массивов.
3. Выводим массивы a, b, c построенные из случайных значений, и массив d, построенный из максимальных значений этих массивов.
II. Разработаем блок-схему решения задачи:
1) Функция max3
Схема 13.
2) Программа Схема 14.
III. Программа имеет вид.
const n = 10;
var a, b, c, d: array[1.n] of integer;
i:integer;
function max3(x, y, z:integer):integer;
var t: integer;
begin
if x>y then t:=x else t:=y;
if z>t then t:=z;
max3:=t;
end;
begin
randomize;
writeln ('A':3,'B':3,'C':3,'D':3);
for i:=1 to n do begin
a[i]: =random (10);
b[i]:=random (10);
c[i]:=random (10);
d[i]:=max3(a[i], b[i], c[i]);
writeln (a[i]:3,b[i]:3,c[i]:3,d[i]:3);
end;
end.
IV. Тестовый пример
1. После щелчка по кнопке F9 выводятся четыре массива (рис.34):
Рисунок 34 Итоговый результат
10. Файлы
Задача 14. Написать программу, которая преобразует текст, находящийся в текстовом файле. В текстовом файле у всех слов, оканчивающихся на «тся», поменять окончание на «ться»
Выполнение
I. Разрабатываем алгоритм решения задачи:
1. Описываем создаваемый файл t — файловая переменная, а также переменные s — количество строк.
2. Устанавливаем связь файловой переменной t с физическим файлом на диске, открываем файл t для записи.
3. Считываем длину строки, и условием «во всех словах в строке которые оканчиваются на `тся' меняем окончание на `ться'» вставляем в строку новые окончания.
4. Закрываем файл, перезаписав строку.
5. Считанная строка, без замены окончания, выводится на экран.
II. Составим блок-схему решения задачи:
Схема 15.
III. Программа имеет вид:
var t: text; s: string; i: integer;
begin
assign (t,'document.txt');
reset (t);
read (t, s);
writeln (s);
for i:=1 to length (s)+1 do
if ((s[i]='т') and (s[i+1] = 'с') and (s[i+2] = 'я')) then
insert ('ь', s, i+1);
close (t);
rewrite (t);
write (t, s);
close (t);
end.
IV. Тестовый пример
1. Проверяем наличие файла и записи в нем (рис.35):
Рисунок 35. Ввод исходных данных
2. Запускаем программу, нажав кнопку F9 (рис.36):
Рисунок 36 — Промежуточный результат
3. Проверяем запись в файле (рис. 37):
Рисунок 37 — Исправленные слова
Заключение
Выполняя данную работу, я обобщил и сформировал полученные знания и умения обращения с программами Visio, Word, PascalABC, в единую систематизированную структуру знаний. Все поставленные цели и задачи были реализованы и выполнены в соответствии с нормами и правилами.
Выполнив эту работу, я получил бесценный опыт работы с программным обеспечением, окончательно закрепил и усвоил все полученные ранее навыки и знания.