Razdel_13_Osn_alg_i_i_progr_ya_11_05_10
.pdfЧасть 13. Основы алгоритмизации и программирования
QBasic
CLS
INPUT "Введите высоту цилиндра : ", H
INPUT "Введите радиус основания : ", R
V = 3.14 * R ^ 2 * H
S = 2 * 3.14 * R * H : PRINT
PRINT "Объем цилиндра = "; V
PRINT "Площадь боковой поверхности = "; S
END
Пример 3. Даны три точки на плоскости. Определить, какая из них бли-
же к началу координат.
Система тестов
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Номер те- |
|
|
|
|
|
Данные |
|
|
|
|
|
Результат |
||
|
ста |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xA |
|
yA |
|
xB |
|
yB |
|
xC |
|
yC |
|
Otvet |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
1 |
|
2 |
|
1 |
|
2 |
|
2 |
|
-1 |
|
3 |
|
"Это точка A" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
2 |
|
2 |
|
2 |
|
2 |
|
1 |
|
-1 |
|
3 |
|
"Это точка B" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
3 |
|
2 |
|
2 |
|
-1 |
|
3 |
|
2 |
|
1 |
|
"Это точка C" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Школьный АЯ
алг Точки(арг вещ xA,yA,xB,yB,xC,yC, рез лит Otvet)
нач вещ DistA,DistB,DistC
ввод xA,yA,xB,yB,xC,yC
DistA := sqrt(xA**2 + yA**2)
81
Часть 13. Основы алгоритмизации и программирования
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));
82
Часть 13. Основы алгоритмизации и программирования
WriteLn; Write('Ответ : ');
If (DistA < DistB) and (DistA < DistC) then WriteLn( 'Это точка А.')
else If (DistB < DistC)
then WriteLn('Это точка B.') else WriteLn('Это точка C.');
ReadLn
END.
Пример 4. Найти произведение цифр заданного целого четырехзначного
числа.
Система тестов
Номер те- |
|
Проверяемый |
|
Число |
|
Результат |
|
ста |
|
случай |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
Число положительное |
|
2314 |
|
P = 24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
Число отрицательное |
|
-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; |
|
|
|
|
кон |
|
|
|
|
|
|
83
Часть 13. Основы алгоритмизации и программирования
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 |
||
); |
|
|
|
|
ReadLn
END.
QBasic
CLS
INPUT "Введите четырехзначное число : ", Number
PRINT : PRINT "Цифры числа "; Number; ": ";
84
Часть 13. Основы алгоритмизации и программирования
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 l
P = i * j * k * l
PRINT : PRINT "О т в е т : произведение цифр равно "
; P
END
Пример 5. Решить квадратное уравнение ax2 + bx + c = 0.
Система тестов
|
|
|
|
|
|
|
|
|
|
|
Номер |
|
Проверяемый |
|
Коэффициенты |
|
|
||||
теста |
|
случай |
|
|
|
|
|
|
|
Результаты |
|
|
|
|
|
|
|
||||
|
|
a |
|
b |
|
c |
|
|
||
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
1 |
|
d >0 |
|
1 |
|
1 |
|
-2 |
|
x1 = 1, x2 = - 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
2 |
|
d=0 |
|
1 |
|
2 |
|
1 |
|
Корни равны: x1 = - 1, x2 = - 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
3 |
|
d<0 |
|
2 |
|
1 |
|
2 |
|
Действительных корней нет |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
4 |
|
a=0, b=0, c=0 |
|
0 |
|
0 |
|
0 |
|
Все коэффициенты равны нулю. х -любое |
|
|
|
|
|
|
|
|
|
|
число. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
5 |
|
a=0, b=0, |
|
0 |
|
0 |
|
2 |
|
Неправильное уравнение |
|
|
c<>0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
6 |
|
a=0, b<>0 |
|
0 |
|
2 |
|
1 |
|
Линейное уравнение. Один корень: x = - |
|
|
|
|
|
|
|
|
|
|
0,5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
7 |
|
a<>0, b<>0, |
|
2 |
|
1 |
|
0 |
|
x1 = 0, x2 = - 0,5 |
|
|
с=0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85
Часть 13. Основы алгоритмизации и программирования
Школьный АЯ (упрощенный алгоритм)
алг Квур (арг вещ а, 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; |
|
|
|
86
Часть 13. Основы алгоритмизации и программирования
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
87
Часть 13. Основы алгоритмизации и программирования
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; ReadLn
END.
QBasic
CLS
INPUT "Введите количество тестов : ", NTest
FOR 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
88
Часть 13. Основы алгоритмизации и программирования
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 : PRINT
NEXT Test
END
Результаты работы 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>
Действительных корней нет.
89
Часть 13. Основы алгоритмизации и программирования
Пример 6. Две прямые описываются уравнениями a1 x + b1 y + c1 = 0;
a2 x + b2 y + c2 = 0.
Напечатать координаты точки пересечения этих прямых, либо сооб-
щить, что эти прямые совпадают, не пересекаются или вовсе не суще-
ствуют.
Система тестов
Номер |
Проверяемый |
Коэффициенты пря- |
Результаты |
|||||
теста |
случай |
|
|
мых |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a1 |
b1 |
c1 |
a2 |
b2 |
c2 |
|
|
|
|
|
|
|
|
|
|
1 |
Первая прямая не существует |
0 |
0 |
1 |
1 |
2 |
2 |
Это не прямая |
|
|
|
|
|
|
|
|
|
2 |
Вторая прямая не существует |
1 |
2 |
2 |
0 |
0 |
1 |
Это не прямая |
|
|
|
|
|
|
|
|
|
3 |
Все коэффициенты одной или |
0 |
0 |
0 |
1 |
2 |
1 |
Это не прямая |
|
обеих прямых равны нулю |
|
|
|
|
|
|
(прямые) |
|
|
|
|
|
|
|
|
|
4 |
Коэффициенты попарно равны |
1 |
2 |
1 |
1 |
2 |
1 |
Прямые совпада- |
|
|
|
|
|
|
|
|
ют |
|
|
|
|
|
|
|
|
|
5 |
Коэффициенты попарно про- |
1 |
2 |
1 |
2 |
4 |
2 |
Прямые совпада- |
|
порциональны |
|
|
|
|
|
|
ют |
|
|
|
|
|
|
|
|
|
6 |
Прямые параллельны |
2 |
3 |
-1 |
4 |
6 |
1 |
Прямые парал- |
|
|
|
|
|
|
|
|
лельны |
|
|
|
|
|
|
|
|
|
7 |
Прямые пересекаются |
1 |
2 |
-4 |
1 |
-2 |
1 |
x=1.50, y=1.25 |
|
|
|
|
|
|
|
|
|
Школьный АЯ
алг Пересечение (арг вещ a1, b1, c1, a2, b2, c2,
рез вещ x, y, рез лит t)
нач
если (a1 = 0 и b1 = 0) или ( a2 = 0 и b2 = 0)
то t := "Это не прямая (прямые)"
90