- Преподавателю
- Информатика
- ОРГАНИЗАЦИЯ ВЫЧИСЛЕНИЙ С РАЗВЕТВЛЕНИЕМ
ОРГАНИЗАЦИЯ ВЫЧИСЛЕНИЙ С РАЗВЕТВЛЕНИЕМ
Раздел | Информатика |
Класс | 9 класс |
Тип | Другие методич. материалы |
Автор | Бамбуркин С.П. |
Дата | 16.01.2016 |
Формат | doc |
Изображения | Есть |
ОРГАНИЗАЦИЯ ВЫЧИСЛЕНИЙ С РАЗВЕТВЛЕНИЕМ
Цель:
- Ознакомиться с понятием составного оператора, оператором завершения программы и вводом данных с клавиатуры;
- Изучить структуру оператора условного перехода (IF...THEN...ELSE) и оператора безусловного перехода (GOTO) и приобрести навыки составления разветвляющихся программ с их использованием.
Пример1.
Вычислить и вывести на печать корни квадратного уравнения ax2+bx+c=0 ,
выполнив проверки : - если а=0 , то выдать сообщение и остановить программу;
- если дискриминант уравнения отрицательный, то выдать
сообщение и выйти из программы.
Коэффициенты уравнения ввести с клавиатуры по запросу программы.
Программа расчета :
Program Pr1; LABEL
Start; {Описание метки}
VAR
a,b,c: real; {Описание типов коэффициентов}
x1,x2,d: real;
BEGIN
Write('Задайте коэффициенты уравнения a,b,c > ');
Readln(a,b,c); {Ввод коэффициентов с клавиатуры}
IF a<>0 THEN GOTO Start; {Проверка условия а<>0}
Writeln('Это не квадратное уравнение (а<>0)');
Halt="ОРГАНИЗАЦИЯ ВЫЧИСЛЕНИЙ С РАЗВЕТВЛЕНИЕМ"; {Завершение программы}
Start: d:=sqr(b)-4*a*c; {Вычисление дискриминанта}
IF d>0 THEN {Проверка положительности дискриминанта}
begin
x1:=(-b+sqrt(d))/(2*a); {Вычисление корней уравнения}
x2:=(-b+sqrt(d))/(2*a);
Writeln('Корни уравнения x1=',x1,' x2=',x2);
Readln;
Halt="ОРГАНИЗАЦИЯ ВЫЧИСЛЕНИЙ С РАЗВЕТВЛЕНИЕМ"; {Завершение программы}
End
ELSE
Writeln('Kopни мнимые');
Readln; {(Ожидание нажатия клавиши ввода}
END.
Результаты расчета :
Задайте коэффициенты уравнения а,b,с > (введем, например) 1_-7_10 <ввод>
Корни уравнения x1=5.0000000000E+00 x2=2.0000000000E+00
В случае мнимых корней:
Задайте коэффициенты уравнения a,b,c > (введем, например) 1_-7_15 <ввод>
Корни мнимые.
Пример 2.
Пусть даны два числа. Если первое больше второго по абсолютной величине, то необходимо уменьшить первое в пять раз. Иначе оставить числа без изменения.
Программа:
Program pr2 (input, output);
var x, y: real;
begin read (x, y);
if abs (x) > abs (y) then x:= x / 5;
write (x, y);
end.
Пример 3.
Даны три числа x, y, z. Требуется найти max (x, y, z) - наибольшее из этих чисел (среди x, y, z могут быть и равные числа: например, max (3, -1, 3) = 3, max (7, 7, 7) = 7 и т. д.).
Программа:
Program M (input, output);
var x, y, z, t: real;
begin read (x, y, z); t:=x;
if t < y then t:= y;
if t < z then t:= z; write (t);
end.
Задание:
(При выполнении задания для организации разветвлений в программе использовать только операторы условного и безусловного перехода, а исходные данные вводить с клавиатуры по запросу программы)
Даны действительные числа a, b, c, d. Если a b c d, то каждое число заменить наибольшим из них; если a > b > c > d, то числа оставить без изменения; в противном случае все числа заменяются их квадратами.
ФУНКЦИИ И ПРОЦЕДУРЫ
Цель :
-
Ознакомиться с понятием процедуры и особенностями процедуры-функции;
-
Ознакомиться с обменом данными между основной программой и процедурой;
-
Изучить различия между формальными и фактическими параметрами между глобальными и локальными описаниями переменных;
-
Научиться составлять программы с использованием процедур.
Пример 1.
Написать процедуру-функцию, которая возводит произвольное число b в произвольную вещественную степень X, и использовать ее в программе для вычисления суммы k членов обобщенного гармонического ряда :
. Параметры k и a вводить по запросу программы.
Программа расчета :
Program Pr1;
VAR {a,res,i,k - глобальные переменные}
a,res : real; {Переменные для показателя степени и суммы сленов ряда}
i,k: integer; {Переменная цикла и число членов ряда}
Function Pocfun (b,x:real) : real; {b и x - формальные параметры-значения}
Begin {Начало процедуры функции}
If b>0 then POCFUN:=exp(x*ln(b))
Else
If b<0 then POCFUN:=exp(x*ln(abs(b))) {Показ. Ф-ция. Определена для b>0}
Else
If x=0 then POCFUN:=1
Else POCFUN:=0
End;
BEGIN {Начало основной программы}
Res:=0;
Write('Введите показатель степени = ');
Readln(a);
Write('Введите число членов = ');
Readln(k);
FOR i:=1 to k DO
Res:=res+1/POCFUN(i,a); {i и a фактические параметры}
Writeln('res = ',res);
Readln;
END.
Результаты расчета:
Введите показатель степени = 1.765 <ввод>
Введите число членов ряда = 10 <ввод>
Res = 1.7209260727E+00
Пример 2.
Заданы координаты вершин плоского выпуклого шестиугольника (x1,y1),(x2,y2),…,(x6,y6). Определить периметр и площадь этого многоугольника. Для определения длин сторон использовать процедуру вычисления расстояния между двумя досками. Для определения площади многоугольника использовать процедуру вычисления площади треугольника по заданным координатам его вершин.
Программа расчета:
Program Pr2;
CONST {Ввод координат вершин многоугольника}
x :array[1..6]of real = (1,1,4,7,7,4); {в виде одномерных массивов констант}
y :array[1..6]of real = (1,4,6,6,3,1);
VAR {edge,perim,art,arpol,i - глобальные переменные}
edge,perim : real; {Сторона и периметр многоугольника}
art,arpol : real; {Площади треугольника и многоугольника}
i : integer; {Переменная цикла}
{Процедура DIST вычисляет расстояние между двумя
точками (x1,y1); (x2,y2) и присваивает его параметру len}
PROCEDURE DIST(x1,y1,x2,y2 : real; var len : real); {x1,y1,x2,y2 - формальные параметры значения, а len - параметр-переменная}
begin
len:=sqrt(sqr(x2-x1)*sqr(y2-y1)); end;
PROCEDURE AREA(x1,y1,x2,y2,x3,y3 : real; var st : real);
var p : real; {Полупериметр - локальная переменная}
begin
p:=(sqrt(sqr((x2-x1)+(sqr(y2-y1))+sqrt(sqr((x3-x2)+(sqr(y3-y2))+sqrt(sqr((x3-x2)+(sqr(y3-y2)))/2))))));
st:=sqrt(p*(p-sqrt(sqr(x2-x1)+sqr(y2-y1)))*(p-sqrt(sqr(x3-x2)+sqr(y3-y2)))*(p-sqrt(sqr(x3-x1)+sqr(y3-y1))));
end;
BEGIN
Perim:=0; arpol:=0; {Начало основной программы}
FOR i := 1 to 6 DO {Начало цикла вычисления периметра}
begin
if i<=5 then
DIST(x[i],y[i],x[i+1],y[i+1],edge)
else DIST(x[i],y[i],x[1],y[1],edge);
perim:= perim+edge;
end; {Конец цикла вычисления периметра}
writeln('Периметр многоугольника = ',perim);
FOR i := 1 to 4 DO {Начало цикла вычисления площади}
begin
AREA(x[1],y[1],x[i+1],y[i+1],x[i+2],y[i+2],art);
arpol := arpol+art;
end; {Конец цикла вычисления площади}
writeln( 'Площадь многоугольника = ',arpol);
END.
Результаты расчета :
Периметр многоугольника = 1.9211102551Е+01
Площадь многоугольника = 2.4000000000Е+01
Пример 3.
Программа вычисления площади четырехугольника.
Программа:
Program pr3 (input, output);
var AB, BC, CD, DA, AC, s1, s2: real;
procedure str3 (var a, b, c, s: real);
var p: real;
begin p := (a + b + c)/2;
s := sqrt (p*(p - a)*(p - b)*(p - c))
end;
begin read (AB, BC, CD, DA, AC);
str3 (AB, BC, AC, s1);
str3 (CD, DA, AC, s2)
end.
Пример 4.
Для вычисления величин и может быть использована процедура.
Программа:
Procedure pr4 (a: T; var s, t: real);
var i: integer; u: real;
begin
s := sqr (a[1]); t := abs (a[1]);
for i := 2 to n do
begin s := s + sqr (a[i]);
u := abs (a[i]);
if u > t then t := u;
end;
end.
Пример 5.
Программа вычисления площади четырехугольника:
Программа:
Program pr5 (input, output);
var AB, BC, CD, DA, AC: real;
function triangl (a, b, c: real): real;
var p: real;
begin p := (a + b + c)/2;
triangl := sqrt (p*(p - a)*(p - b)*(p - c));
end;
begin read (AB, BC, CD, DA, AC);
write (triangl(AB, BC, AC) + triangl (CD, DA, AC))
end.
Пример 6.
Пусть даны действительные s, t, (n - некоторая константа) и пусть требуется вычислить , где . Программа (считаем, что n = 7).
Программа:
Program pr6 (input, output);
const n = 7;
type T = array[0..n] of real;
var a: T; s, t, u: real; i: integer;
function p (x: real): real;
var y: real; i: integer;
begin y := a[n];
for i := n - 1 downto 0 do
y := y*x + a[i];
p := y;
end;
begin read (s, t);
for i := 0 to n do read (a[i]);
u := p (0,2);
write (u - p (t) + sqr (p(s -t)) - 1,7*u*u*u);
end.