Задача № 12. Решить квадратное уравнение
Формулировка. Даны вещественные числа a, b и c, причем a отлично от 0. Решить квадратное уравнение ax2 + bx + c = 0 или сообщить о том, что действительных решений нет.
Решение. Из алгебры известно, что:
Квадратное уравнение ax2 + bx + c = 0, выражение D = b2 – 4ac – дискриминант:
– если D > 0, имеет два решения: , ;
– если D = 0, имеет единственное решение: ;
– если 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);
writeln('x = ', x1:4:2)
end;
Код:
1. program QuadraticEquation; 2. 3. var 4. a, b, c, d, x1, x2: real; 5. 6. begin 7. readln(a, b, c); 8. d := b * b - 4 * a * c; 9. if d >= 0 then begin 10. if d <> 0 then begin 11. x1 := (-b + sqrt(d)) / 2 * a; 12. x2 := (-b - sqrt(d)) / 2 * a; 13. writeln('x1 = ', x1:4:2, ', x2 = ', x2:4:2) 14. end 15. else begin 16. x1 := -(b / 2 * a); 17. writeln('x = ', x1:4:2) 18. end 19. end 20. else begin 21. writeln('No real solutions!'); 22. end 23. end. |
Глава 3. Циклы
Задача № 13. Вывести на экран все натуральные числа до заданного
Формулировка. Дано натуральное число. Вывести на экран все натуральные числа до заданного включительно.
|
|
Решение. Данная задача решается с использованием оператора цикла for. Напомним, что с помощью цикла for можно совершить заданное количество итераций (повторений) некоторых операторов, которые синтаксически заключены в содержимое его тела (так называемого тела цикла). При этом некоторая целочисленная переменная изменяется от некоторого стартового значения до некоторого конечного (оба значения включительно), увеличиваясь на единицу с каждым повторением тела цикла.
Так как нам необходимо выводить натуральные числа, это означает, что вывод должен всегда начинаться с единицы, и при этом выводятся все следующие за ней натуральные числа до тех пор, пока значение переменной цикла (обычно используют переменную i) не достигнет конечного n (на последнем шаге значение переменной цикла будет равно n). После этого цикл завершится, и будут выполнены те операторы, которые следуют непосредственно за ним. Кстати, не стоит забывать, что после выхода из цикла for его переменная цикла считается неопределенной!
Код:
1. program FromOneToN; 2. 3. var 4. i, n: word; 5. 6. begin 7. readln(n); 8. for i := 1 to n do begin 9. write(i, ' ') 10. end 11. end. |
Пусть введено число 5, например. При входе i станет равно 1 и будет проверено существование отрезка в заданных границах. Так как 1 меньше 5, то произойдет вход в цикл, и будут выполняться следующие команды, пока i не превысит n:
|
|
1) Выполнение команд в теле цикла;
2) Увеличение i на 1;
3) Возвращение на шаг 1.
Нетрудно понять, что в нашем случае i будет принимать значения 1, 2, 3, 4, 5 и будет выведена на экран строка '1 2 3 4 5 '. Здесь красным цветом выделены изменяющиеся значения переменной цикла, а синим – выводящаяся неизменной пробельная константа.
Дата добавления: 2018-10-25; просмотров: 265; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!