Главная              Рефераты - Разное

Учебное пособие: Методические указания к лабораторным работам по дисциплине "Информатика" Составители: Викентьева О. Л., к т. н., доцент

ПЕРМСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Кафедра Информационных технологий и
автоматизированных систем

Викентьева О. Л.

Информатика

Лабораторные работы
для студентов специальности АЭП заочного отделения

(2 семестр)

Пермь 2007

Методические указания к лабораторным работам по дисциплине "Информатика"

Составители: Викентьева О. Л., к. т. н., доцент,

Приведены методические указания по выполнению лабораторных работ по дисциплине "Информатика", изучаемой во 2 семестре.

ОГЛАВЛЕНИЕ

Лабораторная работа №1 «Выполнение программы простой структуры. Вычисление выражений с использованием стандартных функций» 5

1. Цель задания: 5

2. Теоретические сведения . 5

2.1. Среда программирования Turbo Pascal 6

3. Постановка задачи. 12

4. Варианты заданий. 12

5. Методические указания. 20

6. Содержание отчета. 20

7. Пример выполнения работы и оформления отчета. 20

Лабораторная работа №2 «Основные операторы языка Паскаль». 22

1. Цель работы: 22

2. Теоретические сведения. 22

2.1.Условный оператор. 22

2.2. Операторы циклов . 22

2.2.1. Арифметический оператор цикла (цикл с параметром) 22

2.2.2. Оператор цикла с предусловием .. 22

3. Оператор цикла с постусловием .. 22

3. Варианты.. 22

4. Содержание отчета. 24

5. Пример выполнения работы и оформления отчета. 24

Лабораторная работа №3 «Работа с массивами». 26

1. Цель работы: 26

2. Краткие теоретические сведения: 26

2.1. Понятие массива . 26

2.2. Перебор элементов массива . 26

2.3. Классы задач по обработке массивов . 26

2.4. Сортировка массивов . 27

2.4.1. Сортировка с помощью включения . 27

2.4.2. Сортировка методом простого выбора . 27

2.4.3. Сортировка методом простого обмена . 27

2.4.4. Шейкер –сортировка . 28

2. 5. Поиск в массиве . 28

2. 5.1. Поиск в неупорядоченном массиве . 28

2.5.2. Поиск в упорядоченном массиве (бинарный или дихотомический) 28

3. Постановка задачи: 29

4. Варианты заданий. 29

5. Содержание отчета: 31

6. Пример выполнения работы и оформления отчета . 31

Лабораторная работа №4 «Использование процедур и функций». 33

1. Цель работы: 33

2. Теоретические сведения . 33

2.1. Подпрограммы .. 33

2.2. Параметры .. 33

2.3. Передача результата из подпрограммы в вызывающую программу . 34

2.4. Локальные и глобальные переменные . 34

2.5. Параметры-массивы и параметры-строки . 35

3. Постановка задачи. 35

4. Варианты.. 35

5. Содержание отчета. 36

6. Пример выполнения работы и оформления отчета. 37

Лабораторная работа № 5 «Работа с типизированными и текстовыми файлами». 40

1. Цель работы: 40

2. Краткие теоретические сведения. 40

2.1. Понятие файла . 40

2.2. Стандартные процедуры и функции для работы с файлами . 40

3. Постановка задачи: 41

4. Варианты.. 41

5. Содержание отчета. 45

6. Методические указания к выполнению работы.. 45

Лабораторная работа №1
«Выполнение программы простой структуры. Вычисление выражений с использованием стандартных функций»

1. Цель задания:

1) Выполнение простой программы в системе программирования Turbo Pascal.

2) Приобретение навыков в записи выражений на языке ТР и использование стандартных функций.

2. Теоретические сведения

Для того, чтобы овладеть азами программирования, в первую очередь, надо научиться строить и записывать алгоритмы решаемых задач. Алгоритм – это точное предписание, определяющее вычислительный процесс, идущий от изменяемых начальных данных к конечному результату, т. е. это рецепт достижения какой-либо цели. Совокупность средств и правил для представления алгоритма в виде пригодном для выполнения вычислительной машиной называется языком программирования, алгоритм, записанный на этом языке – программой. Для записи алгоритмов существуют разные формы:

1) словесное описание (псевдокоды),

2) графическое описание (блок-схемы),

3) алгоритмические языки.

Для того чтобы составить программу желательно выполнить по порядку следующие этапы:

1) Определить исходные данные задачи и результаты, которые должны быть получены, а также формулы, связывающие исходные данные и результаты.

2) Составить алгоритм в виде блок-схемы, с помощью которого можно от исходных данных перейти к результатам.

3) Записать алгоритм на требуемом языке программирования (т. е. каждому блоку блок-схемы надо поставить в соответствие оператор языка программирования).

4) Выполнить программу, используя какую-то систему программирования.

5) Выполнить отладку и тестирование программы. При выполнении программы могут возникать ошибки трех типов:

Самыми опасными являются именно семантические ошибки, т. к. их достаточно сложно обнаружить. Программа будет работать, но неправильно, причем, ошибки в ее работе могут возникать не все время, а только при каких-то определенных наборах исходных данных. Для обнаружения таких ошибок выполняется тестирование программы. Набор исходных данных, для которых известен результат, называется тестом. Если результаты работы теста не совпадут с известным значением, значит, в программе имеется ошибка. Тест, выявивший ошибку, считается успешным. Отладка программы заканчивается, когда достаточное количество тестов будет выполнено неуспешно. Самым распространенным критерием для определения количества неуспешных тестов является тестирование ветвей: набор тестов в совокупности должен обеспечить прохождение каждой ветви не менее одного раза.

Начинающие программисты должны обязательно выполнять все указанные этапы. В дальнейшем этапы 2-3 можно объединить в один и сразу записывать программу на требуемом языке программирования.

В качестве изучаемого языка программирования выбран Паскаль, т. к. этот язык позволяет выработать алгоритмическое мышление, стоить короткую хорошо читаемую программу, демонстрировать основные приемы алгоритмизации.

2.1. Среда программирования Turbo Pascal

Система программирования Turbo Pascal остается одной из самых популярных в мире. Одной из причин этого является простота лежащего в ее основе языка Паскаль.

Текст программы на Паскале называется исходным модулем (рис. 1). Для перевода исходного модуля в последовательность команд вычислительной машины используется специальная программа, которая называется транслятором. Трансляторы могут быть двух видов: компиляторы и интерпретаторы. Компилятор транслирует текст исходного модуля в машинный код, который называется объектным модулем, за один непрерывный процесс. Объектный модуль выполняться не может, т. к. он может содержать ссылки на другие модули или программы. Поэтому перед выполнением программы объектный модуль должен быть обработан специальной программой – редактором связей, которая создает загрузочный модуль. Загрузочный модуль обрабатывается программой-загрузчиком, которая определяет абсолютные адреса в оперативной памяти. После этого создается выполняемый модуль, который может выполняться вычислительной машиной, он имеет расширение exe.


Рис.3.1. Обработка программы системой программирования

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

Разбиение процесса подготовки исходного модуля к выполнению на 2 этапа компиляция + редактирование и загрузка позволяет использовать для основной программы подпрограммы из библиотек стандартных программ, реализующих различные функции.

На рис.3.2. показано окно среды Turbo Pascal. Верхняя строка среды представляет собой меню с командами. Рассмотрим основные из них.

File – работа с файлом:

New – создать новый файл с именем Noname0X.pas;

Open – открыть существующий файл, после выбора этой команды появляется диалоговое окно, в котором надо указать имя открываемого файла;

Save – записать файл с тем же именем;

Save as – записать файл с новым именем, имя файла указывается в появляющемся диалоговом окне;

Change dir – смена директории (можно изменить диск, папку, в которых располагается файл), название директории выбирается в появляющемся диалоговом окне;

Exit – выход из среды.

рис. 3.2. Окно среды Turbo Pascal.

Edit – команды редактора:

Undo – отмена предыдущего действия;

Redo- восстановление предыдущего действия;

