г) Какие из приведенных ниже выражений являются неправильными с точки зрения языка Паскаль и почему?
1) ['а','b','с','k']/['а',b'];
2) [5,6,1,3]>=[1,3,5,6];
3) [kub, shar]+[prizma];
4) [yravnenie, sistema] * [neravenstvo, sistema];
5) [3.5,7.1,2.0]-[1,2];
д) Вычислить следующие выражения:
1) [5]<=[1..5];
2) ['а' .. 'd','k' .. 'm']+['d' .. 'k'];
3) [Moscow, Kiev, Sochi]*[Sochi];
4) [7,1,3 .. 6]=[1 .. 7];
5) [’,’,’(’,’)’,’.’]-[’,’,’.’];
6) 15 in [1 .. 10];
е) Вычислить следующие выражения:
1) ['а','b','с']=[b','с','а'];
2) [3,4,5]<=[2 .. 8];
3) []>=[1,2];
4) trunc(8.3) in [1 .. 9];
5) succ('c') in ['b' . .'d'];
6) [2]<>[2,2,2];
7) 16 in [16].
ж) Вычислить выражение:
[1 .. 14]*[5, ]+[4 .. 7]-[2 .. 16]*[6]
з) Упростить данные выражения множественного типа:
1) [1]*[2]+[7,1]*[2..17]-[2..8];
2) (А-В)*А+(А-В)*В;
3) (А+В)*(А-В)*(В-А);
4) А+В-(А-В)-(В-А);
5) А-(А-В);
1)
После отладки программы, выполнить ее несколько раз, меняя значения исходных данных. Вывод результатов снабдить соответствующими комментариями.
При выполнении первого задания удобно использовать множество, в которое необходимо поочередно в цикле заносить букву алфавита, и каждый раз просматривать весь текст: если очередная буква текста совпадает с буквой, находящейся в множестве, целочисленную переменную (например: k:lnteger) увеличивать на 1. После просмотра текста в переменной k будет содержаться количество вхождений буквы в текст. Далее необходимо найти % вхождений этой буквы (100%-количество всех букв текста), и напечатать его. Цикл закончится тогда, когда все буквы от а до я (или от a до z) побывают в множестве которые вводятся 2 и более раз. Первый введенный символ записывается в первое множество, затем после ввода очередного символа надо проверить есть ли уже такой символ в первом множестве; если да, то этот символ добавляется и в первое множество и во второе, иначе - только в первое. После окончания ввода символов второе множество необходимо напечатать.
В задании 14 можно построить несколько различных алгоритмов решения. Так например, вводя очередной символ последовательности можно подсчитывать количество цифр в нем. Одновременно с этим считать количество всех введенных символов. Если по окончании ввода общее количество символов в последовательности совпадает с количеством цифр, то очевидно, что это число, в противном случае последовательность может быть именем, но только если первый символ-буква. Поэтому при вводе первого символа нужно определить является он цифрой или буквой, и запомнить результат (удобно использовать логическую переменную). В любом другом случае введенная последовательность не является ни числом ни именем. При формировании строки можно поставить еще одно дополнительное условие. Если введенный символ не является буквой или цифрой, то напечатать сообщение «Ошибка. Повторите ввод» и остановить работу.
Для нахождения простых чисел в задании 15 можно использовать широко известный алгоритм «Решето Эратосфена» [3]. Как известно, самое маленькое простое число, число 2. Если выписать подряд последовательные натуральные числа, то зачеркивая каждое второе число из следующих за числом 2, мы отсеем все числа, кратные числу 2; первое не зачеркнутое число - простое (это число 3). Зачеркивая каждое третье число за числом 3, мы отсеем все числа, кратные 3; первое не зачеркнутое после тройки число простое (это число 5). Вообще, какое бы натуральное число k мы не взяли, зачеркивая каждое k-тое число, мы отсеем все числа, кратные k. Поэтому, если нам нужно отыскать все простые числа, не превосходящие данного числа N, то выпишем подряд все числа от 2 до N.
Отметим число 2, как первое простое. Затем по способу «отсеивания» отбросим все числа, кратные 2,3,5 и т. д. При составлении программы удобно описать два множества: n=[2 ] - множество всех чисел от 2 до 201, р - множество простых чисел, t:=2 - первое простое число. Формирование множества р осуществляется в цикле:
Repeat While Not (t In n) Do
t:=t+1
p:=p+[t]; k:=t;
Далее необходимо вычеркнуть все числа, кратные k:
Repeat n:=n-[k]
k:=k+t;
Until k>201
внешний цикл заканчивается, когда в множестве не остается ни одного числа Until n=[];
После того, как все простые числа из интервала [2...201] будут найдены, их необходимо напечатать в порядке убывания.
ЛАБОРАТОРНАЯ РАБОТА N8.
Тема. Записи.
Цели работы:
1) Получение практических навыков программирования задач с использованием записей.
2) Получение навыков в организации ввода/вывода значений комбинированных типов данных.
Постановка задачи:
Используя тип "запись" составить программу для решения задачи и выполнить ее.
Содержание отчета:
ЧАСТЬ I
1) Описание типа "запись" для конкретного варианта.
ЧАСТЬ II
2) Постановка задачи для конкретного варианта.
3) Алгоритм решения задачи.
4) Текст пpoграммы.
5) Инструкция пользования программой.
6) Протокол работы программы.
ЧАСТЬ III
7) Постановка задачи для конкретного варианта.
8) Алгоритм решения.
9) Текст программы.
10) Протокол работы программы.
Методические указания:
Перед выполнением работы необходимо повторить теоретический материал, рассмотреть предложенные примеры. Ответьте на вопросы и выполните упражнения:
а) Могут ли компоненты записей быть различных типов?
б) Как осуществляется доступ к полям записи?
в) Могут ли записи входить компонентами в другие переменные?
Лабораторная работа состоит из трех частей. В первой части работы необходимо только описать тип "запись" для данных конкретного варианта. В скобках перечислены компоненты (поля) записи. Так для варианта 15 решение может выглядеть так:
Туре student= Record
fio:String[20];
fak:Striпg[30];
kurs. group:lnteger
End;
Во второй части необходимо составить программу решения задачи используя тип запись. Прежде всего, надо составить алгоритм решения задачи, определить все компоненты записи для данной задачи.
Задания 1-5 содержат однотипные задачи.
В задании 1 целесообразно координаты каждой точки представить в виде записи, например:
Туре point=Record
x, y:Real
End;
Var А. В, С, D: point;
В этом случае при обращении к компонентам записи (абсциссе и ординате точки) необходимо указывать имя поля через точку. Выполняя данное задание удобно завести массив таких записей, размерности N.
При выполнений 2-го задания необходимо воспользоваться известными формулами расстояний:
От точки до прямой ![]()
между параллельными прямыми Ax+By+C1=0, Ах+ВУ+С2=0

