Решение 50 типовых задач по программированию на языке Pascal Дата размещения сборника в сети


Download 1.52 Mb.
Pdf ko'rish
bet17/77
Sana03.02.2023
Hajmi1.52 Mb.
#1152062
TuriРешение
1   ...   13   14   15   16   17   18   19   20   ...   77
Bog'liq
Задачи на Pascal

№ строки 
Десятичная система 
Двоичная система 











102 
— 
— 
— 
— 
0110 0110 
— 
— 
— 
— 

102 

— 
— 
— 
0110 0110 
0000 
— 
— 
— 

51 

— 
— 
— 
0011 0011 
0000 
— 
— 
— 
10 
51 


— 
— 
0011 0011 0000 
0001 
— 
— 
11 
25 


— 
— 
0001 1001 
0000 0001 
— 
— 
12 
25 



— 
0001 1001 0000 0001 
0001 
— 
13 
12 



— 
0000 1100 
0000 0001 
0001 
— 
14 
12 




0000 1100 0000 0001 
0001 
0000 
15 





0000 0110 
0000 0001 
0001 
0000 
16 





0000 0110 
0110 
0001 
0001 
0000 
Задача № 12. Решить квадратное уравнение
Формулировка. Даны вещественные числа ab и c, причем a отлично от 0. Решить квадратное 
уравнение ax
2
bx + c = 0 
или сообщить о том, что действительных решений нет. 
Решение. Из алгебры известно, что: 


Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal» 
15 
Квадратное уравнение ax
2
 + bx + c = 0, 
выражение D = b
2
 – 4ac – 
дискриминант: 
– 
если D > 0, имеет два решения: 
1
2
b
D
x
a
− +
=
 ,
2
2
b
D
x
a
− −
=

– 
если D = 0, имеет единственное решение: 
1
2
b
x
a
= −

– 
если D < 0, не имеет действительных решений. 
Следовательно, нам необходимо вычислить дискриминант (заведем для него вещественную 
переменную d типа real) и в зависимости от его значения организовать ветвления. Сначала нужно 
проверить, имеет ли уравнение действительные решения (для решений заведем переменные x1 и x2 
типа real). Если да, и если дискриминант не равен нулю, то вычисляем оба решения по формулам, 
а если дискриминант равен нулю, то вычисляем единственное решение. Если же действительных 
решений нет, выводим текстовое сообщение об этом. Основной алгоритм можно проиллюстриро-
вать следующей блок-схемой: 
Три нерасшифрованных блока представляют собой стандартные операторы вывода. Разберем 
их подробнее: 
1) 
При выводе двух корней выражение будет выглядеть следующим образом: 
x1 := (-b + sqrt(d)) / 2 * a; 
x2 := (-b - sqrt(d)) / 2 * a; 
writeln('x1 = ', x1:4:2, ', x2 = ', x2:4:2); 
При этом выводимое выражение будет выглядеть так: 'x1 = m, x2 = n', где синим 
цветом выделены однозначные текстовые константы, которые берутся из списка аргумен-
тов writeln, красным – вычисленные значения x1 и x2. Причем корни выведены в форма-
тированном виде: число после первого двоеточия задает ширину поля вывода для перемен-
ной вместе с точкой (при нехватке поля она будет расширено программой), а число после 
второго двоеточия – количество выводимых дробных знаков (его при работе программы 
изменить нельзя); 
2) 
При выводе одного корня – все то же самое, только выводится один корень: 
x1 := -(b / 2 * a); 
writeln('x = ', x1:4:2); 
3) 
При отсутствии действительных корней выводим сообщение: 
writeln('No real solutions!'); 
В итоге внутренний условный оператор с телом включительно будет выглядеть так:
if d <> 0 then begin 
x1 := (-b + sqrt(d)) / 2 * a; 
x2 := (-b - sqrt(d)) / 2 * a; 
writeln('x1 = ', x1:4:2, ', x2 = ', x2:4:2) 
end 
else begin 
x1 := -(b / 2 * a); 

Download 1.52 Mb.

Do'stlaringiz bilan baham:
1   ...   13   14   15   16   17   18   19   20   ...   77




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling