Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите, пожалуйста, написать на Паскале программу "Циклический алгоритм" (http://www.tehnari.ru/f41/t79602/)

Alexei18 22.10.2012 19:02

Помогите, пожалуйста, написать на Паскале программу "Циклический алгоритм"
 
Распечатать таблицу значений W при изменении перменных величин a и x в данных промежутках с данными шагами:
An=0.3 , Ak=0.7 , Xn=0.1 , Xk=0.2 , m=3 , n=2
W=max{3*arctg(ax);√(a^2+b^2 );arcos(a+ x/10)}

An≤A≤Ak , Ha=(Ak-An)/m
Xn≤X≤Xk, Hx=(Xk-Xn)/n

Помогите пожалуйста ни как не могу сделать...

XELFAER 22.10.2012 19:15

что именно не выходит? Покажите ваш пример решения..

Alexei18 22.10.2012 20:23

program lab2;
var
A,An,Ak,X,Xn,Xk,Ha,Hx,Hn,Hk,W:real;
function max(b,c:real):real;
begin
if b<c then max:=b;
writeln('vvedi An,Ak,Ha');
readln(An,Ak,Ha);
writeln('vvedi Xn,Xk,Hx');
readln(Xn,Xk,Hx);
writeln('èñõîäíûå äàííûå');
writeln('An=',An:5:2,'Ak=',Ak:5:2);
writeln('Xn=',Xn:5:2,'Xk=',Xk:5:2);
writeln('Hn=',Hn:5:2,'Hk=',Hk:5:2);
writeln('òàáëèöà çíà÷åíèé');
writeln('W':9,'A':9,'X':9);
A:=An;
repeat
X:=Xn;
repeat
W:=max(3*arctan(a*x));sqrt(sqr(a)+sqr(x));arctan(s qrt(1-sqr(x))/x*(a+x/10));
writeln(W:7:2,A:7:2,X:7:2);
X:=X+Hx
untilX>Xk;
A:=A+Ha
untilA>Ak;
writeln('Wmax=',Wmax:7:2);
writeln('Amax=',Amax:7:2);
writeln('Xmax=',Xmax:7:2);
end.

Alexei18 22.10.2012 20:24

W:=max(3*arctan(a*x)) после этого пишет "ошибка неверное колличество фактических параметров"

Vladimir_S 22.10.2012 20:47

Цитата:

Сообщение от Alexei18 (Сообщение 808517)
W:=max(3*arctan(a*x)) после этого пишет "ошибка неверное колличество фактических параметров"

Естественно! Вы же описали функцию выбора максимальной из ДВУХ величин, а пытаетесь впихнуть ТРИ! Да и функцию Вы недоописали, а бросили на полпути. И к тому же при обращении к функции параметры перечисляются через запятую, а не точку с запятой. В общем - ошибка на ошибке.

Да... смотрю, Вы ни в задаче, ни в Паскале толком не разобрались.
Сейчас вынужден отключиться, если терпит до завтра, попробую объяснить, как решать эту задачу.

Alexei18 22.10.2012 21:06

конешно потерплю, спасибо большое!!!

Vladimir_S 23.10.2012 11:11

Вложений: 1
Цитата:

Сообщение от Alexei18 (Сообщение 808555)
конешно потерплю, спасибо большое!!!

Ну, поехали.
Прежде всего, выражаю своё КРАЙНЕЕ неудовольствие Вашей неряшливостью при выкладывании задания. Откуда вдруг взялся параметр b? Что за b? Ну ладно, будем считать, что b - это x.
Для решения задачи нам нужно запрограммировать целый ряд функций. Функция - это в какой-то мере автономный раздел программы, и пишется строго по определенным правилам. Она содержит название (заголовок), перечень формальных параметров с указанием их форматов, а также формат результата, т.е. значения самой функции. Это всё - содержимое первой строки. Далее, как и в программе, там при необходимости вводится раздел описания внутренних (служебных) переменных - они существуют только внутри функции, основная программа их не видит - и, собственно, тело функции, заключенное в операторные скобки begin-end. При обращении к функции из программы на место формальных параметров подставляются фактические, причем в том же количестве, в тех же форматах и в том же порядке, что и формальные. А теперь посмотрите, что Вы написали... Итак, нам понадобятся:
1. Функция ArcCos, потому что в состав стандартных функций Паскаля она не входит.
2. Функция нахождения максимального из двух чисел. Вообще-то нам понадобится выбор максимального из трех значений, и можно написать и такую функцию, но это будет довольно громоздко, поэтому в программе делается так: сравниваются два числа, а потом максимальное из них сравнивается с третьим.
3. Все три математических выражения в фигурных скобках тоже удобно оформить в виде функций.
Теперь, собственно, смысл задания. Составляем таблицу, причем договоримся, что строки соответствуют значениям х, а столбцы - значениям а. На пересечениях поместим максимальные значения из трех функций, вычисленных при данных х и а. В конце поставим readln, чтобы приостановить выполнение программы и посмотреть на результат.
Код:

Const
 An=0.3;
 Ak=0.7;
 Xn=0.1;
 Xk=0.2;
 m=3;
 n=2;

Var
 i,j:byte;
 W,Ha,Hx,a,x:real;

Function ArcCos(X:real):real;
begin
 if X=1 then ArcCos:=0 else
 if X=-1 then ArcCos:=Pi else
 ArcCos:=(Pi/2)-ArcTan(X/SQRT(1-X*X));
end;

Function Max(g1,g2:real):real;
begin
 if g1>g2 then Max:=g1 else Max:=g2;
end;

Function F1(a1,x1:real):real;
begin
 F1:=ArcTan(a1*x1)*3;
end;

Function F2(a2,x2:real):real;
begin
 F2:=Sqrt(Sqr(a2)+Sqr(x2));
end;

Function F3(a3,x3:real):real;
begin
 F3:=ArcCos(a3+x3/10);
end;

Begin
 Ha:=(Ak-An)/m;
 Hx:=(Xk-Xn)/n;
 Write('  x\a  ');
 For j:=0 to m do Write((An+Ha*j):7:3);
 Writeln;
 For i:=0 to n do
  begin
  Write((Xn+Hx*i):7:3);
  For j:=0 to m do
    begin
    a:=An+Ha*j;
    x:=Xn+Hx*i;
    W:=Max(Max(F1(a,x),F2(a,x)),F3(a,x));
    Write(W:7:3);
    end;
  Writeln;
  end;
 Readln
End.


Alexei18 23.10.2012 16:12

это решение всего моего примера???

Vladimir_S 23.10.2012 16:25

Цитата:

Сообщение от Alexei18 (Сообщение 808899)
это решение всего моего примера???

А что Вас так удивляет? Мало? Много? Как задача сформулирована, так и решена. :tehnari_ru_325:

Alexei18 23.10.2012 16:27

всю хорошо я просто поинтересовался, Огромная вам благодарность!!!, сам бы я такого ни когда не сделал.


Часовой пояс GMT +4, время: 19:58.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.