Cut – вырезать выделенный фрагмент текста в буфер обмена (выделение фрагмента выполняется с помощью левой кнопки мышки – нажать и вести вдоль выделяемого фрагмента, не отпуская, либо с помощью клавиш Shift и клавиш со стрелками – удерживая Shift, выделять нужный фрагмент клавиами со стрелками);

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

Paste – извлечь фрагмент из буфера обмена;

Clear – удалить выделенный фрагмент;

Show clipboard – показать содержимое буфера обмена.

Search – команды для поиска и замены фрагментов текста:

Find – поиск (параметры для поиска вводятся в появляющемся диалоговом окне);

Replace –поиск и замена (параметры для поиска и замены вводятся в появляющемся диалоговом окне);

Search again – повторный поиск или замена.

Run – выполнение программы в том числе и пошаговое:

Run – выполнить программу;

Step over – выполнить программу по шагам без захода в подпрограммы;

Trace into – выполнить программу по шагам с заходом в подпрограммы;

Goto cursor – выполнить программу по шагам, начиная с места положения курсора;

Program Reset – прекращает отладку программы.

Compile – компиляция программы:

Compile – компиляция программы, которая находится в активном окне редактора;

Make – компиляция программы и модулей, подключенных к этой программе, если в модули были внесены изменения;

Build – компиляция программы и всех модулей, подключенных к этой программе.

Debug – средства для отладки программы:

Breakpoints - просмотр и редактирование диалогового окна, в котором выводится информация об установленных в программе контрольных точках (в контрольной точке выполнение программы приостанавливается и дальше ее можно отлаживать в пошаговом режиме);

Watch – делает активным окно отладки программы, в котором можно просматривать текущие значения переменных программы;

Output – делает активным окно просмотра результатов;

User screen – распахивает окно просмотра результатов во весь экран;

Evaluate/ modify – дает возможность просмотреть значение переменной или вычислить значение выражения в специальном диалоговом окне;

Add watch – добавить переменную в окно отладки программы;

Add breakpoint – добавить контрольную точку.

Таким образом, для того, чтобы выполнить программу, используя систему программирования Turbo Pascal надо:

1. Набрать текст программы в редакторе.

2. Сохранить программу на диске, используя пункт меню File/Save as или функциональную клавишу F2.

3. Откомпилировать программу, используя пункт меню Compile/Compile или клавиши Alt+F9, если есть синтаксические ошибки, то исправить их и снова записать программу.

4. Повторить п. 3 до тех пор, пока компиляция не завершится успешно , в этом случае появится окно с надписью Compile successful: Press any key.

5. Запустить программу на выполнение, используя пункт меню Run/Run или клавиши Ctrl+F9.

6. Выполнить тестирование программы с помощью составленного набора тестов, для просмотра результатов можно использовать клавиши Alt+F5.

Для поиска семантических ошибок в программе можно использовать команды Run/Trace into или F7, Run/Step over или F8, Run/Go to cursor или F4 – для выполнения программы по шагам, Debug/Watch, Debug/Add watch – для просмотра значения переменных во время отладки программы.

2.2. Структура программы

Программа на языке Турбо Паскаль состоит из заголовка и собственно программы, называемой блоком. Блок состоит из разделов. Максимальное количество разделов шесть. Разделы располагаются в следующем порядке:

1. Раздел меток;

2. Раздел констант;

3. Раздел типов;

4. Раздел переменных;

5. Раздел процедур и функций;

6. Раздел операторов.

Раздел операторов заключается в операторные скобки begin ... end (составной оператор). В нем указывается последовательность действий, которые должны выполняться программой. Все остальные разделы носят описательный характер. Любой раздел, кроме последнего, может отсутствовать. Разделителем между разделами и операторами служит точка с запятой. В конце программы должна стоять точка. В любое место программы могут быть включены комментарии. При этом смысл программы не меняется. Комментарии заключаются в фигурные скобки.

2.3. Стандартные типы данных

Программа, написанная на языке ТР, оперирует некоторыми объектами, называемыми данными. Каждый элемент данных в программе является либо константой, либо переменной. Для каждой переменной задается тип, определяющий возможное значение переменной и операции, которые могут над ней выполняться. Тип переменной задается в разделе переменных.

Turbo Pascal характеризуется разветвленной системой данных (рис. 3.3.)


Рис. 3.3. Типы данных в Паскале

2.3.1. Целый тип

Обеспечивает задание целых чисел. Существует несколько целых типов.

Название

Длина в байтах

Диапазон значений

Byte

1

0..255

ShortInt

1

-128..+127

Word

2

0..65535

Integer

2

-32768..+32767

LongInt

4

-2147483648..+2147483647

Стандартные процедуры и функции, применимые к целым типам.

Обращение

Тип результата

Действие

abs(x)

x

Возвращает модуль х

chr(b)

Char

Возвращает символ по его коду

dec(vx[,i])

процедура

Уменьшает значение vx на i, при отсутствии i- на 1

inc(vx[,i])

-/-

Увеличивает значение vx на i, при отсутствии i- на 1

odd(l)

boolean

Возвращает TRUE, если аргумент - нечетное число, FALSE - если четное

random(w)

как у параметра

Возвращает псевдослучайное число, равномерно распределенное на интервале 0<=x<w

sqr(x)

-/-

Возвращает квадрат аргумента

exp(x)

real

ex

sqrt(x)

real

Возвращает квадратный корень из х

sin(x)

-/-

sin x

cos(x)

-/-

cos x

ln(x)

-/-

ln x

arctan(x)

-/-

arctg x

succ(x)

как у параметра

Возвращает следующее целое число, т.е. х+1

pred(x)

-/-

Возвращает предыдущее целое число, т.е. х-1

В таблице используются обозначения: х - выражение любого из типов, b, l, i, w - выражения соответствующих типов: byte, longint, integer, word, vx - переменная типа х.

К данным целых типов применимы следующие арифметические операции : +(сложение),
- (вычитание), * (умножение), / (деление), DIV (деление нацело), MOD (вычисление остатка от целочисленного деления), а также операции отношения: = (равно), <> (не равно), < (меньше), > (больше), <= (меньше или равно), >= (больше или равно).

2.3.2 Вещественный тип

Обеспечивает задание вещественных чисел. Запись вещественного числа в возможна в двух формах:

в виде числа с фиксированной точкой, например 12.3, 0.67;

в виде числа с плавающей точкой: мантисса ×10k , где k- порядок числа, например, 1.4 Е-8 , 9.7 Е3 .

Существует несколько вещественных типов.

Название

Длина в байтах

Real

6

Double

8

Extended

10

Над переменными этих типов определены арифметические операции: + (сложение), -(вычитание), * (умножение), / (деление), а также операции отношения (см. выше).

Стандартные процедуры и функции.

Обращение

Тип параметра

Тип результата

Действие

abs(x)

real, integer

x

Возвращает модуль х

random(x)

integer

integer

Возвращает псевдослучайное число, равномерно распределенное на интервале 0<=i<x

sqr(x)

real, integer

тип аргумента

Возвращает квадрат аргумента

exp(x)

real

real

ex

sqrt(x)

real

real

Возвращает квадратный корень из х

sin(x)

-/-

-/-

sin x

cos(x)

-/-

-/-

cos x

ln(x)

-/-

-/-

ln x

arctg(x)

-/-

-/-

arctg x

frac(x)

-/-

-/-

Дробная часть числа

int(x)

-/-

-/-

Целая часть числа

pi

---

real

Пи=3.14159265...

trunc(x)

real

integer

Отбрасывание дробной части

round(x)

real

integer

Округление до ближайшего целого

randomize

---

---

Инициация датчика псевдослучайных чисел

random

---

real

Возвращает псевдослучайное число, равномерно распределенное на интервале 0<=x<1

2.3.3. Символьный тип

Значениями символьного типа являются элементы конечного и упорядоченного набора знаков. Символ, заключенный в апострофы, обозначает константу символьного типа, например: ‘5’, ‘d’.

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

1) функции преобразования:

ORD (s) - дает порядковый номер символа s в упорядоченном множестве символов, например, ORD(‘5’)=53.

