Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Pascal LabWorks

.pdf
Скачиваний:
76
Добавлен:
15.04.2015
Размер:
458 Кб
Скачать
☆

83

Лабораторная работа 8 Строки

Задание

Составьте алгоритм и программу обработки введенной с клавиатуры строки в соответствии с вариантом задания с использованием стандартных функций и процедур для работы со строками.

Варианты заданий

1.Подсчитать, сколько раз буква «ф» содержится в заданной строке, и удалить все буквы «ф» из строки. Заменить каждую точку двумя точками и двумя восклицательными знаками.

2.Подсчитать количество букв «й», «ы» и «я» (в отдельности), содержащихся в заданной строке. Вставить по два пробела после каждой запятой и удалить все буквосочетания «ой».

3.Найти сумму цифр, содержащихся в заданной строке и удалить все цифры «0». Вывести строку. Затем удалить все не цифровые символы.

4.Проверить равенство числа открывающих и закрывающих круглых скобок в заданной строке и дополнить строку скобками, чтобы баланс соблюдался.

5.Подсчитать количество больших латинских букв, содержащихся

взаданной строке и удалить все малые латинские буквы. Поставить перед каждой цифрой знак плюс.

6.Подсчитать количество латинских букв, содержащихся в заданной строке, удалить все цифры и вставить два восклицательных знака после каждой точки.

7.Подсчитать количество цифр в заданной строке, вычислить их сумму и вставить после каждой цифры ее дополнение до 10.

8.Подсчитать количество цифр «5», «6» и «7» (в отдельности), содержащихся в заданной строке. Дополнить строку этими цифрами так, чтобы их количество стало равным.

9.Вставить после каждой запятой строки пробел. Вывести часть строки, начинающуюся с первой запятой до конца предложения.

10.Заменить каждый пробел в строке тремя пробелами. Вывести часть строки, начинающуюся с первой буквы «а» до конца предложения и удалить ее из строки.

11.Вставить после каждого пробела символы тире и пробела. Вывести часть строки, заключенную между первой и второй запятыми.

12.Строка содержит арифметическое выражение с круглыми скобками. Заменить каждую скобку двумя такими же скобками. Вывести часть строки, заключенную между первой открывающей и первой закрывающей скобками.

84

13.Определить количество цифр в строке, вставить перед каждой цифры 0 символ «$», а после цифры 9 – символ «%». В конце строки добавить три символа «*».

14.В строке поменять все малые латинские буквы на большие, подсчитать их количество и добавить две наклонные черты после каждой точки.

15.Заменить слова «слон» на слово «слоник». Удалить все буквосочетания «то». Вставить вместо каждой точки три восклицательных знака.

16.Определить количество запятых в строке, удалить её часть, заключенную между первой и второй запятыми. Заменить оставшиеся запятые тремя вопросительными знаками.

17.Подсчитать количество цифр в строке и удалить все цифры. Вывести строку. Затем заменить каждый пробел тремя пробелами.

18.Строка содержит арифметическое выражение с круглыми скобками. Заменить каждую скобку двумя такими же скобками. Вывести часть строки, заключенную между первой открывающей и соответствующей ей закрывающей скобками.

19.Определить количество точек в строке. Заменить каждую точку многоточием (тремя точками), вывести строку и затем удалить все точки.

20.Определить количество пробелов в строке, заменить каждый пробел четырьмя символами подчеркивания и вывести строку. Затем удалить из строки все буквы «ф».

21.Определить количество восклицательных знаков в строке и заменить каждый из них тремя вопросительными знаками. Вывести строку. Затем удалить из нее все цифры.

22.Удалить из строки все заглавные латинские буквы, а каждую цифру заменить тремя такими же цифрами. Удалить из строки все запятые.

23.Строка содержит арифметическое выражение с квадратными скобками. Заменить каждую скобку двумя круглыми скобками. Вывести часть строки, заключенную между первым и вторым символами «-».

24.Вставить перед каждой цифрой знак «-», а после нее символ доллара. Последнюю точку строки заменить тремя восклицательными знаками.

25.Заменить буквы строки за каждой точкой на соответствующую большую букву. Добавить после каждой цифры два нуля.

26.Вставить за каждой запятой слово «пожалуйста» и запятую. Подсчитать количество запятых в строке. Удалить из строки цифры

