Выпуск № 903 от 08.06.2009, 07:35
Администратор рассылки: Калашников О.А., Руководитель
В рассылке: подписчиков - 338, экспертов - 147
В номере: вопросов - 3, ответов - 3
Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке: оценить выпуск >>
Вопрос № 168791: Уважаемые эксперты помогите решить такую задачу: Дан линейный связный список, содержащий целые числа. Создать программу вычисления среднего геометрического элементов списка. Начертить блок схему программы. Привести пример выполнения такой програм...
Вопрос № 168794: Доброе время суток, уважаемые эксперты, помогите пожалуйста описания для функций составить: т.е. как эти функции работают... :) В общем, это парад планет, можель солнечной системы, с графом надеюсь разберетесь? :) Т.е. я тут немного уже разобр...
Вопрос № 168815: Помогите пожалуйста с вычислением значений следующих функций на ЯП Паскаль: 1) Y=5*x*arccos(x)+0.5*sin(x)*sin(x)*sin(x) 2) Y=5*sin(5*x)*sin(5*x)*sin(5*x)-sh(x) 3) Y=5*arcsin(x)+3*x-10*x*x*x заранее благодарен)...
Вопрос № 168791:
Уважаемые эксперты помогите решить такую задачу: Дан линейный связный список, содержащий целые числа. Создать программу вычисления среднего геометрического элементов списка. Начертить блок схему программы. Привести пример выполнения такой программы.
Отвечает _Ayl_, 4-й класс :
Здравствуйте, Боев Константин Геннадиевич.
Среднее геометрическое есть корень n-й степени из произведения элементов списка, где n - число элементов. Будем считать, что среди элементов списка нет нулевого (заодно это даст признак окончания ввода чисел). Будем запрашивать у пользователя ввод целых чисел до того момента, пока он не введет 0, и помещать из в список. Список формируется по принципу стека (помещение очередного элемента производится в голову списка), т.к. это наиболее простая операция,
а никаких требований к списку не указано. После того, как список сформирован, выполняется вычисление произведения. Если не вводить слишком больших чисел или слишком много, то размера LongInt должно хватить. При необходимости тип переменной s можно изменить на Real или даже Double. Важно установить вначале переменную s в единицу для вычисления произведения. Выражение s^(1/n) вычисляется как e^(1/n*ln(s)).
Приложение:
Ответ отправил: _Ayl_, 4-й класс
Ответ отправлен: 02.06.2009, 19:44
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 250278
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 168794:
Доброе время суток, уважаемые эксперты, помогите пожалуйста описания для функций составить: т.е. как эти функции работают... :) В общем, это парад планет, можель солнечной системы, с графом надеюсь разберетесь? :) Т.е. я тут немного уже разобрал, но еще дофигища осталось, мне вот интересно как точно можно описать работу переменных d1, d2, d3 и т.д. Желательно описать все функции и процедуры, заранее спасибо.
Var grDriver,grMode,ErrCode: Integer; {переменные для инициализации графического режима} t,i,j: Integer; d1,d2,d3,d4,d5,d6,d7,d8,s3:Real;{massa} ZwX,ZwY:Array[1
..q1] of Integer; KingX,KingY:Array[1..q2] of Integer; X,Y,SpX,SpY,Rad,RadS: Array[1..n] of Integer;{координатные переменные} allfa,fi,beta,ds:Real; ch:Char; k1,k2:Byte;
PROCEDURE Dvigenie(Xc,Yc,u,i:Integer; zz,fi:real; Var X1,Y1:Integer); {процедура изменения положения планет} Var x,y:Integer; Begin x:= Round(u*cos(zz)); y:= Round(i*sin(zz)); X1:=Round(Xc+x*cos(fi)-y*sin(fi)); Y1:=Round(Yc+x*sin(fi)+y*cos(fi)); End;
PROCEDURE
Zwet(l:Integer);{процедура изменения цвета и стиля планет} Begin SetColor(l);{установка цвета заливки} SetFillStyle(1,l);{установка стиля заливки} End;
BEGIN { B E G I N } grDriver := Detect;{определение графического драйвера} InitGraph(grDriver ,grMode,'EGAVGA.BGI');{инициализация графического режима} ErrCode := GraphResult; IF ErrCode = grOk Then{если графика инициализирована правильно} BEGIN d1:=0; d2:=0
; d3:=180; d4:=90; d5:=270; d6:=200; d7:=300; d8:=130; {diametr planet} s3:=0; SetBkColor(Fon);{установка текущего фона} ClearDevice;{очистить экран} For t:=1 to 360*50 do Begin fi:=pi/2; {орбита движения}
Zwet(14); {установка цвета и стиля} FillEllipse(XZent,YZent,30,30);{рисование солнца }
Zwet(10); {установка цвета и стиля} d1:=d1+20.8; {масса} allfa:=d1*pi/180; {скорость движения задается от d1} Rad[1]:=Round(2+1*cos(allfa));{размер
задается от allfa} Dvigenie(XZent,YZent,20,60,allfa,fi,X[1],Y[1]); {получение координат} FillEllipse(X[1],Y[1],Rad[1],Rad[1]); {рисование планеты}
Zwet(9); d6:=d6+1.35; allfa:=d6*pi/180; Rad[6]:=Round(7+5*cos(allfa)); Dvigenie(XZent,YZent,120,190,allfa,fi,X[6]
,Y[6]); For j:=1 to (Rad[6]-5) do Ellipse(X[6],Y[6],0,180,Rad[6]+2+j,Rad[6]+j-6); Zwet(8); FillEllipse(X[6],Y[6],Rad[6],Rad[6]); Zwet(9); For j:=1 to (Rad[6]-5) do Ellipse(X[6],Y[6],180,360,Rad[6]+2+j,Rad[6]+j-6);
If Keypressed Then{если нажата клавиша} begin ch:=ReadKey; If (ch
=#27)Or(ch=#13) then begin{вывод текста} MoveTo(130,200); SetColor(12); OutText('<< THE PROGRAM IS STOPED NOW ! >>'); MoveTo(130,215); OutText('<< Autor: Alexey Yrin >>'); MoveTo(130,230); OutText('<< Press Any Key to exit >>'); ReadKey; Exit; end; end;
For j:= 1 to q2 do{Звезды} If Random(3)=1 then Begin PutPixel(KingX[j]+XZent,KingY[j]+YZent,Fon); beta:=Random(360)*pi/180; KingX[j]:=Round((30+Random(2))*sin(beta)); KingY[j]:=Round((30+Random(2))*cos(beta)); PutPixel(KingX[j]+XZent,KingY[j]+YZent,14); End;
Delay(Zadergka); Zwet(Fon);{Закрашивание планет перед следующей прорисовкой}
FillEllip
se(X[1],Y[1],Rad[1],Rad[1]); FillEllipse(X[2],Y[2],Rad[2],Rad[2]); FillEllipse(X[3],Y[3],Rad[3],Rad[3]); FillEllipse(SpX[3],SpY[3],RadS[3]+1,RadS[3]+1); FillEllipse(X[4],Y[4],Rad[4],Rad[4]); FillEllipse(X[5],Y[5],Rad[5],Rad[5]); For j:=1 to (Rad[6]-5) do Ellipse(X[6],Y[6],0,180,Rad[6]+2+j,Rad[6]+j-6); FillEllipse(X[6],Y[6],Rad[6],Rad[6]); For j:=1 to (Rad[6]-5) do Ellipse(X[6],Y[6],180,360,Rad[6]+2+j,Rad[6]+j-6); FillEllipse(X[7],Y[7],Rad[7],Rad[7]);
FillEllipse(X[8],Y[8],Rad[8],Rad[8]); FillEllipse(X[9],Y[9],Rad[9],Rad[9]);
If Random(5)=1 then Begin For i:=1 to q1 do Begin PutPixel(ZwX[i],ZwY[i],14+Random(2)); If Random(10)=1 then Begin PutPixel(ZwX[i],ZwY[i],Fon); { ‡ўҐ§¤л } ZwX[i]:=Random(640); ZwY[i]:=Random(480); End;
End; End;
End;
END ELSE Writeln('Graphics error:', GraphErrorMsg(ErrCode));{Иначе вывести номер ошибки} END. { E N D . }
Uses Crt,Graph; {используемые модули} Const {Блок объявления констант} n=9; q1=400;
q2=5000; {константы. N - кол-во планет. q1 - кол-во координат звезд, влияет на размерность массива координат.} XZent=320; YZent=240; Fon=0 {1,8 or 0}; {координаты центра окна и цвет фона по умолчанию} Zadergka=3000; {Задержка перед перерисовкой. В документаци сказано, что указывается в милисекундах т.е. 1000 это 1 секунда. На деле это не так, в большей степени зависит от производительноти компьютера.}
Var {Блок объявления переменых} grDrive
r,grMode,ErrCode: Integer; {переменные для инициализации графического режима} t,i,j: Integer; {Переменные индексов счетчиков} d1,d2,d3,d4,d5,d6,d7,d8,s3:Real;{"Начало" пути планет и луны} ZwX,ZwY:Array[1..q1] of Integer; {Объявление массива координат звезд} KingX,KingY:Array[1..q2] of Integer; X,Y,SpX,SpY,Rad,RadS: Array[1..n] of Integer;{Массивы координат цетров планет, центра Луны, радиусов планет и Луны} allfa,fi,beta,ds:Real; {Углы эклиптики. Или если проще угл
на котором данная планета находится (в текущий момент времени) относительно своей орбиты (элипсоиды)} ch:Char; {Переменная символа} k1,k2:Byte; {Скорее всего отладочные переменные забытые автором}
PROCEDURE Dvigenie(Xc,Yc,u,i:Integer; zz,fi:real; Var X1,Y1:Integer); {процедура изменения положения планет} Var x,y:Integer; Begin x:= Round(u*cos(zz)); y:= Round(i*sin(zz)); X1:=Round(Xc+x*cos(fi)-y*sin(fi)); Y1:=
Round(Yc+x*sin(fi)+y*cos(fi)); End;
PROCEDURE Zwet(l:Integer);{процедура изменения цвета и стиля планет} Begin SetColor(l);{установка цвета заливки} SetFillStyle(1,l);{установка стиля заливки} End;
BEGIN { Собственно говоря начало программы} grDriver := Detect;{определение графического драйвера} InitGraph(grDriver ,grMode,'EGAVGA.BGI');{инициализация графического режима} ErrCode := GraphResult; {Возврат в переменую кода ошибки} IF
ErrCode = grOk Then{если графика инициализирована правильно} BEGIN d1:=0; d2:=0; d3:=180; d4:=90; d5:=270; d6:=200; d7:=300; d8:=130; {Я так понял это планеты в порядке: Меркурий, Венера, Земля, Марс, Юпитер, Сатурн, Уран, Нептун. Плутон не вкючен из-за своих особенностей, и обсчитывается он отдельно, без начальных данных. Больше всего это похоже на параметр "Начала" пути.} s3:=0; {Параметр Луны} SetBkColor(Fon);{установка текущего фона} ClearDevice;{очистить экран} For t:=1 to 360*50 do {Не понятно, почему цикл 360*50. Больше похоже на то, что число взято просто для длительного отображения "галактики"} Begin fi:=pi/2; {Непонятно зачем автор внес в цикл переменную. Ее можно задать и раньше. В теле цикла она не меняет свое значение, следовательно и обновлять ее не имеет смысла.}
Zwet(14); {установка цвета и стиля рисования солнца} FillEllipse(XZent,YZent,30,30);{рисование солнца}
Zwet(10); {установка цвета и стиля рисования Меркурия} d1:=d1+20.8; {*масса* На массу это не похоже, т.к. в течения цикла увеличивается. Похоже на пройденый путь по окружности.} allfa:=d1*pi/180; {Расчитывается положение по орбите} Rad[1]:=Round(2+1*cos(allfa));{Задается радиус планеты в зависимости от положения на орбите.} Dvigenie(XZent,YZent,20,60,allfa,fi,X[1],Y[1]); {получение координат} FillEllipse(X[1],Y[1],Rad[1],Rad[1]
); {рисование планеты} {Далее идет повторение действия с расчетом координат планет и их прорисовкой} Zwet(3); d2:=d2+8.2; allfa:=d2*pi/180; Rad[2]:=Round(3+2*cos(allfa)); Dvigenie(XZent,YZent,40,90,allfa,fi,X[2],Y[2]); FillEllipse(X[2],Y[2],Rad[2],Rad[2]);
Zwet(9);{земля} d3:=d3+5; allfa:=d3*pi/180; Rad[3]:=Round(3+2*cos(allfa)); ds:=cos(allfa); {Расчет радиуса Луны} Dvigenie(XZent,YZent,60,110,allfa,fi,X[3],Y[3]);
FillEllipse(X[3],Y[3],Rad[3],Rad[3]); Zwet(7);{Луна} s3:=s3+50; allfa:=s3*pi/180; RadS[3]:=Round(ds); Dvigenie(X[3],Y[3],6,8,allfa,fi,SpX[3],SpY[3]); {Движение Луны} If RadS[3]<=0 then PutPixel(SpX[3],SpY[3],7) {Если диаметр Луны менньше нуля то рисуеем ее как точку, иначе как элипс} Else FillEllipse(SpX[3],SpY[3],RadS[3],RadS[3]);
Zwet(9); d6:=d6+1.35; allfa:=d6*pi/180; Rad[6]:=Round(7+5*cos(allfa)); Dvigenie(XZent,YZent,120,190,allfa,fi,X[6],Y[6]);
For j:=1 to (Rad[6]-5) do {Тут происходит прорисовка колец Сатурна все по тому же принципу} Ellipse(X[6],Y[6],0,180,Rad[6]+2+j,Rad[6]+j-6); Zwet(8); FillEllipse(X[6],Y[6],Rad[6],Rad[6]); Zwet(9); For j:=1 to (Rad[6]-5) do Ellipse(X[6],Y[6],180,360,Rad[6]+2+j,Rad[6]+j-6);
If Keypressed Then{если
нажата клавиша проверяем что за клавиша. Если Enter или Esc то выводим сообщение ждем нажатия клавиши и выходим.} begin ch:=ReadKey; If (ch=#27)Or(ch=#13) then begin{вывод текста} MoveTo(130,200); SetColor(12); OutText('<< THE PROGRAM IS STOPED NOW ! >>'); MoveTo(130,215); OutText('<< Autor: Alexey Yrin
>>'); MoveTo(130,230); OutText('<< Press Any Key to exit >>'); ReadKey; Exit; end; end;
For j:= 1 to q2 do{"Рендомно" рисуются звезды. Суть почти такая же. } If Random(3)=1 then Begin PutPixel(KingX[j]+XZent,KingY[j]+YZent,Fon); {Закрашивание звезд из предыдущего захода. Достаточно интересное решение. Пространство становится "живым"}
beta:=Random(360)*pi/180; {Опять случайное положение} KingX[j]:=Round((30+Random(2))*sin(beta)); {Координаты X и Y} KingY[j]:=Round((30+Random(2))*cos(beta)); PutPixel(KingX[j]+XZent,KingY[j]+YZent,14); {И собственно рисование.} End;
Delay(Zadergka); {Задержка перед перерисовкой.} Zwet(Fon);{Закрашивание планет перед следующей прорисовкой, цветом фона, заданного по умолчанию.}
Fi
llEllipse(X[1],Y[1],Rad[1],Rad[1]); FillEllipse(X[2],Y[2],Rad[2],Rad[2]); FillEllipse(X[3],Y[3],Rad[3],Rad[3]); FillEllipse(SpX[3],SpY[3],RadS[3]+1,RadS[3]+1); FillEllipse(X[4],Y[4],Rad[4],Rad[4]); FillEllipse(X[5],Y[5],Rad[5],Rad[5]); For j:=1 to (Rad[6]-5) do Ellipse(X[6],Y[6],0,180,Rad[6]+2+j,Rad[6]+j-6); FillEllipse(X[6],Y[6],Rad[6],Rad[6]); For j:=1 to (Rad[6]-5) do Ellipse(X[6],Y[6],180,360,Rad[6]+2+j,Rad[6]+j-6);
FillEllipse(X[7],Y[7],Rad[7],Rad[7]); FillEllipse(X[8],Y[8],Rad[8],Rad[8]); FillEllipse(X[9],Y[9],Rad[9],Rad[9]);
If Random(5)=1 then {Тут рисуются звездочки других цветов. А так же генерятся координаты для звезд на следующем заходе.} Begin For i:=1 to q1 do Begin PutPixel(ZwX[i],ZwY[i],14+Random(2)); If Random(10)=1 then Begin PutPixel(ZwX[i],ZwY[i],Fon);
{ Звезды } ZwX[i]:=Random(640); ZwY[i]:=Random(480); End; End; End;
End;
END ELSE Writeln('Graphics error:', GraphErrorMsg(ErrCode));{Иначе вывести номер ошибки} END. { Конец. }
Надеюсь, что смог помочь. Лично мне очень понравилась программа. При желание ее можно доделать и получится в полне красиво.
----- Пришел, увидел, развернулся и ушел...
Ответ отправил: Сарумян, Студент
Ответ отправлен: 03.06.2009, 08:51
Оценка ответа: 5
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 250300
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 168815:
Помогите пожалуйста с вычислением значений следующих функций на ЯП Паскаль: 1) Y=5*x*arccos(x)+0.5*sin(x)*sin(x)*sin(x) 2) Y=5*sin(5*x)*sin(5*x)*sin(5*x)-sh(x) 3) Y=5*arcsin(x)+3*x-10*x*x*x заранее благодарен)
Учите математику: arcsin(x)=arctan(x/sqrt(1-sqr(x))), при abs(x)<1 или =pi/2, при abs(x)=1, неопределено при abs(x)>1 arccos(x)=pi/2-arcsin(x), при abs(x)<1 или =0, при abs(x)=1, неопределено при abs(x)>1 sh(x)=(exp(x)-exp(-x))/2
Из вышесказанного вычисление каждой из ваших функций можно представить так (думаю это вы и сами сможете написать):
Код:
Y2:=5*sin(5*x)*sin(5*x)*sin(5*x)-(exp(x)-exp(-x))/2; {так как sh(x) определен для любого x}
if abs(x)<1 then begin Y1:=5*x*(pi/2-arctan(x/sqrt(1-sqr(x))))+0.5*sin(x)*sin(x)*sin(x); Y3:=5*arctan(x/sqrt(1-sqr(x)))+3*x-10*x*x*x; end else if abs(x)=1 then begin Y1:=0.5*sin(x)*sin(x)*sin(x); {т.к. arccos(abs(1))=0} Y3:=5*pi
/2+3*x+10*x*x*x; {т.к. arcsin(abs(1))=pi/2} else begin {Функции 1 и 3 неопределены для abs(x)>1} end;
Ответ отправил: Тимошенко Дмитрий, Студент
Ответ отправлен: 02.06.2009, 23:06
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 250290
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке: оценить выпуск >>
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.