
- •Алгоритмы, структуры данных и программирование
- •Қасымқанұлы Бөрібай, к.Ф.-м. Н., доцент кафедры высшей математики Костанайского государственного педагогического института
- •Работа №1
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2 Пример решения задачи
- •1 Способ:
- •2 Способ:
- •3 Задачи
- •4 Тесты
- •Работа №2
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2 Пример решения задачи
- •3 Задачи
- •4 Тесты
- •Работа №3
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2 Примеры решения задач
- •3 Задачи
- •4 Тесты
- •Работа №4
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2 Пример решения задачи
- •3 Задачи
- •4 Тесты
- •Работа №5
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2 Пример решения задачи
- •3 Задачи
- •4 Тесты
- •Работа №6
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2 Пример решения задачи
- •3 Задачи
- •4 Тесты
- •Работа №7
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы.
- •2 Пример решения задачи
- •3 Задачи
- •4 Тесты
- •Работа №8
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2 Пример решения задачи
- •3 Задачи
- •4 Тесты
- •Работа №9
- •1. Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2. Пример решения задачи
- •3. Задачи
- •4. Тесты
- •Работа №10
- •1. Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2. Пример решения задачи
- •3. Задачи
- •4. Тесты
- •Работа №11
- •1. Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2. Пример решения задачи
- •3. Задачи
- •4. Тесты
- •Работа №12
- •1. Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2. Пример решения задачи
- •3. Задачи
- •4. Тесты
- •Работа №13
- •1. Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2. Пример решения задачи
- •3. Задачи
- •4. Тесты
- •Работа №14
- •1. Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2. Пример решения задачи
- •3. Задачи
- •4. Тесты
- •Работа №15
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2 Пример решения задачи
- •3 Задачи
- •4 Контрольные вопросы
- •Ответы к тестовым заданиям
4. Тесты
Истина или ложь?
Каждое из представленных ниже утверждений либо верно, либо нет.
Вложение подпрграмм не допускается.
Отличия в описании функции и процедуры касаются только заголовка и раздела операторов.
Функционально самостоятельная часть программы, обладающая собственным именем и набором локальных имен, называется подпрограммой.
Вызов функции осуществляеся по ее имени из любых точек тела программы.
Количество вызовов функции в программе не должно превышать двух раз.
Если идентефикаторы допускается использовать только в рамках одной подпрограммы, то такие идентификаторы называются глобальными.
Если действие идентификаторов распространяется на несколько вложенных подпрограмм, то такие идентификаторы называются локальными.
Функция, чтобы ее можно было вызвать в программе, должна быть обьявлена в разделе описаний программы.
Для того, чтобы обратиться к функции из основной программы, в теле программы должно присутствовать выражение, в котором фигурирует имя функции.
В Turbo Pascal наличие в теле функции оператора вызова самой себя не допускается.
Работа №11
Тема: Записи.
Цель: Изучить фиксированные и вариантные записи пользователя.
1. Перечень знаний и умений, необходимых для выполнения лабораторной работы
Перед тем, как приступить к выполнению лабораторной работы, студенту необходимо ознакомиться со следующим материалом:
правила объявления записей пользователя;
определение записей;
назначение и синтаксис записей языка Turbo Pascal.
2. Пример решения задачи
При решении многих задач возникает необходимость хранить и обрабатывать совокупности данных различного типа. Запись, в отличие от массивов, множеств и файлов, является составной структурой данных. Если отдельно взятый массив, множество или файл всегда включают элементы одинакового типа, то записи могут объединять в единое целое любое число структур данных других типов: простых переменных, массивов, множеств, записей и файлов.
В языке Pascal различают фиксированные и вариантные записи.
Обычная фиксированная запись состоит из одного или нескольких полей, для каждого из которых при объявлении указывается имя (идентификатор) и тип.
Общий вид описания записи следующий:
Type <имя записи> = record
<поле1>:<тип1>;
<поле2>:<тип2>;
……
<поле n >:<тип n>
end;
Обращение к полю осуществляется указанием <имени записи>.<имя поля>
Известны фамилии и оценки по пяти дисциплинам каждого из двадцати учеников класса. Требуется вычислить средний балл каждого из учеников и выдать на экран список учеников, имеющих максимальный средний балл.
Опишем запись:
Type Spisok=record
Fam:string[15]; {поле фамилии ученика}
B:array[1..5] of byte; {поле оценок}
Srb:real; {поле среднего балла}
End;
Пример типа Spisok будет хранить структуру, содержащую информацию об одном ученике.
Для хранения информации обо всех 20 учениках класса, введем массив klass, предоставляющий собой массив записей указанного вида:
Var klass:array[1..20] of spisok;
Ввод исходных данных в массив записей можно осуществлять следующем образом:
1 способ:
For i:=1 to 20 do
Begin
Writeln(‘Введите фамилию’,i,’-го ученика:’);
readln(klass[i].fam); {Считывание поля Фамилия, обращение к полю через точку}
Writeln(‘Введите оценки по пяти предметам’,i,’-го ученика:’);
For j:=1 to 5 do
readln(klass[i].b[j]); {Считывание поля оценок}
End;
Ввод исходных данных в поле записи можно осуществлять также с использованием оператора присоединения With <переменная> do
2 способ:
For i:=1 to 20 do
With klass[i] do
Begin
Writeln(‘Введите фамилию:’);
Readln(fam); {при обращении к полю fam не указывается имя записи}
Wrileln(‘Введите оценки:’);
For j:=1 to 5 do
readln(b[j]); {считывание поля оценок}
End;
Сравните оба способа, чем они отличаются друг от друга?
Программа для решения рассматриваемой задачи может быть записана следующим образом:
Program recs;
Type spisok=record
Fam: string[15]; {поле фамилия}
B:array[1..5] of byte; {поле оценок}
Srb:real; {поле среднего балла}
End;
Var klass: array[1..20] of spisok; {Объявление массива записей klass}
P:spisok;
i,m:integer;
Sbmax:real;
Begin {начало программы}
Writeln(’введите кол-во учеников класса’); readln(m);
{Заполнение записи для каждого ученика класса:}
For i:=1 to m do
Begin
Writeln(‘Введите фамилию’,i,’-го ученика:’);
readln(klass[i].fam); {Считывание поля фамилия }
Writeln(‘Введите оценки по пяти предметам’,i,’-го ученика:’);
For j:=1 to 5 do
readln(klass[i].b[j]); {считывание поля оценок}
End;
{Подсчет среднего балла для каждого i-того ученика класса:}
For i:=1 to m do
With klass[i] do
Srb:=(b[1]+b[2]+b[3]+b[4]+b[5])/5;
{Нахождение максимального среднего балла из всех учеников:}
Sbmax:=0; {Начальное значение максимального среднего балла равное нулю}
For i:=1 to m do
if klass[i].srb>=sbmax then sbmax:=klass[i].srb;
{Вывод результата списка учеников имеющих максимальный средний балл:}
For i:=1 to m do {для каждого i-того ученика }
if klass[i].srb=sbmax {если средний балл i-того ученика равен максимальному среднему баллу}
then {тогда}
with klass[i] do
writeln(fam:20,’ – ‘,srb:6:3); {выводим фамилию и средний балл этого ученика}
readln;
End.