«0».

85

27.Сформировать массив с индексами i=0…9, каждый элемент которого содержит число повторений i-й цифры в строке. Определить, какие цифры содержатся в заданной строке. Сообщение о каждой цифре выдавать только один раз. Удалить из строки все символы, не являющиеся цифрами.

28.Строка содержит арифметическое выражение с круглыми скобками. Заменить каждую скобку двумя угловыми скобками. Подсчитать количество символов «<» и «>» и вывести на экран дисплея часть строки, заключенную между первым символом «>»и первым символом

«<».

29.Определить количество цифр в строке, вставить после каждой цифры 0 символ «%», а после цифры 9 – символы «руб.».

30.Заменить все слова «дом» на слово «домик». Удалить все буквосочетания «ой». Вставить после каждой буквы «к» три знака вопроса.

Пример выполнения задания

Заменить в строке все символы «–» на «+», удалить символы «=» и вставить после каждой запятой два пробела.

{ Лабораторная работа 8. Строки.

}

{ Выполнил Сергеев Андрей, группа 500.

}

program LabWork8;

 

 

 

 

 

var

 

 

 

 

 

s: string;

 

 

{ строка

}

i: Byte;

 

 

{ текущий номер символа

}

begin

 

 

 

 

 

Writeln('Исходная строка:');

{ запрос ввода строки

}

Readln(s);

 

 

{ чтение строки

}

{ Просмотр строки и замена символов "–" на "+"

}

for i:=1 to Length(s) do

 

 

 

 

 

if s[i]='-' then s[i]:='+';

 

 

 

 

 

{ Удаление символов "=" в строке

}

repeat

 

 

 

 

 

i:=Pos('=', s);

 

 

{ определение позиции символа "=" в строке

}

if i>0 then Delete(s, i, 1);

{ если "=" есть в строке, то его удаление

}

until i=0;

 

 

{ пока не будет удален последний символ "="

}

{ Вставка после каждой запятой двух пробелов

}

i:=1;

 

 

{

просмотр строки начинаем с 1-го символа

}

repeat

 

 

{

повторяем для каждого символа строки

}

if s[i]=’,’

 

 

{

если i-й символ запятая

}

then begin

 

 

{ то

}

Insert(‘ ‘,s,i+1);

{

вставляем два пробела, начиная с (i+1)-й позиции }

Inc(i,2);

{

и пропускаем вставленные символы

}

end; { if s[i]=’,’}

 

 

 

 

 

Inc(i);

{

переходим к следующему символу строки

}

until i>Length(s);

{

пока не будут просмотрены все символы строки

}

Writeln('Преобразованная строка:');

 

Writeln(s);

{ вывод строки

}

end. { program LabWork8 }

 

 

 

 

 

86

Лабораторная работа 9. Моделирование работы с базой данных

Задание

Составьте программу, выполняющую следующие функции:

1)описание типа записи в соответствии с вариантом задания;

2)ввод данных из текстового файла (число записей указано в задании) и формирование типизированного файла записей (базы данных);

3)выполнение типовых операций с базой данных:

добавление новой записи в конец файла записей;

изменение записи с заданным номером в файле;

вывод записей в текстовый файл по заданной форме (если форма вывода не задана, то спроектировать ее самостоятельно);

4)реализацию указанных в задании действий с базой данных.

Варианты заданий

1.Записи о пяти книгах (название, авторы, издательство, год издания). Вывести названия книг заданного автора, изданных после 1990 г.

2.Записи с информацией о фамилии, номере телефона (из шести цифр) пяти ваших друзей. В форме вывода дополнительно указать сведения о районе проживания, определив его по значению второй цифры телефона: 1 – Дашково-Песочня; 2 – Горроща; 3, 4 – Приокский и Канищево; 5 – Московское шоссе; 6, 7 – Центр. Вывести фамилии друзей, живущих в центре.

3.Записи о результатах сдачи последней сессии тремя студентами. Определить и дополнить записи средними баллами. Вывести фамилии студентов, получивших «тройки» по математике.

4.Записи с анкетными данными (фамилия, год, месяц и день рождения; пол) четырех человек. Вывести фамилии девушек, родившихся

вфеврале.

