![]() |
#1 (permalink) |
Sparkling
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
|
![]() Помогите доделать. Необходимо написать программу в диалоговом режиме с модулями. Вот мой математический код. Код HTML:
Program Hel;
uses crt;
var
y1,y2,y3,y4,z,x,c1:real;
c:integer;
begin
writeln('vvedite x:');
read(x);
z:=0;
y3:=0;
if 3<=x
then
c1:=1;
if x<=9
then
c1:=c1+1;
if c1=2
then
begin
writeln('Formula №1');
y1:=(2*x*x+3*x+1)/(x+cos(x)*cos(x));
y2:=(2*sin(x))*(sin(x));
z:=y1*y1+y2;
end
else
if x>9
then
begin
writeln('Formula №2');
y3:=(sin(x)/cos(x)+x+exp(-x));
y4:=(2*sin(x))*(sin(x));
z:=y3*y3+y4;
end
else
writeln('error argument interval');
writeln('z=',z:8:2);
end.
|
![]() |
![]() |
![]() |
|
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Поищите информативные ответы в похожих темах Ждущий режим Полноэкранный режим Спящий режим |
![]() |
#2 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,775
Записей в дневнике: 71
Сказал(а) спасибо: 163
Поблагодарили 201 раз(а) в 85 сообщениях
Репутация: 75660
|
![]()
Диалоговый режим подразумевает влияние человека на ход вычислений. Для данной задачи диалог может заключаться в запросе с клавиатуры начального, конечного значений x и дельта x, а выходной диалог - в выводе результатов вычислений в виде таблицы значений. Соответственно, тут же нужно будет предусмотреть диалог сообщения об ошибки вычислений.
__________________
Убить всех человеков! |
![]() |
![]() |
![]() |
#4 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,775
Записей в дневнике: 71
Сказал(а) спасибо: 163
Поблагодарили 201 раз(а) в 85 сообщениях
Репутация: 75660
|
![]()
Остальное - неправильно сделано, листинг не подходит к заданию.
1) Условие нужно составлять, исходя из значений переменных. Выражение 3<=x неверно, так как нельзя сравнивать число с переменной, можно только обратно, переменную с числом, вот так правильно: if x>=3 ... Совершенно непонятно, откуда вы взяли числа 3 и 9, если у вас по заданию Х должен быть >=0 но <=5 для первого варианта и >5 для второго варианта уравнения y1 системы. 2) Функции совершенно не подходят для вашего задания. 3) Нет изменения значения переменной X от начального до конечного с указанным приращением. Нет вывода вычисленного значения Z. 4) IMHO, легче написать программу с нуля, чем пытаться исправить предложенный листинг. Судя по всему, вы совершенно не представляете себе сути задания и не видите способов решения.
__________________
Убить всех человеков! |
![]() |
![]() |
![]() |
#5 (permalink) |
Sparkling
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
|
![]()
Я не своё условие вам нечаянно выложила. Цифры тут не важны, Важен факт, алгоритм работы чтобы был правилен.
|
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
#6 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,775
Записей в дневнике: 71
Сказал(а) спасибо: 163
Поблагодарили 201 раз(а) в 85 сообщениях
Репутация: 75660
|
![]()
Невозможно судить о правильности алгоритма, не имея перед глазами условия задачи. Если оно совпадает с выложенным - вам не хватает цикла.
__________________
Убить всех человеков! |
![]() |
![]() |
![]() |
#8 (permalink) |
Banned
Регистрация: 25.01.2011
Сообщений: 27
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
![]()
Вот 2 варианта решения который верен логически выбирайте сами.
Код:
Program Hel; uses crt; Var t,a,z,y1,y2:real; i,x1,x2,x:integer; Begin Writeln('Введите x begin'); Readln(x); Writeln('Введите x end'); Readln(x1); Writeln('Введите шаг х'); Readln(x2); if ((x<=0) or (x<=5)) then begin for i:=x to x1 do begin if x>x1 then break; y1:=((3*sqr(x)+(2*x))/(2*exp(x))); y2:=(2*y1*cos(x)*cos(x)*cos(x)); z:=(sqrt(sqr(y1)+y2)); x:=x+x2-1; end; end else begin for i:=x to x1 do begin if x>x1 then break; y1:=((5*x)+(sqr(x)*cos(x))); y2:=(2*y1*cos(x)*cos(x)*cos(x)); z:=(sqrt(sqr(y1)+y2)); x:=x+x2-1; end; end; Writeln('функция равна',z:3:10); Readln; end. Код:
Program Hel; uses crt; Var t,a,z,y1,y2:real; i,x:integer; Begin Writeln('Введите x begin'); Readln(x); if ((x<=0) or (x<=5)) then begin y1:=((3*sqr(x)+(2*x))/(2*exp(x))); y2:=(2*y1*cos(x)*cos(x)*cos(x)); z:=(sqrt(sqr(y1)+y2)); end else begin y1:=((5*x)+(sqr(x)*cos(x))); y2:=(2*y1*cos(x)*cos(x)*cos(x)); z:=(sqrt(sqr(y1)+y2)); end; Writeln('Функция равна ',z:3:10); Readln; end. |
![]() |
![]() |
![]() |
#9 (permalink) | ||||
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
![]()
Нет. Валидол мне не нужен - я спокоен, как форель в озере. И абсолютно спокойно, хоть и с сожалением, отправляю Вас, сударь, в вечный бан. Потому что не намерен терпеть дальше Ваши выходки. Как говорится, Господь свидетель - я сделал всё возможное, чтобы не доводить ситуацию до подобной крайности: пытался Вас увещевать, взывал к чувству ответственности, чуть не умолял не выкладывать сырые неотлаженные программы с кучей ошибок... Тщетно. Так что, дорогой троллёныш, увы: Вы мне выбора не оставляете.
Напоследок разберем Ваши очередные изделия. Вариант 1: Цитата:
А вот дальше пошла ахинея. Цитата:
Цитата:
Цитата:
Думаю, разбирать второй аналогичный "шедевр" - смысла нет. Прощайте. Ну а мне, увы, придется, исключительно в видах поддержания репутации форума, выложить решение задачки. В следующем посте. |
||||
![]() |
![]() |
![]() |
#10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
![]()
Теперь по задаче.
Прежде всего - мною обнаружена ошибка в условии. Рассмотрим, например, значения функций при х=2.5: у1=0.9748 у2=-1.0024 Таким образом, при вычислении функции z, подкоренное выражение есть у1*у1+у2=-0.0523, т.е. оно ОТРИЦАТЕЛЬНО, а значит при выполнении программы неизбежно возникнет ошибка. Как я предполагаю, скорее всего там опечатка, и под корнем стоит, например, сумма квадратов у1 и у2. Если так, то: Код:
VAR Xmin,Xmax,Dx,x:Real; i,N:Integer; Function Y1(x1:Real):Real; begin if x1<=5 then Y1:=(x1*x1*3+x1*2)/2/Exp(x1) else Y1:=x1*5+x1*x1*Cos(x1); end; Function Y2(x2:Real):Real; begin Y2:=Y1(x2)*2*Cos(x2)*Cos(x2)*Cos(x2); end; Function Z(x3:Real):Real; begin Z:=SQRT(SQR(Y1(x3))+SQR(Y2(x3))); end; BEGIN Write('Xmin (>=0) = '); ReadLn(Xmin); Write('Xmax (>5) = '); ReadLn(Xmax); Write('Dx = '); ReadLn(Dx); N:=ROUND((Xmax-Xmin)/Dx); For i:=0 to N do begin x:=Xmin+Dx*i; WriteLn(x:5:2, Z(x):12:3); end; ReadLn; END. |
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
Опции темы | |
Опции просмотра | |
|
|