Я тут новенький и очень надеюсь на вашу помощ, еще неделя и нужно сдавать, если не сдам выгонят. Буду жутко признателен тому кто поможет. А отплатить... единственное что могу, так это сделать аватар любой сложности... З.Ы.Хотя сомневаюсь что это кому то нужно сдесь...
Я присоединил изображение...
volvo
8.05.2005 15:59
А поконкретнее? У тебя в задании неизвестно чего понаписано, причем все время есть ссылка на отсутствующие части. Что, трудно правильно поставить задание и не "отксерить" а записать его сюда?
С такой постановкой я думаю что тебе невозможно помочь...
Эх... Вот такие у нас курсовые.. Как можно еще легче написать, если это и есть ксерокс задания...
Может вы мне обьясните при чем сдесь это-
Цитата
Вычислить значения функции ( табл.1) и построить график этой функции для множества дискретных значений , определяемых условиями
График я смогу построить, а вот что значит "для множества дискретных значений"?
volvo
8.05.2005 17:19
Да поймите Вы, я не могу ничего сказать, я же НЕ ВИЖУ табл.1, и кто его знает что там вообще написано???
Floyd
8.05.2005 17:29
Простите... :p2: Только что мне прислали не отксериное задание, а в файле.
Вот я сюда прекрипил, полностью с таблицами.. со всем. Для начала бы разобратся в первом задании.
volvo
8.05.2005 17:54
Цитата(Floyd @ 8.05.05 12:45)
что значит "для множества дискретных значений"?
Это значит в заданных точках, а не на всей области определения функции. То есть, насколько я вижу из задания, нужно будет найти значение функции в 8-ми точках...
Floyd
8.05.2005 18:07
Тоесть, Хі у меня будет 8-м, и для них строить график.. Ок, я буду разбиратся сейчас. Но буду очень благодарен если и вы поможите решить мне эту курсовую..
klem4
8.05.2005 18:27
вот, чтобы ты совсем не грустил, первое задание :
{$n+} uses crt; function f(x:extended):extended; begin f:=x*x; {funkciya} end; var x,h,xStart,xStop,xmin,xmax:extended; n:integer;
Begin clrscr; readln(n); readln(xStart); readln(xStop); h:=(xStop-xStart)/(n-1); x:=xStart; xmax:=x; xmin:=x; while x<=xStop+h/2 do begin if f(x)>f(xmax) then xmax:=x; if f(x)<f(xmin) then xmin:=x; x:=x+h; end; writeln('xmax=',xmax:2:3,' f(xmax)=',f(xmax):2 :3); writeln('xmin=',xmin:2:3,' f(xmin=)',f(xmin):2 :3); readln end.
на интегралы Volvo ссылку дал, а остальное действительно мутновато ..
Floyd
8.05.2005 19:21
klem4 Сижу вот уже часов 6-ть и ни гу-гу=) Огромное спасибо!!! Интегралы сделаю сам, надеюсь... И буду уже тогда ко второму заданию переходить.
volvo
8.05.2005 19:27
Цитата(Floyd @ 8.05.05 15:21)
Интегралы сделаю сам, надеюсь...
Обязательно свой велосипед изобрести? Я же дал ссылку на FAQ ... А там, между прочим, есть программа...
Floyd
8.05.2005 19:29
Не, я не правильно выразился. сори. Естественно я воспользуюсь вашим FAQ. Тока маленький вопрос, у меня функци вот такая
я правильно записал в Паскале? (exp((-1)*ln(sin(sqrt(x)))))/sqrt(x*(1-x)) З.Ы.Ведь arcsin это sin в степени -1?
volvo
8.05.2005 21:08
Цитата(Floyd @ 8.05.05 15:29)
я правильно записал в Паскале? (exp((-1)*ln(sin(sqrt(x)))))/sqrt(x*(1-x)) З.Ы.Ведь arcsin это sin в степени -1?
:no: Это не калькулятор... К сожалению в Паскале отсутствует встроенная функция вычисления арксинуса... Из всех Арков есть только арктангенс, пожтому приходится выражать ArcSin через ArcTan:
Function ArcSin(x: Real): Real; begin If Abs(x) = 1 Then ArcSin := 0 Else ArcSin := ArcTan(x / (1 - Sqr(x))) end;
{ И потом вычисляешь: } y := ArcSin(sqrt(x)) / sqrt(x * (1 - x));
Floyd
8.05.2005 21:38
volvo Хе хе! Так вот в чем заминка, спасибки... пойду продолжу работу...
Floyd
14.05.2005 0:45
Люди помогите решить последние задание... а-то у меня проблемка вышла. ____ Взять интеграл от фунции вот такой http://img185.echo.cx/img185/7906/14lg.gif от a до b. Где a=0.2 и b=0.3. Для вычислений использовать формулу трапеций и еще и формулу Симпсона. И что б ответы совпали... ____ Разве ArcSin := ArcTan(x / (1 - Sqr(x))) .. там еще двока перед иксом должна быть, ведь так? ArcSin := ArcTan(2*x / (1 - Sqr(x)))
____ В общем вот мое решение через процедуру (так в задании написано) которое выдает ошибку плавающей точки..
procedure intg(var int1,int2:real); var h,suma,suma2,suma3,m:real; c:array[1..8] of real; y:array [1..8] of real; i,g,k,q:integer; begin clrscr; c[1]:=0.2; q:=8; h:=0.0125; for i:=2 to 8 do begin c[i]:=c[i-1]+h; for g:=2 to (q-1) do begin c[i]:=c[g]; suma:=c[g]+suma; end; int1:=(h/2)*(2*suma+y[1]+y[q]); {за формулой Трапеции}
for k:=2 to q-1 do begin c[g]:=c[k]; m:= k mod 2; if m=0 then suma2:=suma2+f(c[k]) else suma3:=suma3+f(c[k]); end; end; int2:=(h/3)*(c[1]+4*suma2+2*suma3+c[q]); {а это уже за Симпсоном} writeln(int1); writeln(int2); readln end;
З.Ы. f - это фунция кторую выше написал volvo
volvo
14.05.2005 1:02
Цитата(Floyd @ 13.05.05 20:45)
Разве ArcSin := ArcTan(x / (1 - Sqr(x))) .. там еще двока перед иксом должна быть, ведь так? ArcSin := ArcTan(2*x / (1 - Sqr(x)))
Ничего подобного. Повторяю еще раз:
Цитата
ArcSin(x) = ArcTan(x / Sqrt(1 - Sqr(x)))
Откуда ты взял двойку?
Кстати, где именно выдается ошибка в процедуре ?
Floyd
14.05.2005 2:04
Место ошибки не указывается, если посмотреть что выводит программа, то она выводит следующее. Runtime Error 207 at 04E3:0007 Ошибка именно в этой процедуре, так как я проверял Step`ом
volvo
14.05.2005 2:26
Ты знаешь, я внимательно просмотрел процедуру: по-моему, у тебя неправильно расставлены Begin ... End. Я бы поставил так:
procedure intg(var int1,int2:real); var h,suma,suma2,suma3,m:real; c:array[1..8] of real; y:array [1..8] of real; i,g,k,q:integer; begin clrscr; suma := 0; suma2 := 0; suma3 := 0; { <--- это никогда не помешает } c[1]:=0.2; q:=8; h:=0.0125; for i:=2 to 8 do { begin } { <--- убрать begin } c[i]:=c[i-1]+h; for g:=2 to (q-1) do begin c[i]:=c[g]; suma:=c[g]+suma; end; int1:=(h/2)*(2*suma+y[1]+y[q]); {за формулой Трапеции}
for k:=2 to q-1 do begin c[g]:=c[k]; m:= k mod 2; if m=0 then suma2:=suma2+f(c[k]) else suma3:=suma3+f(c[k]); end;
{ end; } { <--- убрать end }
int2:=(h/3)*(c[1]+4*suma2+2*suma3+c[q]); {а это уже за Симпсоном} writeln(int1); writeln(int2); readln end;
Попробуй это прогнать
Floyd
14.05.2005 4:10
volvo Огромнейшее спасибо! Благодарю, супер! Работает. Вот что вышло. Погрешность очень маленькая вроде, да? Тоесть все правильно! Уря! I= 1.96677122947051E-0002 II= 1.62024424900892E-0001
klem4
14.05.2005 12:30
ты знаешь, я вот тебе советую форматировать вывод вещественных чисел, дабы избежать ответа в экспоненциальной форме, например
writeln(int1:7:5);
те 7 знаков под число, и 5 после запятой. ;)
Floyd
16.05.2005 2:46
Эт я просто показал для наглядности =) Но все равно спасибо.
Floyd
17.05.2005 0:44
Что бы не создавать оттельную тему прошу помоч еще с одной прогой для друга. Задание Составить прогу котороя будет печатать имена студентов и предмет с которого получено "2". _____ Прогу я наисал, но почему то она не пашит =) В обшем, помогите довести прогу до рабочего состояния. Перваую ошибку смотрите в коментариях.
program tp14; uses crt; type danni=record predmet:array [1..5] of string; {предметов берем 5} Mark:array [1..5] of integer; end; studrec=record name:string; end; sub=danni; var student:array [1..8] of studrec; am:array [1..8] of string; k,s,i,n,f,r:integer; min:string; f2,f1:text; Begin assign (f2, 'dano.pas');reset(f2); assign(f1,'rez.pas'); rewrite(f1); n:=0; for i:=1 to 2 do begin s:=0; {возьмем к примеру два студента} with student[i] do begin readln(f, name); for k:=1 to 5 do begin with sub do begin {А вот тут выдает что просит поставить "(" но зачем???)} readln(f2,predmet[k]); end; if student[i].danni.mark[k]=2 then s:=s+1; end; if s=5 then begin n:=n+1; am1[n]:=student[i].name; writeln(f1, am1[n]); end; end; end.
_____ З.Ы.Кстати курсовую я сдал, и все благодаря Вам!
volvo
17.05.2005 2:15
Цитата(Floyd @ 16.05.05 20:44)
А вот тут выдает что просит поставить "(" но зачем???)
Все правильно выдает... У тебя же Sub это не переменная какого-то типа, а само описание типа. И ты не имеешь права его использовать в программе (за одним исключением, только для того, чтобы привести какую - либо переменную к типу Sub). Вот как раз для приведения нужно, чтобы следом за идентификатором типа в скобках шло имя переменной... Поэтому у тебя и просят скобку.
Выход один - объяви переменную типа Sub, и работай с ней...
Floyd
17.05.2005 2:43
Такс, смотри я подправил.. тока не доганяю, например читаю я такую инфу
А прога выдет только одно "down" и все... А вот прога сама
program tp14; {Vykonav Kravets Artem} uses crt; type danni=record predmet:array [1..5] of string; Mark:array [1..5] of integer; end; studrec=record name:string; sub:danni; end; var student:array [1..8] of studrec; sub:array [1..5] of danni; am1:array [1..8] of string; am:array [1..8] of string; k,s,i,n,f,r:integer; min:string; f2,f1:text; Begin assign (f2, 'dano.pas');reset(f2); assign(f1,'rez.pas'); rewrite(f1); n:=0; for i:=1 to 2 do begin s:=0; with student[i] do begin readln(f2, name); for k:=1 to 5 do begin with sub do begin readln(f2,predmet[k]); readln(f2,mark[k]); end; if student[i].sub.mark[k]=2 then s:=s+1; end; if s=5 then begin n:=n+1; am1[n]:=student[i].name; writeln(f1, am1[n]); end; end; end;close(f1); end.
volvo
17.05.2005 3:02
Ну, все правильно выдает... Ты же это и просил:
if s=5 then begin n:=n+1; am1[n]:=student[i].name; writeln(f1, am1[n]); end;
а когда n = 5? Когда 5 двоек !!! У "Гриши"-то не только 2-ки есть
Floyd
17.05.2005 3:09
А понял, я завтыкал =) А как мне дописать что бы еще предмет выводило по которой двойка?
Floyd
27.05.2005 0:35
Люди, помогите пожалуйста, как для выше преведеной проги дописать что бы еще показывало с какого предмета двойка...
volvo
27.05.2005 0:50
Ну, можно просто вместо
if student[i].sub.mark[k]=2 then s:=s+1;
написАть:
if student[i].sub.mark[k]=2 then begin s:=s+1; am[s] := student[i].sub.predmet[k]; end;
и потом не
if s=5 then begin n:=n+1; am1[n]:=student[i].name; writeln(f1, am1[n]); end;
а вот так:
if s > 0 then begin writeln(f1, student[i].name); for j := 1 to s do writeln(f1, am[j]); end;
это будет просто распечатывать для каждого студента, у которого есть 2-ки, по какому предмету они получены...
Floyd
27.05.2005 1:10
Спасибо, я исправил текст вот так
uses crt; type danni=record predmet:array [1..5] of string; Mark:array [1..5] of integer; end; studrec=record name:string; sub:danni; end; var student:array [1..8] of studrec; sub:array [1..5] of danni; am1:array [1..8] of string; am:array [1..8] of string; k,s,i,n,f,r,j:integer; min:string; f2,f1:text; Begin assign (f2, 'dano.pas'); reset(f2); assign(f1,'rez.pas'); rewrite(f1); n:=0; for i:=1 to 2 do begin s:=0; with student[i] do begin readln(f2, name); for k:=1 to 5 do begin with sub do begin readln(f2,predmet[k]); readln(f2,mark[k]); end; if student[i].sub.mark[k]=2 then begin s:=s+1; am1[s] := student[i].sub.predmet[k]; if s > 0 then begin writeln(f1, student[i].name); end; for j := 1 to s do writeln(f1, am1[j]); end; end; end; end; close(f1); end.
А выводит мне вот такое
Grisha pr4 down pr1 down pr1 pr2 down pr1 pr2 pr3 down pr1 pr2 pr3 pr4 down pr1 pr2 pr3 pr4 pr5
Где то неправильно закрыт цыкл... но вот где?
volvo
27.05.2005 1:19
Ну так отформатируй текст как положено - увидишь. С таким расположением как у тебя найти неправильное закрытие просто нереально...
P.S. Это как раз здесь:
if student[i].sub.mark[k]=2 then begin s:=s+1; am1[s] := student[i].sub.predmet[k]; { тут должен быть END }
читай мои сообщения внимательно !
Floyd
27.05.2005 2:16
Спасибо!
Floyd
31.05.2005 23:38
В общем, как я говорл, благодаря Вам я сдал курсач =). А вот мой друг не сдал, почему то не пашит процедура решения интеграла, выдает ошибку Invalid floating operation 207 А в окне пишит Runtime error 207 at 000F:0003 ____ помогите разобратся в чем проблемка.... Интеграл там рещается двумя способами, способом парралелограмма и Симпсона.
program kursova_robota_PM_41_7_variant; {Vykonav Schutskiy Pavlo} uses graph,crt; type vekt=array[1..1000] of real; var n:integer; h,itg,g,t,int1,int2,s1,sh,intg,intgs:real; NN,NK,i:integer; w:text; ci,mi:vekt; const a=0.2; b=0.3; {_______________________________________} function ArcSin(x:real):real; begin if Abs(x) = 1 then ArcSin:=0 else ArcSin:=ArcTan(x/(1-sqr(x))); end; {---------------------------------------------------------------------------}
function f(x:real):real; begin f:=ArcSin(sqrt(x))/sqrt(x*(1-x)); end; {--------------------------------------------------------------------------}
procedure Grafika; var gd, gm: integer; x,y: real; begin gd:=detect; initgraph(gd, gm, ''); SetBkColor(white); SetColor(4); Line(0, 100, 640, 100); Line(320, 0, 320, 480); SetColor(green); outtextxy(50,10,'Kursova Robota'); outtextxy(420,10,'Grafik Funkcii'); outtextxy(50,20,'Vikonav Schutskiy Pavlo'); outtextxy(50,30,'PM-41'); PutPixel(320,240,0); outtextxy(325,245,'0'); x:=0.2; While x<=0.9 do begin y:=ArcSin(sqrt(x))/sqrt(x*(1-x)); PutPixel(round(x*155)+350,round(y*155), 4); x:=x+0.00125; end; repeat until keypressed; cleardevice; closegraph;end; {--------------------------------------------------------------------------} procedure Zn(x,h:real); var c:array[1..8] of real; i:integer; y:real; begin assign(w,'dan.pas'); rewrite(w); writeln(w,'Znachennya funcii dlya kojnogo z X'); x:=0.2; h:=0.0125; for i:=1 to 8 do begin x:=x+h; y:=ArcSin(sqrt(x))/sqrt(x*(1-x)); c[i]:=y; write(w,'f[',i,']=',c[i]:2 :3,' '); end;end; {--------------------------------------------------------------------------} procedure MaxMin(n:integer;h:real); var x,xStart,xStop,xmin,xmax:extended; begin writeln(w,''); writeln(w,'Znahodjennya MAX i MIN funcii:'); xStart:=0.2; xStop:=0.3; x:=xStart; xmax:=x; xmin:=x; while x<=xStop+h/2 do begin if f(x)>f(xmax) then xmax:=x; if f(x)<f(xmin) then xmin:=x; x:=x+h; end; writeln(w,'Maksumalne znachennya funcii=',f(xmax):2 :3); writeln(w,'Minimalne znachennya funcii=',f(xmin):2 :3); writeln(''); end; {----------------------------------------------------------------------} procedure Sum(x,h:real); var Sum,y:real; i:integer; c:array [1..8] of real; begin for i:= 1 to 8 do begin if i>=6 then begin sum:=sum+x; end; x:=x+h; end; writeln(w,'Summa=',sum:3:3);writeln(''); end; {------------------------------------------------------------------------} {nahogdenie integrala} procedure integral(x,y:vekt;var int,ints:real); var summa1,summa2,summa3,h:real;w,k,n,b:integer; begin summa1:=0; summa2:=0; summa3:=0; n:=8; h:=0.0125; w:=0;k:=0;n:=0;b:=0; for k:=2 to n do summa1:=summa1+2*y[k]; int:=(h/2)*(y[1]+summa1+y[n+1]); for w:=2 to n-1 do begin b:=w mod 2; if b=0 then summa2:=summa2+4*y[w] else summa3:=summa3+2*y[w]; end; ints:=(h/3)*(y[1]+summa2+summa3+4*y[n]+y[n+1]); end;
{--------------------------------------------------------------------------} Begin clrscr; Grafika; assign(w,'dan.pas');rewrite(w); n:=8; h:=0.0125; s1:=0.2; Zn(s1,h); MaxMin(n,h); Sum(s1,h); ci[1]:=0; n:=8; h:=0.0125; for i:=2 to (n+1) do begin ci[i]:=ci[i-1]+h; for i:=1 to (n+1) do mi[i]:=f(ci[i]); integral(ci,mi,intg,intgs); end; writeln(w,'Pershiy integral= ',intg:3 :3); writeln(w,'Drugiy integral= ',intgs:3 :3); reset(w); end.
volvo
31.05.2005 23:45
И не будет работать:
function f(x:real):real; begin f:=ArcSin(sqrt(x))/sqrt(x*(1-x)); end; ... ci[1]:=0; for i:=1 to (n+1) do mi[i]:=f(ci[i]); { Деление на 0 как минимум тебе обеспечено... }
Floyd
31.05.2005 23:53
Эх... точно, исправил на 0.2 а n исправил на 7... все равно не пашет...
volvo
1.06.2005 0:13
2 вещи мешают проекту нормально оаботать:
1 - то, что у тебя ОПЯТЬ неверно расставлены скобки begin ... end. На этот раз - здесь:
for i:=2 to (n+1) do { begin } { <-- Убрать begin } ci[i]:=ci[i-1]+h; for i:=1 to (n+1) do mi[i]:=f(ci[i]); integral(ci,mi,intg,intgs); { end; } { <-- Убрать end }
2 - файл открывается дважды и из-за этого вывод в файл работает некорректно:
procedure Zn(x,h:real); var c:array[1..8] of real; i:integer; y:real; begin assign(w,'dan.pas'); rewrite(w); { <--- Убери эту строку } ...
Вот так
Floyd
1.06.2005 0:17
Ты гений, что я еще могу сказать. Благодарю, очень сильно =) И извиняюсь если надоедаю постоянно=)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.