21.04.2017, 19:50 | #22 (permalink) |
Banned
Регистрация: 22.12.2015
Сообщений: 1,404
Сказал(а) спасибо: 45
Поблагодарили 10 раз(а) в 4 сообщениях
Репутация: 12622
|
Windows вылетает RunTime Error, DOS сейчас попробовать не могу, но всё равно спасибо, потом посмотрю.
И Ваш итог совершенно не похож на исходную версию Ну, численные методы - это наше всё... Тупой перебор с минимальными итерациями или любыми другими методами, равно как и их комбинациями, рано или поздно даст искомый результат |
22.04.2017, 09:51 | #23 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Функции тут - лишняя сущность. Всё бы ничего в программе, только вот... Целая куча ГРУБЕЙШИХ ошибок. 1. Переменную х Вы определили, как простую скалярную. Поэтому обращаться с ней, как с массивом, НЕЛЬЗЯ. Массив следует ввести отдельно, в нижеприведенном варианте он назван "z". 2. Вы определили массив y в диапазоне индексов ОТ ЕДИНИЦЫ. Далее Вы запускаете цикл от 1 до 720. И в этом цикле: а) У Вас y:=sin(x);, а надо y[i]:=sin(x); б) при i=1 обращение к y[i-1] есть обращение к y[0], а такое значение индекса массива НЕДОПУСТИМО при Вашем диапазоне. Поэтому следует ОТДЕЛЬНО вычислить z[1] и y[1], а потом запустить цикл, начинающийся с 2. 3. При задании логических условий в условном операторе (if ... then), если этих условий больше одного и они связаны отношениями OR или AND, эти условия следует писать в скобках. 4. В телах циклов и операторов выбора в случае, если действий больше одного, эти действия необходимо заключать в операторные скобки begin ... end. Кстати, не ошибка, но в Паскале есть константа (формально - функция), возвращающая значение числа "пи". Зовут её Pi. Определять её не надо. Т.е. х можно вычислять так: x:=i*Pi/180; Исходя из всего вышесказанного: Код:
var i:Integer; x:Real; y,z:array [1..1000] of Real; begin z[1]:=Pi/180; y[1]:=sin(z[1]); for i:=2 to 720 do begin z[i]:=Pi*3.14/180*i; y[i]:=sin(z[i]); if (y[i-1]<0) and (y[i]>0) then begin x:=(z[i-1]+z[i])/2; writeln('x = ',x:8:5,' y = ',sin(x):8:5); end; end; Readln end. |
|
22.04.2017, 14:50 | #24 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
|
|
22.04.2017, 16:16 | #25 (permalink) |
Member
Регистрация: 18.05.2015
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Добрый день, Владимир. Спасибо за ответ!
В вашей строчке z[i]:=Pi*3.14/180*i; как я понимаю 3.14 лишнее) К слову начал использовать Pi вместо 3.14 и подметил, что косинус 270 градусов паскаль почему-то считает некоректно. Мне выдает 3.63...Е-12 |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
22.04.2017, 19:25 | #27 (permalink) |
Member
Регистрация: 18.05.2015
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Владимир, а если в нашем примере "y" помимо z[i] зависил бы также например от некой функции E[n], тогда следует писать
y[i,n]= {например} z[i] + E[n]; |
22.04.2017, 23:36 | #30 (permalink) | |
Banned
Регистрация: 06.03.2017
Сообщений: 788
Сказал(а) спасибо: 0
Поблагодарили 18 раз(а) в 4 сообщениях
Репутация: 5680
|
Цитата:
Пример: Код:
mcPi = 3.14159265358979323846 + { Pi (200 digits) } 0.26433832795028841971e-20 + { } 0.69399375105820974944e-40 + { } 0.59230781640628620899e-60 + { } 0.86280348253421170679e-80 + { } 0.82148086513282306647e-100 + { } 0.09384460955058223172e-120 + { } 0.53594081284811174502e-140 + { } 0.84102701938521105559e-160 + { } 0.64462294895493038196e-180; { } mcPi2 = 6.283185307179586476925286766559006; { Pi * 2 } mcPi3 = 9.424777960769379715387930149838509; { Pi * 3 } mcPi4 = 12.56637061435917295385057353311801; { Pi * 4 } mcPiOn2 = 1.570796326794896619231321691639751; { Pi / 2 } mcPiOn3 = 1.047197551196597746154214461093168; { Pi / 3 } mcPiOn4 = 0.785398163397448309615660845819876; { Pi / 4 } mcPiSq = 9.869604401089358618834490999876151; { Pi^2 } mcPiE = 22.45915771836104547342715220454374; { Pi^e } mcLnPi = 1.144729885849400174143427351353059; { Ln (Pi) } mcLogPi = 0.497149872694133854351268288290899; { Log (Pi) } mcSqrtPi = 1.772453850905516027298167483341145; { Sqrt (Pi) } mcSqrt2Pi = 2.506628274631000502415765284811045; { Sqrt (2 * Pi) } mcLnSqrt2Pi = 0.918938533204672741780329736405618; { Ln (Sqrt (2 * Pi)) } mcRadPerDeg = 0.017453292519943295769236907684886; { Pi / 180 } mcDegPerRad = 57.29577951308232087679815481410517; { 180 / Pi } mcE = 2.718281828459045235360287471352663; { e } mcE2 = 7.389056098930650227230427460575008; { e^2 } mcExpM2 = 0.135335283236612691893999494972484; { e^-2 } mcLn2 = 0.693147180559945309417232121458177; { Ln (2) } mcLn10 = 2.302585092994045684017991454684364; { Ln (10) } mcLogE = 0.434294481903251827651128918916605; { Log (e) } mcLog2 = 0.301029995663981195213738894724493; { Log (2) } mcLog3 = 0.477121254719662437295027903255115; { Log (3) } mcSqrt2 = 1.414213562373095048801688724209698; { Sqrt (2) } mcSqrt3 = 1.732050807568877293527446341505872; { Sqrt (3) } mcSqrt5 = 2.236067977499789696409173668731276; { Sqrt (5) } mcSqrt7 = 2.645751311064590590501615753639260; { Sqrt (7) } |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|