close

Вход

Забыли?

вход по аккаунту

?

Пояснительная записка (2)

код для вставкиСкачать
С каждым днем мы совершенствуем каждую область деятельности, находя все более оптимальные решения. Так с появлением компьютера жизнь и технологический прогресс начали набирать не бывалые до этого темпы. Ещё 20 лет назад большинство трудовых процессов были полностью на бумаге, что отнимало много времени и трудозатрат для введение и содержание бумаг. Для решения простейших задач программирования необходимо знать средства и возможности конкретного языка программирования. На первый план выдвигаются знание и умение конструировать логику вычислительного процесса в целом, а не отдельных его шагов. Определяющими здесь становятся вопросы методологии и технологии программирования. Резкое удешевление стоимости компьютеров и, в особенности, стоимости хранения информации на компьютерных носителях привело к широкому внедрению компьютеров практически во все сферы человеческой деятельности, что существенно изменило направленность технологии программирования. Сформировалось достаточно глубокое понятие качества программных продуктов (ПП), причем предпочтение стало отдаваться не столько эффективности ПП, сколько удобству работы с ним для пользователей (не говоря уже о его надежности). Широкое использование компьютерных сетей привело к интенсивному развитию распределенных вычислений, дистанционного доступа к информации и электронного способа обмена сообщениями между людьми. Компьютерная техника из средства решения отдельных задач все более превращается в средство информационного моделирования реального и мыслимого мира, способное просто отвечать людям на интересующие их вопросы. Начинается этап глубокой и полной информатизации (компьютеризации) человеческого общества. Все это ставит перед технологией программирования новые и достаточно трудные проблемы.
В данной курсовой работе показан процесс решения поставленной задачи с точки зрения программиста.
В качестве среды разработки и реализации приложения использован язык Object Pascal и среда разработки Turbo Delphi.
1 ОБЩАЯ ЧАСТЬ
1.1 Постановка задачи
В средe Turbo Delphi разработать программу в соответствии с вариантом, обеспечивающую выполнение следующих пунктов:
Сформировать массив A, используя формулу суммы числового ряда, рассчитанной с заданной точностью ε=0,001для x, изменяющегося в диапазоне [-1, 1]c шагом h=0,1. Результат расчета суммы числового ряда проверить, используя контрольную формулу.
Формула суммы числового ряда:
(1)
Контрольная формула:
Сформировать случайным образом двумерный массив B, из диапазона (-10;10), соответствующего размера.
Сформировать массив С по формуле:
C=BTA (3)
Отсортировать массив С методом простых вставок
Программа должна:
- использовать многостраничную панель;
- предусмотреть возможность ввода всех исходных данных;
- предусмотреть возможность просмотра текстового файла на форме с помощью многострочного редактора;
- иметь всплывающие подсказки;
- предусмотреть защиту от несанкционированного ввода исходных данных;
- предусмотреть вывод поясняющих сообщений в случае некорректного ввода информации.
1.2 Математическая постановка задачи
Сформировать массив А, используя формулу суммы числового ряда следующим образом:
Первый элемент массива А равен сумме слагаемых числового ряда рассчитанной с заданной точностью ε=0,001 для х=-1; второй элемент массива А равен сумме слагаемых числового ряда рассчитанной с заданной точностью ε=0,001 для х=-1+h и т.д. Сформировать двумерный массив В с помощью датчика случайных чисел. Размерность массива nxn, где n=размерность массива А. Диапазон для заполнения равен [-10;10]. Сформированный массив В необходимо добавить в отформатированном виде в созданный ранее результирующий файл.
B[i,j]:=Ng+random(Vg-Ng+1);
Где Ng = -10, Vg = 10
Используя сформированный массив В, необходимо сформировать массив С, используя правила матричной алгебры. Массив С формируется как: произведение матрицы А на транспонированную матрицу В Сформированный массив С необходимо добавить в отформатированном виде в результирующий файл.
Расчёт транспонированной матрицы В
Транспонированная матрица - матрица BT , полученная из исходной матрицы В заменой строк на столбцы.
Формально, транспонированная матрица для матрицы В размеров m x n - матрица BT размеров n x m, определённая как BT [i, j] = B [j, i].
Под произведением матрицы A на транспонированную матрица В понимают матрицу C_1xn элементы которой рассчитываются по формуле:
С[i]:=С[i]+В[i,j]*А[j]
Где В= BT; A[j]= Массив A; Сортировка массива С осуществляется методом простых вставок. Отсортированный массив С добавляется в результирующий файл.
Метод сортировки простых вставок заключается в следующем: При сортировке исходный массив разбивается на две части:
отсортированную часть и не отсортированную часть. На k - м шаге элемент С[k] включается в отсортированную часть, на соответствующее место. При этом часть элементов, больших С[k], (если таковые есть) сдвигаются на одну позицию правее, чтобы освободить место для элемента С[k]. Прежде чем производить сдвиг элементов необходимо сохранить значение С[k] во временной переменной С1.
Так как массив из одного элемента можно считать отсортированным, алгоритм начинается с k=2
РАЗРАБОТКА АЛГОРИТМА
Идентификаторы переменных, процедуры и функции
Описание всех переменных, процедур и функций с расшифровкой, используемых в курсовом проекте.
A - динамический массив А вещественного типа;
В - динамический массив В целого типа; транспонированный массив В;
С - динамический массив массив С вещественного типа;
С1 - динамический, отсортированный массив С вещественного типа;
n - количество элементов массива А;
Word - Файловая переменная, ассоциируется с Word хk, xn, h - диапазон для формирования элементов массива А;
eps - заданная точность равна 0,001;
i,j,к - операторы цикла; Vg,Ng - диапазон для формирования массива В;
m - переменная для сохранения значений отсортированного массива С1;
a - переменная для сохранения значений транспонированного массива В;
x,y,Xmin,Xmax,Ymin,Ymax,Xgmin,Xgmax,Ygmax,Ygmin,Xg,Yg - переменные для построения графика
h1 - идентификатор (дескриптор) окна;
wdApp, wdDoc, wdRng, wdTable - переменные для работы с MSWord;
Sd - переменная для SaveDialog.
Структурная схема программы
Данный программный продукт состоит из одного программного модуля, в который входят процедуры:
procedure Button1Click(Sender: TObject) - формирование массива А;
procedure Button2Click(Sender: TObject) - формирование массива В;
procedure Button6Click(Sender: TObject) - формирование транспонированного массива В;
procedure Button3Click(Sender: TObject) - формирование массива С;
procedure Button4Click(Sender: TObject) - формирование отсортированного массива С;
procedure Button5Click(Sender: TObject) - построение графика;
procedure N2Click(Sender: TObject) - закрываем форму;
procedure N3Click(Sender: TObject) - вызов справки;
procedure Edit1KeyPress(Sender: TObject; var Key: Char) - защита от несанкционированного ввода данных;
procedure Edit2KeyPress(Sender: TObject; var Key: Char) - защита от несанкционированного ввода данных;
procedure Edit3KeyPress(Sender: TObject; var Key: Char) - защита от несанкционированного ввода данных;
procedure Edit4KeyPress(Sender: TObject; var Key: Char) - защита от несанкционированного ввода данных;
procedure Edit5KeyPress(Sender: TObject; var Key: Char) - защита от несанкционированного ввода данных;
procedure Edit6KeyPress(Sender: TObject; var Key: Char) - защита от несанкционированного ввода данных;
procedure N1Click(Sender: TObject) - Сохранение получившегося результата в MSWord;
procedure N5Click(Sender: TObject) - сохранение графика в виде изображения в формате .jpg.
На рисунке 1 изображена структурная схема программы
Рисунок 1 - структурная схема программы
Блок-схемы расчетных процедур
На рисунке 2 изображена блок-схема формирования массива А
На рисунке 3 изображена блок-схема формирования массива В
Рисунок 3 - формирование массива В
На рисунке 4 изображена блок-схема транспортирования массива В
Рисунок 4 - формирование транспонированного массива В
На рисунке 5 изображена блок-схема формирования массива С
АНАЛИЗ РАБОТЫ ПРОГРАММЫ.
РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
Рассматривается программа на конкретном примере.
Пусть дана точность ε = 0,001 для х, изменяющегося в диапазоне [-0,9;0,9] с шагом h=0,1.
Массив А заполняется по формуле суммы ряда:
A[0]=0,73 A[1]=0,59 A[2]=0,46 A[3]=0,34 A[4]=0,24 A[5]=0,16 A[6]=0,09 A[7]=0,04 A[8]=0,01 A[9]=0,00 A[10]=0,01 A[11]=0,04 A[12]=0,09 A[13]=0,16 A[14]=0,24 A[15]=0,34 A[16]=0,46 A[17]=0,59 A[18]=0,73 Массив В представляет собой матрицу размерностью 19х19, заполненную случайным образом из диапазона [-10;10].
B[1,1]=-7 B[1,2]=-6 B[1,3]=-8 B[1,4]=1 B[1,5]=4 B[1,6]=-9 B[1,7]=10 B[1,8]=0 B[1,9]=-2 B[1,10]=5 B[1,11]=-4 B[1,12]=-5 B[1,13]=6 B[1,14]=-10 B[1,15]=0 B[1,16]=3 B[1,17]=6 B[1,18]=2 B[1,19]=8 B[2,1]=-2 B[2,2]=6 B[2,3]=10 B[2,4]=-3 B[2,5]=9 B[2,6]=-2 B[2,7]=5 B[2,8]=-7 B[2,9]=3 B[2,10]=7 B[2,11]=3 B[2,12]=-9 B[2,13]=7 B[2,14]=5 B[2,15]=-6 B[2,16]=-8 B[2,17]=-2 B[2,18]=7 B[2,19]=-9 B[3,1]=-4 B[3,2]=-5 B[3,3]=-10 B[3,4]=2 B[3,5]=-7 B[3,6]=-7 B[3,7]=3 B[3,8]=7 B[3,9]=1 B[3,10]=7 B[3,11]=0 B[3,12]=-8 B[3,13]=6 B[3,14]=-5 B[3,15]=5 B[3,16]=3 B[3,17]=-6 B[3,18]=-3 B[3,19]=1 B[4,1]=3 B[4,2]=-7 B[4,3]=10 B[4,4]=4 B[4,5]=-6 B[4,6]=4 B[4,7]=6 B[4,8]=-5 B[4,9]=-2 B[4,10]=2 B[4,11]=-9 B[4,12]=6 B[4,13]=8 B[4,14]=6 B[4,15]=10 B[4,16]=1 B[4,17]=0 B[4,18]=-9 B[4,19]=8 B[5,1]=2 B[5,2]=1 B[5,3]=-4 B[5,4]=9 B[5,5]=-9 B[5,6]=3 B[5,7]=9 B[5,8]=-4 B[5,9]=-2 B[5,10]=3 B[5,11]=-3 B[5,12]=-7 B[5,13]=-8 B[5,14]=-9 B[5,15]=3 B[5,16]=8 B[5,17]=-6 B[5,18]=4 B[5,19]=0 B[6,1]=2 B[6,2]=0 B[6,3]=-2 B[6,4]=5 B[6,5]=-8 B[6,6]=-2 B[6,7]=1 B[6,8]=-8 B[6,9]=5 B[6,10]=2 B[6,11]=-1 B[6,12]=-9 B[6,13]=-8 B[6,14]=-2 B[6,15]=2 B[6,16]=-4 B[6,17]=4 B[6,18]=2 B[6,19]=1 B[7,1]=5 B[7,2]=0 B[7,3]=0 B[7,4]=9 B[7,5]=2 B[7,6]=-9 B[7,7]=3 B[7,8]=4 B[7,9]=6 B[7,10]=9 B[7,11]=2 B[7,12]=2 B[7,13]=-9 B[7,14]=0 B[7,15]=6 B[7,16]=7 B[7,17]=4 B[7,18]=4 B[7,19]=9 B[8,1]=4 B[8,2]=23 B[8,3]=-5 B[8,4]=-2 B[8,5]=-5 B[8,6]=1 B[8,7]=4 B[8,8]=3 B[8,9]=-2 B[8,10]=3 B[8,11]=7 B[8,12]=3 B[8,13]=2 B[8,14]=6 B[8,15]=0 B[8,16]=8 B[8,17]=-2 B[8,18]=0 B[8,19]=3 B[9,1]=8 B[9,2]=7 B[9,3]=3 B[9,4]=1 B[9,5]=3 B[9,6]=5 B[9,7]=8 B[9,8]=6 B[9,9]=-1 B[9,10]=-18 B[9,11]=-8 B[9,12]=-1 B[9,13]=0 B[9,14]=1 B[9,15]=5 B[9,16]=-4 B[9,17]=4 B[9,18]=4 B[9,19]=-2 B[10,1]=-1 B[10,2]=9 B[10,3]=1 B[10,4]=2 B[10,5]=1 B[10,6]=5 B[10,7]=7 B[10,8]=-3 B[10,9]=9 B[10,10]=-1 B[10,11]=9 B[10,12]=2 B[10,13]=9 B[10,14]=1 B[10,15]=-1 B[10,16]=4 B[10,17]=2 B[10,18]=0 B[10,19]=4 B[11,1]=-2 B[11,2]=6 B[11,3]=7 B[11,4]=-4 B[11,5]=-8 B[11,6]=7 B[11,7]=9 B[11,8]=-5 B[11,9]=1 B[11,10]=0 B[11,11]=5 B[11,12]=2 B[11,13]=3 B[11,14]=-1 B[11,15]=0 B[11,16]=7 B[11,17]=-4 B[11,18]=-0 B[11,19]=-4 B[12,1]=-6 B[12,2]=-1 B[12,3]=5 B[12,4]=3 B[12,5]=-5 B[12,6]=8 B[12,7]=7 B[12,8]=0 B[12,9]=8 B[12,10]=7 B[12,11]=-9 B[12,12]=4 B[12,13]=3 B[12,14]=7 B[12,15]=9 B[12,16]=6 B[12,17]=1 B[12,18]=1 B[12,19]=6 B[13,1]=7 B[13,2]=1 B[13,3]=8 B[13,4]=6 B[13,5]=6 B[13,6]=6 B[13,7]=-4 B[13,8]=4 B[13,9]=1 B[13,10]=5 B[13,11]=2 B[13,12]=-9 B[13,13]=2 B[13,14]=-3 B[13,15]=5 B[13,16]=-8 B[13,17]=7 B[13,18]=3 B[13,19]=-3 B[14,1]=2 B[14,2]=10 B[14,3]=4 B[14,4]=7 B[14,5]=8 B[14,6]=1 B[14,7]=-10 B[14,8]=-7 B[14,9]=0 B[14,10]=2 B[14,11]=-3 B[14,12]=4 B[14,13]=4 B[14,14]=6 B[14,15]=8 B[14,16]=5 B[14,17]=-2 B[14,18]=3 B[14,19]=-8 B[15,1]=1 B[15,2]=9 B[15,3]=5 B[15,4]=8 B[15,5]=3 B[15,6]=2 B[15,7]=3 B[15,8]=3 B[15,9]=2 B[15,10]=1 B[15,11]=2 B[15,12]=-6 B[15,13]=8 B[15,14]=-5 B[15,15]=-1 B[15,16]=0 B[15,17]=5 B[15,18]=9 B[15,19]=2 B[16,1]=7 B[16,2]=5 B[16,3]=5 B[16,4]=4 B[16,5]=7 B[16,6]=0 B[16,7]=9 B[16,8]=1 B[16,9]=-4 B[16,10]=-7 B[16,11]=8 B[16,12]=2 B[16,13]=-4 B[16,14]=-1 B[16,15]=-2 B[16,16]=9 B[16,17]=4 B[16,18]=5 B[16,19]=2 B[17,1]=1 B[17,2]=7 B[17,3]=-7 B[17,4]=-8 B[17,5]=-1 B[17,6]=3 B[17,7]=1 B[17,8]=2 B[17,9]=3 B[17,10]=-6 B[17,11]=6 B[17,12]=-1 B[17,13]=-2 B[17,14]=5 B[17,15]=1 B[17,16]=9 B[17,17]=0 B[17,18]=7 B[17,19]=-0 B[18,1]=1 B[18,2]=3 B[18,3]=8 B[18,4]=0 B[18,5]=8 B[18,6]=2 B[18,7]=-2 B[18,8]=9 B[18,9]=5 B[18,10]=4 B[18,11]=8 B[18,12]=-6 B[18,13]=7 B[18,14]=-6 B[18,15]=-5 B[18,16]=-9 B[18,17]=-7 B[18,18]=9 B[18,19]=1 B[19,1]=3 B[19,2]=-5 B[19,3]=5 B[19,4]=-6 B[19,5]=1 B[19,6]=8 B[19,7]=7 B[19,8]=1 B[19,9]=7 B[19,10]=8 B[19,11]=0 B[19,12]=-0 B[19,13]=3 B[19,14]=-5 B[19,15]=-4 B[19,16]=7 B[19,17]=-8 B[19,18]=9 B[19,19]=1 Транспонированный массив В
B[1,1]=-7 B[2,1]=-6 B[3,1]=-8 B[4,1]=1 B[5,1]=4 B[6,1]=-9 B[7,1]=10 B[8,1]=0 B[9,1]=-2 B[10,1]=5 B[11,1]=-4 B[12,1]=-5 B[13,1]=6 B[14,1]=-10 B[15,1]=0 B[16,1]=3 B[17,1]=6 B[18,1]=2 B[19,1]=8 B[1,2]=-2 B[2,2]=6 B[3,2]=10 B[4,2]=-3 B[5,2]=9 B[6,2]=-2 B[7,2]=5 B[8,2]=-7 B[9,2]=3 B[10,2]=7 B[11,2]=3 B[12,2]=-9 B[13,2]=7 B[14,2]=5 B[15,2]=-6 B[16,2]=-8 B[17,2]=-2 B[18,2]=7 B[19,2]=-9 B[1,3]=-4 B[2,3]=-5 B[3,3]=-10 B[4,3]=2 B[5,3]=-7 B[6,3]=-7 B[7,3]=3 B[8,3]=7 B[9,3]=1 B[10,3]=7 B[11,3]=0 B[12,3]=-8 B[13,3]=6 B[14,3]=-5 B[15,3]=5 B[16,3]=3 B[17,3]=-6 B[18,3]=-3 B[19,3]=1 B[1,4]=3 B[2,4]=-7 B[3,4]=10 B[4,4]=4 B[5,4]=-6 B[6,4]=4 B[7,4]=6 B[8,4]=-5 B[9,4]=-2 B[10,4]=2 B[11,4]=-9 B[12,4]=6 B[13,4]=8 B[14,4]=6 B[15,4]=10 B[16,4]=1 B[17,4]=0 B[18,4]=-9 B[19,4]=8 B[1,5]=2 B[2,5]=1 B[3,5]=-4 B[4,5]=9 B[5,5]=-9 B[6,5]=3 B[7,5]=9 B[8,5]=-4 B[9,5]=-2 B[10,5]=3 B[11,5]=-3 B[12,5]=-7 B[13,5]=-8 B[14,5]=-9 B[15,5]=3 B[16,5]=8 B[17,5]=-6 B[18,5]=4 B[19,5]=0 B[1,6]=2 B[2,6]=0 B[3,6]=-2 B[4,6]=5 B[5,6]=-8 B[6,6]=-2 B[7,6]=1 B[8,6]=-8 B[9,6]=5 B[10,6]=2 B[11,6]=-1 B[12,6]=-9 B[13,6]=-8 B[14,6]=-2 B[15,6]=2 B[16,6]=-4 B[17,6]=4 B[18,6]=2 B[19,6]=1 B[1,7]=5 B[2,7]=0 B[3,7]=0 B[4,7]=9 B[5,7]=2 B[6,7]=-9 B[7,7]=3 B[8,7]=4 B[9,7]=6 B[10,7]=9 B[11,7]=2 B[12,7]=2 B[13,7]=-9 B[14,7]=0 B[15,]=6 B[16,7]=7 B[17,7]=4 B[18,7]=4 B[19,7]=9 B[1,8]=4 B[2,8]=23 B[3,8]=-5 B[4,8]=-2 B[5,8]=-5 B[6,8]=1 B[7,8]=4 B[8,8]=3 B[9,8]=-2 B[10,8]=3 B[11,8]=7 B[12,8]=3 B[13,8]=2 B[14,8]=6 B[15,8]=0 B[16,8]=8 B[17,8]=-2 B[18,8]=0 B[19,8]=3 B[1,9]=8 B[2,9]=7 B[3,9]=3 B[4,9]=1 B[5,9]=3 B[6,9]=5 B[7,9]=8 B[8,9]=6 B[9,9]=-1 B[10,9]=-18 B[11,9]=-8 B[12,9]=-1 B[13,9]=0 B[14,9]=1 B[15,9]=5 B[16,9]=-4 B[17,9]=4 B[18,9]=4 B[19,9]=-2 B[1,10]=-1 B[2,10]=9 B[3,10]=1 B[4,10]=2 B[5,10]=1 B[6,10]=5 B[7,10]=7 B[8,10]=-3 B[9,10]=9 B[10,10]=-1 B[11,10]=9 B[12,10]=2 B[13,10]=9 B[14,10]=1 B[15,10]=-1 B[16,10]=4 B[17,10]=2 B[18,10]=0 B[19,10]=4 B[1,11]=-2 B[2,11]=6 B[3,11]=7 B[4,11]=-4 B[5,11]=-8 B[6,11]=7 B[7,11]=9 B[8,11]=-5 B[9,11]=1 B[10,11]=0 B[11,11]=5 B[12,11]=2 B[13,11]=3 B[14,11]=-1 B[15,11]=0 B[16,11]=7 B[17,11]=-4 B[18,11]=-0 B[19,11]=-4 B[1,12]=-6 B[2,12]=-1 B[3,12]=5 B[4,12]=3 B[5,12]=-5 B[6,12]=8 B[7,12]=7 B[8,12]=0 B[9,12]=8 B[10,12]=7 B[11,12]=-9 B[12,12]=4 B[13,12]=3 B[14,12]=7 B[15,12]=9 B[16,12]=6 B[17,12]=1 B[18,12]=1 B[19,12]=6 B[1,13]=7 B[2,13]=1 B[3,13]=8 B[4,13]=6 B[5,13]=6 B[6,13]=6 B[7,13]=-4 B[8,13]=4 B[9,13]=1 B[10,13]=5 B[11,13]=2 B[12,13]=-9 B[13,13]=2 B[14,13]=-3 B[15,13]=5 B[16,13]=-8 B[17,13]=7 B[18,13]=3 B[19,13]=-3 B[1,14]=2 B[2,14]=10 B[3,14]=4 B[4,14]=7 B[5,14]=8 B[6,14]=1 B[7,14]=-10 B[8,14]=-7 B[9,14]=0 B[10,14]=2 B[11,14]=-3 B[12,14]=4 B[13,14]=4 B[14,14]=6 B[15,14]=8 B[16,14]=5 B[17,14]=-2 B[18,14]=3 B[19,14]=-8 B[1,15]=1 B[2,15]=9 B[3,15]=5 B[4,15]=8 B[5,15]=3 B[6,15]=2 B[7,15]=3 B[8,15]=3 B[9,15]=2 B[10,15]=1 B[11,15]=2 B[12,15]=-6 B[13,15]=8 B[14,15]=-5 B[15,15]=-1 B[16,15]=0 B[17,15]=5 B[18,15]=9 B[19,15]=2 B[1,16]=7 B[2,16]=5 B[3,16]=5 B[4,16]=4 B[5,16]=7 B[6,16]=0 B[7,16]=9 B[8,16]=1 B[9,16]=-4 B[10,16]=-7 B[12,16]=8 B[12,16]=2 B[13,16]=-4 B[14,16]=-1 B[15,16]=-2 B[16,16]=9 B[17,16]=4 B[18,16]=5 B[19,16]=2 B[1,17]=1 B[2,17]=7 B[3,17]=-7 B[4,17]=-8 B[5,17]=-1 B[6,17]=3 B[7,17]=1 B[8,17]=2 B[9,17]=3 B[10,17]=-6 B[1,17]=6 B[12,17]=-1 B[13,17]=-2 B[14,17]=5 B[15,17]=1 B[16,17]=9 B[17,17]=0 B[18,17]=7 B[19,17]=-0 B[1,18]=1 B[2,18]=3 B[3,18]=8 B[4,18]=0 B[5,18]=8 B[6,18]=2 B[7,18]=-2 B[8,18]=9 B[9,18]=5 B[10,18]=4 B[11,18]=8 B[12,18]=-6 B[13,18]=7 B[14,18]=-6 B[15,18]=-5 B[16,18]=-9 B[17,18]=-7 B[18,18]=9 B[19,18]=1 B[1,91]=3 B[2,19]=-5 B[3,19]=5 B[4,19]=-6 B[5,19]=1 B[6,19]=8 B[7,19]=7 B[8,19]=1 B[9,19]=7 B[10,19]=8 B[11,19]=0 B[12,19]=-0 B[13,19]=3 B[14,19]=-5 B[15,19]=-4 B[16,19]=7 B[17,1]=-8 B[18,19]=9 B[19,19]=1
Полученный массив В умножается на массив А для получения массива С. Умножение происходит по правилу умножения матриц:
C[1]=-0,015
C[2]=-14,304
C[3]=-2,945
C[4]=-6,439
C[5]=3,845
C[6]=-11,162
C[7]=29,502
C[8]=-3,217
C[9]=-1,006
C[10]=21,728
C[11]=6,365
C[12]=-23,001
C[13]=3,349
C[14]=-12,244
C[15]=-0,355
C[16]=-8,440
C[17]=13,814
C[18]=4,642
C[19]=-18,640
После сортировки по возрастанию массив С имеет следующий вид:
C[1]= 29,502
C[2]= 21,728
C[3]= 13,814
C[4]= 6,365
C[5]= 4,642
C[6]= 3,845
C[7]= 3,349
C[8]= -0,015
C[9]= -0,355
C[10]= -1,006
C[11]= -2,945
C[12]= -3,217
C[13]= -6,439
C[14]= -8,440
C[15]= -11,162
C[16]= -12,244
C[17]= -14,304
C[18]= -18,640
C[19]= -23,001
На рисунке 6 представлено окно программы с активной вкладкой "массив А". В левой части окна находится рабочая область, в которой выводятся элементы массивов. В правой части находятся элементы для работы с массивом А и формулы: Формула по которой рассчитываются элементы массива А.
Контрольная формула для проверки правильности заполнения массива А.
Рисунок 6 - окно программы
На рисунке 7 представлено окно программы с активной вкладкой "массив В". В нижней части окна находится рабочая область, в которой выводятся элементы массива В. В верхней части находятся элементы для работы с массивом В.
Рисунок 7 - окно программы
На рисунке 8 представлено окно программы с активной вкладкой "Транспонированный массив В". В окне находится рабочая область, в которой выводятся элементы транспонированного массива В.
Рисунок 8 - окно программы
На рисунке 9 представлено окно программы с активной вкладкой "массив С". В левой части окна находится рабочая область, в которой выводятся элементы массива С, элементы для заполнения массива С1 и построения графика. Рисунок 9 - окно программы
На рисунке 10 представлено окно программы с активной вкладкой "Отсортированный массив С". В окне находится рабочая область, в которой выводятся элементы отсортированного массива С1, и элементы для построения графика. Рисунок 10 - окно программы
На рисунке 11 представлено окно программы с активной вкладкой "График". В верхней части окна находится рабочая область, в которой чертится график массива С и сортированного массива С1
Рисунок 11 - окно программы
Чтобы заполнить массив А, нужно на вкладке "массив А" ввести диапазон начального и конечного промежутка для х, ввести шаг, с которым изменяется х, и нажать кнопку "Рассчитать". Массив А будет заполнен и показан в рабочей области. Если не было введены диапазон или шаг будет выведено соответствующее сообщение.
Для заполнения массива В нужно на вкладке "массив В" ввести диапазон начального и конечного промежутка, из которого будут браться числа, и нажать кнопку "Сформировать массив В". Массив В будет сформирован и показан в рабочей области. Если не был задан диапазон, или начальное значение превышает конечное, или не был сформирован массив А, то выдаются соответствующие сообщения. Транспонированный массива В формируется автоматически Для формирования массива С нужно на вкладке "массив С" нажать кнопку "Сформировать массив С". Для сортировки массива С нужно на вкладке "Отсортированный массив С" нажать кнопку "Отсортировать массив С". Чтобы начертить график массива С и сортированного массива С1 нужно на вкладке "график" нажать кнопку "Построить график". График рисуется и выводится в рабочей области.
При формировании массива он параллельно записывается в текстовый файл. Чтобы записать уже сформированные массивы в файл MSWord надо нажать вкладку "Сохранение" и выбрать пункт "Данных". Далее мы указываем название файла и папку для сохранения. Чтобы сохранить график в виде изображения в формате .jpg. нужно нажать на вкладку "Сохранение" и выбрать пункт "Графика". После чего он сохраняется в указанную папку.
Далее прилагается распечатка файла Word.
СПИСОК ЛИТЕРАТУРЫ
Архангельский А.Я. 100 компонентов Delphi. М.: Бином, 2002.
Фленов М. Е.Библия Delphi. СПб.:БХВ-Петербург, 2004.
Корняков В.С. Программирование документов и приложений MS Office в Delphi. М.: Форум, 2006
Архангельский А.Я. Delphi 2006. Справочное пособие. М.: Бином, 2006.
5 Курсовое проектирование по дисциплине "Технология разработки программных продуктов". Т.Н. Грушникова, Е.В. Карташова, Е.Ю. Савина. Издательство Коломна 2005.
ПРИЛОЖЕНИЕ А - ИСХОДНЫЙ
ТЕКСТ ПРОГРАММНОГО МОДУЛЯ
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Menus, ComCtrls, TabNotBk, ExtCtrls, comobj,
jpeg;
type
TForm1 = class(TForm)
TabbedNotebook1: TTabbedNotebook;
MainMenu1: TMainMenu;
N2: TMenuItem;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Memo1: TMemo;
StringGrid1: TStringGrid;
Button1: TButton;
Edit4: TEdit;
StringGrid2: TStringGrid;
Edit5: TEdit;
Edit6: TEdit;
Button2: TButton;
StringGrid4: TStringGrid;
Button3: TButton;
Image1: TImage;
Button5: TButton;
N3: TMenuItem;
N4: TMenuItem;
Label5: TLabel;
StringGrid3: TStringGrid;
Button6: TButton;
Label6: TLabel;
Label7: TLabel;
Button4: TButton;
StringGrid5: TStringGrid;
Label8: TLabel;
Label9: TLabel;
N1: TMenuItem;
N5: TMenuItem;
Image2: TImage;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure Edit4KeyPress(Sender: TObject; var Key: Char);
procedure Edit5KeyPress(Sender: TObject; var Key: Char);
procedure Edit6KeyPress(Sender: TObject; var Key: Char);
procedure Button6Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
A,C,C1:array of real;
B,B2:array of array of integer;
n:integer;
word:variant;
implementation
{$R *.dfm}
function r (x, e: real): real;
var
i: integer;
zn, ch, s,a: real;
begin
ch := -1;
i := 0;
s := 0;
repeat
inc(i);
ch:=-ch*sqr(x);
zn:=ch/(i*(2*i-1));
s:=s+zn;
until abs(zn) <= e;
r := s;
end;
Function F1(x:real):real;
begin
F1:=2*x*ArcTan(x)-2*Ln(Sqrt(1+(x*x)));
end;
procedure TForm1.Button6Click(Sender: TObject);
var
Vg,Ng,i,j,a,k:integer;
begin
SetLength(B,n,n);
Vg:=strtoint(Edit6.Text);
Ng:=strtoint(Edit5.Text);
stringgrid2.ColCount:=n;
stringgrid2.RowCount:=n;
stringgrid3.ColCount:=n;
stringgrid3.RowCount:=n;
// Транспонирование массива В
For i:= 0 to n-1 do
For j:=0 to n-1 do
If j>i then begin a:=B[i,j];
B[i,j]:=B[j,i];
B[j,i]:=a;
end;
//Вывод транспонированного массива
For i:= 0 to n-1 do
For j:=0 to n-1 do
Stringgrid3.Cells[j,i]:=IntToStr(B[i,j]);
{ Для нахождения В^2
SetLength(B2,n,n);
For i:= 0 to n-1 do
For j:=0 to n-1 do
B2[i,j]:=0;
For i:= 0 to n-1 do
For j:=0 to n-1 do
For k:= 0 to n-1 do
B2[i,j]:= B2[i,j]+B[i,k]*B[k,j];
For i:= 0 to n-1 do
For j:=0 to n-1 do
Stringgrid3.Cells[j,i]:=IntToStr(B2[i,j]);
end;}
end;
procedure TForm1.Button1Click(Sender: TObject);
var
xk,xn,h,eps:real;
i:integer;
begin
try
xn:=strtofloat(Edit1.text);
xk:=strtofloat(Edit2.text);
h:=strtofloat(Edit3.text);
eps:=strtofloat(Edit4.text);
n:=round((xk-xn)/h);
n:=n+1; //inc(n)
SetLength(A,n);
stringgrid1.ColCount:=n;
for i := 0 to n - 1 do
begin
A[i]:= r(xn,eps);
Memo1.Lines.Add('h=' + formatfloat('0.0',xn)+' '+ 'A'+'['+inttostr(i)+']=' + Formatfloat('0.00',A[i])+' '+formatfloat('0.00',F1(xn)));
StringGrid1.Cells[i,0]:=FloatToStr(A[i]);
xn:=xn+h;
end;
except
exit;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Vg,Ng,i,j,a,k:integer;
begin
randomize;
SetLength(B,n,n);
Vg:=strtoint(Edit6.Text);
Ng:=strtoint(Edit5.Text);
stringgrid2.ColCount:=n;
stringgrid2.RowCount:=n;
stringgrid3.ColCount:=n;
stringgrid3.RowCount:=n;
For i:= 0 to n-1 do
For j:=0 to n-1 do
begin
B[i,j]:=Ng+random(Vg-Ng+1);
Stringgrid2.Cells[j,i]:=IntToStr(B[i,j]);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i,j:integer;
begin
SetLength(c,n);
For i:= 0 to n-1 do
begin
For j:=0 to n-1 do
C[i]:=c[i]+b[i,j]*a[j];
end;
stringgrid4.ColCount:=n;
for i := 0 to n-1 do
Stringgrid4.Cells[i,0]:=floatToStr(C[i]);
end;
procedure TForm1.Button4Click(Sender: TObject);
var i,j,k:integer;
m:real;
begin
setLength(C1,n);
for i:= 0 to n-1 do C1[i]:=C[i];
For i:=n-1 downTo 1 do
begin
k:=i;
m:=C1[i];
for j:=0 to i-1 do
if C1[j]<m then
begin k:=j; m:=C1[j]
end;
if k<>i then begin
C1[k]:=C1[i]; C1[i]:=m;
end;
end;
stringgrid5.ColCount:=n;
for i:=0 to n-1 do
stringgrid5.Cells[i,0]:=formatfloat('0.000',C1[i]);
end;
procedure TForm1.Button5Click(Sender: TObject);
var
x,y,Xmin,Xmax,Ymin,Ymax:real;
Xgmin,Xgmax,Ygmax,Ygmin,i,Xg,Yg:integer;
begin
Xgmin:=0;
Xgmax:= Image1.ClientWidth;
Ygmin:= Image1.ClientHeight;
Ygmax:=0;
Xmin:=0;
Xmax:= n-1;
Ymin:=C1[n-1];
Ymax:=C1[0];
Xg:=Xgmin + Trunc((Xgmax-Xgmin)*(0-Xmin)/(Xmax-Xmin));
Yg:=Ygmin + Trunc((Ygmax-Ygmin)*(C1[0]-Ymin)/(Ymax-Ymin));
Image1.Canvas.Moveto(Xg,Yg);
for i:= 1 to n-1 do begin
image1.Canvas.Pen.Color:=clred;
Xg:=Xgmin + Trunc((Xgmax-Xgmin)*(i-Xmin)/(Xmax-Xmin));
Yg:=Ygmin + Trunc((Ygmax-Ygmin)*(C1[i]-Ymin)/(Ymax-Ymin));
Image1.Canvas.Lineto(Xg,Yg);
end;
Xg:=Xgmin + Trunc((Xgmax-Xgmin)*(0-Xmin)/(Xmax-Xmin));
Yg:=Ygmin + Trunc((Ygmax-Ygmin)*(C[0]-Ymin)/(Ymax-Ymin));
Image1.Canvas.Moveto(Xg,Yg);
for i:= 1 to n-1 do begin
image1.Canvas.Pen.Color:=clgreen;
Xg:=Xgmin + Trunc((Xgmax-Xgmin)*(i-Xmin)/(Xmax-Xmin));
Yg:=Ygmin + Trunc((Ygmax-Ygmin)*(C[i]-Ymin)/(Ymax-Ymin));
Image1.Canvas.Lineto(Xg,Yg);
end;
image1.Canvas.Pen.Color:=clblack;
xg:=0;
Yg:=Ygmin + Trunc((Ygmax-Ygmin)*(0-Ymin)/(Ymax-Ymin));
Image1.Canvas.Moveto(Xg,Yg);
xg:=Image1.ClientWidth;
Image1.Canvas.Lineto(Xg,Yg);
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in [#8,'0'..'9',decimalseparator]) then key:=#0;
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in [#8,'0'..'9',decimalseparator]) then key:=#0;
end;
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in [#8,'0'..'9',decimalseparator]) then key:=#0;
end;
procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in [#8,'0'..'9',decimalseparator]) then key:=#0;
end;
procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in [#8,'0'..'9',decimalseparator]) then key:=#0;
end;
procedure TForm1.Edit6KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in [#8,'0'..'9',decimalseparator]) then key:=#0;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.N3Click(Sender: TObject);
var
h1 : HWND; // идентификатор (дескриптор) окна
begin
h1:= FindWindow('HH Parent','Массив А');
if h1=0 then
WinExec('hh.exe Help.chm',SW_RESTORE)
else
begin
ShowWindow(h1,SW_RESTORE);
Windows.SetForegroundWindow(h1);
end;
end;
procedure TForm1.N1Click(Sender: TObject);
const
wdAlignParagraphCenter = 1;
wdAlignParagraphLeft = 0;
wdAlignParagraphRight = 2;
wdLineStyleSingle = 1;
var
wdApp, wdDoc, wdRng, wdTable : Variant;
i, j, Res : Integer;
Sd : TSaveDialog;
begin
Sd := SaveDialog1;
//Если начальная папка диалога не задана, то в качестве начальной берём ту папку,
//в которой расположен исполняемый файл нашей программы.
if Sd.InitialDir = '' then Sd.InitialDir := ExtractFilePath( ParamStr(0) );
//Запуск диалога сохранения файла.
if not Sd.Execute then Exit;
//Если файл с заданным именем существует, то запускаем диалог с пользователем.
if FileExists(Sd.FileName) then begin
Res := MessageBox(0, 'Файл с заданным именем уже существует. Перезаписать?'
,'Внимание!', MB_YESNO + MB_ICONQUESTION + MB_APPLMODAL);
if Res <> IDYES then Exit;
end;
//Попытка запустить MS Word.
try
wdApp := CreateOleObject('Word.Application');
except
MessageBox(0, 'Не удалось запустить MS Word. Действие отменено.'
,'Внимание!', MB_OK + MB_ICONERROR + MB_APPLMODAL);
Exit;
end;
//Делаем видимым окно MS Word. На постоянной основе или на время отладки.
wdApp.Visible := True;
//Создаём новый документ.
wdDoc := wdApp.Documents.Add;
//На случай, если много данных и wdApp.Visible := True - тогда
//для ускорения работы отключаем перерисовку окна MS Word.
//wdApp.ScreenUpdating := False;
try
wdRng := wdDoc.Content; //Диапазон, охватывающий всё содержимое документа.
wdRng.InsertAfter('Массив А'#13#10 + Memo1.Text + #13#10'Массив В'#13#10);
//Добавляем таблицу.
wdTable := wdDoc.Tables.Add(wdRng.Characters.Last, StringGrid2.RowCount, StringGrid2.ColCount);
//Параметры линий таблицы.
wdTable.Borders.InsideLineStyle := wdLineStyleSingle;
wdTable.Borders.OutsideLineStyle := wdLineStyleSingle;
//Заполняем таблицу.
with StringGrid2 do
for i := 0 to RowCount - 1 do
for j := 0 to ColCount - 1 do
wdTable.Cell(i + 1, j + 1).Range.Text := Cells[j, i];
wdRng.InsertAfter(#13#10'Транспонированный Массив В'#13#10);
wdTable := wdDoc.Tables.Add(wdRng.Characters.Last, StringGrid3.RowCount, StringGrid3.ColCount);
wdTable.Borders.InsideLineStyle := wdLineStyleSingle;
wdTable.Borders.OutsideLineStyle := wdLineStyleSingle;
with StringGrid3 do
for i := 0 to RowCount - 1 do
for j := 0 to ColCount - 1 do
wdTable.Cell(i + 1, j + 1).Range.Text := Cells[j, i];
wdRng.InsertAfter(#13#10'Массив C'#13#10);
for j := 0 to StringGrid4.ColCount - 1 do begin
if j > 0 then wdRng.InsertAfter('; ');
wdRng.InsertAfter(StringGrid4.Cells[j, 0]);
end;
wdRng.InsertAfter(#13#10#13#10'Отсортированный Массив C'#13#10);
for j := 0 to StringGrid5.ColCount - 1 do begin
if j > 0 then wdRng.InsertAfter('; ');
wdRng.InsertAfter(StringGrid5.Cells[j, 0]);
end;
finally
//Включение перерисовки окна MS Word. В случае, если wdApp.Visible := True.
wdApp.ScreenUpdating := True;
end;
wdApp.DisplayAlerts := False; //Отключаем режим показа предупреждений.
try
wdDoc.SaveAs(FileName:=Sd.FileName); //Запись документа в файл.
finally
wdApp.DisplayAlerts := True; //Включаем режим показа предупреждений.
end;
//Закрываем документ.
//wdDoc.Close;
//Закрываем MS Word.
//wdApp.Quit;
end;
procedure TForm1.N5Click(Sender: TObject);
begin
Image1.Picture.SaveTofile('D:\KursOM\save\График.jpg');
end;
end.
Документ
Категория
Рефераты
Просмотров
37
Размер файла
1 257 Кб
Теги
пояснительная, записка
1/--страниц
Пожаловаться на содержимое документа