CHR (i) - дает символ, стоящий под номером i в упорядоченном множестве символов, например, CHR(66)=‘B’.

2) операции отношения (см. выше):

если С1 и С2 - символьные переменные, то выражение С1>С2 истинно только тогда, когда ORD(C1)>ORD(C2).

3) порядковые функции:

PRED (s) - возвращает предыдущий символ.

SUCC (s) - возвращает следующий символ.

2.3.4. Булевский тип

Переменные булевского типа могут принимать только два значения: TRUE и FALSE. Этот тип относится к порядковым, константы упорядочены: TRUE>FALSE.

Над ними определены:

1) логические операции:

AND(и или конъюнкция), OR(или или дизъюнкция), NOT(не или отрицание).

Таблица истинности для логических операций:

A

B

A and b

A or B

Not A

False

False

False

False

True

False

True

False

True

True

False

False

True

False

True

True

True

True

2) операции отношения (см. выше)

2.3.5. Перечисляемый тип

Задается перечислением тех значений, которые может получать переменная этого типа. Нумерация в списке значений начинается с 0, т.е. первое значение имеет номер - 0, а второе - 1 и т.д.

Пример: type tree=(birch, oak, pine);

или

var tr=(birch, oak, pine);

Переменные перечисляемого типа нельзя вводить и выводить с помощью процедур ввода-вывода.

2.3.6. Диапазонный тип

Представляет собой подмножество базового типа. В качестве базового типа может выступать любой порядковый тип, кроме другого типа-диапазона. Тип-диапазон задается границами своих значений внутри базового типа. Левая граница не может быть больше правой.

Примеры: Type Numbers=0..9;

Letters=’A’..’Z’;

Var num:Numbers;

Russ_letter:’А’..’Я’;

2.4. Выражения

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

Приоритет операций:

Приоритет операций

Операции

1

NOT

2

*, /, MOD, DIV, AND

3

+, -, OR

4

<, >, <=, >=, <>, =

Операции одного и того же старшинства выполняются слева направо в порядке их появления в выражении. Выражения в круглых скобках вычисляются в первую очередь.

3. Постановка задачи

Для задания (а) найти значение функции Y(X) при заданном X. Затем возвести полученное значение в квадрат, т.е. найти Y1=Y (X), и вычислить абсолютное значение Y.

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

Для задания (б) записать выражение, зависящее от координат точки X1 и Y1 и принимающее значение TRUE, если точка принадлежит заштрихованной области, и FALSE, если не принадлежит.

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

Результаты всех вычислений вывести на печать.

Объяснить полученные результаты.

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

1.

а) Y=sin(x)+x

б)

Y

2.

а) Y= x+ 2


б)

3.

а) Y=x - cos(arcsin(x ))

б)

4.

а) Y=

б)


5.

а) Y= tg (x) - ( 5 - x )

б)

-

6.

а) Y=25x

б)

7.

Y= + ctg(arctg (x ))

б)


8.

а) Y=

б)

9.

Y= sin x

б)

10.

а) Y=

б)


11.

а) Y= 2 x cos(x) +1

б)


12.

а) Y=

Y

1

1

-1 0 1 X

-1 -1

б)

13.

а) Y =

Y

1

-1 0 1 X

-1

б)

14.

а) Y=

б)

15.

а) Y= 1+ x cos (x) + sin (x)

б)

16.

а) Y=

б)

17.

а) Y= arcsin (x+x )

б)

18.

а) Y= cos( arctg (х))

б)

19.

а) Y= 7× arcctg( x )

б)

20.

а)Y= 5× x

б)

21.

а) Y=

б)

22.

а) Y= 2

б)


23.

а) Y= 1+

б)

24.

а) Y= arcsin

б)

25.

а) Y = arсcos( x + x )

б)

5. Методические указания

Ввод данных для заданий а) и б) организовать с клавиатуры.

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

При вычислении выражений в задании а) использовать алгебраические формулы для вычисления arcsin, arctg, возведения в степень и т. п.

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

6. Содержание отчета

Постановка задачи (общая и конкретного варианта).

Формулы, используемые при решении задачи (математическая модель).

Программа на языке Паскаль.

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

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

7. Пример выполнения работы и оформления отчета

Лабораторная работа №1

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

1. Постановка задачи:

Для задания (а) найти значение функции Y(X) при заданном X. Затем возвести полученное значение в квадрат, т.е. найти Y1=Y (X), и вычислить абсолютное значение Y.

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

Для задания (б) записать выражение, зависящее от координат точки X1 и Y1 и принимающее значение TRUE, если точка принадлежит заштрихованной области, и FALSE, если не принадлежит.

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

Результаты всех вычислений вывести на печать.

Вариант №26

а) Y= 1+

б)

2. Формулы для решения задачи:

а) y=1+1/x+1/sqr(x), x<>0

б) x2 +y2 =R2 ;

sqr(x)+sqr(y) <=1, y<0

3. Программа

Var x,x1,y,y1,y2:real;T:Boolean;

Begin

Writeln(‘введите число для вычисления выражения1’);

Read(x);

Writeln(‘Результат задания а’);

If x=0 then writeln(‘Деление на 0 невозможно’)else

Begin

y=1+1/x+1/sqr(x);

Writeln (‘при х=’,x:6:3,’ y=’,y:6:3);

y1=abs(y);

Writeln(‘Абсолютное значение y1=’, y1:6:3);

y2:=sqr(y);

Writeln(‘Квадрат у=’,y2:6:3);

End;

Writeln(‘Введите координаты точки’);

Readln(x1,y1);

T:=(sqr(x1)+sqr(y1)<=1)and(y1<=0);

Writeln(‘Результат задания б:’,t);

End.

4. Функции, используемые в программе:

Sqr(x) – возведение в квадрат

Abs(x)- получение абсолютного значения

5. Тестирование программы

Задание а

Х

Результат работы программы

0

Деление на 0 невозможно

1

Y=3, y1=3,y2=9

-1

Y=1, y1=1,y2=1

Задание б

Х1, Y1

Результат работы программы

X1=0.5

Y1=0.5

T=false

X1=-0.5

Y1=0.5

T=false

X1=0.5

Y1=-0.5

T=true

X1=-0.5

Y1=-0.5

T=true

Лабораторная работа №2
«Основные операторы языка Паскаль»

1. Цель работы:

знакомство с операторами языка Паскаль;

решение задач с использованием условного оператора и оператора циклов.

2. Теоретические сведения

2.1.Условный оператор.

Условный оператор используется при выборе из двух возможных вариантов, он имеет следующий вид:

IF <условие> THEN <оператор1> ELSE <оператор2>, где IF, THEN, ELSE — зарезервированные слова;

<условие> — выражение логического типа;

<оператор1>, <оператор2> —любые операторы языка Turbo Pascal .

Выполнение этого оператора начинается с проверки условия. Если оно истинно (т. е. равно TRUE), то выполняется <оператор1>, иначе (значение выражения равно FALSE) выполняется <оператор2>. Часть оператора, начинающаяся со слова ELSE, может быть опущена, тогда оператор выполняется только при значении выражения равном TRUE.

2.2. Операторы циклов

Операторы циклов используются для повторения операторов в программах. В Паскале существует три оператора циклов.

2.2.1. Арифметический оператор цикла (цикл с параметром)

FOR <пар_цик>:= <нач_зн> TO [DOWNTO]<кон_зн> DO <операторы>, где

FOR, TO, DO — зарезервированные слова;

<пар_цик> — параметр цикла (переменная порядкового типа);

<нач_зн> — начальное значение <пар_цик>;

<кон_зн> — конечное значение <пар_цик>;

<операторы> — произвольные операторы языка Turbo Pascal.

Алгоритм работы цикла с параметром следующий:

Вычисляется начальное значение и присваивается параметру цикла.

Если параметр цикла меньше или равен конечному значению, то переход к п.3, иначе оператор заканчивает работу;

выполняются операторы после слова DO;

Параметр цикла изменяется на единицу (увеличивается, если оператор содержит ключевое слово TO и уменьшается, если оператор содержит ключевое слово DOWNTO).