5.Записи с анкетными данными (фамилия, год рождения, номер паспорта, город) четырех человек. Вывести фамилии жителей Рязани, начинающиеся с буквы «П».

6.Записи о четырех деталях: наименование, масса, длина, ширина, высота, материал. Определить количество деталей массой менее 1 кг.

7.Записи об итогах сдачи вами трех экзаменационных сессий в институте (пять предметов с названиями a, b, c, d, e). Определить средний балл каждой сессии и максимальную оценку по предмету «а».

8.Записи о пяти учебниках в библиотеке (предмет, автор, класс, количество). Определить число учебников математики для 5-го класса.

9.Записи с информацией о месте работы, занимаемой должности, трудовом стаже, зарплате Ваших родственников (родители, их братья

87

и сестры, их родители). Подсчитать общий трудовой стаж Вашей семьи.

10. Ведомость на выдачу стипендии пяти студентам (фамилия, номер группы, номер паспорта, сумма, признак получения). Вывести выплаченную сумму и фамилии студентов, не получивших стипендии.

11. Анкетные данные (фамилия, имя, отчество, пол, год рождения) пяти студентов. Вывести имена юношей старше 16 лет, живущих в Рязани.

12. Сведения о предприятиях города. Вывести название предприятия с максимальной площалью.

Завод

Площадь

Объем продукции

Количество персонала

САМ

800

357

282

ТКПО

396

348,7

130

РЗЭА

203

399,4

446

РНПЗ

544

701,3

396

