Решение задач
Разбор задачи C1 (демо ЕГЭ 2007)
Требовалось написать программу, которая решает уравнение «ax+b=0» относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно.
Паскаль | Бейсик |
---|---|
var a, b, x: real; begin readln(a,b,x); if b = 0 then write('x = 0') else if a = 0 then write('нет решений') else write('x =',-b/a); end. |
DIM a,b,x AS DOUBLE INPUT a, b, x IF b = 0 THEN PRINT "x = 0" ELSE IF a = 0 THEN PRINT "нет решений" ELSE PRINT "x=",-b/a ENDIF ENDIF END |
Алгоритмический | Си |
алг нач вещ a,b,x ввод a,b,x если b=0 то вывод 'x=0' иначе если a=0 то вывод 'нет решений' иначе вывод 'x=',-b/a все все кон |
#include <stdio.h> void main(void) { float a,b,x; scanf("%f%f%f",&a,&b,&x); if (b==0) printf("x=0"); else if (a==0) printf("нет решений"); else printf("x=%f",-b/a); } |
Решение:
часть 2)
часть 3)
Доработанная программа:
часть 1)
При a=0, b=0 программа работает неверно. Она выводит ответ: x=0, а должна выводить: х - любое число.
часть 2)
Лишняя часть в программе - ввод x с клавиатуры.
Правильно:
- для Паскаля - readln(a,b);
- для Бейсика - INPUT a, b
- для Алгоритмического - ввод a,b
- для Си - scanf("%f%f",&a,&b);
- для Бейсик не объявлены переменные a,b,x. Необходимо добавить в начале программы строку:
DIM a,b,x AS SINGLE
Также неверно оформлен оператор ветвления: вместо раздельного написания END IF, представлено слитное написание - для Си не подключена библиотека stdio.h. Необходимо добавить в начале программы строку: #include <stdio.h>.
Без данной библиотеки не будут работать функции printf и scanf.
часть 3)
Доработанная программа:
Паскаль | Бейсик |
---|---|
var a, b, x: real; begin readln(a,b); if a=0 then if b=0 write("х-любое число") else write('нет решений') else write('x =',-b/a); end. |
DIM a,b,x AS SINGLE INPUT a, b IF a=0 THEN IF b=0 THEN PRINT "х-любое число" ELSE PRINT "нет решений" END IF ELSE PRINT "x=",-b/a END IF END |
Алгоритмический | Си |
алг нач вещ a,x,b ввод a,b если a=0 то если b=0 то вывод 'х-любое число' иначе вывод 'нет решений' все иначе вывод 'x=',-b/a все кон |
#include <stdio.h> void main(void) { float a,b,x; scanf("%f%f",&a,&b); if(a==0) if(b==0) printf("х-любое число"); else printf("нет решений"); else printf("x=%f",-b/a); } |