2.2.2. Оператор цикла с предусловием

WHILE <условие> DO <операторы>, где

WHILE, DO — зарезервированные слова ;

<условие> — выражение логического типа;

<операторы> — операторы языка Turbo Pascal.

Пока значение выражения <условие> равно TRUE, выполняются <операторы>. Если условие FALSE, то выполнение оператора заканчивается.

3. Оператор цикла с постусловием

REPEAT <тело_цикла> UNTIL <условие>, где

REPEAT, UNTIL — зарезервированные слова;

<тело_цикла> — операторы языка Turbo Pascal;

<условие> — выражение логического типа.

Оператор выполняется хотя бы один раз. Затем проверяется условие. Если его значение FALSE, то выполняется <тело_цикла>, иначе оператор заканчивает работу.

3. Варианты

1. Найти сумму целых положительных чисел, кратных 3 и меньших 200.

2. Найти сумму целых положительных четных чисел, меньших 100.

3. Найти сумму целых положительных нечетных чисел, меньших 200.

4. Найти сумму целых положительных чисел, больших 20, меньших 100 и кратных 3.

5. Найти сумму ряда из К слагаемых, общий член которого

6. Найти сумму ряда из К слагаемых, общий член которого

7. Найти сумму ряда из К слагаемых, общий член которого

8. Найти сумму ряда из К слагаемых, общий член которого

9. Найти сумму ряда с точностью e=10-4, общий член которого

10. Найти сумму ряда с точностью e=10-4, общий член которого

11. Найти сумму ряда с точностью e=10-4, общий член которого

12. Найти сумму ряда с точностью e=10-4, общий член которого

13. Найти сумму ряда с точностью e=10-4, общий член которого

14. Найти сумму ряда с точностью e=10-4, общий член которого

15. Задана последовательность из N целых чисел. Найти разницу между максимальным и минимальным числом этой последовательности.

16. Задана последовательность из N целых чисел. Найти среднее арифметическое этой последовательности.

17. Задана последовательность из N целых чисел. Найти количество отрицательных и сумму положительных чисел в этой последовательности.

18. Задана последовательность, заканчивающаяся 0. Найти разницу между максимальным и минимальным числом этой последовательности.

19. Задана последовательность, заканчивающаяся 0. Найти среднее арифметическое этой последовательности.

20. Задана последовательность, заканчивающаяся 0. Найти количество отрицательных и сумму положительных чисел в этой последовательности.

21. Задано число К. Определить является ли оно простым ( простое число делится только на 1 и само на себя).

22. Задано число К. Определить является ли оно числом Фибоначчи (1, 1, 2, 3, 5, 8, 13 . . .).

23. Задано число N. Сформировать N чисел Фибоначчи (1, 1, 2, 3, 5, 8, 13, . . .).

24. Задано число N. Сформировать N простых чисел ( простое число делится только на 1 и само на себя).

25. Задана последовательность из N целых чисел. Определить сколько чисел принимают наибольшее значение.

4. Содержание отчета

1. Постановка задачи (общая и конкретного варианта).

2. Алгоритм в виде блок-схемы.

3. Программа на языке Паскаль.

4. Объяснение использования операторов циклов.

5. Пример выполнения работы и оформления отчета

Лабораторная работа №2
«Основные операторы языка Паскаль»

1. Вариант 26: Найти сумму ряда из К слагаемых, общий член которого

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

3. Программа

Var S,A:Real;

I,K:Integer;

Begin

Writeln(‘введите количество элементов ряда’);

Readln(K);

S:=0;A:=2;

For I:=1 to K do begin

S:=S+A;

A:=1/(exp(2*ln(i))+1/exp(3*ln(i));

End;

Writeln(‘Сумма ряда S=’, S:6:3);

End.

4. В программе использован цикл с параметром (For), т. к. в условии задачи указано количество слагаемых суммы, следовательно, вычисление слагаемого и добавление его к сумме надо повторить К раз.
Лабораторная работа №3
«Работа с массивами»

1. Цель работы:

1) Получение практических навыков при работе с массивами.

2) Знакомство с алгоритмами сортировки.

2. Краткие теоретические сведения:

2.1. Понятие массива

Массив – это формальное объединение нескольких однотипных объектов (чисел, символов, строк и т.п.), рассматриваемое как единое целое.

Массив описывается следующим образом:

<имя_типа> = ARRAY [<сп_инд_типов>] OF <тип>,

где ARRAY, OF – зарезервированные слова (массив, из);

<имя_типа> -- правильный идентификатор;

<сп_инд_типов> -- тип-диапазон, с помощью которого компилятор определяет число элементов массива.

<тип> -- любой тип ТР, в том числе и другой массив.

Определить переменную как массив можно непосредственно при описании этой переменной, без предварительного описания типа массива, например:

var f : array [1..12] of integer.

2.2. Перебор элементов массива

1) Элементы массива можно обрабатывать по одному элементу, двигаясь от начала массива к его концу (или в обратном направлении):
For I:=1 to N do <обработка a[i]>

2) Элементы массива можно обрабатывать по два элемента, двигаясь с обеих сторон массива к его середине:
I:=1;J:=N;
while I<J do begin
<обработка a[I] и a[J]>;
I:=I+1;J:=J+1;
end;

3) Элементы массива можно обрабатывать по два элемента, двигаясь от начала к концу с шагом 1(т. е. обрабатываются пары элементов a[1]и a[2], a[2]и a[3] и т. д.)
for I:=1 to N-1 do
<обработка a[I] и a[I+1]>

4) Элементы массива можно обрабатывать по два элемента, двигаясь от начала к концу с шагом 2(т. е. обрабатываются пары элементов a[1]и a[2], a[3]и a[4] и т. д.)
I:=1;
while I<N do begin
<обработка a[I] и a[I+1]>
I:=I+2;
end;

2.3. Классы задач по обработке массивов

1) К задачам 1 класса относятся задачи, в которых выполняется однотипная обработка всех или указанных элементов массива. Решение таких задач сводится к установлению того, как обрабатывается каждый элемент массива или указанные элементы, затем подбирается подходящая схема перебора, в которую вставляются операторы обработки элементов массива. Примером такой задачи является нахождение среднего арифметического элементов массива.

2) К задачам 2 класса относятся задачи, в которых изменяется порядок следования элементов массива. Обмен элементов внутри массива выполняется с использованием вспомогательной переменной: R:=a[I];a[I]:=a[J]; a[J]:=R; - обмен a[I] и a[J] элементов массива.

3) К задачам 3 класса относятся задачи, в которых выполняется обработка нескольких массивов или подмассивов одного массива. Массивы могут обрабатываться по одной схеме – синхронная обработка или по разным схемам – асинхронная обработка массивов.

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

2.4. Сортировка массивов

Сортировка – это процесс перегруппировки заданного множества объектов в некотором установленном порядке.

2.4.1. Сортировка с помощью включения

Элементы массива делятся на уже готовую последовательность и исходную. При каждом шаге, начиная с I=2, из исходной последовательности извлекается I-ый элемент и вставляется на нужное место готовой последовательности, затем I увеличивается на 1 и т. д. В процессе поиска нужного места осуществляются пересылки элементов больше выбранного на одну позицию вправо, т. е. выбранный элемент сравнивают с очередным элементом отсортированной части, начиная с J:=I-1. Если выбранный элемент больше a[I], то его включают в отсортированную часть, в противном случае a[J] сдвигают на одну позицию, а выбранный элемент сравнивают со следующим элементом отсортированной последовательности. Процесс поиска подходящего места заканчивается при двух различных условиях:

- если найден элемент a[J]>a[I];

- достигнут левый конец готовой последовательности, в этом случае используется барьер a[0], куда записывается элемент a[I].

For I:=1 to N do begin

X:=a[I];a[0]:=X;{барьер}

J:=I-1;

While X<a[J] do begin

a[J+1]:=a[J]; {сдвиг}

J:=J+1;

End;

A[J+1]:=x;{вставка на нужное место}

End;

2.4.2. Сортировка методом простого выбора