13. Сводка о выполнении плана выпуска 3-х товаров по кварталам (графа «Всего» заполняется только при выводе данных в текстовый файл. Вывести наименование товара с минимальным планом в 1-м квартале.

№

Наименование

Единица

 

План выпуска

 

измерения

Всего

I кв

II кв

III кв

IV кв

 

 

 

 

 

 

 

 

 

 

14.Информация о пяти студентах: фамилия, город, улица, дом, квартира, телефон. Вывести фамилии студентов, проживающих на ул. Гагарина с телефоном, начинающимся с 92.

15.Записи о канцелярских товарах. Заполнить графу «Всего» и определить общую стоимость канцтоваров.

№

Наименование

Количество

Цена, руб.

Общая стоимость

1

Тетрадь

20

3,20

 

2

Ручка

5

6,50

 

3

Линейка

6

4,00

 

4

Клей

10

5,25

 

5

Карандаш

15

1,503

 

 

 

 

Итого

 

16.Данные о шести деталях: наименование, материал, габариты (длина, высота, ширина), масса. Определить общую массу деталей, сделанных из стали.

17.Экзаменационная ведомость для пяти студентов: номер студента, фамилия, номер зачетной книжки, оценка (отл., хор., удовл., неудовл., неявка). Вывести количество студентов, не сдавших экзамен.

18.Описать запись из задания 15, но для продовольственных товаров: кефир, творог, молоко, сметана. Выполнить то же задание.

88

19. Сведения о выполнении плана: номер и наименование изделия, единица измерения, план выпуска, фактически выпущено. Добавить в форму вывода отклонение от плана. Вывести название изделия, по которому максимально не выполнен план.

20. Данные о результатах легкоатлетических соревнований: фамилия, бег на 100 м, бег на 1 км, прыжок в высоту, прыжок в длину. Ввести данные для 6 спортсменов. Вывести фамилии спортсменов, прыгнувших выше 1 м 80 см и пробежавших 100 м быстрее 12 сек.

21.

Сведения о внешних носителях информации. Вывести название

устройства с минимальным временем доступа.

 

 

 

 

Название

 

 

Western digital

 

Fujitsu

 

Sumsung

Quantum

 

Изготовитель

 

 

 

Китай

Япония

 

 

Корея

Тайвань

 

Емкость, Гбайт

 

 

20

25

 

30

40

 

Частота, об/мин

 

 

2400

2400

 

2400

3600

 

Время доступа, мкс

 

 

90

95

 

62

56

 

22.

Записи о трех

междугородных

разговорах

.

 

 

 

 

Число

Месяц

 

Год

 

Город

 

Телефон

 

Телефон заказчика

 

 

 

 

 

 

 

 

 

 

 

 

 

 

23.Сведения о 6 сотрудниках иногородних филиалов фирмы (номер филиала, город, отдел, фамилия, 10-значный номер телефона). Вывести фамилии сотрудников Рязанского филиала с мобильными телефонами МТС.

24.Сведения о 7 рабочих. Форма вывода:

Номер цеха

Ф.И.О.

Профессия

Разряд

Стаж

 

 

 

 

 

25. Данные о 6 сотрудниках отдела. Вывести должности сотрудников с окладом менее 3 000 руб., имеющих детей.

Фамилия

Табельный номер

Должность

Оклад

Число детей

 

 

 

 

 

26.Записи о наличии в библиотеке литературы по языкам программирования (язык, автор, год издания). Определить наличие в библиотеке учебников по языку Паскаль, изданных после 1995 года.

27.Данные о студентах: фамилия, курс, номер группы, домашний телефон. Вывести фамилии и номера телефонов студентов пятого курса факультета электроники.

28.Ведомость сдачи экзамена для пяти студентов: порядковый номер, фамилия, номер зачетной книжки, оценка (отл., хор., удовл., неудовл., неявка). Вывести количество студентов, получивших отличные оценки.

29.Записи об учебниках в библиотеке школы (предмет, автор, год издания, класс). Определить наличие в библиотеке учебника по литературе для 9-го класса, изданного после 1998 года.

89

30. Информация о месте работы, должности, трудовом стаже, зарплате Ваших родственников (родители, братья, сестры и т.д.). Определить годовой доход семьи и кто вносит максимальный вклад в этот доход.

Пример выполнения задания

Сформировать таблицу данных о студентах группы: фамилия с инициалами, группа, день, месяц, год рождения, женат (замужем) или нет, и вывести фамилии студентов, родившихся в феврале.

{ Лабораторная работа 9. Моделирование работы с базой данных.

}

{ Выполнил Сергеев Андрей, группа 500.

 

}

{ Исходные данные подготовлены в файле LW9Dat.txt построчно:

}

{ число студентов n,

 

 

 

}

{ для каждого студента: фамилия, группа, дата рождения,

}

{ цифра 1, если женат (замужем), или 0 в противном случае.

}

{ Массив записей сохраняется в файле записей LW9.zap

}

{ Результаты работы записываются в файл LW9Res.txt

}

program LabWork9;

 

 

 

 

const

 

 

 

 

w1=3; w2=20; w3=6; w4=10; w5=11;

{ размеры столбцов таблицы

}

{ Вспомогательные строковые константы для оформления таблицы

}

Lin1='┌───┬───────────────────┬──────┬──────────┬───────────┐';

Lin2='│ N │

ФИО

│Группа│Дата рожд.│Сем. полож.│';

Lin3='├───┼───────────────────┼──────┼──────────┼───────────┤';

Lin4='└───┴───────────────────┴──────┴──────────┴───────────┘';

type

 

 

 

 

TDate= record

 

{ тип «Дата»

}

Day: 1..31;

 

{ поле «День»

}

Month: 1..12;

{ поле «Месяц»

}

Year: 1900..2100;

{ поле «Год»

}

end;

 

 

 

 

TStudent= record

 

{ тип «Запись о студенте»

}

Name: string;

 

{ поле «Фамилия, инициалы»

}

Group: 10..10000;

{ поле «Номер группы»

}

BirthDay: TDate;

 

{ поле – запись «День рождения»

}

Married: 0..1;

 

{ поле «Признак семейности»

}

end;

 

 

 

 

var

 

 

 

 

FDat, FRes: Text;

 

{ файлы с исходными данными и результатами}

FStd: file of TStudent;

{ файл записей о студентах группы

}

Stud: TStudent;

 

{ запись об одном студенте

}

i, n: 0..30;

 

{ номер и количество студентов в группе

}

sMar: string[10];

 

{строка для признака семейности

}

begin

 

 

 

 

Assign(FDat, 'LW9Dat.txt'); Reset(FDat);

{ открытие текст. файла для чтения }

Assign(FStd,’LW9.zap’); Rewrite(FStd);

{ создание нового файла записей

}

Readln(FDat, n);

 

 

{ ввод числа студентов

}

{ Чтение данных о n студентах из текстового файла FDat

}

{ и вывод этих данных в файл записей FStd

}

for i:=1 to n do begin

 

 

 

with Stud, BirthDay do begin { ввод данных об i-м студенте в поля записи

}

Readln(FDat, Name);

 

 

 

Readln(FDat, Group, Day, Month, Year, Married);

 

90

end; { with Stud, BirthDay }

 

 

Write(FStd,Stud);

{ вывод данных об i-м студенте в файл записей

}

end { for i };

 

 

 

 

Close(FDat);

{Закрытие файла с исходными данными

}

{ Добавление записи в конец файла записей

}

with Stud, BirthDay do begin

{ формирование новой записи о студенте

}

Name := ’Зотов А.В.’; Group := 500; Day := 10;

 

Month := 12; Year := 1984; Married := 0;

 

end; { with Stud, BirthDay }

 

 

Write(FStd,Stud);

 

 

{ вывод новой записи в файл записей

}

{ Изменение записи с порядковым номером 2 (нумерация от 1)

}

Reset(FStd);

 

 

{ открытие файла записей для чтения и записи }

Seek(FStd,1);

 

 

 

 

Read(FStd,Stud);

 

{ чтение записи файла № 1 при нумерации от 0

}

Stud.Group:=990;

 

{ изменение поля Group записи Stud

}

Seek(FStd,1);

 

 

 

 

Write(FStd,Stud);

 

{ вывод записи Stud в позицию № 1 файла

}

{ Вывод записей файла в текстовый файл в заданной форме

}

Seek(FStd,0);

 

{ переход к началу файла записей (позиция № 0)

}

n:=FileSize(FStd);

{ определение числа записей в файле записей

}

Assign(FRes,'LW9Res.txt'); Rewrite(FRes); { откр. текст. файла для вывода

}

{ Вывод таблицы в текстовый файл

}

Writeln(FRes, 'Данные о ', n, ' студентах:'); Writeln(FRes);

 

Writeln(FRes, Lin1);

Writeln(FRes, Lin2);

 

for i:=1 to n do begin

 

 

 

{ Чтение записи об i-м студенте из файла записей

}

Read(FStd,Stud);

 

 

 

{ Формирование и вывод строки таблицы с данными об i-м студенте

}

Writeln(FRes, Lin3);

 

 

 

Write(FRes,'│', i:w1, '│');

 

 

with Stud, BirthDay do begin

 

 

Write(FRes, Name, ' ':w2-Length(Name),'│');

 

Write(FRes, Group:w3,'│');

 

 

Write(FRes, ‘ ‘, Day:2, ’.’, Month:2, '.', Year:2,'│');

 

if Married 1 then sMar:=’семейн.’ else sMar:=’не семейн.’;

 

Writeln(FRes, sMar,' ':w5-Length(sMar),'│')

 

end; { with Stud, BirthDay }

 

 

end { for i };

 

 

 

 

{ Вывод результатов запроса в текстовый файл

}

Seek(FStd,0);

 

{ переход к началу (к нулевой записи) файла записей

}

Writeln(FRes,Lin4);

 

 

 

Writeln(FRes, 'Студенты, родившиеся в феврале:'); while not Eof(FStd) do begin

Read(FStd,Stud); { чтение записи об очередном студенте из файла записей }

with Stud, BirthDay do begin

 

 

if Month=2

 

 

then Writeln(FRes,Name,', дата рожд. ',Day,'.',Month,'.',Year mod 100);

 

end; { with Stud, BirthDay }

 

 

end; { while not Eof(FStd)}

 

 

Close(FRes); Close(FStd);

{Закрытие файлов

}

end. { program LabWork9 }

91

Пример файла с исходными данными:

3

Иванов И.П. 043 15 02 1984 0

Петров С.А.

043 10 08 1983 1

Яковлева Л.И. 043 22 09 1984 0

Лабораторная работа 10

Процедуры и функции

обработки массивов

Задание

Составьте следующие подпрограммы (процедуры или функции): 1) чтение элементов матрицы из текстового файла, 2) вывод элементов матрицы в текстовый файл, 3) обработка матрицы произвольного размера в соответствии с вариантом задания. Способ обработки матрицы выберите в соответствии с вариантом задания к лабораторной работе

№6 «Работа с массивами».

Сиспользованием подпрограмм выполните задание для двух мат-

риц разного размера.

Пример выполнения задания

Составить подпрограмму (процедуру или функцию) вычисления суммы положительных элементов матрицы заданных размеров. С использованием подпрограммы вычислить суммы положительных элементов двух матриц разных размеров. Ввод элементов матриц из текстового файла и вывод их в файл результатов выполнить с использованием процедур.

{ Лабораторная работа 10. Процедуры и функции обработки массивов.

}

{ Выполнил Сергеев Андрей, группа 500.

 

}

{ Исходные данные подготовлены в файле LW10Dat.txt в порядке:

}

{ число строк, число столбцов, элементы первой матрицы;

}

{ число строк, число столбцов, элементы второй матрицы построчно.

}

{ Результаты работы программы записываются в файл LW10Res.txt

}

program LabWork10;

 

 

 

const

 

 

 

nmax=10;

{ максимальное число строк и столбцов матрицы

}

type

 

 

 

TElem=Real;

 

{ тип элементов матрицы

}

TIndex=1..nmax;

 

{ тип индексов матрицы

}

TMatr= array[TIndex, TIndex] of TElem;

{ тип – матрица

}

procedure ReadMatrix(var Matr:TMatr; var m, n:TIndex; var F:Text);

 

