Автор: Пользователь скрыл имя, 25 Декабря 2012 в 22:05, курсовая работа
В программе на языке C++ все переменные должны быть объявлены, т.е. для каждой переменной должен быть указан ее тип. Все типы языка C++ можно |Д разделить на две большие группы: основные типы и производные.
К основным относятся char, int, float и double, а также их варианты с модификаторами short (короткий), long (длинный), signed (со знаком, подразумевается по умолчанию и обычно не пишется) и unsigned (без знака).
Объявлять переменные можно в любом месте программы перед их использованием.
Курсовое задание 3
Основные теоретические сведения 4
Структурные схемы 16
Окна форм 20
Меню пользователя 22
Тексты программ 23
Результаты вычислений 31
Вывод 32
Список использованной литературы 33
*- означает, что следующая за ней переменная является указателем. Переменная, объявленная как указатель, хранит адрес памяти. Указатели на различные типы не обязательно имеют одну и ту же длину.
Понятие статической и динамической памяти
Оперативная память ПК представляет собой совокупность ячеек для хранения информации, каждая из которых имеет собственный номер. Эти номера называются адресами, они позволяют обращаться к любому байту памяти.
Существует два способа закрепления оперативной памяти за величинами, которые будут использоваться в программах. Обычно применяют так называемый статический способ. При использовании этого способа память для каждой величины остается занятой ею в течение всего времени работы программы. При таком способе иногда бывает неудобно, когда в одной программе надо обрабатывать различное количество данных. Например, с массивами разных размеров. В этом случае для универсальности программы надо при объявлении массива учитывать максимально возможное количество его элементов. А это приводит к неэффективному использованию памяти.
При динамическом способе закрепления оперативной памяти сама программа может выделять и освобождать необходимую память для данных, т.е. управлять размещением используемых в ней данных в оперативной памяти. Например, если вещественная переменная Х используется только на одном из этапов работы программы, то можно с началом этого этапа закрепить за ней память размером в 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*).
Эта функция закрывает файл, на который ссылается параметр функции.
Двоичные файлы в С
В отличии от текстовых
файлов, двоичные файлы представляют
собой последовательность
Открываются и закрываются
двоичные файлы также как и
текстовые, но при задании
Запись и чтение
в бинарном файле обычно
происходит при помощи оператор
Дата/время
Тип дата-время определяется стандартным идентификатором 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 |
Изменяет дату в значении даты и времени типа TDateTime. |
ReplaceTime |
Изменяет время в значении даты и времени типа TDateTime. |
StrToDate |
Преобразовывает строковое представление даты в значение типа TDateTime. |
StrToDateTime |
Преобразовывает строковое представление даты и времени в значение типа TDateTime. |
StrToTime |
Преобразовывает строковое
представление времени в |
SystemTimeToDateTime |
Конвертирует значение времени формата Win32 API TSystemTime в значение Delphi-формата TDateTime. |
Time |
Возвращает текущее значение времени в формате TDateTime. |
TimeStampToDateTime |
Преобразовывает значение типа TTimeStamp в соответствующее значение типа TDateTime. |
TimeStampToMSecs |
Подсчитывает суммарное количество миллисекунд в значении типа TTimeStamp. |
TimeToStr |
Преобразовывает значение времени формата TDateTime в его строковое представление. |
Закладка №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.
sg->Cells[2][i+1]=AnsiString(
sg->Cells[3][i+1]=AnsiString(
sg->Cells[4][i+1]=AnsiString(
sg->Cells[5][i+1]=IntToStr(q.
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
f=fopen("a.dat","ab+");
q.nom=StrToInt(Edit1->Text);
strcpy(q.prib,Edit2->Text.c_st
strcpy(q.otpr,Edit3->Text.c_
strcpy(q.napr,Edit4->Text.c_
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)>
{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)>
{setka2(sg2,i);
sg2->Cells[6][i+1]=FloatToStr(
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);
Информация о работе Создание библиотек подпрограмм для обработки массивов