Выбирается минимальный элемент массива и меняется местами с первым элементом массива. Затем процесс повторяется с оставшимися элементами и т. д.

For I:=1 to N-1 do begin

K:=I; Min:=a[I];

For J:=I+1 to N do

If a[j]<Min then begin

K:=J; Min:=a[J];

End;

a[K]:=a[I];

a[I]:=Min;

end;

2.4.3. Сортировка методом простого обмена

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

For I:=2 to N do

For J:=N downto I do

If a[J]<a[J-1] then begin

R:=a[J];

a[J]:=a[j-1];

a[j-1]:=R;

end;

2.4.4. Шейкер –сортировка

Является улучшенной модификацией метода простого выбора. В ней чередуются направления просмотров и запоминается место последнего обмена элементов массива.

L:=2;{левая граница}R:=N;{правая граница}

Repeat

For J:=R to L do{справа налево}

If a[J]<a[J-1] then begin

K:=J;

T:=a[J];

a[J]:=a[j-1];

a[j-1]:=T;

end;

L:=K+1;

For J:=L to R do{слева направо}

If a[J]<a[J-1] then begin

K:=J;

T:=a[J];

a[J]:=a[j-1];

a[j-1]:=T;

end;

R:=K-1;

Until L>R;

2. 5. Поиск в массиве

2. 5.1. Поиск в неупорядоченном массиве

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

I:=0;

Repeat

I:=I+1;

Until (a[I]=X)or(I=N);

If a[I]=X then Rez:=I else Rez:=0;

2.5.2. Поиск в упорядоченном массиве (бинарный или дихотомический)

Массив делится пополам S:=(L+R)div 2 и определяется в какой части массива находится нужный элемент Х. Т .к. массив упорядочен, то если a[S]<X, то искомый элемент находится в правой части массива, иначе - находится в левой части. Выбранную часть массива снова надо разделить пополам и т. д., до тех пор, пока границы отрезка L и R не станут равны.

L:=1; R:=N;

Repeat

S:=(L+R)div 2;

If a[S]<X then L:=S+1 else R:=S

Until L=R;

If a[L]=X then Rez=L else Rez:=0;

3. Постановка задачи:

1) Сформировать с помощью датчика случайных чисел одномерный массив размерности М, которая задается пользователем.

2) Полученный массив напечатать.

3) Выполнить обработку и преобразование массива в соответствии со своим вариантом.

4) Напечатать преобразованный массив.

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

1.

1) Вычислить количество четных чисел в массиве.

2) Заменить все элементы массива, совпадающие с числом Х, на число У.

2.

1) Вычислить максимальный элемент массива.

2) Заменить отрицательные элементы в массиве на положительные.

3.

1) Найти сумму положительных чисел в массиве.

2) Заменить все четные числа на 1. Если четных чисел нет, то вывести сообщение об этом.

4.

1) Определить есть ли в массиве хотя бы одна пара совпадающих по величине чисел.

2) Преобразовать массив так, чтобы все нули оказались в начале массива.

5.

1) Найти количество чисел, попадающих в диапазон от А до В, где А и В задаются пользователем. Если таких чисел нет , то вывести сообщение об этом.

2) Упорядочить массив по возрастанию методом простого включения.

6.

1) Найти количество элементов массива, в которые входит цифра «5». Если таких элементов нет, то вывести сообщение об этом.

2) Заменить все элементы совпадающие с минимальным на среднее арифметическое массива.

7.

1) Вычислить произведение всех элементов массива, имеющих четные индексы и определить является ли оно четным числом.

2) Сдвинуть циклически элементы массива на количество элементов равное первому элементу массива.

8.

1) Вычислить сумму минимального и максимального элементов массива.

2) Преобразовать этот массив в двумерный массив N x K, где N и К задаются пользователем, недостающие элементы заполнить нулями.

9.

1) Найти количество элементов массива, которые являются простыми числами. Если таких чисел нет, то вывести сообщение об этом.

2) Преобразовать массив так, чтобы в начале массива были записаны все нули, потом все положительные элементы, а потом - отрицательные.

10.

1) Найти третий по величине элемент массива.

2) Преобразовать массив так, чтобы в начале массива были записаны все отрицательные элементы, потом все нули, а потом - положительные элементы.

11.

1) Найти количество одинаковых элементов в массиве.

2) Отсортировать массив по убыванию методом простого обмена.

12.

1) Найти количество чисел, которые заканчиваются цифрой «3». Если таких чисел нет, то вывести сообщение об этом.

2) Заменить в массиве все отрицательные числа на «0».

13.

1) Найти сумму элементов массива, в которые входит цифра «7». Если таких чисел нет, то вывести сообщение об этом.

2) Поменять местами первый и последний элементы массива.

14.

1) Найти количество чисел в массиве, меньших заданного числа У. Если таких чисел нет, то вывести сообщение об этом.

2) Упорядочить массив по убыванию методом простого выбора.

15.

1) Вычислить количество элементов массива кратных 5.

2) Упорядочить массив по возрастанию методом шейкер- сортировки.

16.

1) Найти первое вхождение элемента Х в массив. Если такого числа нет, то вывести сообщение об этом.

2) Преобразовать массив так, чтобы все положительные элементы были записаны в начале массива, потом все отрицательные, а потом - нули.

17.

1) Найти количество элементов массива, которые превышают число Х, заданное пользователем. Если таких чисел нет, то вывести сообщение об этом.

2) Поменять местами максимальный и минимальный элементы массива.

18.

1) Найти минимальную длину подмассива, расположенного между двумя нулями.

2) Заменить все четные числа на ноль.

19.

1) Вычислить сумму элементов массива и определить из сколько в ней цифр.

2) Заменить все отрицательные числа на их модуль.

20.

1) Найти количество различных чисел в массиве .

2) Преобразовать массив в двумерный массив N x N, где N задается пользователем. «Лишние» числа отбросить.

21.

1) Определить сколько элементов массива отличается от среднего значения на 10 процентов.

2) Используя метод бинарного поиска найти номер первого вхождения элемента Х в массив.

22.

1) Найти два наибольших элемента в массиве.

2) Все простые числа в массиве заменить на значение максимального элемента.

23.

1) Определить сколько в массиве чисел Фибоначчи.

2) Если число является числом Фибоначчи, то заменить его нулем.

24.

1) Найти количество элементов массива, у которых сумма цифр является четным числом.

2) Удалить из массива элементы, индексы которых кратны 5. Оставшиеся элементы сдвинуть в начало массива, конец массива заполнить нулями.

25.

1) Определить номера трех наименьших элемента в массиве.

2) Удалить из массива все четные элементы. Оставшиеся элементы сдвинуть в начало массива, конец массива заполнить нулями.

5. Содержание отчета:

1) Постановка задачи (общая и конкретного варианта).

2) Анализ поставленного задания: определить к какому классу задач относится задача варианта и объяснить почему.

3) Словесный алгоритм решения задачи.

4) Текст программы.

5) Результаты тестов.

6. Пример выполнения работы и оформления отчета

Лабораторная работа №3
«Работа с массивами»

1. Постановка задачи:

1) Сформировать с помощью датчика случайных чисел одномерный массив размерности М, которая задается пользователем.

2) Полученный массив напечатать.

3) Выполнить обработку и преобразование массива в соответствии со своим вариантом.

4) Напечатать преобразованный массив.

Вариант №26.

1) Вычислить количество четных чисел в массиве.

2) Удалить из массива все четные элементы. Оставшиеся элементы сдвинуть в начало массива, конец массива заполнить нулями.

2. Анализ задания:

1 задача относится к первому классу задач, т. к. для каждого элемент массива требуется проверить условие четности элемента.

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

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

Организуем перебор массива от начала к концу по одному элементу, для каждого элемента проверим условие четности a[I] mod 2 =0. Ели условие выполнится, то счетчик четных чисел увеличим на 1.

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

Организуем перебор массива от начала к концу по одному элементу, для каждого элемента проверим условие нечетности a[I] mod 2 <>0. Ели условие выполнится, то запишем этот элемент во вспомогательный массив B. Затем оставшиеся элементы массива B заполним нулями.

4. Программа

Var a:array[1..100]of integer;

I,J,K,M:integer;

Begin

Writeln (‘Введите количество элементов массива’);

Read(M);

Writeln(‘Сформирован массив целых чисел’);

For I:= 1 to M do begin

a[I]:=random(100)-50;

Write(a[I],’ ‘);

End;

Writeln;

K:=0;

For I:=1 to M do

If a[I]mod 2=0 then K:=K+1;

If k>0 then

Writeln(‘в массиве ‘ , K, ‘ четных элементов’)

Else begin

Writeln (‘Четных элементов нет’);

exit;{выход из программы}

Writeln(‘Удаление четных элементов из массива’);

J:=0;

For I:=1 to M do

If a[I]mod 2<>0 then begin

J:=J+1;

b[J]:=a[I];

end;

K:=J;

For I:=K to M do b[J]:=0;

For I:=1 to M do write(b[I],’ ‘);

Writeln;

End.

5. Тесты:

N

Исходный массив

Результат

5

34 –56 45 2 7

К=3

45 7 0 0 0

5

34 2 62 8 18

К=5

0 0 0 0 0

5

33 5 47 –15 -9

Четных чисел нет

Лабораторная работа №4
«Использование процедур и функций»

1. Цель работы:

1) Использование структур данных при решении задач;

2) Использование подпрограмм при решении задач.

2. Теоретические сведения

2.1. Подпрограммы

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

1) Это средство экономии памяти, т. к . каждая подпрограмма существует в программе в единственном экземпляре, а обращаться к ней можно многократно из различных точек программы.

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

Работа с подпрограммой состоит из двух этапов:

1) описание подпрограммы;

2) вызов ее в основной программе для исполнения.

Описание подпрограммы:

<заголовок>

<описание данных>

begin

<тело подпрограммы>

end;

Заголовок процедуры имеет вид:

Procedure <имя>[(<список_формальных_параметров>)];

Заголовок функции имеет вид:

Function <имя>[(<список_формальных_параметров>)]:<тип>;

<имя> - имя подпрограммы;

<список_формальных_параметров> - список передаваемых или возвращаемых подпрограммой данных;

<тип> - тип возвращаемого функцией результата.

Список формальных параметров может отсутствовать.

2.2. Параметры

При вызове подпрограммы формальные параметры заменяются фактическими. Фактические и формальные параметры должны соответствовать друг другу по количеству, типу и порядку следования.

Параметры подразделяются на параметры-значения, параметры-переменные и параметры-константы. Если параметр определен как параметр-переменная (перед ним ставится слово Var), то при вызове подпрограммы передается адрес соответствующей переменной, следовательно, изменение такого параметра приводит к изменению значения по указанному адресу, и фактический параметр тоже меняется. Если параметр определен как параметр-значение, то перед вызовом подпрограммы это значение вычисляется, полученный результат копируется во временную память и передается в подпрограмму. Любые возможные изменения этого параметра не воспринимаются вызывающей программой, следовательно, фактический параметр не меняется. При использовании параметров констант (перед ним ставится слово Const) в подпрограмму будет передаваться адрес области памяти, в которой располагается переменная или вычисляемое значение, но компилятор блокирует присваивание нового значения параметру-константе в теле программы.

2.3. Передача результата из подпрограммы в вызывающую программу

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

Пример.

Function Tan(x:Real);

Begin

Tan:=sin(x)/cos(x);

End;

. . . . .

begin{main}

. . . . .

a:=tan(0.1234);

b:=tan(y);

c:=tan(a/b);

. . . . . .

End.

Процедура может возвращать несколько значений. Для этого в процедуре используются параметры-переменные.

Пример:

Procedure Tan(x:Real; var y:Real);

Begin

Y:=sin(x)/cos(x);

End;

. . . . . .

begin{main}

. . . . .

Tan(0.1234,a);

Tan(y, b);

Tan(a/b, c);

. . . .

End.

2.4. Локальные и глобальные переменные

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

Пример.

Program P;

Var A, B :Integer;{глобальные}

Procedure P1;

Var B, C :Real;{локальные}

Begin

. . . . . .

End;{P1}

. . . . .

End.{P}

Одноименные локальные и глобальные переменные – это разные переменные. Любое обращение к таким переменным в теле подпрограммы трактуется как обращение к локальным переменным, т. е. одноименные глобальные переменные будут недоступны.

2.5. Параметры-массивы и параметры-строки

Типом любого параметра в списке формальных параметров может только стандартный или заранее определенный тип. Поэтому при передаче массива следует сначала описать его тип. Пример:

Type mas=array[1..100]of integer;

Procedure P(a:mas);

. . . . . . .

Так как строка является своеобразным массивом, передача строк в подпрограммы осуществляется аналогично.

3. Постановка задачи

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

4. Варианты

1. В двумерном массиве записаны слова, представляющие собой последовательность цифр, завершающихся 0. Необходимо распечатать слова через запятую, заключив печатную строку в скобки. Длина печатной строки 60 символов. Извлечение слова оформить в виде подпрограммы.

Например:

исходные данные - 123023402303450

234450234567010

234455677670450

результат - (123,234,23,345)(23445,234567,1)(23445567767,45)

2. Написать подпрограмму для обмена строк двумерного массива с ее помощью отсортировать массив по элементам третьего столбца.

3. Написать подпрограмму для суммирования матриц. С ее помощью сложить исходную матрицу и транспонированную (т. е. полученную поворотом исходной на 90 °).

4. Написать подпрограмму для удаления строки из двумерного массива. Оставшиеся строки должны быть расположены плотно, недостающие элементы заменяются 0. С помощью разработанных подпрограмм исключить из массива строки с номерами от А до В.

5. Определить является ли матрица ортонормированной, т. е. такой, что скалярное произведение каждой пары различных строк равно 0, а скалярное произведение строки самой на себя равно 1.

6. Элемент матрицы является седловой точкой, если он является наименьшим в своей строке и наибольшим в своем столбце (или наоборот: наибольшим в своей строке и наименьшим в своем столбце).Для заданной матрицы определить все седловые точки.

7. Написать подпрограмму обмена столбца и строки двухмерного массива. С ее помощью поменять местами те строки и столбцы, первые элементы которых совпадают.

8. Написать подпрограмму транспонирования квадратной матрицы (т.е. поворота исходной матрицы на 90 °). С ее помощью определить является ли заданная матрица симметрической. (Матрица называется симметрической, если транспонированная матрица равна исходной).

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

10. Написать подпрограмму, проверяющую есть ли отрицательные элементы в указанной строке двумерного массива. Удалить из массива все строки с отрицательными элементами, удаленная строка заполняется 0 и переносится в конец массива.

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

12. Написать подпрограмму, для поиска максимального элемента в указанной строке двумерного массива. Сдвинуть в двумерном массиве все строки циклически вправо на количество элементов равное максимальному элементу в этой строке.

13. Определить, можно ли в двумерном массиве найти такой столбец, который разбивает массив на два так, что сумма элементов в первом больше, чем сумма элементов во втором. Сам столбец в разбиваемые части не входит.

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

15. Задан двумерный массив. Найти сумму элементов первого столбца без одного последнего элемента, сумму элементов второго столбца без двух последних, сумму элементов третьего столбца без трех последних и т. д. Последний столбец не обрабатывается. Среди найденных сумм найти максимальную.

16. Задан двумерный массив N x N. Разрешается произвольно переставлять элементы внутри любого столбца. Проверить, можно ли выполнив конечное количество перестановок в столбцах, расположить на побочной диагональ элементы так, чтобы он возрастали.

17. Задан двумерный массив N x M. Найти в нем подмассив 3 х 3, сумма элементов которого максимальна. N и M могут быть не кратны трем.

18. Задан двумерный массив N x N. Последовательно рассматриваются квадратные подмассивы, правый верхний элемент которых лежит на побочной диагонали. В каждом таком подмассиве находится максимальный элемент. Путем перестановок строк и столбцов (целиком) элемент надо переместить в правый верхний угол подмассива. Проверить получилась ли на побочной диагонали убывающая последовательность элементов.

19. Задана строка из N2 цифр. Установить, можно ли, разбив строку на подстроки длиной N, записать их в строки двумерного массива N x N по одной цифре в одном элементе так, чтобы они в первом столбце расположились в порядке возрастания.

20. Найти минимальный из неповторяющихся элементов двумерного массива.

21. Найти максимальный из повторяющихся элементов двумерного массива.

22. В двумерном массиве найти среднее арифметическое первого столбца и количество элементов в каждом из следующих столбцов, превышающих среднее арифметическое предыдущего столбца.

23. Задан одномерный массив состоящий из N целых чисел. Сформировать на его основе двумерный массив N x N так, чтобы сумма элементов в первом столбце была равна первому элементу одномерного массива, сумма элементов во втором столбце была равна второму элементу одномерного массива и т. д. Нули не использовать.

24. Определить сколько элементов двумерного массива больше любого элемента на главной диагонали.

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

5. Содержание отчета

1) Постановка задачи (общая и конкретного варианта).

2) Алгоритм основной программы в виде блок-схемы

3) Описание и назначение глобальных переменных.

4) Описание используемых подпрограмм (заголовок, назначение параметров, краткий словесный алгоритм решаемой задачи).

5) Текст программы.

6) Результаты тестов.

6. Пример выполнения работы и оформления отчета

Лабораторная работа №4
«Использование процедур и функций»

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

Вариант №26. Написать подпрограмму, которая находит максимальный элемент в матрице размерностью МхМ. С помощью этой подпрограммы найти минимальный из таких элементов в N матрицах.

2. Алгоритм основной программы в виде блок-схемы


3. Описание и назначение глобальных переменных

I:integer - счетчик цикла для перебора матриц;

K:integer - минимальный элемент массива из максимальных элементов матриц;

size : integer; - размер матриц;

n: integer; - количество матриц

r: mas_matr; - массив из матриц 10х10.

a: mas_max; - массив целых чисел для хранения максимальных значений матриц;

4. Описание используемых подпрограмм (заголовок, назначение параметров, краткий словесный алгоритм решаемой задачи).

1) procedure Form(var R: mas_matr; nom: integer); - формирование матрицы с номером nom из массива матриц R.

С помощью циклов с параметром перебираются строки и столбцы матрицы, датчиком случайных чисел формируется элемент R[nom,i,j].

2) procedure Print(R: mas_Matr; nom: integer ); - печать матрицы с номером nom из массива матриц R.

С помощью циклов с параметром перебираются строки и столбцы матрицы, печатается элемент R[nom,i,j].

3) function Max(r:matr):integer; - вспомогательная функция для поиска максимального элемента в матрице R.

С помощью циклов с параметром перебираются строки и столбцы матрицы, элемент R[i,j] сравнивается с максимальным.

4) procedure Maxim(r:Mas_matr;var a:mas_max); - формирует массив максимальных элементов А, r- массив матриц, в которых ищутся максимальные элементы.

С помощью цикла с параметром для каждой матрицы из массива матриц r вызывается функция Max.

5) function minim(a:mas_max):integer; - ищет минимальный элемент в массиве А.

С помощью цикла с параметром перебирается массив а и каждый элемент сравнивается с минимальным.

5. Текст программы

uses crt;

type

matr= array [1..10,1..10] of integer;

mas_max =array[1..10]of integer;

mas_matr =array[1..10]of Matr;

var i, k, size : integer;

n: integer;

r: mas_matr;

a: mas_max;

procedure Form(var R: mas_matr; nom: integer);

var i, j: integer;

begin

for i:=1 to size do

for j:=1 to size do

r[nom,i,j]:=random(100);

end;

procedure Print(R:mas_Matr;nom:integer);

var i,j:integer;

begin

for i:=1 to size do begin

for j:=1 to size do

write(r[nom, i, j]:4);

writeln;

end;

writeln;

end;

function Max(r:matr):integer;

var v,i,j:integer;

begin

v:=r[1,1];

for i:=1 to size do

for j:=1 to size do

if v<r[i,j]then

v:=r[i,j];

max:=v;

end;

procedure Maxim(r:Mas_matr;var a:mas_max);

var t:integer;

begin

for t:=1 to n do

a[t]:=max(r[t]);

end;

function minim(a:mas_max):integer;

var t,min:integer;

begin

min:=a[1];minim:=1;

for t:=1 to n do

if min>a[t] then begin min:=a[t];

minim:=t;

end;

end;

begin{main}

clrscr;

writeln('Введите количество матриц');

readln(n);

writeln('Введите размер матрицы');

readln(size);

for i:=1 to n do begin

form(R,i);

print(R,i);

end;

maxim(r,a);

k:=minim(a);

print(r,k);

end.

6. Тесты

N

Size

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

Результат

2

3

0 3 86

20 27 67

31 16 37

42 8 47

7 84 5

29 91 36

0 3 86

20 27 67

31 16 37

3

2

0 3

86 20

27 67

31 16

37 42

8 47

37 42

8 47

Лабораторная работа № 5
«Работа с типизированными и текстовыми файлами»

1. Цель работы:

Изучение типизированных и текстовых файлов и способов работы с ними.

2. Краткие теоретические сведения

2.1. Понятие файла

ФАЙЛ - это именованная область памяти на внешнем устройстве.

Файлы имеют три особенности:

1) файл имеет имя, что дает возможность программе работать одновременно с несколькими файлами;

2) содержит компоненты одного типа;

3) длина файла в программе не ограничивается;

Файловый тип или файловую переменную можно задать следующим образом:

<имя>=FILE OF <тип>;

<имя>=TEXT;

где <имя> - имя файлового типа;

<тип> - любой тип Турбо Паскаля, кроме файлов;

TEXT - имя стандартного типа текстовых файлов ;

Например,

type Zap = record;

Name : string;

Days : integer;

end;

Filetype1 : file of Zap;{типизированный файл }

Filetype2 : Text; {текстовый файл}

var Fzap : filetype1;

Ftext : filezap2;

2.2. Стандартные процедуры и функции для работы с файлами

К файлам можно применять следующие стандартные процедуры и функции:

1)процедура assign (<файловая переменная>,<имя файла на диске>) - связывает файловую переменную (которая используется в программе) с именем существующего или создаваемого файла на диске.

2)процедура reset (<файловая переменная>) открывает для чтения файл, который уже существует на диске. При этом специальная переменная-указатель, связанная с этим файлом, устанавливается на начало файла, т. е. на компонент с порядковым номером 0. Если попытаться открыть для чтения файл, который не существует на диске, возникнет аварийный останов программы. Чтобы этого не произошло, надо сначала установить, есть ли файл на диске. Для этого надо выполнить следующую последовательность операторов:

{$I-} { отключить контроль за ошибками ввода-вывода}

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

{$I+} { включить контроль за ошибками ввода-вывода}

if ioresult<>0 then

. . . {файл не существует }

else

. . . {файл существует }

3)Функция ioresult возвращает 0, если последняя операция ввода- вывода завершилась успешно, в противном случае возвращает код ошибки. Эта функция становится доступной только при отключенном автоконтроле ошибок ввода-вывода. Директива компилятора {$I-} отключает, а {$I+} включает автоконтроль.

4)процедура rewrite(<файловая переменная>)- открывает файл для записи. При этом если файл уже существует на диске вся информация из него стирается. Переменная-указатель, связанная с этим файлом, устанавливается на начало файла, т. е. на компонент с порядковым номером 0. Желательно при выполнении этой операции также проверять существует файл или нет, чтобы не стереть нужную информацию.

5)процедура read (<файловая переменная>,<список ввода>) - читает очередные компоненты типизированного или текстового файла. Для типизированных файлов список ввода содержит одну или более переменных такого же типа, что и компоненты файла.

6)процедура write (<файловая переменная>,<список вывода>) - записывает данные из списка вывода в типизированный или текстовый файл. Для типизированных файлов список вывода содержит одну или более переменных такого же типа, что и компоненты файла.