{ Чтение из файла F числа строк m, столбцов n и элементов матрицы Matr

}

var

 

 

 

i, j: TIndex;

{ индексы матрицы

}

begin

 

 

 

Read(F, m, n);

 

 

 

92

for i:=1 to m do begin for j:=1 to n do begin

Read(F, Matr[ i, j ]); end

end

end;{ procedure ReadMatrix }

procedure WriteMatrix(const Matr:TMatr;m,n:TIndex; MatrName:string; var F:Text); { Запись в файл F размеров m, n и элементов матрицы Matr с именем MatrName} var i, j: TIndex; { индексы матрицы } begin

Writeln(F); Writeln(F, 'Матрица ', MatrName, ' размером ', m, '*', n, ':'); for i:=1 to m do begin

for j:=1 to n do begin

Write(F, Matr[ i, j ]:8:2); end;

Writeln(F); end;

end; { procedure WriteMatrix }

 

function SumOfPos(const Matr:TMatr; m, n:TIndex):TElem;

 

{ Вычисление суммы положительных элементов матрицы Matr размером m*n

}

var

 

 

i, j: TIndex;

{ индексы матрицы

}

s: TElem;

{ сумма положительных элементов матрицы

}

begin

 

 

s:=0;

for i:=1 to m do begin for j:=1 to n do begin

if Matr[ i, j ] > 0 then s:=s+ Matr[ i, j ]; end;

end; SumOfPos:=s;

end; { function SumOfPos } var

FDat, FRes: Text;

{ файлы с исходными данными и результатами

}

A, B: TMatr;

{ исходные матрицы

 

}

mA, nA, mB, nB: TIndex; { число строк и столбцов матриц

}

begin

 

 

 

 

Assign(FDat, 'LW10Dat.txt'); Reset(FDat);

{ открытие файла для чтения

}

Assign(FRes, 'LW10Res.txt'); Rewrite(FRes);

{ открытие файла для записи

}

ReadMatrix(A, mA, nA, FDat);

{ ввод размеров и элементов матрицы A }

ReadMatrix(B, mB, nB, FDat);

{ ввод размеров и элементов матрицы B }

Writeln(FRes, 'Вычисление сумм положительных элементов матриц.');

 

Writeln(FRes);

 

 

 

 

WriteMatrix(A, mA, nA, 'A', FRes);

{ вывод матрицы A в файл результатов

}

Writeln(FRes,'Сумма положительных элементов матрицы А:',

 

SumOfPos(A,mA,nA):10:2);

 

 

WriteMatrix(B, mB, nB, 'B', FRes);

{ вывод матрицы B в файл результатов

}

Writeln(FRes,'Сумма положительных элементов матрицы B:',

 

SumOfPos(B,mB,nB):10:2);

 

 

Close(FDat); Close(FRes);

{ закрытие файлов

}

end. { program LabWork10 }

 

 

 

93

Лабораторная работа 11

Модуль подпрограмм

обработки массивов

Задание

Измените программу выполнения лабораторной работы № 11 «Процедуры и функции обработки массивов», расположив все необходимые типы, процедуры и функции обработки массивов в модуле.

