Алгоритмы линейной и разветвляющейся структуры 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Алгоритмы линейной и разветвляющейся структуры



 

Пример 1.1. Простейший алгоритм, запрашивающий имя и затем приветствующий его обладателя.

 

Тест

 

Данные Результат
Имя = "Тимур" "Привет, Тимур!"

 

Демонстрация

 

Школьный АЯ

алг Знакомство (арг лит Имя, рез лит t) нач вывод "Как тебя зовут?" ввод Имя t:= "Привет, " + Имя + "!" | "+" - операция сцепки вывод t кон


Turbo Pascal

Program Hello; Var Name: String; {Описание переменной Name строкового типа} BEGIN Write('Как тебя зовут? '); {Вывод на экран текста вопроса} ReadLn(Name); {Ввод c клавиатуры имени} WriteLn('Привет, ', Name, '!'); {Вывод на экран приветствия} ReadLn END.

Здесь последний оператор ReadLn позволяет видеть на экране результаты работы программы, пока не будет нажата клавиша <Enter>.

 

Результаты работы Pascal-программы

 

Как тебя зовут? Тимур <Enter> Привет, Тимур!

QBasic

CLS INPUT "Как тебя зовут? ", Name$ PRINT "Привет , "; Name$; "!" END

 

Пример 1.2. Определить объём и площадь боковой поверхности цилиндра с заданными радиусом основания R и высотой H.

 

Тест

 

Данные Результат
R = 1 H = 1 V = 3.14 S = 6.28
       

 

Демонстрация

Школьный АЯ

алг Цилиндр (арг вещ R, H, рез вещ V, S)нач вещ Pi Pi:= 3.14 V:= Pi * R**2 * H S:= 2 * Pi * R * H кон


Turbo Pascal

Program Cylinder; Uses Crt; {Подключение библиотеки Crt} Var R, {радиус основания цилиндра} H, {высота цилиндра } V, {объем цилиндра } S: Real; {площадь боковой поверхности цилиндра} BEGIN ClrScr; {Вызов из библиотеки Crt процедуры очистки экрана} Write('Введите высоту цилиндра: '); ReadLn(H); Write('Введите радиус основания: '); ReadLn(R); V:= Pi * R * R * H; S:= 2 * Pi * R * H; WriteLn; WriteLn('Объем цилиндра = ', V: 5: 2); {Здесь 5 - общее количество позиций, занимаемых переменной V при выводе, а 2 - количество позиций в дробной части значения V} WriteLn('Площадь боковой поверхности = ', S: 5: 2); ReadLn END.


QBasic

CLS INPUT "Введите высоту цилиндра: ", H INPUT "Введите радиус основания: ", R V = 3.14 * R ^ 2 * H S = 2 * 3.14 * R * H: PRINT PRINT "Объем цилиндра = "; V PRINT "Площадь боковой поверхности = "; S END

 

Пример 1.3. Даны три точки на плоскости. Определить, какая из них ближе к началу координат.

 

Система тестов

 

Номер теста Данные Результат
xA yA xB yB xC yC Otvet
          -1   "Это точка A"
          -1   "Это точка B"
      -1       "Это точка C"/TR>

 

Демонстрация

Школьный АЯ

алг Точки(арг вещ xA,yA,xB,yB,xC,yC, рез лит Otvet)нач вещ DistA,DistB,DistC ввод xA,yA,xB,yB,xC,yC DistA:= sqrt(xA**2 + yA**2) DistB:= sqrt(xB**2 + yB**2) DistC:= sqrt(xC**2 + yC**2) если (DistA < DistB) и (DistA < DistC) то Otvet:= "Это точка А" иначе если DistB < DistC то Otvet:= "Это точка B" иначе Otvet:= "Это точка C" все все вывод Otvetкон


Turbo Pascal

Program Points; Uses Crt; Var xA, yA, xB, yB, xC, yC, DistA, DistB, DistC: Real; BEGIN ClrScr; WriteLn('Введите координаты точки А:'); Write('x = '); ReadLn(xA); Write('y = '); ReadLn(yA); WriteLn('Введите координаты точки B:'); Write('x = '); ReadLn(xB); Write('y = '); ReadLn(yB); WriteLn('Введите координаты точки C:'); Write('x = '); ReadLn(xC); Write('y = '); ReadLn(yC); DistA:= sqrt(sqr(xA) + sqr(yA)); DistB:= sqrt(sqr(xB) + sqr(yB)); DistC:= sqrt(sqr(xC) + sqr(yC)); WriteLn; Write('Ответ: '); If (DistA < DistB) and (DistA < DistC) then WriteLn('Это точка А.') else If (DistB < DistC) then WriteLn('Это точка B.') else WriteLn('Это точка C.'); ReadLnEND.

 

Пример 1.4. Найти произведение цифр заданного целого четырехзначного числа.

 

Система тестов

 

Номер теста Проверяемый случай Число Результат
  Число положительное   P = 24
  Число отрицательное -1245 P = 40

 

Демонстрация

Школьный АЯ

алг Произведение цифр (арг цел Num, рез цел P)нач цел i, j, k, l Num:= abs(Num) | abs - абсолютная величина i:= div(Num, 1000) | i - первая цифра | div - частное от деления с остатком j:= mod(div(Num, 100), 10) | j - вторая цифра | mod - остаток от деления с остатком k:= mod(div(Num, 10), 10) | k - третья цифра l:= mod(Num, 10) | l - четвертая цифра P:= i * j * k * l;кон


Turbo Pascal