между параллельными плоскостями Ax+By+Cz+D1=0, Ax+By+Cz+D2=0

Выполняя третье задание необходимо решить систему двух уравнений, в которой первое - уравнение прямой, а второе уравнение, уравнение прямой, перпендикулярной данной.
Для выполнения 4-го задания достаточно вспомнить некоторые сведения из физики:
X=Xo+Vot+at2/2;
V=Vo+at
Значения ускорения, начальной скорости и координаты Хо, а так же результаты целесообразно объявить полями записи, например:
param= Record
а,v0,x0:Real;
x,v:Real
End;
Поскольку ускорение при равноускоренном движении постоянно, в программе нужно предусмотреть вывод сообщения об этом.
При выполнении задания 5 необходимо знать, как связаны между собой полярные координаты (r, t) и прямоугольные (х, у). Эта связь задается формулами: x=r*cos(t), y=r*sin(t). Воспользовавшись этими соотношениями и формулой для вычисления расстояния между двумя точками легко найти искомое расстояние. Полярные координаты точек в программе удобно описать с помощью записи, например:
Туре pointpol= Record
r, t:Real
End;
Задания 6-10 почти одинаковы, разница лишь в объектах, списки которых надо сформировать. При описании записи желательно взять несколько компонент (3-5). После ввода всех необходимых данных, в программе можно использовать оператор ClrScr, после чего на чистый экран вывести список (возможно в виде таблицы, ведомости и пр.).
После отладки программы выполнить ее, результаты выполнения сопроводить соответствующими комментариями.
В третьей части работы предлагается составить программу обработки списка студентов группы в соответствии с вариантом. Тип «запись» для программы уже описан. Обратите внимание, что запись «student» имеет сложную структуру и состоит из пяти полей, кроме того поле ех - это запись, состоящая из двух полей sem1 и sem2, причем эти поля - тоже запись, имеющие по два поля ех1, ех2. При вводе списка это необходимо учитывать. Программа для любого варианта будет состоять из двух частей.
В первой части необходимо ввести массив записей (она одинакова для всех вариантов). Во второй части надо обработать введенный список в соответствии с конкретным заданием. При выполнении работы можно воспользоваться примером задачи «Стипендиальная ведомость» на стр. 56- 57, [2].
Схематически данное описание можно представить в виде следующей таблицы:
Ф. И.О. | пол (м/ж) | адрес (sity /comhourse) | экзамены | балл | |||||
1 сем. | 2 сем. | ||||||||
Эк1 | Эк2 | Эк3 | Эк1 | Эк2 | Эк3 | ||||
Ж | 4 | 4 | 5 | 4 | 5 | 5 | 5 | ||
М | 3 | 3 | 3 | 4 | 3 | 4 | 3 | ||
Ж | 5 | 5 | 5 | 5 | 4 | 5 | 5 | ||
… |
ЛАБОРАТОРНАЯ РАБОТА N9.
Тема. Файлы.
Цели работы:
1) Изучение файловых типов в Паскале.
2) Получение навыков в работе с файлами.
Постановка задачи: Составить программу обработки файлов.
Содержание отчета:
ЧАСТЬ I
1. Постановка задачи для конкретного варианта.
2. Текст программы.
3. Инструкция пользования программой.
4. Протокол работы программы.
ЧАСТЬ II
5. Текст программы: Формирование Файла «Письмо».
6. Программа чтения файла «Письмо».
7. Программа формирования файла «Ответ».
8. Результаты работы «Электронной почты».
Методические указания:
Перед выполнением программы повторить теоретический материал рассмотреть основные операции при работе с файлами. Ответьте на вопросы и выполните упражнения:
а) В каких случаях удобно использовать файлы?
б) Где хранятся файлы?
в) Каким образом описываются переменные файловых типов?
г) Описать переменную ST как переменную файлового типа, если известно, что каждый компонент файла есть:
1. символ;
2. запись, содержащая поля:
flo:string(20);
godroj: 1960..1980
д) Какие из приведенных ниже описаний являются неправильными описаниями переменных файлового типа и почему?
1) Var f:Text;
2) Var fl = File Of Char;
3) Var f2:File Of String[30];
4) Var f3:File Of Arrayra' . .'t');
5) Var f4:File Of Real;
е) Как осуществляется доступ к компонентам файлов?
ж) Какие операции определены над файлами?
Лабораторная работа состоит из двух частей. В первой части работы надо составить программу, позволяющую обработать внешний файл «lab. zap», содержащий сведения об учениках школы. Файл «lab. zap» формируется с помощью уже готовой программы «lab» (cм. стр. 69- 70, [2]).
После того, как файл будет сформирован и записан на диск, необходимо обработать его в соответствии с вариантом.
Задание 1, 2 и 3 очень похожи. При их выполнении достаточно связаться с файлом «lаb zap», прочитать все его элементы (записи) и упорядочить их по указанному в задаче признаку одним из известных методов упорядочения (см. примеры стр. 45- 46, 56- 58,стр. 68- 69, [2]). После этого упорядоченный список вывести на экран. для проверки правильности результата и большей наглядности можно предусмотреть одновременный вывод первоначального списка (файла «lаb. zap») и упорядоченного.
В заданиях 4, 5 требуется сформировать новый файл, используя данные файла «lаb. zap». Поэтому в программе придется работать с двумя файлами:
1.Старый файл (файл «lab. zap») открыть для чтения.
2.Новый файл открыть для записи.
3.Переписать все нужные записи из старого в новый.
В качестве условия для проверки необходимо использовать поле очередной записи «pol»:
Например: если zaр. роl='М'(Ж'), то эту запись надо занести в новый файл.
Для проверки правильности результата в программе можно предусмотреть вывод на экран содержимого старого и нового файлов (см. процедуру «vyvod»).
Задания 6, 7 аналогичны двум предыдущим. Для определения нужных записей можно использовать значение поля определенной записи «class» и множество [9,10,11] ([1,2,3,4,5]).
В восьмом задании, как и в предыдущих надо работать с двумя файлами. После ввода номера записи, которую следует удалить, необходимо в цикле считать из старого файла очередную запись, фиксируя при этом ее номер в какой-нибудь целочисленной переменной. Затем сравнить этот номер с введенным номером, и если номера не совпадают, то занести эту запись в новый файл, в противном случае не делать этого. Цикл закончится, когда все записи будут прочитаны. Таким образом, в новый файл перепишутся все записи, кроме той, номер которой мы ввели для удаления. После этого старый файл можно удалить, а новый переименовать.
Указанную процедуру удобно выполнять в цикле Repeat...Until, предоставляя тем самым возможность удаления из файла поочередно нескольких записей:
Repeat
серия операторов
(ввод номера к и удаление к-той записи)
Writеln('еще будете удалять?(Y/N');
Read(c);
Until c='N';
В программе так же можно предусмотреть вывод на экран содержимого старого и нового файлов для оценки правильности работы программы (см. процедуру vyvod).
В задании 9 для того, чтобы добавить в файл новую запись, необходимо работать с двумя файлами (см. задания 4, 5). После того, как все записи из старого файла будут переписаны в новый, надо найти новую запись и добавить ее в файл. Как и в предыдущем задании можно предусмотреть добавление нескольких записей поочередно. Когда все необходимые записи будут, добавлены, старый файл можно удалить, а новый переименовать. Удобно организовать вывод на экран исходного из полученного списков (см. процедуру vyvod).
Задание 10-это обобщенный вариант восьмого и девятого. Здесь кроме номера записи, которую нужно заменить, необходимо ввести саму новую запись для замены. Процесс поиска нужной записи аналогичен тому, который описан в указании для задания 8. После того, как эта запись будет найдена, в новый файл необходимо занести вместо нее ту запись, которая была введена ранее для Замены. Как и в задании 8, здесь можно предусмотреть поочередную замену нескольких записей на новые (используя цикл Repeat...Until). В задании целесообразно произвecти вывод содержимого старого и нового файлов на экран для проверки правильности работы программы.
При выполнении задания 11 необходимо работать с двумя файлами (см. задание 5). После чтения очередной записи из файла «lаb. zaр» нужно значение ее поля «class» увеличить на единицу, а затем занести эту запись в новый файл. Цикл закончится, когда все записи из старого файла будут обработаны. для проверки правильности результатов работы программы старый и новый списки можно вывести на экран ( см. процедуру vyvod).
Задания 12, 13 очень похожи. Для их выполнения нужно в цикле читать каждую запись из файла «lab. zap», и проверять значения соответствующих полей («class» - в задаче 12 и «god», «pol»-B задаче 13). В случае успешного результата проверки запись вывести на экран, а значение целочисленной переменной (kolich) увеличить на 1. После окончания цикла это значение напечатать. При желании можно организовать новый файл и все нужные записи помещать в него, а потом напечатать на экране.
В задании 14 фактически требуется создать файл, в котором не содержится ни одной записи, у которой значение поля «с1аss» равно 11. для этого необходимо работать с двумя файлами (см. задание 5). После чтения очередной записи из файла «lab. zap» надо проверить значение ее поля «class» и, при необходимости записать в новый файл. Для проверки правильности результатов содержимое старого и нового файлов можно вывести на экран (см. процедуру vyvod).
При выполнении последнего задания сначала нужно ввести номер записи, в которой требуется изменить год рождения, и записать новый год рождения. Затем в цикле переписывать каждую запись файла «Iab. zap» в новый, фиксируя ее номер (см. задание 8). Если номер очередной записи окажется равным введенному номеру, то этой записи следует сначала заменить значение ее поля «god» (см. задание 11), после чего занести в новый файл. Использование цикла Repeat...Until позволит осуществить изменение года рождения в нескольких Записях поочередно (см. задание 8). Исходный и полученный списки целесообразно напечатать.
Для вывода элементов файла (записей) в цикле удобно использовать процедуру vyvod.
Procedure vyvod ( t:lnteger; zap: School);
Begin
Write (t:3, zap. fio: 20);
Writeln(zap. class: 4, zap. god: 8, zap. fol:2);
Writeln
End;
Вторая часть работы предусматривает имитацию «электронной почты», а именно, составление программ формирования и чтения файлов с целью обмена информацией.
Программы необходимо сопроводить краткими комментариями (инструкциями пользователя).
Выполнить отлаженную программу, снабдив результаты выполнения соответствующими комментариями.
Основные этапы выполнения этой работы можно представить следующим образом:
1) Формирование файла «письмо» (например «Leter. dat»).
2) Чтение этого файла и вывод полученной информации.
3) Создание нового файла («otvet. dat»), в котором используются полученные данные.
Следовательно, при составлении первой программы достаточно сначала связать какую-нибудь файловую переменную с файлом, открыть файл для записи и записать в него все данные письма.
Во второй программе необходимо прочитать и напечатать все элементы сформированного файла (это удобно делать в цикле: «пока не конец файла»). После прочтения полученной информации можно приступить к формированию нового файла, используя файл «письмо».
В задании 1 формирование файла «письмо» удобно осуществить в цикле: For i:=1 То 100 Do. При создании файла «ответ» очевидно нужно брать каждый элемент из файла «письмо», возводить его в квадрат и записывать полученный результат в новый файл.
В задании 2 необходимо найти все простые числа из промежутка [1...200] и записать в файл. Для их поиска можно воспользоваться известным алгоритмом «Решето Эратосфена» (см. зад.15, лаб. работа 7). В файле «ответ» будет содержаться единственное число - сумма всех элементов файла «письмо».
В задании 3 целесообразно использовать файл, состоящий из двух массивов размерности [1...n]. В первом массиве будут содержаться значения аргумента х, во втором - значения функции y=ln(x). При формировании файла «ответ» достаточно читать значение аргумента (из первого массива), находить у=ехр(х) и заносить эти данные в новый файл.
Формирование файла "письмо" в четвертом задании происходит аналогично заданию 3. В файле «ответ» должно содержаться два числа - коэффициенты а, b функции у=ах+b, полученной методом наименьших квадратов. Идея этого метода заключается в следующем.
МЕТОД НАИМЕНЬШИХ КВАДРАТОВ
В инженерной практике получил распространение табличный способ задания функций, при котором для конечного множества значений аргумента X=X1,X2, ... ,Xn известны полученные экспериментально соответствующие значения функции f(x)=f(x1),f(X2), ... ,f(xn). Они являются результатами наблюдений или измерений. Аналитическое выражение функции в таком случае неизвестно, что не позволяет вычислить ее значения в промежуточных точках X=Xi (i=1,2, ... ,n). Для отыскания этих значений строят многочлен Рт(х, а), который, в некотором смысле наилучшим образом приближается к значениям функции.
Согласно методу МНК минимизируется сумма квадратов отклонений многочлена от экспериментальных значений функции f(Xi), i=1 ,2, ... ,n:

