Добрый день. Необходимо составить программу для вычисления и вывода вычисленного значения на принтер и экран дисплея в виде: Функция равна <числовое значение>.
z=x^2+(|1+y|)^{1/2},
где у= a^2+b^2, если a^2<b^2,
-12.8, если a^2=b^2,
a, если a^2>b^2.
Программа:
Program kz1;
Uses Printer;
Var
a,b,x,y,z: real;
begin
writeln ('введите число а,b');
read(y);
if sqr(a)<sqr(b) then y:=sqr(a)+sqr(b);
if sqr(a)=sqr(b) then y:=-12.8;
if sqr(a)>sqr(b) then y:=a;
write('y=',y);
writeln (введите число х);
read(z);
if y=sqr(a)+sqr(b) then z:=sqr(x)+sqrt(abs(1+sqr(a)+sqr(b)));
if y=12.8 then z:=sqr(x)+sqrt(abs(1-12.8));
if y=a then z:=sqr(x)+sqrt(abs(1+a));
write('z=',z);
end.
Проверьте, пожалуйста, верно ли я составила программу, точнее алгоритм?
По алгоритму - последние три иф'а немного не понятны. Зачем они вообще? Не проще просто подставить у и х в заданную функцию?
По реализации - много ошибок. printer - для вывода на принтер? Если так, то Вы это нигде не используете. Потом, вводите а и b, а считываете зачем-то в одну переменную, да ещё и в у. В общем, ещё разбираться и разбираться.
Добрый вечер. Разбиралась с паскалем. Вот что получилось:
http://www.radikal.ru
http://www.radikal.ru
Еще необходимо по усмотрению выбрать числовые значения , ввести их с клавиатуры и определить какая ветвь вычислений "проработает" при введенных значениях. Это просто можно будет записать числа и указать какая ветвь сработает?
угу)) теперь как-то так)) Хотя и if'ы немного необычно расположены, но всё будет работать))
Как проверять - зависит от преподавателя.... Как на мой вкус, Вашей проверки вполне достаточно...
Программку проверяли сами, работает?
Да, проверяла) Работает, просто оценка со стороны знающих людей мне не помешает, тем более что университет за 400 км от меня, к педагогу точно не скоро попаду. Спасибо Вам
Добрый вечер. Еще одна задача. Не могли бы Вы ее проверить?
Задача:
Составить две программы вычисления и вывода на принтер значений аргумента и функции y=f(x). Первая программа вычисляет у для х, изменяющегосяв заданном интервале с указанным шагом х. Во второй программе значения аргумента задаются массивом. В первой программе цикл организовать с помощью условного оператора FOR, во второй - с использованием оператора цикла DO.
x^3+2sin^2*(x+3)^2
а)0(<=)x(<=)5, dx=0.5
б)х=|1,2;2,2;3,0;8,0;3,4|
Решение:
http://www.radikal.ru
http://www.radikal.ru
http://www.radikal.ru
http://www.radikal.ru
Верно ли я решила задачу?
Перепутали местами FOR и DO))
Всё наоборот, в первом случае решено через DO, во втором через FOR)
Ну, получается мне просто программки местами надо поменять?))
FOR и DO это циклы)
Значит просто поменять местами строки в программе, я тут запуталась, хотя действительно по невнимательности ошибку сделала
Или я опять не права??
А можно текстом программку?)) Блок-схемы ладно, а вот программки разглядывать не очень удобно)) Да и копировать вставить иногда хочется)
Program zad_2_1;
USES PRINTER;
Var x, y: real;
Begin
x:=0;
for x<=5 do
begin
y:=x*x*x + 2sqr(sin(sqr(x+3)));
writeln ('x=', x:6:2, 'y=', y:6:2);
writeln (LST, 'x=', x:6:2, 'y=',y:6:2);
x:=x+0,5:
end;
End.
Program zad_2_2;
USES PRINTER;
Var x,y: real;
i: integer;
a: array [1..5] of real;
Begin
a[1]:=1.2;
a[2]:=2.2;
a[3]:=3.0;
a[4]:=8.0;
a[5]:=3.4;
while i:=1 to 5 do
begin
y:=a[i]*a[i]*a[i]+2*sqr(sin(sqr(a[i]+3)));
writeln ('a[',i,']=', a[i]:6:2, 'y=',y:6:2);
writeln (LST, 'y=', y:6:2);
end;
End.
Вот, попыталась исправить.
Во-первых,
Задание списано с методички, а верно ли его составили я уж не знаю( Хорошо, буду думать как правильно исправить
Program zad_2_2;
USES PRINTER;
Var x,y: real;
i: integer;
a: array [1..5] of real;
Begin
a[1]:=1.2;
a[2]:=2.2;
a[3]:=3.0;
a[4]:=8.0;
a[5]:=3.4;
while i>=1 and <= 5 do
begin
y:=a[i]*a[i]*a[i]+2*sqr(sin(sqr(a[i]+3)));
writeln ('a[',i,']=', a[i]:6:2, 'y=',y:6:2);
writeln (LST, 'y=', y:6:2);
end;
End.
Program zad_2_1;
USES PRINTER;
Var x, y: real;
Begin
x:=0;
for x:=5 to 1 do
begin
y:=x*x*x + 2sqr(sin(sqr(x+3)));
writeln ('x=', x:6:2, 'y=', y:6:2);
writeln (LST, 'x=', x:6:2, 'y=',y:6:2);
x:=x+0,5:
end;
End.
А теперь правильно?
Program zad_2_2;
USES PRINTER;
Var x,y: real;
i: integer;
a: array [1..5] of real;
Begin
a[1]:=1.2;
a[2]:=2.2;
a[3]:=3.0;
a[4]:=8.0;
a[5]:=3.4;
while (i>=1) and (i<= 5) do
begin
y:=a[i]*a[i]*a[i]+2*sqr(sin(sqr(a[i]+3)));
writeln ('a[',i,']=', a[i]:6:2, 'y=',y:6:2);
writeln (LST, 'y=', y:6:2);
end;
End.
Вторая задача неверна, поскольку x - параметр цикл, он не может быть вещественным числом.
Program zad_2_1;
USES PRINTER;
Var y: real;
x: integer;
Begin
x:=0;
for x:=5 to 0 do
begin
y:=x*x*x + 2sqr(sin(sqr(x+3)));
writeln ('x=', x:6:2, 'y=', y:6:2);
writeln (LST, 'x=', x:6:2, 'y=',y:6:2);
x:=x+0,5:
end;
End.
А если так исправить? посмотрела подобные примеры вроде бы так должно быть.
В 2_2 еще ошибка: i не меняется.
В 2_1 при первом же проходе цикла x станет 5,5 - не integer. Отделите параметр цикла от аргумента функции, используйте разные переменные.
Если в цикле с параметром первое значение больше второго, то вместо to используется downto.
В 2_2 еще ошибка: i не меняется. - Я тут не совсем разберусь если честно.
Program zad_2_1;
USES PRINTER;
Var x,y: real;
i: integer;
Begin
x:=0;
for i:=5 to 10 do
begin
y:=x*x*x + 2sqr(sin(sqr(x+3)));
writeln ('x=', x:6:2, 'y=', y:6:2);
writeln (LST, 'x=', x:6:2, 'y=',y:6:2);
x:=i*0,5:
end;
End.
В паскале вроде работает, но не уверенна в правильности. Я уже совсем запуталась(
В 2_1 есть ошибки. Вот верный код:
в 2_2 достаточно добавить в конец цикла, прямо перед end строчку
Inc(i);
Спасибо Вам огромное!!! До меня теперь дошло немного. А про случай в задаче 2_2 надо будет поискать материал, очень Вам благодарна!))
Пожалуйста))
Но вообще вот так делать - это что-то не то...
На мой взгляд ошибка закралась в само задание, потому что так делать не совсем правильно.
Перебирать элементы массива надо for'ом, а изменять величину до наступления значения - в цикле while.
Но... какое есть, такое и сделали)
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)