Особенности решения математических задач при помощи языка программирования Pascal - Курсовая работа

бесплатно 0
4.5 148
Анализ особенностей использования перечисляемого, интервального типов данных для построения множественной переменной в языке программирования Pascal. Алгоритм вычисления табличных значений функции одной переменной в программной среде Borland Delphi.


Аннотация к работе
Множественный тип описывается с помощью служебных слов Set of, например: type M = Set of B; Множество включает в себя набор элементов базового типа, все подмножества данного множества, а также пустое подмножество. Кроме этих операций для работы с величинами множественного типа в языке ПАСКАЛЬ используется операция in, проверяющая принадлежность элемента базового типа, стоящего слева от знака операции, множеству, стоящему справа от знака операции. Операция проверки принадлежности элемента множеству часто используется вместо операций отношения, например: "A" in ["A", "B"] даст TRUE, 2 in [1, 3, 6] даст FALSE. Если Autosize = false то выравнивание текста внутри компонента определяется свойством Alignment, и позволяет выравнивать текст по левому краю, по правому краю или по центу клиентской области метки.

Введение
На практике часто возникает необходимость вычислить определенный интеграл. Если интеграл берется в алгебраических функциях, то все в порядке и взять его вручную не представляет труда. А если интеграл не берется в алгебраических функциях или просто их очень много, то приходится прибегать к помощи компьютерной техники.

Существуют несколько способов вычисления определенных интегралов на ЭВМ, причем абсолютно все эти способы получают лишь приближенные значения: 1 формулы левых прямоугольников;

2 формулы правых прямоугольников;

3 формулы центральных прямоугольников;

4 формулы трапеций;

5 формулы Симпсона (формула парабол);

6 формулы Ньютона.

В курсовом проекте используется данные типа множества.

Понятие множества в языке Паскаль основывается на математическом представлении о конечных множествах: это ограниченная совокупность различных элементов. Для построения конкретного множественного типа используется перечисляемый или интервальный тип данных. Тип элементов, составляющих множество, называется базовым типом.

1. Приближенные вычисления определенных интегралов

1.1 Основные формулы вычисления определенных интегралов

При приближенном нахождении значения определенного интеграла:

1. формула левых прямоугольников:

где yi=f(xi) - значение подынтегральной функции; xi=a ih - значение точки;

2. формула правых прямоугольников:

где yi=f(xi) - значение подынтегральной функции; xi=a ih - значение точки;

3. формула центральных прямоугольников:

где yi=f(xi) - значение подынтегральной функции;

- значение точки;

4. формула трапеций:

где yi=f(xi) - значение подынтегральной функции; xi=a ih - значение точки;

5. формула Симпсона (формула парабол):

где yi=f(xi) - значение подынтегральной функции;

xi=a ih - значение точки;

- шаг;

6. формула Ньютона (правило ):

где yi=f(xi) - значение подынтегральной функции; xi=a ih - значение точки;

- шаг.

1.2 Индивидуальное задание

Написать программу на языке Паскаль (можно и в среде Delphi), реализующую нахождение приближенного значения интеграла (согласно варианту) указанным методом.

Для проверки полученного результата необходимо найти точное значение интеграла (первообразной) и сравнить его с приближенным.

С помощью формулы центральных прямоугольников вычислить интеграл: с точностью ?=0.01.

Текст программы: program Project1;

{$APPTYPE CONSOLE} uses

SYSUTILS;

{ поинтегральная функция } function F(x: real): real;

var r: real;

begin r:=25-x*x;

F:=1/sqrt(r*r*r);

end;

{ первообразная } function F1(x: real): real;

begin

F1:=x/25/sqrt(25-x*x);

end;

{ процедура вычисления интеграла } procedure INTEGPRYAM(xn,xk,eps: real; kol: longint; var tk: real);

var

S,tn,h: real;

i: integer;

begin tn:=F(xn)-F(xk);

{ tn - предыдущие значения интеграла }

{ tk - последующие значения интеграла } while true do begin h:=(xk-xn)/kol;

S:=0;

for i:=0 to kol do

S:=S F(xn (i 0.5)*h);

tk:=h*S;

if abs(tk-tn)<eps then exit;

kol:=kol*2; { удваиваем количество разбиений } tn:=tk;

end;

end;

var a,b,eps,integrl: real;

n: integer;

begin write("a, b = ");

readln(a, b);

write("eps = ");

readln(eps);

n:=6; { начальное значение количества разбиений }

INTEGPRYAM(a,b,eps,n,integrl);

writeln("Integral = ", integrl:6:5);

writeln("Tochnoe Znachenie = ", abs(f1(a)-f1(b)):6:5);

readln;

end.

Рисунок 1.1 - Исполнение программы

2. Работа с множествами в языке Паскаль

2.1 Тип множество в языке Паскаль

Понятие множества в языке Паскаль основывается на математическом представлении о конечных множествах: это ограниченная совокупность различных элементов. Для построения конкретного множественного типа используется перечисляемый или интервальный тип данных. Тип элементов, составляющих множество, называется базовым типом.

Множественный тип описывается с помощью служебных слов Set of, например: type M = Set of B;

Здесь М - множественный тип, В - базовый тип.

Пример описания переменной множественного типа: type

M = Set of "A".."D";

var

MS: M;

Принадлежность переменных к множественному типу может быть определена прямо в разделе описания переменных: var C: Set of 0..7;

Константы множественного типа записываются в виде заключенной в квадратные скобки последовательности элементов или интервалов базового типа, разделенных запятыми, например: ["A", "C"] [0, 2, 7] [3, 7, 11..14]

Константа вида [ ] означает пустое подмножество. Количество базовых элементов не должно превышать 256. Инициализация величин множественного типа может производиться с помощью типизированных констант: const SELIT: Set of "A".."D"= [];

Порядок перечисления элементов базового типа в константах безразличен. Значение переменной множественного типа может быть задано конструкцией вида [T], где T - переменная базового типа. Например, вполне допустима конструкция: type T = set of char;

Множество включает в себя набор элементов базового типа, все подмножества данного множества, а также пустое подмножество. Так, переменная Т множественного типа: var T: Set of 1..3;

может принимать восемь различных значений: [ ] [1] [2] [3] [1,2] [1,3] [2,3] [1,2,3]

К переменным и константам множественного типа применимы операции присваивания(:=), объединения( ), пересечения(*) и вычитания(-): ["A","B"] ["A","D"] даст ["A","B","D"].

["A","D"] * ["A","B","C"] даст ["A"].

["A","B","C"] - ["A","B"] даст ["C"].

Результат выполнения этих операций есть величина множественного типа.

К множественным величинам применимы операции: тождественность (=), нетождественность (), содержится в (=). Результат выполнения этих операций имеет логический тип, например: ["A","B"] = ["A","C"] даст FALSE

["A","B"] ["A","C"] даст TRUE

["B"] <= ["B","C"] даст TRUE

["C","D"] >= ["A"] даст FALSE.

Кроме этих операций для работы с величинами множественного типа в языке ПАСКАЛЬ используется операция in, проверяющая принадлежность элемента базового типа, стоящего слева от знака операции, множеству, стоящему справа от знака операции.

Результат выполнения этой операции - булевский.

Операция проверки принадлежности элемента множеству часто используется вместо операций отношения, например: "A" in ["A", "B"] даст TRUE, 2 in [1, 3, 6] даст FALSE.

2.2 Индивидуальное задание

Разработать программу, которая во введенном тексте удваивает все прописные гласные буквы, удваивает все цифры и подсчитывает количество пробелов.

На печать выдать исходный текст, количество пробелов и преобразованный текст.

Текст программы: program Project1;

{$APPTYPE CONSOLE} uses

SYSUTILS;

const resul="result_";

simvol=["A".."Z","А".."Я","0".."9"]; { прописные гласные буквы и цифры } var f,g: text;

fn,stroka: string;

ch: char;

i,len,np: integer;

begin write("FILENAME = ");