Где ai - координаты точки А, bi - координаты точки В. Для записи координат в программе используются два массива A(n), B(n).
Задание 4 напоминает второе. После ввода многочлена (массива коэффициентов) и аргумента х необходимо сначала найти значение выражения a0*x+al, полученный результат снова умножить на х и прибавить а2 т. д.
Haримep:
у=4х5 - Зх4 +2х2 +х-1
а0=4
a1=-3
a2=0
a3=2
a4=1
a5=-1
Многочлен можно записать в виде ((((4*х-3)*х+0)*х+2)*х+l)*х-1, при х=2
S1=4*x-3=5
S2=S1·x+0= 10
S3=S2*x+2=22
S4=S3*х+ 1=45
S5=S4*x-1=89
Описанные действия удобно выполнять в цикле.
В задании 5 тpeбуется найти числа:
b1=a1*a2
b2=a2*а3
b3=а3*а4
……….
bn=an-1*an
Для их хранения в программе можно использовать имеющийся массив либо завести новый.
В шестом задании после ввода массива достаточно в цикле сравнивать два соседних элемента с нулем. Если они разного знака, то целочисленную переменную (например, x:lnteger) увеличить на 1.
В задании 7 после ввода массива нужно в цикле проверять каждый элемент и добавлять соответствующей сумме S1 или S2.
Задание 8 похоже на пятое. В заданном массиве a1,а2,..an и необходимо найти числа:
b1=аl*а2*a3
b2=a2*a3*a4
b3=a3*a4*a5
……………..
bn=an-2*an-1*an
При выполнении задания 9 удобно использовать следующий алгоритм: сначала взять первый элемент аl массива и проверить есть ли среди чисел a2 а3 ... an число, ему равное по абсолютной величине. Если да, то напечатать их индексы. В противном
![]()
В качестве многочлена удобно взять линейный двучлен Р(х, а)=ах+b.
Имеем: 
Для отыскания коэффициентов а и b используется необходимое условие минимума функции многих переменных. Оно состоит в равенстве нулю частных производных по каждому параметру.