7)процедура close (<файловая переменная>) - закрывает файл, обеспечивая сохранение в файле всех новых записей и регистрацию файла в каталоге. При этом сохраняется связь файловой переменной с именем файла, установленная ранее процедурой assign. Поэтому в дальнейшем этот файл можно открыть повторно без дополнительного использования процедуры assign.

8)процедура rename (<файловая переменная>,<новое имя>) - переименовывает файл,

<новое имя> - строка, содержащая новое имя файла на диске. Перед выполнением процедуры необходимо закрыть файл, если он был открыт процедурами reset или rewrite.

9)процедура erase (<файловая переменная>) - уничтожает файл. Перед выполнением процедуры необходимо закрыть файл, если он был открыт процедурами reset или rewrite.

К типизированным файлам можно применять также

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

11) функцию filesize (<файловая переменная>), которая возвращает длину файла - количество его компонент;

12) функцию filepos (<файловая переменная>), которая возвращает номер текущего компонента файла. Первый компонент файла имеет номер 0.

3. Постановка задачи:

1) сформировать типизированный файл из элементов, заданной в варианте структуры,

2) распечатать его содержимое,

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

4) выполнить преобразование типизированного файла в текстовый и распечатать текстовый файл.

Формирование, печать, удаление элементов и преобразование файлов оформить в виде подпрограмм. Предусмотреть сообщения об ошибках при открытии файла и выполнении операций ввода/вывода.

4. Варианты

1. Структура "Абитуриент":

- фамилия, имя, отчество;

- год рождения;

- оценки вступительных экзаменов (3);

- средний балл аттестата.

Удалить элемент с указанным номером.

2. Структура "Сотрудник":

- фамилия, имя, отчество;

- должность

- год рождения;

- заработная плата.

Удалить элемент с указанной фамилией.

3. Структура "Государство":

- название;

- столица;

- численность населения;

- занимаемая площадь.

Удалить все элементы, у которых численность меньше заданной.

4. Структура "Человек":

- фамилия, имя, отчество;

- домашний адрес;

- номер телефона;

- возраст.

Удалить все элементы с заданным возрастом.

5. Структура "Человек":

- фамилия, имя, отчество;

- год рождения;

- рост;

- вес.

Удалить все элемент с указанным ростом и весом.

6. Структура "Школьник":

- фамилия, имя, отчество;

- класс;

- номер телефона;

- оценки по предметам (математика, физика, русский язык, литература).

Удалить все элементы, у которых есть 2 хотя бы по одному предмету.

7. Структура "Студент":

- фамилия, имя, отчество;

- домашний адрес;

- группа;

- рейтинг.

Удалить все элементы, у которых рейтинг меньше заданного.

8. Структура "Покупатель":

- фамилия, имя, отчество;

- домашний адрес;

- номер телефона;

- номер кредитной карточки.

Удалить 3 элемента из начала файла.

9. Структура "Пациент":

- фамилия, имя, отчество;

- домашний адрес;

- номер медицинской карты;

- номер страхового полиса.

Удалить элемент с заданным номером медицинской карты.

10. Структура "Информация":

- носитель;

- объем;

- название;

- автор.

Удалить первый элемент с заданным объемом информации.

11. Структура "Видеокассета":

- название фильма;

- режиссер;

- продолжительность;

- цена.

Удалить все элементы с ценой выше заданной.

12. Структура "Музыкальный диск":

- название;

- автор;

- продолжительность;

- цена.

Удалить первый элемент с заданной продолжительностью.

13. Структура "Спортивная команда":

- название;

- город;

- количество игроков;

- количество набранных очков.

Удалить все элементы с количеством очков меньше заданного.

14. Структура "Стадион":

- название;

- адрес;

- вместимость;

- виды спорта.

Удалить элемент с заданным названием.

15. Структура "Автомобиль":

- марка;

- год выпуска;

- цена;

- цвет.

Удалить все элементы, у которых год выпуска меньше заданного.

16. Структура "Владелец автомобиля":

- фамилия, имя, отчество;

- номер автомобиля;

- телефон;

- номер техпаспорта.

Удалить элемент с заданным номером.

17. Структура "Фильм":

- название;

- режиссер;

- год выпуска;

- стоимость.

Удалить все элементы, у которых стоимость превышает заданную.

18. Структура "Книга":

- название;

- автор;

- год издания;

- количество страниц.

Удалить 3 элемента из начала файла.

19. Структура "Фильм":

- название;

- режиссер;

- страна;

- приносимая прибыль.

Удалить 2 элемента из конца файла.

20. Структура "Государство":

- название;

- государственный язык;

- денежная единица;

- курс валюты относительно $.

Удалить элемент с указанным названием.

21. Структура "Автомобиль":

- марка;

- серийный номер;

- регистрационный номер;

- год выпуска.

Удалить 3 элемента из начала файла.

22. Структура "Владелец автомобиля":

- фамилия, имя, отчество;

- номер автомобиля;

- номер техпаспорта;

- отделение регистрации ГАИ.

Удалить элемент с заданным номером.

23. Структура "Стадион":

- название;

- год постройки;

- количество площадок;

- виды спорта.

Удалить все элементы, у которых год постройки меньше заданного.

24. Структура "Студент":

- фамилия, имя, отчество;

- номер телефона;

- группа;

- оценки по 3 основным предметам.

Удалить все элементы из группы с указанным номером, у которых среднее арифметическое оценок меньше заданного.

25. Структура "Студент":

- фамилия, имя, отчество;

- дата рождения;

- домашний адрес;

- рейтинг.

Удалить элементы, у которых даты рождения совпадают.

5. Содержание отчета

1. Постановка задачи.

2. Описание используемых типов данных.

3. Текст подпрограмм для:

· формирования файла,

· печати файла,

· добавления записи в файл или удаления записи из файла,

· преобразования типизированного файла в текстовый,

· печати текстового файла

4. Текст основной программы.

5 Тесты.

6. Методические указания к выполнению работы

1) Если делается попытка открыть не существующий файл, то будет выдана ошибка исполнения программы. Поэтому следует проверить существование файла на диске с помощью следующей нестандартной функции.

Function ExistFile(filename:string):Boolean;

Begin

{отключаем проверку ошибок ввода-вывода}

{$I-}

reset(f);

{включаем проверку ошибок ввода-вывода}

{$I+}

if IoResult=0 then ExistFile:=true else ExistFile:=false;

end:

2) Для ввода одной записи типизированного файла следует написать вспомогательную процедуру.

Procedure MakeRecord (var X:Rec);

Begin

Writeln(‘Введите имя’);

Readln(x.name);

Writeln(‘Введите возраст’);

Readln (x.age);

……..

{аналогично вводятся все поля записи}

end;

3) Для вывода записи типизированного файла следует написать вспомогательную процедуру (аналогично п. 2)

4) Для удаления элементов из файла следует использовать вспомогательный файл (из исходного файла переписываем во вспомогательный все элементы, кроме удаляемого, затем удаляем исходный файл, а вспомогательный переименовываем)

Procedure DelFile(n:lingint);

{удаление записи с номером n}

Var t:file of Rec;{вспомогательный файл}

X:Rec;

I:longint;

Begin

Reset(f);{открываем для чтения исходный файл}

Rewrite(t);{открываем для записи вспомогательный файл}

I:=0;{счетчик записей в файле}

While not eof(f) do

Begin

Read(f,x);{читаем из файла в переменную х очередное значение }

I:=I+1;

If I<>n then

Write(t,x);{записываем х во вспомогательный файл}

End;

Close(f);

Close(t);

Erase(f);{удаляем исходный файл}

Rename (t, filename);{переименовываем вспомогательный}

End;

5) При преобразовании типизированного файла в текстовый следует выполнять чтение записи из типизированного файла и по полям записывать ее в текстовый файл с указанием формата записи (т. е. сколько позиций отводится для записи данного поля).

. . . . . .

Wile not eof(f) do begin

Read(f,x);

Writeln(ft,x.name:20,x.age:10);

End;

6) Текстовый файл удобнее печатать по строкам.

Readln(ft,s);

Writeln(s);