Пример выполнения задания

Составить функцию вычисления суммы положительных элементов матрицы заданных размеров. С использованием подпрограммы вычислить суммы положительных элементов двух матриц разных размеров. Ввод элементов матриц из текстового файла и вывод их в текстовый файл результатов выполнить с использованием процедур.

{ Лабораторная работа 11. Модуль подпрограмм обработки массивов

}

{ Выполнил Сергеев Андрей, группа 500.

 

}

unit Lab11Un;

 

{ заголовок модуля

}

interface

 

{ интерфейс модуля

}

const

 

 

 

 

nmax=10;

 

{ максимальное число строк и столбцов матрицы }

type

 

 

 

 

TElem=Real;

 

 

{ тип элементов матрицы

}

TIndex=1..nmax;

 

{ тип индексов матрицы

}

TMatr= array[TIndex, TIndex] of TElem;

{ тип – матрица

}

{ --------------------

Заголовки процедур и функций работы с матрицами---------------

}

{ Чтение из файла F числа строк m, столбцов n и элементов матрицы Matr

}

procedure ReadMatrix(var Matr:TMatr; var m, n:TIndex; var F:Text);

 

{ Запись в файл F размеров m, n и элементов матрицы Matr с именем MatrName} procedure WriteMatrix(const Matr:TMatr;m,n:TIndex; MatrName:string;var F:Text);

{ Вычисление суммы положительных элементов матрицы Matr размером m*n

}

function SumOfPos(const Matr:TMatr; m, n:TIndex):TElem;

 

implementation

{ секция реализации модуля

}

{

--------------------Реализация процедур и функций работы с матрицами ------------

}

procedure ReadMatrix(var Matr:TMatr; var m, n:TIndex; var F:Text);

 

{ Чтение из файла F числа строк m, столбцов n и элементов матрицы Matr

}

var

 

 

 

i, j: TIndex;

{ индексы матрицы

}

begin

 

 

 

Read(F, m, n);

 

 

 

for i:=1 to m do begin

 

 

 

for j:=1 to n do begin

 

 

 

Read(F, Matr[i,j]);

 

 

 

end

 

 

 

end

 

 

end;{ procedure ReadMatrix }

procedure WriteMatrix(const Matr:TMatr;m,n:TIndex; MatrName:string;var F:Text); { Запись в файл F размеров m, n и элементов матрицы Matr с именем MatrName}

var

 

 

i, j: TIndex;

{ индексы матрицы

}

begin

 

 

94

Writeln(F); Writeln(F, 'Матрица ', MatrName, ' размером ', m, '*', n, ':'); for i:=1 to m do begin

for j:=1 to n do begin

Write(F, Matr[i,j]:8:2); end;

Writeln(F);

 

 

end;

 

 

end; { procedure WriteMatrix }

 

function SumOfPos(const Matr:TMatr; m, n:TIndex):TElem;

 

{ Вычисление суммы положительных элементов матрицы Matr размером m*n

}

var

 

 

i, j: TIndex;

{ индексы матрицы

}

s: TElem;

{ сумма положительных элементов матрицы

}

begin

 

 

s:=0;

 

 

for i:=1 to m do begin for j:=1 to n do begin

if Matr[i, j] > 0

then s:=s+ Matr[i, j]; end;

end; SumOfPos:=s;

end; { function SumOfPos } end; { unit Lab11Un }

{ Лабораторная работа 11. Программа, использующая модуль.

}

{ Выполнил Сергеев Андрей, группа 500

 

}

{ Исходные данные подготовлены в файле LW11Dat.txt в порядке:

}

{ число строк, число столбцов, элементы первой матрицы;

}

{ число строк, число столбцов, элементы второй матрицы построчно.

}

{ Результаты работы программы записываются в файл LW11Res.txt

}

program LabWork11;

 

 

 

 

uses Lab11Un;

{ подключение модуля обработки массивов

}

var

 

 

 

 

FDat, FRes: Text;

{ файлы с исходными данными и результатами

}

A, B: TMatr;

{ исходные матрицы

 

}

mA, nA, mB, nB: TIndex; { число строк и столбцов матриц

}

begin

 

 

 

 

Assign(FDat, 'LW11Dat.txt'); Reset(FDat);

