Министерство образования МО Педагогическая академия Итоговая работа «Знакомство с системой программирования» по курсу «Методика преподавания алгоритмизации и программирования в курсе информатики в средней школе» Выполнил(а) Павлова Н.Н. Проверил доцент кафедры ИКТ К.П.Н. Кащей В.В. 2011 г. Тема: «Первое знакомство с системой программирования» Общий вид программы. Программа начинается с заголовка, имеющего следующий вид: Program <имя программы>; За ним идут разделы описаний, в которых должны быть описаны все идентификаторы (константы, переменные, типы, процедуры, функции, метки), которые будут использованы в программе. После разделов описаний идет раздел операторов, который начинается со служебного слова Begin и заканчивается служебным словом End. В этом разделе задаются действия над объектами программы, объявленными в разделе описаний. Операторы в этом разделе отделяются друг от друга точкой с запятой. После последнего слова End ставится точка. Разбор примера Program Example_l; Var a, b, rez: Integer; Begin Writeln ('Введите два числа через пробел'); Readln (a,b); rez:=a*b; Writeln ('Их произведение равно ', rez); Writeln ('Нажмите <Enter>'); Readln; End. ГЛАВНОЕ МЕНЮ ОСНОВНОЕ, ИЛИ РАБОЧЕЕ, ОКНО Строка помощи, в ней указываются назначения основных функциональных клавиш Пояснения к программе Имя этой программы Example_l, в имени программы не должно быть пробелов, оно должно начинаться с буквы, состоять только из латинских букв, цифр и некоторых специальных символов (в данном примере использован символ "подчеркивание"). Из разделов описаний имеется лишь один - раздел описания переменных. Он начинается со служебного слова Var, после которого идет последовательность объявлений переменных, разделенных точкой с запятой. В каждом объявлении перечисляются через запятую имена переменных одного типа, после чего ставится двоеточие и указывается тип переменных. В данном примере описаны три переменные: все они (а, b и rez) имеют целый тип (Integer), то есть значения переменных этого типа - целые числа. После раздела описаний переменных идет раздел операторов, начинающийся со служебного слова Begin, после которого расположены операторы языка. Первый оператор - это Writeln ('текст') - записать (вывести) на экран текст, заключенный между апострофами, ln добавляется в конце этого оператора для того, чтобы курсор автоматически переходил в начало следующей строки. Следующий оператор - Readln (а, b) - читать данные с клавиатуры. В данном случае необходимо ввести два целых числа через пробел, тогда переменной а присваивается значение, равное первому введенному числу, а переменной b присваивается значение, равное второму введенному числу. Например, вы ввели числа 12 и 45, тогда, а=12, а b =45. В конце этого оператора также можно ставить ln. После этих двух операторов стоит оператор присваивания: rez:=a*b; (:= - это знак присваивания в языке Паскаль). При выполнении этого оператора переменная rez получит значение, равное произведению числа а на число b. Так как в результате умножения двух целых чисел получается целое число, то переменная rez описана как целая (Integer). Следующий оператор - это снова оператор вывода Writeln (' текст', rez) - он выведет на экран текст, заключенный между апострофами, а за ним значение переменной rez. Затем следующий оператор - Writeln - выведет на экран сообщение: Нажмите Enter, а оператор Readln будет ожидать нажатия указанной клавиши. В конце раздела операторов стоит служебное слово End, после которого ставится точка. Запуск программы Для того чтобы запустить программу, необходимо выйти в главное меню (например, посредством клавиши F10) и выбрать режим Run. После запуска программы на экране появится сообщение: Введите два целых числа через пробел Курсор окажется в следующей строке. Затем надо ввести два целых числа через пробел и нажать клавишу Enter. Появится сообщение: Их произведение равно... Вместо точек будет напечатано значение переменной rez, то есть число, равное произведению первого введенного числа на второе. Это сообщение останется на экране до тех пор, пока не будет нажата клавиша Enter. Сохранение программы Для того чтобы сохранить программу, необходимо выйти в главное меню и выбрать пункт File. Затем в появившемся вертикальном меню надо выбрать пункт Save as... Появится окно, в котором можно ввести имя файла. Например, с:\priml_l.pas; здесь с: - это название диска, "\" - каталог (корневой), priml_1- имя файла (оно может содержать не более 8 символов), pas — расширение, указывающее, что файл содержит программу, написанную на языке Паскаль. Примечание. Список символов, которые нельзя употреблять в именах файлов: * = + [ ] \ | ; : , . < > / ?. Также не следует использовать в именах файлов символ пробела и буквы русского алфавита. После того как имя файла набрано, нажмите клавишу Enter. Примечание. Для быстрого сохранения файла можно воспользоваться командами Save или Save all меню File. Задания 1.Измените программу таким образом, чтобы в ней вычислялась сумма двух чисел. 2.Измените программу таким образом, чтобы в ней вычислялась сумма четырех чисел. 3.Напишите программу для вычисления значения выражения (а+(d-12)*3)*(с5*к); значения переменных a,d,с и k вводятся с клавиатуры. Выход из системы программирования Турбо Паскаль Для того чтобы закончить работу, необходимо выбрать пункт Quit в меню File или просто набрать комбинацию клавиш Alt+х. Тема «Простейшие линейные программы» Вопросы для повторения 1. С чего начинается программа? 2. Как описываются переменные? 3. С чего начинается основная программа? 4. Как записывается оператор вывода? 5. Как записывается оператор ввода? 6. Как записывается оператор присваивания? 7. Чем заканчивается программа? 8. Как сохранить программу на диске? Стандартные функции и процедуры. Арифметические функции языка Паскаль: Abs(x:real/integer):real/integer - абсолютное значение аргумента х; ArcTan(x:real):real - арктангенс х, выраженный в радианах; Cos(x:real):real - косинус х, х задается в радианах; Sin(x:real):real - синус х, х задается в радианах; Sqr(x:real/integer):real/integer - квадрат х; Sqrt(x:real):real - квадратный корень из х; Exp(x:real):reaL – ех (экспонента); Ln(x:real):real - натуральный логарифм х; Pi:real - число π (3,1415926535897932385...); Frac(x:real):real - дробная часть x; Int(x:real):real - выделяет целую часть x без преобразования типа; Random(x:word):word - генерирует случайное число С в пределах 0 ≤ С < х; Random:real - генерирует случайное число С в пределах 0,0≤С<1,0. Если перед использованием функции Random применять процедуру Randomize (которая служит для изменения базы случайных чисел, то есть начального значения для их вычисления), то псевдослучайная последовательность функции Random не будет изменяться. Функции преобразования типов: Round(x:real):longInt - округляет значение х до ближайшего целого числа; Trunc(x:real):longInt - выделяет целую часть вещественного числа и преобразует ее к типу longInt. Скалярные функции и процедуры: Odd(x:Integer):boolean - возвращает true, если х нечетно, и false, если х четно; Pred(x:<порядковый_тип>):<порядковый_тип> - возвращает элемент, предшествующий х в списке значений данного типа, тип результата совпадает с типом х (если перед х не существует элементов, возникает программное прерывание); Succ(х:<порядковый_тип>):<порядковый_тип> - возвращает значение, следующее за х в списке значений данного типа, тип результата совпадает с типом параметра (если после х нет значений, то возникает программное прерывание); Inc(х:<порядковый_тип>[;n:longInt]) – увеличивает значение х на n, при отсутствии необязательного параметра n значение х увеличивается на единицу; Dес(х:<порядковый_тип>[;n:longInt]) - уменьшает значение х на n, при отсутствии необязательного параметра n значение х уменьшается на единицу. 1 задание. Запишите по правилам языка Паскаль следующие математиче- ские выражения: а) 2a 0,5sin(x y) ; 0,2c - 1n(x - y) б) 3 a 1 ; в) sin 2 (x y) cos x ; x y 4e( x y ) г)sin2x+cosx2; д) ax c ln( x c 2 ) е) e ; ж)log56; ; з)arcsinl5; Решение а)(2*а+sqrt(0.5*sin(x+у)))/0.2*с-ln(х-у). б)ехр(1/3*ln(а+1)). в)(sqr(sin(х+y))+cos(х))/(х+у*у*у*у*ехр(х-у)). г)sqr(sin(х))+cos(sqr(х)). д)sqrt(abs(-а*х+с))/ln(х+sqr(с)). е)ехр(ехр(1)*ln(pi)). ж)ln(6)/ln(5). з)arctan(15/sqrt(1-sqr(15))). 2 задание. Найти площадь кольца, внутренний радиус которого равен 20, а внешний - заданному числу r > 15. Решение Program Example_s; const radius=20; Var s,r,n:real: Begin Write('Введите значение r (r>15) -> '); Readln(n); s:=pi*(r-radius)*(radius+r); Writeln(s); Readln End. 3 задание. Треугольник задан координатами своих вершин. Найти периметр и площадь треугольника. Решение Program Example_p; var xl,x2,x3,yl,y2,y3,a,b,c,p,s:real; Begin Writeln('Введите координаты 1-й вершины '); Readln(xl,yl); Writeln('Введите координаты 2-й вершины '); Readln(x2,y2); Writeln('Введите координаты 3-й вершины '); Readln(х3,у3); a:=sqrt(sqr(x2-xl)+sqr(y2-yl)); b:=sqrt(sqr(x3-x2)+sqr(y3-y2)); c:=sqrt(sqr(x3-xl)+sqr(y3-yl)); p:=a+b+c; s:=sqrt((p/2)*((p/2)-a)*((p/2)-b)*((p/2)-c)); Writeln('Периметр = ',р:6:4,'Площадь',s:6:4); Readln End. 4 задание. Найти сумму и произведение трех введенных с клавиатуры целых чисел. Решение Program Example_sbm_pr; var a,b,c,sum,pr:integer; Begin Writeln('Введите 3 целых числа через пробел'); Readln(a,b,c); sum:=0; pr:=0; sum:=a+b+c; pr:=a*b*c; write('Сумма = ',sum,', произведение = ,pr); Readln End. 5 задание. Вычислить расстояние между двумя точками с координатами (х1,у1) и (х2,у2). Решение … var xl,yl,x2,y2,d:real; Btgin Write('Введите координаты 1-й точки (xl,yl) '); Readln(xl,yl); Write('Введите координаты 2-й точки (х2,у2) '); Readln(x2,y2); d:=sqrt((x2-xl)*(x2-xl)+(y2-yl)*(y2-yl)); Write('Расстояние между точками = ',d:6:4); Readln End. 6 задание. Три сопротивления Rl, R2, R3 соединены параллельно. Найти сопротивление соединения. Решение … var rl,r2,r3,sop:real; Begin Write('Введите Rl, R2, RЗ через пробел - '); Readln(Rl,R2,R3); sop:=l/(l/Rl+l/R2+l/R3); Write('Сопротивление = ',sop:6:4); Readln End. 7 задание. Смешано V1 литров воды температуры t1 с V2 литрами воды температуры t2. Найти объем и температуру образовавшейся смеси. Решение … var vl,v2,tl,t2,v,t:real; Begin Write('Введите Vl и Tl через пробел - '); Readln(Vl,Tl); Write('Введите V2 и T2 через пробел - '); Readln(V2,T2); V:=Vl+V2; Writeln('Объем смеси = ',V:4:2); T:=(Tl*Vl+T2*V2)/V; Write('Температура смеси = ',t:4:2); Readln End. 8 задание. Написать программу округления числа с любой точностью. Число и точность округления вводятся с клавиатуры. Решение … var n,a:real; Begin Write('Введите значение числа n - '); Readln(n); Write('Введите точность округления - '); Readln(a); n:=n/a; n:=round(n); n:=n*а; Writeln('Результат округления - ',n:7:5); End. 9 задание. Перевести градусы в радианы. Градусная мера задается в формате: deg (градусы) min (минуты) sec (секунды). Пусть х - это градусы, а у - число радиан. Тогда из тождества 180 х х у у 180 формула полного числа градусов запишется так: deg=deg+min/60+sec/3600. Решение … var deg,min,sec:integer; rad:real; Begin Write('Введите значение в градусной мере deg min sec - '); Readln(deg,min,sec); rad:=pi/180*(deg+min/60+sec/3600); Write('Это соответствует ',rad:5:3,' радиан'); End. Задания 1. Составить программу вывода на экран введенного с клавиатуры числа. Выводимому числу должно предшествовать сообщение «Вы ввели число...». 2. Вывести на экран число π. 3. Вывести на экран числа 50 и 10 одно под другим. 4. Составить программу, выводящую «столбиком» любые четыре числа. Тема: «Условный оператор» В языке Паскаль условие - это выражение логического тип (boolean), которое может принимать одно из двух значений: истина (true) или ложь (false). Условная инструкция позволяет проверить заданное условие и в зависимости от результатов выполнить то или иное действие, то есть условная инструкция - средство ветвления вычислительного процесса. Формат записи: if <условие> then <инструкция_1> else <инструкция_2>; Здесь if, then, else - зарезервированные слова (если, то, иначе), <условие> - выражение логического типа, <инструкция_1> и <инструкция_2> - любые инструкции языка Паскаль. Выполняется инструкция if следующим образом: 1. Вычисляется значение <условие>. 2. Если условие истинно (true), то выполняются инструкции, следующие за словом then и находящиеся между словами begin и end. 3. Иначе выполняются инструкции, следующие за словом else. После инструкций, расположенных перед ключевым словом else, символ точки с запятой не ставится! Если действие должно быть выполнено только при выполнении определенного условия и пропущено в случае его не выполнения, то инструкция if записывается без инструкции else: if <условие> then <инструкция_1>; При делении одного целого числа на другое не всегда получается целое число, тогда лучше использовать операции: div – целая часть от деления; mod – остаток от деления. Примеры 1 задание. Даны три стороны треугольника а, b, с. Вычислить его площадь. Решение … vаr a,b,c,p,s:real; Begin Write('Введите стороны треугольника: '); Readln(a); Readln(b); Readln(c); if (a>0) and (b>0) and (c>0) and (a+b>c) and (b+c>a) and (a+c>b) then Begin p:=(a+b+c)/2; s:=sqrt(p*(p-a)*(p-b)*(p-c)); Writeln(s) End else Writeln('Данные числа не являются длинами сторон треугольника!'); End. 2 задание. Даны три вещественных числа х, у, z. Найти максимальное из них. Решение … var x,y,z,max: real; Begin Write('Введите числа x, у, z через пробел '); Readln(x,y,z); if x>y then max:=x else max:=y; if z>max then max:=z; Writeln('Максимальное из них ',max); End. 3 задание. Даны вещественные положительные числа х, у, z. Выяснить, существует ли треугольник с длинами сторон х, у, z, и если существует, то определить его вид по углам. Решение … var x,y,z,max,d:real; Begin Write('Введите длины сторон треугольника через пробел'); Read(x,y,z); if х>у then max:=x else max:=y; if z>max then max:=z; Write('Треугольник '); if 2*max<x+y+z then begin d:=sqr(x)+sqr(y)+sqr(z)-2*sqr(max); if d>0 then Write('Остроугольный'); if d=0 then Write('Прямоугольный'); if d<0 then Write('Тупоугольный') end else Write('He существует!'); End. 4 задание. Даны три вещественных числа х, у, z. Вычислить значения выражений х+у+z и хуz и вывести максимальное из них. Решение … {$N+} 'Осуществляется генерация кода вычисления с плавающей точкой всех вычислений типа real с помощью сопроцессора математических вычислений var x,y,z,s,p: extended; 'Вещественный тип, диапазон:10-4932…10+4932 Begin Write('Введите числа x, у, z через пробел '); Readln(x,y,z); s:=x+y+z; p:=x*y*z; if s>p then Write(s,' > ',p) else if s<p then Write(p,' > ',s) else Write(s,' = ',p); End. 5 задание. В каждый подарочный набор входят 1 ручка, 2 линейки и 4 тетради. Имеется а линеек, b тетрадей, с ручек. Сколько всего получится подарочных наборов? Решение … var a,b,c: shortint; 'Целый тип, диапазон: -128…127 Begin Write('Введите количество линеек, тетрадей и ручек через пробел '); Readln(a,b,c); а:=а div 2; b:=b div 4; if a>b then a:=b; if a>c then a:=c; write('Всего наборов ',a); End. 6 задание. Дано вещественное число а. Вычислить f(а), если 0 при x≤0, f(x)= x2-x при 0<x≤1, x2-sinπx2 при других х. Решение … var x,f:real; Begin Write('Введите вещественное число '); Readln(x); if х<=0 then f:=0 else if x<=l then f:=sqr(x)-x else f:=sqr(x)-sin(pi*x*x); Write('Значение функции f(x), при x = ',x,' равно ',f); End. 7 задание. Дано вещественное число х. Получить целую и дробную части числа х. Решение … var х,у:real; Begin Write('Введите число х (вещественное) '); Readln(x); if (х>0) or (frac(x)=0) then y:=int(x) else y:=int(x)-l; Writeln('[ ,x,' ] = ',у); {целая часть} Writeln('{ ',x,' } = ',x-y); {дробная часть} End. 8 задание. Дано вещественное число а. Вычислить f(а), где функция f - это периодическая функция с периодом 1,5, совпадающая на отрезке [0; 1,5] с функцией х3 - 2,25x. Решение … {$N+} var а,х: extended; Begin Write('Введите число а (вещественное)'); Readln(a); x:=a-int(a/1.5)*1.5; if х<0 then х:=х+1.5; Write('f(',a,') = ',х*(х*х-2.25)); End. 9 задание. Даны вещественные числа х и у. Если х и у отрицательны, то каждое значение заменить его модулем; если отрицательно только одно из них, то оба значения увеличить на 0,5; если оба значения неотрицательны и ни одно из них не принадлежит отрезку [0,5; 2], то оба значения уменьшить в 10 раз; в остальных случаях х и у оставить без изменения. Решение … var х,у: extended; Begin Write('Введите числа х, у (вещественные)'); Readln(x,y); if (х<0) and (у<0) then begin х:=-х; y:=y end else if not((x>=0.5) and (x<=2)) and not((y>=0.5) and (y<=2)) then begin x:=x/10; y:=y/10 end; Write('После преобразований: x = ',x,' у = ',y); End. 10 задание. С клавиатуры вводятся две даты. Выдать собщение «правильно», если первая введенная дата предшествует второй, и «неправильно», если наоборот. Решение … var dnl,dn2: 1..31; mesl,mes2: 1..12; godl,god2: 1900..2100; Begin Write('Введите первую дату (день, месяц, год)'); Readln(dnl,mesl,godl); Write('Введите вторую дату (день, месяц, год)'); Readln(dn2,mes2,god2); if (((dnl<dn2) or (mesl<mes2)) and (godl=god2)) or (godl<god2) then Writeln('ПРАВИЛЬНО') else Writeln('НЕПРАВИЛЬНО'); End. 11 задание. Решить квадратное уравнение вида ах + bх + с = 0. Решение … var a,b,c,d,xl,x2:real; Begin Write('Введите a,b,c '); Readln(a,b,c); d:=b*b-4*a*c; if d>0 then begin xl:=(-b+sqrt(d))/(2*a); x2:=(-b-sqrt(d))/(2*a); Writeln('xl = ',xl,' x2 = ',x2) end else if d=0 then begin xl:=-b/2*a; Writeln('x = ',xl) End Else Writeln('Heт корней!'); End. Условий, по которым организуется ветвления в программе, может быть не два, а больше. Для множественного выбора служит инструкция case. В общем виде она записывается следующим образом: case <выражение> of <список_1>: begin {инструкции 1} end; <список_2>: begin {инструкции 2} end; … <список_n>: begin {инструкции n} end else begin {инструкции} end; end; Здесь <выражение> - это выражение, от значения которого зависит дальнейший ход выполнения программы (то есть последовательность инструкций, которая должна быть выполнена), <список> - список констант, разделенных запятыми. Если константа представляет диапазон чисел, то вместо списка можно указать первую и последнюю константы диапазона, разделив их двумя точками. Пример case a of 1,5,7..10: c:=b+a; 2..4,20: c:=b-a; 20..100: c:=b/a end; Выполняется инструкция case следующим образом: 1. Вычисляется значение выражения, следующего за словом case. 2. Полученные значения последовательно сравниваются с константами из списков констант перед двоеточием. После этого возможен один из следующих вариантов действий: - если значение выражения совпадает с константой из списка, то выполняется соответствующая этому списку последовательность инструкций и выполнение инструкции case завершается; - если значение выражения не совпадает ни с одной константой из всех списков, то выполняется последовательность инструкций, следующая за словом else, и выполнение инструкции case завершается; - если блока else в инструкции case нет, то её выполнение завершается. 1 задание. Написать программу для вывода дней недели. Решение … var number:integer; Begin Write('Введите номер дня недели '); Rreadln(number); case number of 1: Writeln('понедельник'); 2: Writeln('вторник'); 3: Writeln('среда'); 4: Writeln('четверг'); 5: Writeln('пятница'); 6: Writeln('суббота'); 7: Writeln('воскресенье'); End End. 2 задание. Даны три вещественных числа. Выбрать из них те, которые принадлежат интервалу (1,3). Решение … var a,b,c:real; q:0..3; Begin Write('Введите числа а, b, с (вещественные)'); Readln(a,b,c); q:=0; if (а>1) and (а<3) then begin Write(a); q:=q+1 End; if (b>l) and (b<3) then begin Write(b); q:=q+1 end; if (c>1) and (c<3) then begin Write(c); q:=q+1 end; case q of 0: Writeln('Hи одно из введенных чисел не лежит в интервале (1.3)'); 1: Writeln('Указанное число в интервале (1.3)'); 2..3: Writeln('Указанные числа в интервале (1.3)') End End. 3 задание. Дано натуральное число п < 101, определяющее возраст человека (в годах). Дать для этого числа подпись «год», «года» или «лет». Например, 1 год, 23 года,45 лет и т.п. Решение … Var n: 1..100; Begin Writeln('Введите возраст (в годах от 1 до 100) '); Readln(n); If n in [11..14] then write('лет') else case (n mod 10) of 1: Write('год'); 2..4: Write('года'); 0,5..9: Write('лет'); End End. Задания 1. Составить программу, которая позволяет ввести два числа в первой строке и один из знаков +, -, *, / во второй строке, а на экране выводит результат соответствующего арифметического действия. 2. Определить, верно ли, что при делении неотрицательного целого числа а на положительное число b получается остаток, равный одному из двух заданных чисел с или d. 3. Даны три вещественных числа а, b, с. Определить, имеется ли среди них хотя бы одна пара равных между собой чисел. 4. Определить, является ли треугольник со сторонами a, b, c равнобедренным. 5. Определить, является ли треугольник со сторонами равносторонним. 6. Известен рост трех человек. Определить, одинаков ли их рост. 7. Год является високосным, если его номер кратен 4. Из кратных 100 високосными являются лишь те года, которые кратны также 400 (например, 1700, 1800 и 1900 - не високосные года, 2000 - високосный). Дано натуральное число п. Определить, является ли високосным год с таким номером. 8. Даны вещественные положительные числа а, b, с. Выяснить, существует ли треугольник со сторонами а, b, с.