Program DigitsProduct;Uses Crt;Var Number, {заданное число} i, j, k, l, {цифры числа} P: Integer; {произведение цифр}BEGIN ClrScr; Write('Введите четырехзначное число: '); ReadLn(Number); Number:=Abs(Number); Write('Цифры числа ', Number, ': '); i:= Number div 1000; Write(i:3); {первая цифра} j:= Number div 100 mod 10; Write(j:3); {вторая цифра} k:= Number div 10 mod 10; Write(k:3); {третья цифра} l:= Number mod 10; WriteLn(l:3); {четвертая цифра} P:= i * j * k * l; WriteLn('О т в е т: произведение цифр равно ', P); ReadLnEND.


QBasic

CLSINPUT "Введите четырехзначное число: ", NumberPRINT: PRINT "Цифры числа "; Number; ": ";Number = ABS(Number)i = FIX(Number / 1000): PRINT i; ' FIX - целая часть аргументаj = FIX(Number / 100) MOD 10: PRINT j;k = FIX(Number / 10) MOD 10: PRINT k;l = Number MOD 10: PRINT lP = i * j * k * lPRINT: PRINT "О т в е т: произведение цифр равно "; PEND

 

Пример 1.5. Решить квадратное уравнение ax2+ bx + c = 0.

 

Система тестов


Номер теста Проверяемый случай Коэффициенты Результаты
a b c
  d >0     -2 x1 = 1, x2 = - 2
  d=0       Корни равны: x1 = - 1, x2 = - 1
  d < 0       Действительных корней нет
  a=0, b=0, c=0       Все коэффициенты равны нулю. х — любое число.
  a=0, b=0, c<>0       Неправильное уравнение
  a=0, b<>0       Линейное уравнение. Один корень: x = - 0,5
  a <> 0, b <> 0, с = 0       x1 = 0, x2 = - 0,5

Демонстрация


Школьный АЯ (упрощенный алгоритм)

алг Квур (арг вещ а, b, c, рез вещ x1, x2, рез лит t) дано a <> 0нач вещ d d:= b**2-4*a*c | d - дискриминант квадратного уравнения если d<0 то t:= "Действительных корней нет" иначе если d=0 то t:= "Корни равны"; x1:= -b/(2*a); x2:= x1 иначе t:= "Два корня" x1:= (-b + sqrt(d)) / (2*a) x2:= (-b - sqrt(d)) / (2*a) все всекон


Turbo Pascal

Program QuadraticEquation; Uses Crt; { подключение библиотеки Crt } Var a, b, c: Real; {a, b, c - коэффициенты уравнения} Discr: Real; x1, x2: Real; {x1, x2 - корни } Test, NTest: Integer; {Ntest - количество тестов }BEGIN ClrScr; Write('Введите количество тестов: '); ReadLn(NTest); For Test:= 1 to NTest do {цикл по всем тестам задачи } begin Write('Тест ', Test, '. Введите коэффициенты a, b, c: '); ReadLn(a, b, c); If (a=0) and (b=0) and (c=0) then begin Write('Все коэффициенты равны нулю.'); WriteLn('x - любое число ') end else If (a=0) and (b<>0) then WriteLn('Линейное уравнение. Oдин корень: x =', (-c/b):6:2) else If (a=0) and (b=0) and (c<>0) then WriteLn('Неправильное уравнение.') else begin Discr:= b*b - 4*a*c; If Discr > 0 then begin x1:=(-b + Sqrt(Discr)) / (2*a); x2:=(-b - Sqrt(Discr)) / (2*a); WriteLn('x1=', x1:6:2, '; x2=', x2:6:2) end else If Discr = 0 then begin x1:= -b/(2*a); WriteLn('Корни равны: x1=', x1:6:2, ' x2=', x1:6:2) end else WriteLn('Действительных корней нет.'); end; WriteLn end; ReadLnEND.


QBasic

CLSINPUT "Введите количество тестов: ", NTestFOR Test = 1 TO NTest ' цикл по всем тестам задачи PRINT "Тест"; Test; ". Введите коэффициенты a, b, c: "; INPUT a, b, c IF (a = 0) AND (b = 0) AND (c = 0) THEN PRINT "Все коэффициенты равны нулю. x - любое число" ELSE IF (a = 0) AND (b <> 0) THEN PRINT "Линейное уравнение, корень один: x = "; -c / b ELSE IF (a = 0) AND (b = 0) AND (c <> 0) THEN PRINT "Неправильное уравнение." ELSE Discr = b * b - 4 * a * c IF Discr > 0 THEN x1 = (-b + SQR(Discr)) / (2 * a) x2 = (-b - SQR(Discr)) / (2 * a) PRINT "x1 = "; x1; "; x2 = "; x2 ELSE IF Discr = 0 THEN x1 = - b / (2 * a) PRINT "Корни равны: x1 = "; x1; "; x2 = "; x1 ELSE PRINT "Действительных корней нет." END IF END IF END IF END IF END IF: PRINTNEXT TestEND

Результаты работы QBasic-программы (фрагмент):

 

Тест 1. Введите коэффициенты a, b, c:? 1, 1, –2 <Enter> x1 = 1; x2 = – 2 Тест 2. Введите коэффициенты a, b, c:? 1, 2, 1 <Enter> Корни равны: x1 = – 1; x2 = – 1 Тест 3. Введите коэффициенты a, b, c:? 2, 1, 2 <Enter> Действительных корней нет.

 

Пример 1.6.



Поделиться:


Последнее изменение этой страницы: 2016-08-01; просмотров: 213; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.16.70.101 (0.013 с.)