readln(fn);

if not FILEEXISTS(fn) then begin

{ если файл с именем fn не найден } writeln("""", fn, """ - NET FILE.");

readln;

exit;

end;

{ вывод исходного текста } writeln;

writeln("Isxodnii text:");

writeln("------------------------------------------------------------------");

assignfile(f, fn);

reset(f);

while not Eof(f) do begin readln(f, stroka);

writeln("""" stroka """");

end;

writeln("------------------------------------------------------------------");

closefile(f);

{ изменение текста } assignfile(g, resul fn);

rewrite(g);

reset(f);

np:=0;

while not Eof(f) do begin readln(f, stroka);

len:=length(stroka);

i:=1;

while i<=len do begin ch:=stroka[i];

if ch=" " then

Inc(np) else if ch in simvol then begin insert(ch, stroka, i);

Inc(i);

len:=length(stroka);

end;

Inc(i);

end;

writeln(g, stroka);

end;

closefile(f);

closefile(g);

{ вывод количества пробелов } writeln;

writeln("Kolichestvo probelov = ", np);

{ вывод измененного текста } writeln;

writeln("Izmenennii text:");

writeln("------------------------------------------------------------------");

assignfile(g, resul fn);

reset(g);

while not Eof(g) do begin readln(g, stroka);

writeln("""", stroka, """");

end;

writeln("------------------------------------------------------------------");

closefile(g);

readln;

end.

Рисунок 2.1 - Исполнение программы

3. Вычисление таблицы значений функции одной переменной в среде Delphi

3.1 Компоненты TLABEL, TEDIT, TBUTTON, TMEMO, TCOMBOBOX, TSTRINGGRID программный интервальный табличный

Компонент метка (TLABEL). Он используется для отображения текста, который играет роль метки и не изменяется пользователем. Текст метки задается в свойстве Caption. Размер меток TLABEL определяется свойством AUTOSIZE, если оно установлено в True, то вертикальные и горизонтальные размеры компонента определяются размером надписи. Если Autosize = false то выравнивание текста внутри компонента определяется свойством Alignment, и позволяет выравнивать текст по левому краю, по правому краю или по центу клиентской области метки.

Свойство WORDWRAP определяет допустимость переноса слов длинной надписи, превышающей длину компонента, на новую строку. Для осуществления такого переноса необходимо установить свойство WORDWRAP в True, свойство Autosize в false и сделать высоту компонента такой, чтобы в нем могло разместиться несколько строк. Если WORDWRAP= false и Autosize= false, то длинный текст, не помещающийся в рамке, просто обрезается.

Компонент окно редактирования (TEDIT). Вводимый и выводимый текст содержится в свойстве Text. Выравнивание текста и перенос строк невозможны.

Свойство AUTOSIZE позволяет автоматически подстраивать высоту окна под размер текста. Свойство AUTOSELECT определяет, будет ли автоматически выделяться весь текст при передаче фокуса в окно редактирования

Свойства SELLENGTH, SELSTART, SELTEXT, определяют длину выделенного текста, позицию перед первым символом выделенного текста и сам выделенный текст. Если выделенного текста нет, свойство SELSTART определяет текущее положение курсора.

Свойство MAXLENGTH определяет максимальную длину вводимого текста.

Свойство Modified, доступное только во время работы программы, показывает производилось ли редактирование текста в окне.

Свойство passwordchar позволяет превратить окно редактирования в окно ввода пароля. Если в этом свойстве вместо #0 указать другой символ, например, символ *, то при вводе пользователем текста в окне будут появляться именно эти символы, а не те, что вводит пользователь.

Свойство READONLY указывает может ли пользователь изменять текст в окне.

Компонент кнопка (TBUTTON). Он представляет собой стандартную кнопку Windows, инициализирующую какое либо действие. Основное с точки зрения внешнего вида свойства кнопки - свойство Caption. Основное событие кнопки - ONCLICK, возникающее при щелчке на ней. В обработчике этого события записываются операторы, которые должны выполнятся при щелчке пользователя на ней.

Свойство Cancel, если его установить в True, определяет, что нажатие пользователем клавиши Esc будет эквивалентно нажатию на данную кнопку.

Свойство Default определяет, что нажатие клавиши Enter будет эквивалентно нажатию на данную кнопку, даже если она в данный момент не находится в фокусе. Если в момент нажатия клавиши ввода в фокусе находится другая кнопка, то сработает кнопка именно в фокусе.

Свойство MODALRESULT используется в модальных формах, в обычных формах его значение должно быть равно None. Выполнение метода Click эквивалентно щелчку по кнопке, т.е. вызывает свойство Onclick.

Компонент Текстовая область (TMEMO). Главное свойство данного компонента - Lines. В нем хранится список строк, введенных пользователем. Программно заносить строки в это свойство можно так: Memo1.Lines.Add(‘строка’).

Наличие у текстовой области полос прокрутки задается в свойстве SCROLLBARS (SSNONE, SSHORIZONTAL, SSVERTICAL, SSBOTH). При выделении фрагмента текста в текстовой области в свойство SELSTART заносится позиция первого выделенного символа, а в свойство SELLENGTH - число выделяемых символов.

Выделенный текст доступен через свойство SELTEXT (тип string). Чтобы очистить содержимое текстовой области, используется метод Clear, чтобы отменить последние изменения - метод Undo.

Компонент поле со списком (TCOMBOBOX). Этот компонент представляет собой список с присоединяемым полем, в котором отображается выбранный элемент списка. Это же поле может использоваться для ввода новых элементов. Режим работы данного компонента определяется значением свойства Style.

Максимальное число элементов, одновременно отображаемых в видимой части списка, задается в свойстве DROPDOWNCOUNT. Номер текущей выбранной строки хранится в свойстве ITEMINDEX. В свойстве Text хранится содержимое текущего выбранного элемента.

При работе COMBOBOX наиболее важными являются 2 события: 1) ONCHANGE - пользователь изменил текст в присоединенном поле;

2) ONDROPDOWN - список раскрывается. Это событие необходимо обрабатывать, если содержимое списка может меняться во время работы программы, в обработчике этого события можно, используя свойство Items, заново сформировать содержимое списка.

Компонент таблица строк (TSTRINGGRID). Этот компонент позволяет работать с текстовой информацией в двумерной таблице, имеющей строки и столбцы. Количество столбцов задается в свойстве COLCOUNT, а количество столбцов - в свойстве ROWCOUNT.

Основное свойство данного компонента - двумерный массив Cells, позволяющий обращаться к значению ячеек и изменять его. 1-е измерение - номер столбца, а 2-е - номер строки. Нумерация элементов таблицы строк начинается с нуля. Число строк и столбцов, имеющих характер заголовка задается свойствами FIXEDROWS и FIXEDCOLS.

Чтобы установить для просмотра нужную область таблицы, необходимо задать номер начальной строки в свойстве TOPROW, а номер начального столбца - в свойстве LEFTCOL.

Чтобы текущая ячейка таблицы выделялась отдельным цветом необходимо подсвойству GODRAWFOCUSSELECTED свойства Options задать значение True.

Другие подсвойства свойства Options: 1. GOEDITING - позволяет редактировать текст в ячейках;

2. GOTABS - позволяет перемещать между ячейками с помощью клавиши Tab.

Экранные координаты конкретной ячейки задаются с помощью метода CELLRECT, который, получая в качестве параметров номер столбца и номер строки, возвращает структуру типа Trect с координатами прямоугольника, охватывающего заданную ячейку.

3.2 Индивидуальное задание

Разработать проект вычисления таблицы значений функций одной переменной. Вычисление функции оформить в виде отдельной пользовательской функции.

Предусмотреть обработку возможных ошибок приложения. При делении на ноль, в ячейку STRINGGRID или в строку Memo должно выводиться соответствующее сообщение. Вывод результатов организовать с помощью компонент STRINGGRID, Memo.

Для организации правильной работы реализовать сценарий работы с использованием свойств visible и (или) enabled компонент, размещенных на форме.

Для управления работой приложением использовать компоненту КНОПКА (Button или BITBTN).

Функция: Текст программы: unit Unit1;

interface uses

Windows, Messages, SYSUTILS, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, STDCTRLS, XPMAN, Grids, EXTCTRLS, Vcl.Imaging.jpeg;

type

TFORM1 = class(TFORM)

GROUPBOX1: TGROUPBOX;

Edit1: TEDIT;

XPMANIFEST1: TXPMANIFEST;

Label2: TLABEL;

Label3: TLABEL;

Label4: TLABEL;

Edit2: TEDIT;

Edit3: TEDIT;

GROUPBOX2: TGROUPBOX;

SPEEDBUTTON1: TSPEEDBUTTON;

SPEEDBUTTON2: TSPEEDBUTTON;

GROUPBOX3: TGROUPBOX;

STRINGGRID1: TSTRINGGRID;

SPEEDBUTTON3: TSPEEDBUTTON;

Image1: TIMAGE;

COMBOBOX1: TCOMBOBOX;

Memo1: TMEMO;

Label1: TLABEL;

procedure SPEEDBUTTON2Click(Sender: TOBJECT);

procedure SPEEDBUTTON1Click(Sender: TOBJECT);

procedure SPEEDBUTTON3Click(Sender: TOBJECT);

private

{ Private declarations } public

{ Public declarations } end;

var

Form1: TFORM1;

implementation

{$R *.dfm} function f1(x:real):real;

begin f1:=(14*x 5)/(x*x 1);

end;

function f2(x:real):real;

begin f2:=12 x;

end;

function f3(x:real):real;

begin f3:=(x*x*x 1)/(4*x 2);

end;

procedure TFORM1.SPEEDBUTTON2Click(Sender: TOBJECT);

begin

Close;

end;

procedure TFORM1.SPEEDBUTTON1Click(Sender: TOBJECT);

var code_a,code_b,code_n:integer;

a,b,h:real;

n,i:integer;

x,y1,y2,y3:real;

begin

Val(Edit1.Text, a, code_a);

Val(Edit2.Text, b, code_b);

Val(Edit3.Text, n, code_n);

If (code_a0) then begin

Showmessage("Неправильно введен A");

Edit1.SETFOCUS;

end else

If (code_b0) then begin

Showmessage("Неправильно введен B");

Edit2.SETFOCUS;

end else

If (code_n0) then begin

Showmessage("Неправильно введен N");

Edit3.SETFOCUS;

end;

if (code_a=0)and(code_b=0)and(code_n=0) then begin

GROUPBOX3.Visible:=true;

if COMBOBOX1.Text="Memo" then begin

STRINGGRID1.Visible:=false;

Memo1.Visible:=true;

end else if COMBOBOX1.Text="STRINGGRID" then begin

STRINGGRID1.Visible:=true;

Memo1.Visible:=false;

end else begin

SHOWMESSAGE("Выберите один из пунктов!!!");

exit;

end;

STRINGGRID1.Cells[0,0]:="№";

STRINGGRID1.Cells[1,0]:=" X=";

STRINGGRID1.Cells[2,0]:=" Y1=";

STRINGGRID1.Cells[3,0]:=" Y2=";

STRINGGRID1.Cells[4,0]:=" Y3=";

STRINGGRID1.ROWCOUNT:=n 1;

for i:=1 to n do

STRINGGRID1.Cells[0,i]:=INTTOSTR(i);

x:=a;

i:=1;

h:=(b-a)/n;

Memo1.Clear;

Memo1.Lines.Add("Номер Значение X Функция Y1 Функция Y2 Функция Y3");

while x<=b do begin

STRINGGRID1.Cells[1,i]:=FLOATTOSTRF(x,FFFIXED,5,1);

// Функции if x=-2 then begin y1:=f1(x);

y2:=f2(x);

STRINGGRID1.Cells[4,i]:="Деление на 0";

STRINGGRID1.Cells[3,i]:=FLOATTOSTRF(y2,FFFIXED,5,5);

STRINGGRID1.Cells[2,i]:=FLOATTOSTRF(y1,FFFIXED,5,5);

Memo1.Lines.Add(INTTOSTR(i) " " FLOATTOSTRF(x,FFEXPONENT,5,2) " "

FLOATTOSTRF(y1,FFEXPONENT,5,2)

" " FLOATTOSTRF(y2,FFEXPONENT,5,2)

" Деление на ноль ");

end else if x=0 then begin

STRINGGRID1.Cells[2,i]:="Деление на 0";

y2:=f2(x);

y3:=f3(x);

STRINGGRID1.Cells[3,i]:=FLOATTOSTRF(y2,FFFIXED,5,5);

STRINGGRID1.Cells[4,i]:=FLOATTOSTRF(y3,FFFIXED,5,5);

Memo1.Lines.Add(INTTOSTR(i) " " FLOATTOSTRF(x,FFEXPONENT,5,2)

" Деление на ноль "

" " FLOATTOSTRF(y2,FFEXPONENT,5,2) " "

FLOATTOSTRF(y3,FFEXPONENT,5,2));

end else begin y1:=f1(x);

y2:=f2(x);

y3:=f3(x);

STRINGGRID1.Cells[2,i]:=FLOATTOSTRF(y1,FFFIXED,5,5);

STRINGGRID1.Cells[3,i]:=FLOATTOSTRF(y2,FFFIXED,5,5);

STRINGGRID1.Cells[4,i]:=FLOATTOSTRF(y3,FFFIXED,5,5);

Memo1.Lines.Add(INTTOSTR(i) " " FLOATTOSTRF(x,FFEXPONENT,4,2)

" " FLOATTOSTRF(y1,FFEXPONENT,4,2)

" " FLOATTOSTRF(y2,FFEXPONENT,4,2)

" " FLOATTOSTRF(y3,FFEXPONENT,4,2));

end;

x:=x h;

inc(i);

end;

end;

end;

procedure TFORM1.SPEEDBUTTON3Click(Sender: TOBJECT);

begin

Edit1.Clear;

Edit2.Clear;

Edit3.Clear;

GROUPBOX3.Visible:=false;

end;

end.

Рисунок 3.1 - Исполнение программы (Вывод значения в STRINGGRID)

Рисунок 3.2 - Исполнение программы (Вывод значения в Memo)

Вывод
В ходе выполнения курсовой работы были изучены основные алгоритмы программирования квадратурных формул вычисления определенных интегралов, изучены основные алгоритмы работы со структурированным типом данных: множества, знакомство с основными свойствами формы, разработка в среде Delphi приложения для вычисления таблицы значений функций одной переменной,

Список литературы
1. Сурков К. Программирование в среде Delphi 2.0 / К. Сурков, Д. Сурков, А. Вальвачев. - Мн.: ООО «Попурри», 1997. - 640с.

2. Сухарев М.В. Основы Delphi. Профессиональный подход / М.В. Сухарев. - СПБ.: Наука и техника, 2004. - 614с.

3. Фаронов В.В. Delphi 5. Учебный курс / В.В. Фаронов - М.: «Нолидж», 2000. - 608с.

4. Бородич Ю.С. Паскаль для персональных компьютеров: справ. пособие / Ю.С. Бородич, А.Н. Вальвачев, А.И. Кузьмич - Мн.: Выш. шк.: БФ ГИТМП “НИКА”, 1991. - 365с.

5. Зуев Е.А. Программирование на языке TURBO PASCAL 6.0, 7.0 / Е.А. Зуев. - М.: Радио и связь, 1993. - 384с.

6. Программирование на языке Pascal: практическое пособие для студентов математических специальностей университета: В 2ч. Ч.2./ Е.А. Ружицкая и др. - Гомель: ГГУ им. Ф. Скорины, 2005. - 92с.

Размещено на .ru
Заказать написание новой работы



Дисциплины научных работ



Хотите, перезвоним вам?