{ открытие файла для чтения

}

Assign(FRes, 'LW11Res.txt'); Rewrite(FRes);

{ открытие файла для записи

}

ReadMatrix(A, mA, nA, FDat);

{ ввод размеров и элементов матрицы A }

ReadMatrix(B, mB, nB, FDat);

{ ввод размеров и элементов матрицы B }

Writeln(FRes, 'Вычисление сумм положительных элементов матриц.');

 

Writeln(FRes);

 

 

 

 

WriteMatrix(A, mA, nA, 'A', FRes);

{ вывод матрицы A в файл результатов

}

Writeln(FRes,'Сумма положительных элементов матрицы А:',

 

SumOfPos(A,mA,nA):10:2);

 

 

WriteMatrix(B, mB, nB, 'B', FRes);

{ вывод матрицы B в файл результатов

}

Writeln(FRes,'Сумма положительных элементов матрицы B:',

 

SumOfPos(B,mB,nB):10:2);

 

 

Close(FDat); Close(FRes);

{ закрытие файлов

}

end. { program LabWork11 }

 

 

 

95

Приложение 1

КОДЫ ОСНОВНЫХ СИМВОЛОВ

Кодировка символов с десятичными кодами от 32 до 126

в соответствии со стандартами ASCII (DOS) и ANSI (Windows)

 

Код

Символ

Код

Символ

Код

Символ

Код

Символ

Код

Символ

Код

Символ

 

 

32

Пробел

48

0

64

@

80

P

96

`

112

p

 

 

33

!

49

1

65

A

81

Q

97

a

113

q

 

 

34

"

50

2

66

B

82

R

98

b

114

r

 

 

35

#

51

3

67

C

83

S

99

c

115

s

 

 

36

$

52

4

68

D

84

T

100

d

116

t

 

 

37

%

53

5

69

E

85

U

101

e

117

u

 

 

38

&

54

6

70

F

86

V

102

f

118

v

 

 

39

'

55

7

71

G

87

W

103

g

119

w

 

 

40

(

56

8

72

H

88

X

104

h

120

x

 

 

41

)

57

9

73

I

89

Y

105

i

121

y

 

 

42

*

58

:

74

J

90

Z

106

j

122

z

 

 

43

+

59

;

75

K

91

[

107

k

123

{

 

 

44

,

60

<

76

L

92

\

108

l

124

|

 

 

45

-

61

=

77

M

93

]

109

m

125

}

 

 

46

.

62

>

78

N

94

^

110

n

126

~

 

 

47

/

63

?

79

O

95

_

111

o

 

 

 

Русские буквы

ASCII: А..Я: 128..159; Ё – 240; а..п: 160..175; р..я: 224..239; ё – 241

ANSI (шрифты Arial Cyr, Courier New Cyr, Times New Roman Cyr):

А..Я: 192..223; Ё – 168; а..я: 224..255; ё – 184

Коды символов для рисования таблиц

┌ 218

─ 196

┬ 194

┐ 191

│ 179

 

 

 

├ 195

 

┼ 197

┤ 180

└ 192

 

┴ 193

┘ 217

В редакторе Турбо Паскаля символы вводятся с помощью Altнабора: нажимается и удерживается клавиша Alt, одновременно на цифровом поле клавиатуры набирается код символа. Изображение символа появляется после отжатия клавиши Alt.

96

Приложение 2

СОДЕРЖАНИЕ ОТЧЕТА

Отчет о лабораторной работе должен содержать следующие обязательные разделы:

1.Титульный лист.

2.Задание к работе в соответствии с номером варианта.

3.Алгоритм решения задачи.

4.Программу решения задачи.

5.Исходные данные для работы программы.

6.Результаты выполнения программы для введённых исходных данных.

Для лабораторных работ 2 и 3 необходимо выполнить программу с несколькими вариантами исходных данных и привести результаты её выполнения при различных данных.

Титульный лист отчёта:

Рязанский государственный радиотехнический университет

Кафедра вычислительной и прикладной математики

Отчет по лабораторной работе № 2 «Программирование разветвлений с помощью оператора if»

по дисциплине «Информатика»

Выполнил: студент гр. 500 Сергеев А.Н.

Проверила: доцент каф. ВПМ Чистякова В.И.

Рязань 2006

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]