Создание библиотек подпрограмм для обработки массивов

Автор: Пользователь скрыл имя, 25 Декабря 2012 в 22:05, курсовая работа

Краткое описание

В программе на языке C++ все переменные должны быть объявлены, т.е. для каждой переменной должен быть указан ее тип. Все типы языка C++ можно |Д разделить на две большие группы: основные типы и производные.
К основным относятся char, int, float и double, а также их варианты с модификаторами short (короткий), long (длинный), signed (со знаком, подразумевается по умолчанию и обычно не пишется) и unsigned (без знака).
Объявлять переменные можно в любом месте программы перед их использованием.

Оглавление

Курсовое задание 3
Основные теоретические сведения 4
Структурные схемы 16
Окна форм 20
Меню пользователя 22
Тексты программ 23
Результаты вычислений 31
Вывод 32
Список использованной литературы 33

Файлы: 1 файл

курс 6 вар.doc

— 710.00 Кб (Скачать)

*- означает, что следующая за ней переменная является указателем. Переменная, объявленная как указатель, хранит адрес памяти. Указатели на различные типы не обязательно имеют одну и ту же длину.

 

Понятие статической и динамической памяти

Оперативная память ПК представляет собой совокупность ячеек для  хранения информации, каждая из которых  имеет собственный номер. Эти  номера называются адресами, они позволяют обращаться к любому байту памяти.

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

При динамическом способе закрепления оперативной памяти сама программа может выделять и освобождать необходимую память для данных, т.е. управлять размещением используемых в ней данных в оперативной памяти. Например, если вещественная переменная Х используется только на одном из этапов работы программы, то можно с началом этого этапа закрепить за ней память размером в 6 байт, а после завершения этапа освободить для использования другими данными. Таким образом, можно организовывать динамические, т.е. изменяющие размеры, структуры данных. При этом оперативная память используется более эффективно. Такая возможность связана с наличием в C++ особенного типа данных – указателей.

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

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

Адресом любой величины можно считать  номер первого байта поля памяти, занимаемого этой величиной. Однако надо помнить, что разные типы компьютеров могут использовать разные формы записи таких адресов величин.

                                                              

                                                       Файлы

                                          Текстовые файлы в С

В языке С файл рассматривается как поток представляющий собой последовательность байтов.Информация офайле заносится в переменную типа FILE. Этот тип объявляет указатель потока, который используется далее во всех операциях с файлом. Тип FILE определяет в библиотеке stdio.h. Поэтому, в программе предполагается работа с файлами, то необходимо подключить библиотеку stdio.h :

#include <stdio.h>

Теперь можно описать  переменную-указатель потока:

FILE*f;

 Функция fopen открывает файл. Синтаксис функции fopen:

FILE*fopen(const char*filename,const*mode);

Первый параметр filename определяет имя открываемого файла. Второй параметр mode задает  режим открытия файла:

 

r

Открыть файл только для чтения

r+

Открыть существующий файл для чтения и записи

a

Открыть или создать файл для записи данных в конец файла

a+

Открыть или создать файл для чтения или  записи данных в конец файла

w

Создать файл для записи

w+

Создать файл для чтения


 

К указанным спецификаторам в конце  или перед знаком «+» может  добавляться символ «t»-текстовый файл или «b»-бинарный (двоичный) файл.

 Функция fopen возвращает указатель на объект, управляющий потоком.

Если файл открыть не удалось, fopen возвращает нулевой указатель NULL.

       Прекратить работу  с файлом можно при помощи  функции fclose(FILE*).

Эта функция закрывает файл, на который ссылается параметр функции.

Двоичные  файлы в С

     В отличии от текстовых  файлов, двоичные файлы представляют  собой последовательность символов  без каких либо разделителей. Эти символы могут отображать  объекты различных типов. Что именно хранит двоичный файл, должна знать программа. Обработка двоичных файлов происходит быстрее, чем текстовых. Кроме того, двоичные файлы имеют меньший объем. Но прочитать такой файл при помощи текстового редактора практически не возможно.

    Открываются и закрываются  двоичные файлы также как и  текстовые, но при задании режима  открытия файла к спецификатору  добавляется символ «b», обозначающий двоичный файл.

     Запись и чтение  в  бинарном файле обычно  происходит при помощи операторов fwrite (чтение) и fread(запись).

Дата/время

Тип дата-время определяется стандартным идентификатором TDateTime и предназначен для одновременного хранения и даты, и времени. Во внутреннем представлении он занимает 8 байт и  подобно currency представляет собой вещественное число с фиксированной дробной частью: в целой части числа хранится дата, в дробной - время. Дата определяется как количество суток, прошедших с 30 декабря 1899 года, а время - как часть суток, прошедших с 0 часов, так что значение 36444,837 соответствует дате 11.10.1999 и времени 20:05. Количество суток может быть и отрицательным, однако значения меньшие -693594 (соответствует дате 00.00.0000 от Рождества Христова) игнорируются функциями преобразования даты к строковому типу.

  Составные типы: структурированные типы, указатели, строки, процедурные, объекты, классы, варианты.

Структурированные типы в свою очередь делятся на:

1. регулярные типы (массивы);

2. комбинированные типы (записи);

3. множественные типы;

4. файловые типы;

Простые типы, описанные выше, определяют различные множества атомарных (неразделимых) значений. Составные, или структурные типы, в отличие от простых, задают множества «сложных» значений; каждое значение из такого множества образует некоторый агрегат (совокупность) нескольких значений другого типа (или других типов). Можно сказать, что составные типы определяют некоторый способ образования новых типов из уже имеющихся, причем отдельные элементы составных значений могут иметь любой, в том числе составной, тип. Таким образом, Паскаль допускает образование структур данных произвольной сложности, позволяя тем самым достичь адекватного представления в программе тех данных, с которыми она оперирует.

Функции и  процедуры для работы с датой  и временем.

 

Date 

Возвращает текущую  дату в формате TDateTime.

DateTimeToFileDate 

Конвертирует значение даты и времени формата TDateTime в значение даты и времени формата DOS.

DateTimeToStr 

Преобразовывает значение даты и времени формата TDateTime в его строковое представление.

DateTimeToString 

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

DateTimeToSystemTime 

Конвертирует значение даты и времени формата TDateTime Delphi в формат TSystemTime Win32 API.

DateTimeToTimeStamp 

Преобразовывает значение даты и времени формата TDateTime в соответствующее значение TTimeStamp.

DateToStr 

Преобразовывает значение даты формата TDateTime в ее строковое представление.

DayOfWeek 

Возвращает порядковый номер дня недели указанной даты.

DecodeDate 

Возвращает отдельно год месяц и день для значения типа TDateTime.

DecodeTime 

Возвращает отдельно часы, минуты, секунды и миллисекунды для значения времени указанного в формате TDateTime.

EncodeDate 

Преобразовывает отдельные  значения года, месяца и дня в  значение типа TDateTime.

EncodeTime 

Преобразовывает значения часов, минут, секунд и миллисекунд  в значение типа TDateTime.

FileDateToDateTime 

Преобразовывает DOS переменную "дата-время" в формат TDateTime.

FormatDateTime 

Преобразовывает значение даты и времени типа TDateTime в строку заданного формата.

IncMonth 

Увеличивает или уменьшает  дату на заданное количество месяцев.

IsLeapYear 

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

MsecsToTimeStamp 

Преобразовывает значение времени в миллисекундах в  значение типа TTimeStamp.

Now 

Возвращает текущую  дату и время в формате TDateTime.

ReplaceDate 
Только в Delphi 5

Изменяет дату в значении даты и времени типа TDateTime.

ReplaceTime 
Только в Delphi 5

Изменяет время в  значении даты и времени типа TDateTime.

StrToDate 

Преобразовывает строковое  представление даты в значение типа TDateTime.

StrToDateTime 

Преобразовывает строковое представление даты и времени в значение типа TDateTime.

StrToTime 

Преобразовывает строковое  представление времени в значение типа TDateTime.

SystemTimeToDateTime 

Конвертирует значение времени формата Win32 API TSystemTime в значение Delphi-формата TDateTime.

Time 

Возвращает текущее  значение времени в формате TDateTime.

TimeStampToDateTime 

Преобразовывает значение типа TTimeStamp в соответствующее значение типа TDateTime.

TimeStampToMSecs 

Подсчитывает суммарное  количество миллисекунд в значении типа TTimeStamp.

TimeToStr 

Преобразовывает значение времени формата TDateTime в его строковое представление.


 

 

 

 

                                                  Окна форм

  1. Основная форма

Закладка №1

    

 

Закладка №2

 

 

 

 

Закладка №3

 

 

Закладка №4

 

 

 

 

 

 

 

Закладка №5

 

 

       2. Об авторе

3. задание

 

 

 

 

 

 

4. Заставка

 

 

 

 

 

 

 

 

 

Меню  пользователя

 

Меню пользователя для главной программы

 

Названия разделов меню

Сведенья

Очистка файла

Выход

О задании

   

Об авторе

   

 

Имена объектов

N1

N2

N3

N4

   

N5

   

 

Меню пользователя для программы “Сведенья ”

 

Названия разделов меню

Просмотр Задания

Сохранить изменения

Изменение шрифта и стиля

Выход


 

Имена объектов

view_zadan

Sav_mod

Font_style

Ex_it


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

Библиотека  biblioteka.cpp

//---------------------------------------------------------------------------

 

 

#pragma hdrstop

#include <stdio.h>

#include <DateUtils.hpp>

#include "biblioteka.h"

 

//---------------------------------------------------------------------------

 

#pragma package(smart_init)

 

int kol(FILE *f)

{int k=0;

f=fopen("a.dat","rb");

fseek(f,0,2);

k=ftell(f)/sizeof(poezd);

fclose(f);

return k;

}

 

void formir(FILE *f,poezd mas[],int n)

{f=fopen("a.dat","rb");

for(int k=0;k<n;k++)

{fread(&q,sizeof(q),1,f);

mas[k]=q;}

fclose(f);

}

 

void sort(poezd mas[],int k)

{int i,j;poezd z;

for(i=0;i<=k;i++)

for(j=i+1;j<k;j++)

if(mas[i].rast>mas[j].rast)

{(poezd)z=(poezd)mas[i];

(poezd)mas[i]=(poezd)mas[j];

(poezd)mas[j]=(poezd)z;}

}

 

 

 

 

 

 

 

 

 

 

biblioteka.h

 

//---------------------------------------------------------------------------

#include <stdio.h>

#include <DateUtils.hpp>

#ifndef bibliotekaH

#define bibliotekaH

struct poezd{int nom;char prib[6];char otpr[6];char napr[15];int rast;}q;

FILE *f;

//---------------------------------------------------------------------------

int kol(FILE *f);

void formir(FILE *f,poezd mas[],int n);

void sort(poezd mas[],int k);

#endif

Главный модуль Unit1.cpp

 

//---------------------------------------------------------------------------

 

#include <vcl.h>

#pragma hdrstop

#include "biblioteka.h"

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

#include "Unit4.h"

#include <stdio.h>

#include <DateUtils.hpp>

#include <SysUtils.hpp>

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int n=0;

FILE *f2;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{f=fopen("a.dat","wb");

f2=fopen("b.txt","wt");

fclose(f);

fclose(f2);

}

//---------------------------------------------------------------------------

void setka1(TStringGrid *sg)

{sg->Cells[0][0]="¹";

sg->Cells[1][0]="Íîìåð";

sg->Cells[2][0]="Âðåìÿ ïðèáûòèÿ";

sg->Cells[3][0]="Âðåìÿ îòïðàâëåíèÿ";

sg->Cells[4][0]="Íàïðàâëåíèå";

sg->Cells[5][0]="Ðàññòîÿíèå";

}

 

void setka2(TStringGrid *sg,int i)

{sg->Cells[1][i+1]=IntToStr(q.nom);

sg->Cells[2][i+1]=AnsiString(q.prib);

sg->Cells[3][i+1]=AnsiString(q.otpr);

sg->Cells[4][i+1]=AnsiString(q.napr);

sg->Cells[5][i+1]=IntToStr(q.rast);

}

 

void __fastcall TForm1::Button1Click(TObject *Sender)

{

f=fopen("a.dat","ab+");

q.nom=StrToInt(Edit1->Text);

strcpy(q.prib,Edit2->Text.c_str());

strcpy(q.otpr,Edit3->Text.c_str());

strcpy(q.napr,Edit4->Text.c_str());

q.rast=StrToInt(Edit5->Text);

fwrite(&q,sizeof(q),1,f);

n++;

fclose(f);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

setka1(sg1);

int i=0,k=0;

f=fopen("a.dat","rb+");

while(fread(&q,sizeof(q),1,f)>0)

{setka2(sg1,i);

i++;}

for(int j=1;j<=n;j++)

sg1->Cells[0][j]=IntToStr(j);

sg1->RowCount=i+1;

fclose(f);

 

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

setka1(sg2);

int i=0,k=0;

f=fopen("a.dat","rb+");

sg2->Cells[6][0]="Ðàñòîÿíèå";

while(fread(&q,sizeof(q),1,f)>0)

{setka2(sg2,i);

sg2->Cells[6][i+1]=FloatToStr(q.rast/HoursBetween(TTime(q.prib),TTime(q.otpr)));

i++;}

for(int j=1;j<=i;j++)

sg2->Cells[0][j]=IntToStr(j);

sg2->RowCount=i+1;

fclose(f);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)

{

setka1(sg3);

int i,k=kol(f);

poezd *mas=new poezd[k];

formir(f,mas,k);

sort(mas,k);

Информация о работе Создание библиотек подпрограмм для обработки массивов