Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 21.04.2017, 19:44   #21 (permalink)
Dimafania
Member
 
Регистрация: 18.05.2015
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Вопрос теперь такой: умеет ли Паскаль решать уравнения? Например в моем случае может ли Паскаль найти х при которых y=0 ?
Dimafania вне форума   Ответить с цитированием
Старый 21.04.2017, 19:50   #22 (permalink)
black88
Banned
 
Регистрация: 22.12.2015
Сообщений: 1,404
Сказал(а) спасибо: 45
Поблагодарили 10 раз(а) в 4 сообщениях
Репутация: 12622
По умолчанию

Windows вылетает RunTime Error, DOS сейчас попробовать не могу, но всё равно спасибо, потом посмотрю.
И Ваш итог совершенно не похож на исходную версию
Цитата:
Сообщение от Dimafania Посмотреть сообщение
Например в моем случае может ли Паскаль найти х при которых y=0 ?
Ну, численные методы - это наше всё...
Тупой перебор с минимальными итерациями или любыми другими методами, равно как и их комбинациями, рано или поздно даст искомый результат
black88 вне форума   Ответить с цитированием
Старый 22.04.2017, 09:51   #23 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Dimafania Посмотреть сообщение
Программа не работает. Объясните пожалуйста почему. Как задать y, чтобы все заработало? Необходимо решение именно в таком алгоритме.

var
i:Integer;
x:Real;
y:array [1..1000] of Real;


begin
for i:=1 to 720 do
x:=i*3.14/180;
y:=sin(x);
if y[i-1]<0 and y[i]>0 then
x:=(x[i-1]+x[i])/2;
writeln(x);
end.
Да, ребята, занесло вас. Вот стоит отвлечься на вечерок...
Функции тут - лишняя сущность. Всё бы ничего в программе, только вот...
Целая куча ГРУБЕЙШИХ ошибок.
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 22.04.2017, 14:50   #24 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Dimafania Посмотреть сообщение
Вопрос теперь такой: умеет ли Паскаль решать уравнения? Например в моем случае может ли Паскаль найти х при которых y=0 ?
К вопросу о численном решении алгебраических уравнений
Vladimir_S вне форума   Ответить с цитированием
Старый 22.04.2017, 16:16   #25 (permalink)
Dimafania
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
Dimafania вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 22.04.2017, 17:03   #26 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Dimafania Посмотреть сообщение
В вашей строчке z[i]:=Pi*3.14/180*i; как я понимаю 3.14 лишнее)
Разумеется! И как это я пропустил...
Цитата:
Сообщение от Dimafania Посмотреть сообщение
К слову начал использовать Pi вместо 3.14 и подметил, что косинус 270 градусов паскаль почему-то считает некоректно. Мне выдает 3.63...Е-12
Это странно. Мой Паскаль выдает 1.897...Е-19.
Vladimir_S вне форума   Ответить с цитированием
Старый 22.04.2017, 19:25   #27 (permalink)
Dimafania
Member
 
Регистрация: 18.05.2015
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Владимир, а если в нашем примере "y" помимо z[i] зависил бы также например от некой функции E[n], тогда следует писать
y[i,n]= {например} z[i] + E[n];
Dimafania вне форума   Ответить с цитированием
Старый 22.04.2017, 19:42   #28 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Dimafania Посмотреть сообщение
Владимир, а если в нашем примере "y" помимо z[i] зависил бы также например от некой функции E[n], тогда следует писать
y[i,n]= {например} z[i] + E[n];
Простите, но ничего не понял. Сформулируйте задачу полностью.
Vladimir_S вне форума   Ответить с цитированием
Старый 22.04.2017, 23:30   #29 (permalink)
Viewer
Banned
 
Регистрация: 06.03.2017
Сообщений: 788
Сказал(а) спасибо: 0
Поблагодарили 18 раз(а) в 4 сообщениях
Репутация: 5680
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Мой Паскаль выдает 1.897...Е-19.
Паскаль не Ваш - потрудитесь приводить версию.
Viewer вне форума   Ответить с цитированием
Старый 22.04.2017, 23:36   #30 (permalink)
Viewer
Banned
 
Регистрация: 06.03.2017
Сообщений: 788
Сказал(а) спасибо: 0
Поблагодарили 18 раз(а) в 4 сообщениях
Репутация: 5680
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
в Паскале есть константа (формально - функция), возвращающая значение числа "пи". Зовут её Pi.
Давным давно надо определить свои константы, не зависящие от версии Pascal/Delphi/Lazarus/FreePascal и с большей точностью.
Пример:

Код:
  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)                  }
Viewer вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.