Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Министерство транспорта и связи Украины
ОДЕССКАЯ НАЦИОНАЛЬНАЯ АКАДЕМИЯ СВЯЗИ им. А.С. ПОПОВА
Кафедра информационных технологий
Курсовая работа
По дисциплине: Информатика
На тему: «Создание библиотек подпрограмм для обработки массивов»
Выполнила: Студентка 1-го курса
Группы ПЗ 1.20
Соловова Татьяна Вячеславовна
Проверила: доцент кафедры
Информационных технологий
Буката Людмила Николаевна
________
2013 год
Содержание:
Анализ полученных результатов…………………………………………………..23
Массив в программировании - это упорядоченная совокупность однотипных элементов. Массивы широко применяются для хранения и обработки однородной информации, например таблиц, векторов, матриц и т.д.
Каждый элемент массива однозначно можно определить по имени массива и индексами. Имя массива подбирают по тем правилам что и для переменных. Индексы определяют местонахождение элемента в массиве. Например, элементы вектора имеют один индекс - номер по порядку; элементы матриц и таблиц имеют по два индекса: первый означает номер строки, второй - номер столбца. Количество индексов определяет размерность массива. Например, векторы в программах - это одномерные массивы, а матрицы - двумерные.
• Одномерный массив это последовательность элементов одного и того же типа. Массив должен быть объявлен в программе следующим образом:
<Тип> <имя> [размер]; |
Выводить значения одномерного массива можно в файл или на форму используя различные компоненты С + +, в Memo,Edit:
Memo1->Lines->Add(FormatFloat(«0.00»,A[i]));
Edit1->Text=Edit1->Text+FormatFloat(«0.00»,A[i])+ « »;
А так же с помощью компонента Memo можно вводить массивы:
A[i]=StrToFloat(Memo1->Lines->Strings[i]);
•Двумерные массивы как и одномерные массивы должны быть объявлены в программе. Сначало указать тип элементов массива, затем указать имя массива и указать его размерность:
<Тип> <имя> [размер][размер2]; |
Для ввода и вывода элементов матрицы в С++ существует компонент StringGrid , который находится на странице Additional
Фиксированная строка |
Компонент представит собой таблицу размерностью 5х5. Каждая ячейка имеет свой адрес.
Фиксированные столбцы |
Свойства компонента StringGrid, которые создаются по умолчанию в окне ObjectInspector:
Эти свойства можно изменить, если размер матрицы будет другой.
Для ввода элементов и редактирования матрицы необходимо установить дополнительные свойства:
Вывод элементов двумерных массивов.
Осуществлять вывод значений элементов массива можно только поэлементно, для чего следует организовывать циклы, в которых последовательно меняються значения индексов элементов.
Выводиться матрица будет через компоненты Memo,StringGrid:
Memo1->Lines->Add->IntToStr(«A[i][j]»);
StringGrid1->Cells[j][i]=IntToStr(A[i][j]);
А так же с помощью компонента StringGrid можно вводить массивы:
A[i][j]=StrToInt(StringGrid1->Cells[j][i]);
• Библиотеки функций файл, который содержит несколько функций и организован так, чтобы каждый из этих функций можно было удалить из библиотеки и присоединить к любой внешней программе. Библиотеки могут содержать объявления констант переменных и типов, которые могут пользоваться любые внешние программы.
Для того чтобы создать библиотеку необходимо:
File→New→Unit
Для подключения библиотеки Unit2 к основному модулю Unit1 необходимо выполнить команду Include Unit Hdr: и нажать ОК
Unit2.cpp называется файл реализации.
Unit2.h это заголовочный файл.
Разумеется Unit1 основной модуль.
Вариант 20
Условие:
где i=0,...,5; j=0,…,5;
x столбец из квадратов наименьших элементов строк матрицы а.
Для Unit1.cpp
Вход
Рис.1 Схема вычисления программы для матрицы(mat_ric) |
a[i][j]
j=0,5
Выход
i=0,5
elem_matr(a)
Вход
Выход
b[i]
j=0,5
i=0,5
elem_vectora(a,b)
Рис.2 Схема вычисления программы для вектора(vec_tor) |
Вход
G=fun_G1(b)
Рис.3 Схема вычисления программы для функции(fun_G) |
Выход
G
Для Unit2.cpp
Вход
Выход
a[i][j]=(pow(3,i)+i*j+0.5)/(4+j+i)*sin(j+i)
j=0,5
i=0,5
Рис.4 Схема подпрограммы для вычисления элементов матрицы(elem_matr) |
Рис.5 Схема подпрограммы для вычисления элементов вектора(elem_vectora) |
Выход
b[i]=S*S
a[i][j]<S
S=a[i][j]
j=0,5
S=a[i][0]
i=0,5
Вход
Вход
S=1
Рис.6 Схема подпрограммы для вычисления функции (fun_G1) |
Выход
G=log(S)-log(S1)
S1+=(b[i])
S*=1+|b[i]|
j=0,5
i=0,5
S1=0
Рис. 7
Form1
Рис. 8
Form 3 (AboutBox)
Рис. 9
Form 4
Рис. 10
Form 5
Рис. 11
Form 6 (Заставка)
Для Unit1.cpp //основной модуль
#include «Unit2.h» // подслючаем библиотеку
TForm*Form1;
matr a; vect b;// объявляем глобальные переменные
//---------------------------------------------------------------------------
void __fastcall TForm1::mat_ricClick(TObject *Sender) //текст программы для пункта SG1(вычисления матрицы)
{elem_matr(a);//вызов подпрограммы для вычисления матрицы
for(i=0;i<5;i++)//цикл по строкам
for(j=0;j<5;j++)//цикл по столбцам
StringGrid1->Cells[j][i]=FormatFloat("0.00",a[i][j]);//вывод результатов в SG1
StringGrid1->Visible=true;
Label1->Visible=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::vec_torClick(TObject *Sender) //текст программы для пункта SG2(вычисления вектора)
{elem_vectora(a,b);//вызов подпрограммы для вычисления вектора
for(i=0;i<5;i++)//цикл по строкам
for(j=0;j<5;j++)//цикл по столбцам
StringGrid2->Cells[i][0]=FormatFloat("0.00",b[i]);//вывод результатов в SG2
StringGrid2->Visible=true;
Label2->Visible=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::fun_GClick(TObject *Sender)//текст программы для пункта Edit1(значение функции)
{float G=fun_G1(b);//вызов подпрограммы для вычисления функции
Edit1->Text=FormatFloat("0.000",G);// вывод результатов в Edit1
Edit1->Visible=true;
Label3->Visible=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::av_torClick(TObject *Sender)
{
AboutBox->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ex_itClick(TObject *Sender)
{int r;
r=MessageDlg("Вы уверены что хотите выйти?",
mtConfirmation,TMsgDlgButtons()<<mbYes<<mbNo,0);
if(r==mrYes)Close();
}
//---------------------------------------------------------------------------
Для Unit2.cpp // файл реализации
#include <math.h> // подключаем математическую библиотеку
void elem_matr(matr a) //подпрограмма вычисления элементов матрицы
{int i,j;//объявление целых переменных,номер строки,номер столбца
for(i=0;i<5;i++)//цикл по строкам
for(j=0;j<5;j++)//цикл по столбцам
a[i][j]=(pow(3,i)+1*j+0.5)/(4+j+i)*sin(i+j);}//формула для вычисления матрицы
//---------------------------------------------------------------------------
void elem_vectora(matr a,vect& b) //подпрограмма для вычисления вектора
{int i,j,k;//объявление целых переменных
float S;//Объявление переменной , наименьший элемент строки
for(i=0;i<5;i++)// цикл для перебора строк
{S=a[i][0]; //принимаем за начальное значение наименьшего элемента строки, значение первого элемента строки
for(j=0;j<5;j++)//цикл для перебора столбцов
{if(a[i][j]<S)// находим наименьший элемент строки
S=a[i][j];}
b[i]=S*S;// выводим массив значений квадратов наименьших элементов строк.
}
}
//---------------------------------------------------------------------------
float fun_G1(vect b) // подпрограмма для вычисление значения функции
{float S=1,S1=0;//объявление вещественных переменных, присваиваем им начальные значения
for(i=0;i<5;i++)//цикл для перебора строк
S*=1+fabs(b[i]); //условие для функции умножения
for(i=1;i<5;i++) //цикл по строкам
S1+=fabs(b[i]); //условие суммы
float G=log(S)-log(S1); //Вся функция, G объявленная как вещественная
return G;
}
Для Unit2.h // заголовочный файл
int i,j;
typedef float matr[5][5]; // заголовок подпрограммы для имени типа(matr)
typedef float vect[5]; // заголовок подпрограммы для имени типа(vect)
void elem_matr(matr a);// список формальных параметров
void elem_vectora(matr a,vect& b); //заголовок подпрограммы для элементов вектора
float fun_G1(vect b); // заголовок подпрограммы для вычисления значения функции
Для Unit4.cpp
#include <vcl.h>
void __fastcall TForm4::e_x_i_tClick(TObject *Sender)
{int r;
r=MessageDlg("Вы уверены что хотите выйти?",
mtConfirmation,TMsgDlgButtons()<<mbYes<<mbNo,0);
if(r==mrYes)Close();}
void __fastcall TForm4::view_zadanClick(TObject *Sender)
{
char * ffname;
OpenDialog1->Filter="Doc files(*.rtf)|*.rtf";
if(OpenDialog1->Execute())ffname=OpenDialog1->FileName.c_str();
RichEdit1->Lines->LoadFromFile(ffname);
Form4->Caption="Файл называется- "+AnsiString(ffname);
RichEdit1->Modified=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm4::save_modClick(TObject *Sender)
{
char * ffname;
SaveDialog1->Filter="Doc files(*.rtf)|*.rtf";
if(SaveDialog1->Execute())RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);
RichEdit1->Modified=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm4::font_styleClick(TObject *Sender)
{
FontDialog1->Execute();
RichEdit1->SelAttributes->Assign(FontDialog1->Font);
}
//---------------------------------------------------------------------------
Для Unit5.cpp
void__fastcall TForm5::TForm5(TComponent* Owner)
: TForm(Owner)
{Memo1->Clear();Memo1->Lines->LoadFromFile("bibl.txt");
}
void __fastcall TForm5::okClick(TObject *Sender)
{
Close();
}
Анализ полученных результатов.
Результаты вычислений я привела в скриншоте.
Рис. 12
Вычисление матрицы, вектора и функции
Всё сходится.
Вычисление матрицы проводилось по этой формуле:
где i=0,...,5; j=0,…,5;
Вычисляла вектор по такому алгоритму:
x столбец из квадратов наименьших элементов строк матрицы а.
Возьмём нулевую строку матрицы, самый наименьший элемент -0,14
Возводим его в квадрат, получается 0,0196
Затем округлили и получили 0,02
Этот результат можно увидеть в первой ячейке вектора.
Так же возьмём первую строку матрицы, самый наименьший элемент -0,80
Возводим его в квадрат, получается 0,64 . И так далее.
Сходится, а это значит, что программа работает правильно!
Одесса, ОНАС, 2008
Одесса, ОНАС, 2007
О.Г.Трофименко
Одеса,ОНАЗ,2010