В задании 5 необходимо работать с файлом типа «текст» (f:Text). После того, как файл «письмо» будет сформирован, его нужно прочитать и вывести на экран (это удобно сделать посимвольно в цикле). для определения количества слов в тексте достаточно определить, сколько в нем символов, которые могут разделять слова (например, «пробел» «,», «:», «точка», «?», «!» и т. п.). Из этих символов можно сформировать констант-множество, и проверять наличие каждого символа текста в нем. После просмотра всего текста результат записать в файл «ответ».
В шестом задании, как и в предыдущем, предусмотрена работа с текстовым файлом. Нужно обратить внимание, что файл «письмо» должен содержать зашифрованный текст, а «ответом» должна быть его расшифровка. Можно придумать множество различных способов шифровки текста. Рассмотрим случай, когда зашифрованный текст - это искомый текст, записанный «задом наперед» (справа налево). После формирования такого файла и вывода его на печать (см. задание 5) необходимо составить программу, формирующую файл, в котором записан текст в «нормальном» виде (слева направо). Для этого нужно в цикле читать из файла "письмо" очередной элемент (с) и добавлять его в строку (s) следующим образом: s:=c+s. После завершения цикла полученный текст записать в новый файл.
При решении заданий 5,6 можно воспользоваться примерами (стр. , [2].
При выполнении 7-го задания удобно работать с файлом записей (см. указания к части 1 данной работы).
ЛАБОРАТОРНАЯ РАБОТА N10.
Тема. Построение простейших рисунков и графиков функций.
Цели работы:
1) Получение практических навыков работы с графической информацией.
2) Знакомство с основными графическими процедурами.
3) Построение графиков функций.
Постановка задачи:
1) Построить рисунок.
2) Составить программу для построения графика заданной функции.
Содержание отчета:
ЧАСТЬ I
1) Постановка задачи для конкретного варианта.
2) Текст программы.
ЧАСТЬ II
3) Постановка задачи для конкретного варианта.
4) Алгоритм решения.
5) Текст программы.
6) Эскиз построенного графика.
Перед выполнением работы повторить теоретический материал, рассмотреть основные процедуры модуля GRAPH. Ответьте на вопросы и выполните упражнения:
а) Что такое инициализация графики экрана, как она происходит?
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |


