1. Написать программу, которая описывает как вещественные переменные и вводит с клавиатуры скорость (v) и время (t) равномерного движения тела, рассчитывает и выводит на экран значение расстояния (s), пройденного телом за это время, с 4 знаками после запятой. |
Program Pr11; var v,t,s:real; begin read(v,t); s:=v*t; writeln('S=',s:7:4); end. |
|
2. Написать программу, которая описывает целую переменную tC (температура по Цельсию) и вещественные переменные tR, tF (температуры по Реомюру и Фаренгейту). Программа вводит tC с клавиатуры, рассчитывает и выводит tR, tF с одним знаком после запятой по формулам tR=0.8∙tC ; tF=9∙tC/5+32. |
Program Pr12; var tR,tF:real; tC:integer; begin read(tC); tR:=0.8*tC; tF:=9*tC/5+32; writeln('tR=',tR:5:1, 'tF=',tF:5:1); end. |
|
3. Написать программу, которая описывает как целые переменные и вводит с клавиатуры длины сторон прямоугольника (a и b), рассчитывает и выводит на экран значение периметра (переменная p вещественного типа) с двумя знаками после запятой. |
Program Pr13; var p:real; a,b:integer; begin read(a,b); p:=2*(a+b); writeln('p',p:5:2); end. |
|
4. Написать программу, в которой описываются вещественные переменные x,y,d, вводит с клавиатуры координаты точки x,y, рассчитывает расстояние d от нее до точки (1,3) и выводит на экран значение d с двумя знаками после запятой. |
Program Pr14; var x,y,d:real; begin read(x,y); d:=sqrt(sqr(x-1)+sqr(y-3)); writeln('d=',d:5:2); end. |
|
5. Вычислите значение выражения по заданным a, b, c. |
Program Pr15; var a,b,c:real; begin read(a,b,c); writeln(((a+b)/(a-b) +sqrt(c/2)):5:2); end. |
|
6. Вычислить гипотенузу прямоугольного треугольника c и величины двух прилежащих к ней углов a и b по известным катетам a и b. Воспользуемся известными формулами:
Угол выразим в градусах. |
Program Pr15; var a,b,c, alf, bet:real; begin read(a,b); c:=sqrt(a*a+b*b); alf:=arctan(a/b); bet:=arctan(b/a); writeln(‘гипотенуза = ’, c:5:2); writeln(‘угол а = ’, alf*180/pi:2:1); writeln(‘угол b= ’, bet*180/pi:2:1); end. |
|
7. Вычисление arcos(x). Т.е. нужно найти такой угол α, что cos(α)=x, т.к. = = , то α= и, в программе alfa - угол в радианах [-π/2;π/2]; grad - угол в градусах [-90˚; 90˚]. |
Program Prim2; var x,alfa,grad: real; begin write(‘Введите значение косинуса ’); read(x); alfa:=arctan(sqrt(1-sqr(x))/x); grad:=alfa*180/pi; writeln(‘угол в радианах ’,alfa); writeln(‘угол в градусах ’,grad); end. |
|
8. Возведение x в степень a. Воспользуемся свойством: если ln(xa) = a*ln(x), то (xa) = exp(ln(xa)) = exp(a*ln(x)) при x>0 и -exp(a*ln(|x|) при x<0. При возведении числа в отрицательную степень следует помнить, что x-а = 1/xa. |
Program Prim3; var Pwr,x,a: real; begin writeln(‘Введите аргумент и степень ’); read(x,a); Pwr:=exp(a*ln(x)); write(x,’ в степени ‘,a,’ равно ’,Pwr); end. |
А теперь покажем возможные типичные ошибки начинающих программистов в программах с линейными алгоритмами.
Тип ошибки |
Неверное написание |
Сообщение компилятора ИСР |
Неописанная переменная
Все используемые переменные должны быть предварительно описаны в разделе описаний var |
begin S:=1; {неизвестное имя S} write('S= ', S); end. |
Identifier not found “S” |
Отсутствующая точка с запятой (;)
Очень частая ошибка у начинающих |
var S : integer; begin S:=1 { здесь ожидается ; } S:=S+1; end. |
Syntax error. “;” expected |
Несовместимость типов при присваивании
Можно присваивать только данные одного типа. В редких случаях можно преобразовать данные одного типа в данные другого родственного типа. Например, целое можно преобразовать в вещественное, а символ - в строку. |
var S : integer; begin S:=1.31; {нельзя преобразовать вещественное в целое} end. |
Incompatible types: got “Extended” expected “SmallInt” |
Отсутствие одного из апострофов строковой константы
Закрыть апостроф надо на этой строке, где расположен открывающий апостроф |
var x, y : integer; begin x:=3; y:=3; writeln(‘Сумма равна =, x+y); {не хватает апострофа} end. |
Fatal: String exceeds line |
Ошибки расстановки запятых и апострофов при выводе строк и выражений
запятые разделяют разные элементы вывода все, что находится в апострофах, будет выведено на экран без изменений |
var x, y : integer; begin x:=3; y:=3; writeln(x,'+',y=',x+y); {не верная расстановка} end. |
Fatal: String exceeds line |
Ошибка ввода
Это - ошибка времени выполнения. Программа пытается преобразовать введенную строку в целое число и завершается с ошибкой |
Var x : integer; begin read (x); {введите в программе текст и будет ошибка} end. |
Runtime error 106 at $####### |
Ошибка неинициализированной переменной
Перед использованием любую переменную надо ввести или присвоить ей начальное значение. |
var x, r: integer; begin {Забыли инициализировать или ввести x} r := x*x; writeln('Квадрат числа ',x,' = ',r); end. |
Ошибки как таковой не будет, но переменная r получит значение равно 0 |
Деление на ноль
Во время исполнения программа выполнит деление на ноль (в частности из-за неинициализированной переменной х) и завершится с ошибкой. |
var x,y: real; begin x :=0; y:=1/x; {деление на ноль!} end. |
Runtime error 200 at $####### |
Корень из отрицательного числа
В Паскале возникает ошибка времени выполнения |
var a, b: real; begin a:=4; b:=1; writeln(sqrt (b-a)); {при b<a под корнем число меньше 0!} end. |
Runtime error 207 at $####### |