Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2012, 01:12   #1
холодная92
Новичок
Джуниор
 
Регистрация: 14.06.2012
Сообщений: 4
По умолчанию Написать программу,которая вычисляет длину кривой

Написать программу,которая вычисляет длину кривой y=под корнем x*(20-x) ,(0<=x<=20) заменив кривую ломfной с вершинами(0,4i; y(0.4i))где i= 0,1,2…50 подготовить и использовать процедуру для вычисления i-го отрезка
холодная92 вне форума Ответить с цитированием
Старый 14.06.2012, 01:41   #2
холодная92
Новичок
Джуниор
 
Регистрация: 14.06.2012
Сообщений: 4
По умолчанию

даже начало чуть чуть есть
холодная92 вне форума Ответить с цитированием
Старый 14.06.2012, 04:57   #3
Npwas
Форумчанин
 
Аватар для Npwas
 
Регистрация: 26.09.2011
Сообщений: 158
По умолчанию

Читаем про:
1)Длина кривой(http://ru.wikipedia.org/wiki/Длина_кривой)
2)Рассчет интегралла методом прямоуголников(можно и другой выбрать)
3)Читаем про использование процедур

Если не ошибаюсь, то a и b при интегралле это его 1-ая и 2-ая точки(чет-то типа того) и наверное для рассчета i-го отрезка данную методику тоже применить можно.

Вот пример рассчета интегралла двумя разнымя методами(язык Delphi, надеюсь пойдет):
Код:
program Integrali;

{$APPTYPE CONSOLE}

uses
  SysUtils;

TYPE
  TFunc = Function(x:real):real; //функциональный тип
{Перечень используемых ф-ций, при использованиифункионального типа}
Function F_1(x:real):real;
 Begin
   F_1 := sqrt(0.5*x + 2) / (sqrt(2*sqr(x)+1)+0.8);
 End;
Function F_2(x:real):real;
 Begin
   F_2 :=cos(0.8*x+1.2)/(1.5+sin(sqr(x)+0.6));
 End;
Function F_3(x:real):real;
 Begin
   F_3 := 1/sqrt(sqr(x)+3.2);
 End;
Function F_4(x:real):real;
 Begin
    F_4 :=(x+1)*sin(x);
 End;

VAR
   i,n,j:integer;
   a,b,kol:real;
   y:TFunc;

{Ф-ЦИЯ РАССЧИТЫВАЮЩАЯ ИНТЕГРАЛ МЕТОДОМ ТРАПЕЦИЙ}
FUNCTION Trapezija(f:TFunc; a,b,Eps:real; n:integer):real;
Var
   h,sum,x,G,It:real;
BEGIN
  kol:=1;
  It:=f(a)*(b-a);//нач. знач. ф-ции интегралла
  Repeat
    sum:=0;
    h:=(b-a)/n;//рассчет высоты
    For i:=0 to n-1 do
     Begin
       x:=a+i*h;
       sum:=sum+f(x);
       kol:=kol+1;
     End;
    n:=n+2;
    G:=It;
    It:=h*((f(a)+f(x))/2+sum);
  Until Abs(It-G)<=Eps;
  Trapezija:=It;
END;

{Ф-ЦИЯ РАССЧИТЫВАЮЩАЯ ИНТЕГРАЛ МЕТОДОМ ЦЕНТРАЛЬНЫХ ПРЯМОУГОЛЬНИКОВ}
FUNCTION CentrPrjamoug(f:TFunc; a,b,Eps:real; n:integer):real;
Var
   h,sum,x,G,It:real;
BEGIN
  kol:=1;
  It:=f(a)*(b-a);//нач. знач. ф-ции интегралла
  Repeat
    sum:=0;
    h:=(b-a)/n;//рассчет высоты
    For i:=0 to n do
     Begin
      x:=a+i*h+h/2;
      sum:=sum+f(x);
      kol:=kol+1;
     End;
    n:=n+2;
    G:=It;//сохраняем прошлый интегралл
    It:=h*sum;
  Until Abs(It-G)<=eps;
  CentrPrjamoug:=It;
END;

