МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ ФГБОУ ВПО «СЕВЕРО-КАВКАЗСКИЙ ГОРНОМЕТАЛЛУРГИЧЕСКИЙ ИНСТИТУТ» (ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ) Кафедра информатики Информатика Раздел: «Программирование на языке паскаль.» Методические указания к выполнению лабораторных работ. Допущено редакционно-издательским советом ФГБОУ ВПО «Северо-Кавказского горнометаллургического института (государственного технологического университета)» для направлений подготовки: 080100 «ЭКОНОМИКА», 080200 «Менеджмент», 030900 «Юриспруденция» протокол заседания РИСа №4 Составители: ст. преп. Акоева Е. Н., ст. преп. Итазова Л. Г. Владикавказ, 2014 г. 1 УДК 681.142.2 ББК 32.973.2 А 40 Методические указания к выполнению лабораторных работ: «ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПАСКАЛЬ»/ Составители: Е.Н. Акоева, Л.Г. Итазова; «Северо-Кавказский горно-металлургический институт (государственный технологический университет)»-Владикавказ: «СевероКавказский горно-металлургический институт (государственный технологический университет)». Изд. «Терек».2014, Методические указания к выполнению лабораторных работ «ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПАСКАЛЬ» по дисциплине «Информатика» составлен в соответствии с требованиями ФГОСа и рабочей программы. Методические указания к выполнению лабораторных работ состоят из 6 лабораторных работ и методических указаний к ним. Каждое методическое указание состоит из следующих частей: теоретической и практической. Теоретическая часть оснащена иллюстрированным материалом, основными теоретическими положениями по программе «ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПАСКАЛЬ» Практическая часть содержит описание подробных примеров выполнения заданий. Методические указания к выполнению лабораторных работ составлены в соответствии с государственным образовательным стандартом и предназначены для студентов инженерных специальностей. В целом, представленная на рецензию работа представляет интерес, соответствует требованиям ФГОС и учебной программы и рекомендуется в качестве учебного пособия. УДК 681.142.2 ББК 32.973.2 А-40 Редактор Иванченко Н.К. Компьютерная верстка: Куликова М.П. ©Составление: Северо-Кавказский горно-металлургический институт (государственный технологический университет) ©Акоева Е.Н. И др. ,2014 _____________________________________________________________________________________________ Подписано в печать _____________. Формат 60×84 1/16.Бумага офсетная. Гарнитура «Таймс». Печать на ризографе. Усл. пл.____. Тираж 70 экз. заказ №____________ «Северо-Кавказский горно-металлургический институт (государственный технологический университет)». Изд. «Терек». Подразделение оперативной полиграфии СКГМИ(ГТУ). 362021, г. Владикавказ, ул. Николаева,44 2 Лабораторная работа №1 Программирование алгоритмов линейной структуры. Составной оператор. Условный оператор. Цель: Научить студентов решать на языке TURBO PASCAL простейшие задачи линейной структуры. Научить студентов программировать на языке TURBO PASCAL составной и условный операторы. Программирование алгоритмов линейной структуры. I. Изучение правил определения, записи и использования в программах на языке TURBO PASCAL операторов ввода и вывода данных, а также арифметических выражений. Пример: 1.1. Вычислить значение величины v=y+p, где y tg 3 x 2 p ln( a x 2 ) sin 2 z2 ; a2 x2 x при заданных исходных значениях a, x, z. a 1.2. Алгоритм решения задачи Анализ постановки задачи показывает, что данный вычислительный процесс является линейным. Исходными данными здесь являются величины a, x, z, промежуточными – y, p, результирующая – величина v. Схема алгоритма приведена ниже. В блоке 2 осуществляется ввод исходных данных, в блоках 3…5 – расчет величин y, p, v. В блоке 6 выходная величина выводится на экран дисплея. 3 1 Начало 2 Ввод a, x, z 3 y tg 3 x 2 z2 a2 x2 4 p ln( a x 2 ) sin 2 x a 5 v=y+p 6 Вывод v 7 Конец 1.3. Текст программы. Program Example1; {Текст комментария} {блок определения переменных} var {определение a, x, z, y, p, v : real; переменных вещественного типа} BEGIN Write(‘Введите a, x, z’); Readln(a, x, z); {подсказка и ввод данных} y:=Sqr(Sin(x*x)/Cos(x*x))*Sin(x*x)/Cos(x*x)*Sqr(x)+ Sqrt(z*z/(a*a +x*x)); p:=Ln(a + x*x) + Sqr(Sin(x / a)); v:= y + p; Writeln (‘v=’, v:8:3); {вывод результатов} END. 1.4. Результаты решения задачи. 4 Сначала проведем тестирование задачи. С этой целью зададим исходные данные так, чтобы можно было легко рассчитать результаты. Если задать a=1, x=0.5,z=1, тогда получаем v=1.364. Программа отлажена, протестирована и готова к использованию. II. Самостоятельная работа Задание: Решить на Паскале задачу (в соответствии с вариантом). Примечание: e x в Turbo Pascale вычисляется с помощью оператора exp(x). Варианты Вычисляемое значение 1 вариант a=b+c 2 вариант b с2 d 2 3 вариант с d е 4 вариант d e f 2 2 Исходные Промежуточные значения b 3x 2 2e y 3x х у с 2х 2 d ; c= 5 х (3 у 1) / 2 2 х sin 2 y 3х 2 у х 2 у 8 х 3 2 cos y 2 х 5х у е 2 х ln y 2 ; f величины у=1.423 4х 3у х3 е у х=3.187 2 х tgу х 3 2е у х=4.318 ; d= ; е х=2.856 у=2.113 у=1.185 х 2 2 у cos 2 х х=5.231 у 2 2х 2 1 у=2.103 5 Составной оператор. Условный оператор. I. Изучение правил определения, записи и использования в программах на языке TURBO PASCAL составного и условного операторов 1.1. Кроме изученного ранее, использование операторов BEGIN и END позволяет представить группу любых операторов в виде одного, который называется составным оператором. Составной оператор воспринимается и обрабатывается Турбо Паскалем как обычный одиночный оператор. Пример составного оператора: BEGIN a:= c + d; y:= cos(x); k:= (a+y) / c; END; 1.2. Условный оператор IF имеет два основных формата - сокращенный и полный: 1) сокращенный формат: IF <условие> THEN <оператор>; 2) полный формат: IF <условие> THEN <оператор 1> ELSE <оператор 2>; В первом формате при выполнении условия (логического, булевского выражения) выполняется оператор, подчиненный оператору IF, далее следующие операторы программы. При невыполнении условия подчиненный оператор игнорируется. Во втором формате выполняется оператор 1, если условие=TRUE, и оператор 2 в противном случае. Кроме того, в операторе IF, как и в ряде других, допускается вложение любого оператора. Так, если во втором формате в качестве оператора 2 взять снова оператор IF, то получится следующий новый формат: 3) IF <условие 1> THEN <оператор 1> ELSE IF <условие 2> THEN <оператор 2> ELSE <оператор 3> Такое вложение можно делать многократно. Пример IF x>0.5 THEN a:=sin(x) ELSE a:=cos(x) 6 Если в качестве оператора 1 или 2 должно выполняться несколько операторов, то соответствующие группы операторов объединяются в составные. Пример: IF x>0 THEN Begin y:=sin(x); z:=cos(x) End ELSE Begin y:=exp(x); z:=2*x*x End; 1.3. Даны два целых числа a и b. Если a>=b, то оба числа возводятся в квадрат, иначе в исходные переменные записывается единица. Program Prim_4; VAR a, b:integer; {Заголовок программы} {описание переменных} BEGIN WRITE(‘Введите а, b’); READLN(a,b); {Подсказка и ввод данных} IF a>=b then BEGIN a:=a*a; b:=b*b End ELSE Begin a:=1;b:=1 End; WRITELN (‘а=’,a,’b=’,b) {Вывод результатов с подсказками} END. II. Самостоятельная работа Задание: Составить программу решения задачи в соответствии с вариантом. Варианты 1 вариант 2 вариант Задача Вывести на экран большее из двух чисел a, b, если a+b>0 и их разность и произведение в противном случае. Если a+b+c>0, то каждому числу присвоить 2, если a+b+c<0, то вывести их 7 сумму, иначе вывести ноль. Вычислить значение функции 3 вариант Х2 +5 при х > 3, У= Х-8 при х < 3, Х3-2Х+3 в противном случае. 4 вариант Найти наибольшее из трех заданных чисел. 8 Лабораторная работа №2 Программирование алгоритмов разветвляющейся структуры. Процедура WRITE. Процедура ввода. Цель: Научить студентов программировать на языке TURBO PASCAL задачи разветвляющейся структуры. Научить пользователя программировать на языке TURBO PASCAL процедуры WRITE и READ. Результат обучения: После успешного завершения занятия пользователь должен: уметь правильно анализировать постановку задачи; составлять алгоритм решения задачи; составлять программу решения задачи, вводить ее в память компьютера, уметь отлаживать и тестировать программу; решать задачу на компьютере, уметь анализировать результаты; уметь правильно определять и использовать в программах на языке TURBO PASCAL процедуры WRITE и READ. Часть I.Программирование алгоритмов разветвляющейся структуры I. Изучение правил анализа постановки задачи разветвляющейся структуры, ее алгоритмизации, программирования, решения и анализа результатов 1.1. Постановка задачи. Вычислить значение функции f=3k2–2p, где 2x2 ex 2x k , если 2 x 6, k p 2x k2 2 3 x 4 cos x , еслиx 6 , 9 при трех исходных значениях x, равных соответственно 1, 4, 7. 1.2. Алгоритм решения задачи. Сначала проведем анализ постановки задачи. Все переменные задачи разделим на три вида: исходные – x, промежуточные – k, p, результирующие – f. При этом вычисление величины k выполняется по разным формулам, в зависимости от того, какое значение принимает величина x. Составим схему вычисления величины k (рис.1): Решение _ для _ k 2x2 e x ...................k .......................k 3x 4 cos 2 x не _ определено 2x 2 6 Рис. 1. Схема вычисления k x Полученные выводы позволяют составить следующий вариант схемы алгоритма (рис.2). 1 Начало 2 Ввод x д а 4 x>2 x<=6 д а5 k 3 2x2 ex 2x нет не т6 k=3x+4 cos2x 7 . 2x k p k2 8 f =3 k2-2 p 9 Вывод x,f 1 1 Конец 1 Вывод x, 0 «Реш-е не опр.» 10 Рис. 2. Схема алгоритма Приведенная схема не является единственным вариантом, т. к. можно менять последовательность логических блоков. Однако можно рекомендовать проверку условий проводить в соответствии с постановкой: слева – направо и сверху – вниз. Так, в примере вначале проверяется условие x>2, затем x<=6. Условие x>6 уже проверять не нужно, т.к. это соответствует выходу «нет» блока 4. Возможны и другие варианты схемы алгоритма. Текст программы также будет иметь соответствующий схеме алгоритма вариант. 1.3. Текст программы. Program Prim_5; {Необходимые комментарии} var x,k,p,f: real; BEGIN Write(‘Введите x’); Readln(x); If x>2 Then Begin If x<=6 Then k:=(2*x*x+Exp(x))/(2*x) Else k:=3*x+4*Sqr(Cos(x)); p:=(2*x+k)/(к*к); f:=3*к*к-2*p; Writeln(‘x=’,x:8:3,’ f=’,f:8:3) end Else Writeln(‘x=’,x:8:3,’ Решение не определено для x<=2’); END. 1.4. Результаты решения задачи. Отладка (тестирование) задачи осуществляется проверкой результатов. Результаты решения задачи по заданным вариантам, они должны быть следующими: для x=1 Решение не определено; для x=4 f=351.206; для x=7 f=1624.826. 11 II. Самостоятельная работа Задание: Составить программу решения задачи в соответствии с вариантом. Варианты Задача Исходные (решается трижды по каждой из исходных величин) данные Рассчитать 1 вариант x2+2cosx, если 0<х<=2, K=3l-2m, где l= х2 ех если х>2. 2х m х ех , если х>8, 2 n l2 х х=1, 4, 8 Рассчитать 2 вариант L=m +n , где m= 2 2 m2 х . 3 х=2, 6, 10 x sinx, если х<=8. Рассчитать 3 вариант M=n+p, где n= х sin x , если х>5, p=n+x2. x х=-1, 3, 7 x2+lnx, если 0<х<=5. 4 вариант Рассчитать x+cosx, если x>=-2 N x+ex, если x<-2 p 2 q 2 ; p=2x2-1; q= х=-4, 1, 8 12 Часть II. Процедура WRITE. Процедура ввода. I. Изучение правил определения, записи и использования в программах на языке TURBO PASCAL процедур WRITE и READ. 1.1. Процедуры ввода и вывода служат для ввода исходных данных в оперативную память компьютера, либо в файл, а также вывода данных из памяти или из фала. В простейшем случае, когда работа осуществляется без использования файловых структур, указанные процедуры приобретают вид обычных операторов ввода и вывода на дисплей. Форматы операторов: READ(<список переменных>); READLN(<список переменных>); READLN; WRITE(<список выражений>); WRITELN(<список выражений>); WRITELN. Здесь: <список переменных>::=переменная [,переменная [,...]]; <список выражений>::=выражение [,выражение[,...]] Переменная и выражение могут быть числовыми, символьными, булевскими (только при выводе) или строковыми. Если оператор имеет окончание LN, то после его выполнения осуществляется переход на следующую строку. Пустой оператор WRITELN просто осуществляет переход к следующей строке. Пустой оператор READLN ожидает нажатия клавиши Enter. Примеры: READ(a,b,k12); WRITELN('Результат=',(a+b)/2,'c=',c:8:3); 13 где форма с:8:3 означает, что для переменной с на экране отводится 8 позиций, из них 3 на знаки после запятой. 1.2. Пример. Простейшая программа с вводом и выводом данных. Program Prim_6; Var a,b: integer; r,l: real; s:char; st:string[20]; BEGIN Write (‘Введите целые a,b’); Readln (a,b); Write (‘Введите вещественные r,l’); Readln (r,l); Write (‘Введите символ s’); Readln (s); Write (‘Введите строку st’); Readln (st); Writeln(st); Writeln(s,’a=’,a:5,s,’r=’,r:7:2,s); Writeln(st); Writeln(s,’b+’,b:5,s,’l=’,l:7,s); Writeln(st); END. При вводе следующих значений: a=546, b=1001, r=-84.32795, l=21.3E2, s=’:’ , st=’----------------------‘ на экран дисплея будет выведена информация в следующем виде: -------------------:a=546:r=-84.328: -------------------:b=1001:l=2.13E3: II. Самостоятельная работа Задание: 14 Составить программу с вводом данных и выводом результатов (без расчетных блоков). Варианты заданными форматами) a=235; 1 вариант Выходные данные (в виде таблицы с Входные данные b=342.7654321E02; c=105; d=’|’; f=’Результат=’; a; b; a2+b3; ac g=’----------------------‘ b=210-5; 2 вариант f=62; c=’|’; d=62.538497; g=3976; h=’----------‘; b; d; eb+d-b; tg g; f+g i=’Результат=’ c=-45.23876E-04;d=’---------‘ 3 вариант f=-3103; g=0.0543987E05; i=’|’; c; f; g; cf; ej j=25; k=’Результат=’ d=’-----------‘; 4 вариант f=-567.08327E-1 g=’Результат=’; h=-310-3; f; j; sin( h) i=3429; j=12.543847 15 Лабораторная работа №3 Программирование алгоритмов циклической структуры. Цель: Научить студентов программировать на языке TURBO PASCAL задачи циклической структуры. Результат обучения: После успешного завершения занятия студент должен: уметь правильно анализировать постановку задачи; составлять алгоритм решения задачи; составлять программу решения задачи, вводить ее в память компьютера, уметь отлаживать и тестировать программу; решать задачу на компьютере, уметь анализировать результаты. I. Изучение правил анализа постановки задачи циклической структуры, ее алгоритмизации, программирования, решения и анализа результатов 1.1. Постановка задачи Вычислить значение функции f = 3 k2 – 2 p, где 2x 2 e x 2x k , если 2 x 6, k p 2x k2 2 3 x 4 cos x , если x 6 , при изменении исходных значений х от хнач=1 до хкон=7 с шагом х=0.6. 1.2. Алгоритм решения задачи 16 Алгоритм представляет собой циклический вычислительный процесс с переменной цикла x, меняющейся от начального значения xнач до конечного xкон с шагом x. Телом цикла является совокупность блоков 3…10 схемы алгоритма задачи из занятия 5. Анализ постановки задачи в части этих блоков уже проведен. В рамках данной постановки задачи изменится разделение переменных на виды. К исходным данным отнесем величины x нач, xкон, x, (обозначим их как xn, xk, dx), к промежуточным – x, k, p, к результирующим – f. При организации циклического вычислительного процесса возможно использование одного из трех операторов циклов – FOR, WHILE и REPEAT. Рассмотрим все три возможных варианта. При использовании оператора FOR переменная цикла имеет целые начальное и конечное значение при шаге, равном 1, что не соответствует постановке задачи. Поэтому в данном случае можно использовать следующий прием. Вначале подсчитаем количество изменений переменной цикла по формуле: xk xn n Trunc 1 dx , где Trunc – функция получения целой части числа. Далее с помощью оператора FOR организуется циклический процесс, с другой переменной (например, i), меняющейся от 1 до n с шагом, равным 1. А изменение переменной x организуем внутри цикла по переменной i с помощью выражения x=x+dx. До начала циклов в переменную x запишем xn. Таким образом, организуется циклический вычислительный процесс с двумя переменными циклов – i и x, где i является задающей переменной цикла. При использовании операторов WHILE и REPEAT организуются циклы с одной переменной цикла – x. Ниже приводятся три варианта схемы алгоритмов, соответствующие использованию трех разных операторов циклов (рис.1., A., B., C.). При этом тело цикла (блоки 3…10) представлены обобщенно, в виде одного блока. 17 1 1 1 Начало Начало 2 2 Ввод xn, xk, dx Ввод xn, xk, dx Начало 2 Ввод xn, xk, dx 3 3 n=Trunc((xkxn)/ dx)+1); x=xn 3 x=xn 4 Repeat 4 4 While x<=xk Do i=1, n, 1 5 5 Тело цикла по x 5 Тело цикла по x 6 x=x+dx x=xn 6 x=x+dx Тело цикла по x 6 x=x+dx 7 7 7 Конец Until x>xk Конец Конец A. B. C. Рис. 5.3.2. Схемы алгоритмов циклической структуры 1.3. Текст программы А. С использованием оператора FOR Program Excample_9A; {Текст комментария} var i,n:integer; xn,xk,dx,x,k,p,f:real; Begin Write(‘Введите xn,xk,dx’); Readln(xn,xk,dx); x:=xn; n:=Trunc((xk-xn)/dx+1); Writeln(‘ РЕЗУЛЬТАТЫ РАСЧЕТА F(X)’); {Заголовок выдаваемой таблицы} 18 Writeln(‘ X F’); {Оглавление колонок для x и f} For i:=1 To n Do Begin If x>2 Then Begin If x<=6 Then k:=(2*x*x+Exp(x))/(2*x) Else k:=3*x+4*Sqr(Cos(x)); p:=(2*x+k)/(k*k); f:=3*k*k-2*p; Writeln(‘ ‘,x:8:3,’ ‘,f:8:3); {Вывод x и f в формате8:3} end Else Writeln(‘ ‘,x:8:3,’ ‘,’Решение не определено для x<=2’); x:=x+dx; end End. B. С использованием оператора WHILE Program Excample_9B; {Текст комментария} var i,n:integer; xn,xk,dx,x,k,p,f:real; Begin Write(‘Введите xn,xk,dx’); Readln(xn,xk,dx); x:=xn; Writeln(‘ РЕЗУЛЬТАТЫ РАСЧЕТА F(X)’); Writeln(‘ X F’); While x<=xk Do Begin If x>2 Then Begin If x<=6 Then k:=(2*x*x+Exp(x))/(2*x) Else k:=3*x+4*Sqr(Cos(x)); p:=(2*x+k)/(k*k); f:=3*k*k-2*p; Writeln(‘ ‘,x:8:3,’ ‘,f:8:3); end Else Writeln(‘ ‘,x:8:3,’ ‘,’Решение не определено для x<=2’); x:=x+dx; 19 end End. C. С использованием оператора REPEAT Program Excample_9C; {Текст комментария} var i,n:integer; xn,xk,dx,x,k,p,f:real; Begin Write(‘Введите xn,xk,dx’); Readln(xn,xk,dx); x:=xn; n:=Trunc((xk-xn)/dx+1); РЕЗУЛЬТАТЫ РАСЧЕТА F(X)’); Writeln(‘ Writeln(‘ X F’); Repeat If x>2 Then begin If x<=6 Then k:=(2*x*x+Exp(x))/(2*x) Else k:=3*x+4*Sqr(Cos(x)); p:=(2*x+k)/(k*k); f:=3*k*k-2*p; Writeln(‘ ‘,x:8:3,’ ‘,f:8:3); end Else Writeln(‘ ‘,x:8:3,’ ‘,’Решение не определено для x<=2’); x:=x+dx; end End. 1.4. Результаты отладки и решения задачи Отладка программ выполняется обычным образом, с учетом сообщений компилятора. Тестирование программы можно провести путем сравнения с результатами работы задачи 5, поскольку расчетные блоки у них совпадают. По всем трем вариантам получается следующая таблица: X 1.000 РЕЗУЛЬТАТЫ РАСЧЕТА F(X) F(X) X Решение не определено для 4.600 712.522 x<=2 F(X) 20 1.600 2.200 2.800 3.400 4.000 Решение не определено для 5.200 1536.225 x<=2 53.259 5.800 3524.064 98.039 6.400 1607.031 182.344 7.000 1624.826 351.206 Как видно из таблицы, результаты расчетов по задачам 5 и 9 для x=1,4 и 7 полностью совпадают. Таким образом, задача протестирована и может использоваться в практике. II. Самостоятельная работа Задание: Составить программу решения задачи в соответствии с вариантом. Варианты Задача (решается трижды по каждой из исходных величин) Рассчитать 1 вариант x2+2cosx, если х<=2, х2 ех если .х<2. 2х K=3l-2m, где l= m l2 х Исходные данные: xn, xk, dx 1, 8 , 0.7 Рассчитать 2 вариант L=m2+n2, где m= Рассчитать 3 вариант 4 вариант M=n+p, где n= х ех , если х>8, 2 x sinx, если х<=8. N p q ; p=2x -1; q= 2 m2 х . 3 х sin x , если х>5, p=n+x2. x x2+lnx, если х<=5. Рассчитать 2 n 2 x+cosx, если x>=-2 x+e , если x<-2 x 2, 10, 0.8 -1, 7, 0.8 -4, 8, 1.2 21 Лабораторная работа №4 Работа с двумерными массивами. Строковые типы. Операции над строками. Цель: Научить студентов программировать на языке TURBO PASCAL работу с двумерными массивами. Научить студентов программировать задачи, связанные с использованием данных строкового типа. Часть I. Работа с двумерными массивами. I. Изучение правил определения, записи и использования в программах на языке TURBO PASCAL двумерных массивов Двумерный массив – фиксированная совокупность упорядоченных однотипных компонент, имеющих два индекса. В общем случае описание одномерного массива имеет вид: TYPE Имя_типа=array[тип_индексов] of тип_компонент; . В частных случаях описание массива может задаваться в разделе VAR. Пример описания двумерного массива размерности 10х20 вещественного типа: VAR A: ARRAY[1..10, 1..20] OF REAL; . Пример: Для двумерного массива вещественных чисел вычислить произведение минимальных элементов каждой строки матрицы. На простейшем примере провести отладку и тестирование программы. Алгоритм решения задачи представляет собой совокупность укрупненных блоков, включающих в себя ввод двумерного массива, расчетную часть и вывод результатов. Текст программы (вариант) 22 приводится ниже. PROGRAM Prim_12; {Необходимые комментарии} Const mm=20;nn=20; {Максимальный размер массива} Var M,N,i,i,j:integer; P:real; {P – произведение минимальных элементов} X: array [1..mm,1..nn] of real; smin: array[1..mm] of real; {smin – одномерный массив, компонентами которого являются минимальные элементы каждой строки} BEGIN Write(‘Введите число строк и столбцов исходной матрицы m и n:’); Readln(m,n); For i:=1 to m do For j:=1 to n do begin Write(‘Введите элемент x[‘,i,’,’,j,’]:’); Readln(x[i,j]); end; P:=1; For i:=1 To m Do Begin Smin[i]:=x[i,1]; For j:=1 to n Do If x[i,j] < smin[i] Then smin[i]:=x[i,j]; P:=p*smin[i]; End; Writeln(‘Произведение мин. элементов строк равно ‘,P:8:3) END. II. Самостоятельная работа Задание: Составить программу решения задачи в соответствии с вариантом. 23 Варианты 1 вариант 2 вариант 3 вариант 4 вариант Задача Вычислить сумму и количество положительных элементов каждого столбца матрицы вещественных чисел. Вычислить сумму элементов матрицы целых чисел, расположенных выше главной диагонали, и кратных 5. Найти наибольший элемент и его координаты в каждой строке матрицы действительных чисел. Для матрицы действительных чисел вычислить сумму и количество элементов в диапазоне [2,5]. Часть II. Строковые типы. Операции над строками. I. Изучение правил программирования задач, связанных с использованием данных строкового типа Данные строкового типа (String) – это последовательность символов переменной длины. Строки можно вводить, выводить, присваивать, сливать и сравнивать. В простейшем случае, когда не используются процедуры и функции, операции над строками можно производить, интерпретируя строку, как одномерный массив. 1.1. Пример: Даны два различных слова как две строки. Вывести на экран эти слова в алфавитном порядке. PROGRAM PRIM_13; {} Var t1,t2:string; BEGIN Write(‘Введите первое слово’);Readln(t1); Write(‘Введите второе слово’);Readln(t2); If t1>t2 Then Writeln (t1,’ ‘,t2) Else Writeln (t2,’ ‘,t1); End. 24 II. Самостоятельная работа Задание: Составить программу решения задачи в соответствии с вариантом. Варианты 1 вариант 2 вариант 3 вариант 4 вариант Задача Напечатать в алфавитном порядке три разных, введенных с клавиатуры, слова. Дан текст из 40 символов. Напечатать только строчные буквы, входящие в этот текст. Дан текст из строчных русских букв, за которым следует точка. Напечатать этот текст заглавными русскими буквами. Дан текст, состоящий из слов, разделенных пробелами. В конце текста точка. Напечатать слова в обратном порядке. 25 Лабораторная работа №5 Стандартные процедуры и функции для данных строкового типа. Записные типы данных. Оператор присоединения With DO. Цель: Научить пользователя программировать на языке TURBO PASCAL действия со строковыми типами данных с использованием стандартных процедур и функций. Научить пользователя программировать задачи, связанные с использованием записных данных. Результат обучения: После успешного завершения занятия пользователь должен: уметь правильно определять и использовать в программах на языке TURBO PASCAL строковые типы данных. знать и уметь правильно использовать стандартные процедуры и функции для строковых данных. уметь решать задачи, связанные с использованием записных данных. Часть I. Стандартные процедуры и функции для данных строкового типа. I. Изучение правил определения, записи и использования в программах на языке TURBO PASCAL стандартных функций и процедур для строковых типов данных. 1.1. Данные строкового типа (String) – это последовательность символов переменной длины. Строки можно вводить, выводить, присваивать, сливать и сравнивать. Для выполнения операций над строками имеются специальные функции и процедуры. В простейшем случае, когда не используются процедуры и функции, операции над строками можно производить, интерпретируя строку, как одномерный массив. 26 1.2. Функции: Length(s) – определение длины строки; Upcase(i) – преобразование символа из строчного в прописной; Copy(s,k1,k2) – копирование фрагмента одной строки в другую; Pos(s,ds) – поиск определенного фрагмента в строке. 1.3. Процедуры: Insert(ds,s,k) и Delete(s,k1,k2) – вставка и удаление фрагмента строки; Str(k,s) – преобразование числа в строку символов; Val(s,k1,k2) – преобразование строки символов в числовое представление. 1.4. Пример: В заданном предложении найти самое длинное слово и его порядковый номер. Решение задачи построим следующим образом. Введя предложение, находим его длину. Далее, определив позицию первого пробела, находим длину первого слова, задав его как максимальное. После этого из предложения удаляем первое слово вместе с пробелом, и повторяем процедуру поиска первого слова в новом тексте, сравнивая его длину с предыдущим. Этот процесс повторяется до тех пор, пока в тексте не останется ни одного слова. program prim_13; label 10; var t,q:string; p,s,max,k,m,d:integer; begin write('Введите строку: '); readln(t); t:=t+' '; 27 s:=0; k:=0; m:=length(t); p:=pos(' ',t); max:=p-1; k:=1; d:=k; 10: delete(t,1,p); s:=s+p; if s<m then begin p:=pos(' ',t); k:=k+1; if p-1>max then begin max:=p-1; d:=k; end; goto 10; end else write('Номер самого длинного слова: ',d,' его длина ',max); end. II. Самостоятельная работа Задание: Составить программу решения задачи в соответствии с вариантом. Варианты 1 вариант 2 вариант Задача Проверить, имеется ли в заданном тексте баланс открывающих и закрывающих скобок. Отредактировать предложение, удаляя из него лишние пробелы, оставляя только по одному пробелу между словами. 28 Для каждого слова заданного предложения указать долю согласных. 3 вариант В заданном предложении указать слово, в котором доля гласных (а,е,и,о) 4 вариант максимальна. Часть II. Записные типа данных. Оператор присоединения With DO. I. Изучение правил программирования задач, связанных с использованием записных данных Запись- структура данных, состоящая из заранее определенного количества в общем случае различных компонент, называемых полями. Для организации доступа к отдельным компонентам записи используются имена полей. Общий вид записи: V=Record p1;t1; p2;t2; ........ pn;tn End; где V- имя записи, pi (i=1,2,...,n)-имя поля, ti- описание типа. Например, Type DateRec = Record Yar : Word; Month: 1 .. 12; Day: 1 .. 31; End; . Запись может быть объявлена и в разделе VAR. Оператор WHIT используется для упрощения работы с записями. Его структура: With <запись> Do <оператор>. 29 1.1. Пример: Составить список сотрудников (не более 50) по следующим параметрам: Учетный номер; Фамилия, имя, отчество; Год рождения; Стаж работы; Зарплата. Выдать на экран данные тех сотрудников, у которых стаж работы составляет не менее 10 лет. 1.2. Текст программы: Program Spisok_otd_15; Const nn=50; Type Spisok=Record K:array [1..nn] of integer; Fio:array[1..nn] of string[30]; God_rogd, stag_rab, zarpl:array[1..nn] of integer; end; Var a:spisok; i,n:integer; BEGIN Write('Число сотрудников '); Readln(n); For i:=1 to n do Begin Write('Номер сотрудника ');Readln(a.k[i]); Write('Ф.И.О. ');Readln(a.fio[i]); Write('Год рождения ');Readln(a.god_rogd[i]); Write('Стаж ');Readln(a.stag_rab[i]); Write('Зарплата ');Readln(a.zarpl[i]); End; For i:=1 to n do With a do If a.stag_rab[i]>=10 then writeln(k[i], fio[i], god_rogd[i], stag_rab[i], zarpl[i]); END. 30 II. Самостоятельная работа Варианты Наименование полей Решаемая задача ФИО; 1 вариант Номер группы; Выдать список студентов, получающих Курс; стипендию. Есть ли оценки «3». ФИО(Глава семьи); 2 вариант Улица; Выдать список семей, получающих пособие № дома, квартиры; для многодетных семей (более двух детей). Количество детей. Станция отправления Э/П; 3 вариант Время отправления; Станция назначения; Выбрать самый краткий маршрут электропоезда (в пределах суток). Время прибытия. Наименование товара; 4 вариант Стоимость товара; Количество товара; № полки. Вывести на экран товары, суммарная стоимость которых максимальна и минимальна. 31 Лабораторная работа №6 Вариантные записи. Множественные типы данных. Цель: Научить студентов программировать задачи, связанные с связанные с использованием вариантных записных данных. Научить пользователя программировать задачи, использованием множественных типов данных. Результат обучения: После успешного завершения занятия пользователь должен: уметь решать задачи, связанные с использованием вариантных записных данных. уметь решать задачи, связанные с использованием множественных типов данных. Часть I. Вариантные записи. I. Изучение правил программирования задач, связанных с использованием вариантных записных данных Вариантный записной тип – это записной тип, содержащий наряду с постоянной частью несколько вариантов структуры записи, определяющих конкретные особенности объектов записных данных. Структура записи, содержащей варианты, в общем представлении имеет следующий вид: Z=Record pi;ti; { Постоянная часть: i=1,2,…,N} Case per: type of Kj:(vjk:qjk); End; {Вариантная часть: J=1,2,… M} {k=1,2,…Sj; } где Z- имя записи, pi (i=1,2,...,N) - имя поля постоянной части, tiописание типа; per – переменная выбора – произвольный идентификатор; kj – 32 ключи (возможные значения переменной выбора - варианты); vjk, qjk – вариантные поля и типы, M – количество вариантов, Sj – количество полей j -го варианта. 1.1. Пример: В записной массив вводятся виды и параметры двух фигур: квадрата с одной стороной и параллелограмма с двумя сторонами. Вывести на экран порядковые номера тех квадратов, стороны у которых меньше 10. 1.2. Текст программы: program Prim15_2; type figure=(square, paral); param=record l:integer; case fig: figure of square:(side:real); paral:(side1,side2:real); end; var a:array [1..50] of param; i,m,n:integer; begin write('Введите количество квадратов: '); readln(m); write('Введите количество параллелограммов: '); readln(n); for i:=1 to m do begin a[i].fig:=square; write('Введите номер квадрата '); readln(a[i].l); write('Введите сторону квадрата '); readln(a[i].side); end; 33 for i:=m+1 to m+n do begin a[i].fig:=paral; write('Введите номер параллелограмма '); readln(a[i].l); write('Введите первую сторону параллелограмма '); readln(a[i].side1); write('Введите вторую сторону параллелограмма '); readln(a[i].side2); end; for i:=1 to n+m do if (a[i].fig=square)and(a[i].side<10) then writeln(a[i].l,a[i].side:5:2); end. II. Самостоятельная работа Задание: Составить программу решения задачи в соответствии с вариантом. 34 Варианты Наименование полей Решаемая задача Улица; № дома, квартиры; 1 вариант Полы в квартире: 1) паркет (дуб, бук, сосна); 2) Линолеум (утепленный, не утепленный). Вывести на экран список квартир с дубовым или буковым паркетным полом. ФИО; Номер группы; Курс; 2 вариант Хобби: 1) (гимнастика, Вывести на экран список студентов, спорт каратэ, борьба); 2)моделирование занимающихся каратэ. (авиация, судостроение). Наименование товара; Количество товара; Стоимость товара; 3 вариант Вывести Принадлежность отечественный или частное товара: на экран 1) отечественного товар государственного (государственное производства, суммарная стоимость предприятие); 2) которого максимальна.. импортный (страна). Время отправления; Станция назначения; Время прибытия; 4 вариант Вид транспорта: 1) поезд дальнего следования (купе, плацкарта, Вывести на экран самый краткий и комфортабельный маршрут. место для сидения); 2) автобус (экспресс, местного сообщения) Часть II.Множественные типы данных. I. Изучение правил программирования задач, связанных с использованием множественных типов данных Множество – ограниченный упорядоченный набор различных элементов одного (базового) типа. К множеству применимы операции определения принадлежности элемента множеству, сравнения множеств, а также объединения, пересечения и вычитания множеств. 35 Пример: 1.1. Составить следующую программу. Задано множество целых чисел. Выделить из него все делители, и исключить из множества те числа, которые кратны делителю и не равны ему. Program Prim_16; var m:set of byte; i,k,n:integer; begin write('Введите размер промежутка <255:'); readln(n); m:=[2..n]; for i:=2 to n do for k:=2 to n do if (k mod i=0) and (k<>i) then begin writeln(i); break; end; end. II. Самостоятельная работа Задание: Составить программу решения задачи в соответствии с вариантом. 36 Варианты Задача Ввести в качестве множества имена всех дней недели. При вводе дня 1 вариант недели выдавать сообщение True, если день рабочий, и False в противном случае. Ввести в качестве множества имена всех дней недели. Из этого 2 вариант множества удалить выходные дни и напечатать элементы полученного множества. 3 вариант 4 вариант В возрастающем порядке напечатать все целые числа из диапазона 1..10000, представимые в виде n2 + m2, где m, n 0. Дан текст из строчных латинских букв, в конце точка. Напечатать первые вхождения букв в текст, сохраняя их исходный порядок. 37 Методические указания к выполнению лабораторных работ: «ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПАСКАЛЬ» Составители: Е.Н. Акоева, Л.Г. Итазова Владикавказ 2014г. 38