BEGIN
  {ВЫВОД ДАННЫХ}
END.
<----Весы Там.

Последний раз редактировалось Npwas; 14.06.2012 в 05:00.
Npwas вне форума Ответить с цитированием
Старый 14.06.2012, 07:07   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от холодная92 Посмотреть сообщение
даже начало чуть чуть есть
Показала бы начало - быстрее бу ответили тебе..
Цитата:
Сообщение от холодная92 Посмотреть сообщение
подготовить и использовать процедуру для вычисления i-го отрезка
Наверное, все же не процедуру, а функцию:
Код:
function Len(x1,y1,x2,y2: double): double;
begin
  Len:= Sqrt(Sqr(x2-x1)+Sqr(y2-y1))
end;
И кривую твою тоже лучше задать функцией:
Код:
function F(x: double): double;
begin
  F:= Sqrt(x*(20-x))
end;
А сам цикл подсчета длины ломаной примерно такой:
Код:
  s:= 0; // variable s of type double
  for i:=1 to 50 do
    s:= s+Len(0.4*(i-1),F(0.4*(i-1)),0.4*i,F(0.4*i));
  writeln('The length of the curve is, approximately ',s:6:3);
Успехов.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 14.06.2012, 08:46   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

FYI, сообщение от Npwas я переместил из другой темы, которую TC создала (кросспост).

Модератор
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.06.2012, 19:39   #6
холодная92
Новичок
Джуниор
 
Регистрация: 14.06.2012
Сообщений: 4
По умолчанию

спасибо большое всем,но программа,я так понимаю написана не в Паскале...потому как она не работает

это начало....
Код:
uses crt
var
dlina: real;
i: byte;
function otrezok(i: byte): real; // функция для вычисления i-ого отрезка
var y1, y2: real;
begin
  clrscr;
  y1 := sqrt(0.4 * (i-1) * (20 - 0.4 * (i-1)));

Последний раз редактировалось Stilet; 14.06.2012 в 20:31.
холодная92 вне форума Ответить с цитированием
Старый 14.06.2012, 21:14   #7
холодная92
Новичок
Джуниор
 
Регистрация: 14.06.2012
Сообщений: 4
По умолчанию

спасибо огромное.... не мог лы бы подсказать как перевести это на язык паскаля?
холодная92 вне форума Ответить с цитированием
Старый 15.06.2012, 04:01   #8
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от холодная92 Посмотреть сообщение
спасибо огромное.... не мог лы бы подсказать как перевести это на язык паскаля?
Гм. Я понимаю, что ты не очень горячая )), но собрать все вместе, добавить описание двух переменных, а также одну пару begin/end - это-то ты могла бы и сварить своим котелком? Если уж ты начало такое написала..

Лан, я седня добрый (а точнее - некогда препираться)), получай полный код. Если я ошибся где в арифметике - исправляй сама..
Код:
function Len(x1,y1,x2,y2: double): double;
begin
  Len:= Sqrt(Sqr(x2-x1)+Sqr(y2-y1))
end;

// И кривую твою тоже лучше задать функцией:
function F(x: double): double;
begin
  F:= Sqrt(x*(20-x))
end;

var
  i: integer;
  s: double;

// А сам цикл подсчета длины ломаной примерно такой:
begin
  s:= 0; // variable s of type double
  for i:=1 to 50 do
    s:= s+Len(0.4*(i-1),F(0.4*(i-1)),0.4*i,F(0.4*i));
  writeln('The length of the curve is, approximately ',s:6:3);
end.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
написать программу которая вводит по строкам с квеатуры двумерные массивы и вычисляет сумму его элементов по строкам таня99 Паскаль, Turbo Pascal, PascalABC.NET 3 23.05.2012 20:23
Написать программу, которая вычисляет дату следующего дня Popeta Помощь студентам 10 04.04.2012 22:43
Написать программу, которая вычисляет приближенное значение числа e с заданной точностью quade1992 Паскаль, Turbo Pascal, PascalABC.NET 3 08.11.2011 15:10
Написать программу, которая вычисляет сопротивление электрической цепи, Геля007 Помощь студентам 1 10.01.2011 22:36