КУРСОВАЯ РАБОТА (Методичка). Методические указания к курсовому проектированию по дисциплине Методы программирования и прикладные алгоритмы для студентов специальности 075400
Скачать 254.5 Kb.
|
Пример объявления класса. Пример объявления класса СVideoRecorder: class VideoRecorder { //свойства char* producer; int* resolution; bool fast_shooting, longplay, two_canal; public: //методы void turn_on() {//операторы} void play() {//операторы} void record() {//операторы} void play_on_fast_shooting() {//операторы} void turn_off() {//операторы} }; Имея, класс СVideoRecorder, создадим объект данного класса ту_rеcorder и обратимся к его функциям в программе: СVideoRecorder mу_rеcorder; // создали объект my_recorder.turn on(); // вызвали соответствующие функции my_recorder.play_on_fast shooting(); my_recorder.turn_off(); 2. Работа с графикой. CDC – класс, содержащий методы рисования. Например, создание объекта класса CDC: СDС MyDC; вызов методов созданного объекта: MyDC.MoveTo(0,0); MyDC.LineTo(10,10); CClientDC( CWnd* pWnd ); – класс, наследующий методы класса CDC и инициализирующий окно для рисования pWnd, в котором будет выводиться вся графика, например, создание объекта класса CClientDC: CWnd* pWnd = GetDlgItem(IDC_DIALOG); CClientDC NewDC( pWnd ); NewDC.MoveTo(0,0); NewDC.LineTo(10,10); где метод CWnd* GetDlgItem( int nID ); возвращает указатель на окно элемента диалога с идентификатором: nID = IDC_DIALOG; COLORREF – тип возвращаемый макросом RGB(r,g,b), где r – красная, g –зеленая, b – синяя компонента от 0 до 255. например: COLORREF с = RGB(255,0,0,); – светло-красный; с = RGB(128,128,0,); – темно-желтый; Функции вывода текста. SetTextColor( RGB(255,0,0,) ); – устанавливает красный цвет текста. virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount ); или BOOL TextOut( int x, int y, const CString& str ); Функция выводит в точку (x,y) текст из объекта класса CString или массива символов lpszString в количестве nCount символов. [ СОЗДАТЬ ПЕРО ] Объект перо служит для изображения линий и контуров графических элементов. CPen ( int nPenStyle, int nWidth, COLORREF crColor ); nPenStyle – тип пера: · PS_SOLID – сплошное · PS_DASH – пунктирное (при толщине 1) · PS_DOT – точечное (при толщине 1) · PS_DASHDOT – тире-точка (при толщине 1) · PS_DASHDOTDOT – тире-точка-точка (при толщине 1) · PS_NULL – прозрачное перо nWidth – ширина пера; crColor – цвет пера. Например: CPen pen(PS_SOLID, 3, RGB(0,255,0) ); – сплошное зеленое перо толщиной 3 пиксела. [ СОЗДАТЬ КИСТЬ ] Объект кисть предназначен для закрашивания внутренней области в графических объектах. CBrush( COLORREF crColor ); или CBrush( int nIndex, COLORREF crColor ); crColor – цвет пера nIndex – тип пера · HS_BDIAGONAL \\\\\\\\\\ · HS_CROSS ++++++++++ · HS_DIAGCROSS XXXXXXXXXX · HS_FDIAGONAL ////////// · HS_HORIZONTAL ---------- · HS_VERTICAL ||||||||||| например: CBrush brush(HS_CROSS, RGB(255,0,0) ); – красное перо "в клеточку". Функция выбора созданного пера или кисти текущим. CPen* SelectObject( CPen* pPen ); CBrush* SelectObject( CBrush* pBrush ); – выбирает ТЕКУЩЕЕ перо pPen или кисть pBrush соответственно. [ ТОЧКА ] CPoint – класс, содержащий структуру POINT, содержит переменные: LONG x,y – координаты задаваемой точки. LPPOINT – указатель на объект класса CPoint или структуру POINT. Пример инициализации объекта класса CPoint: CPoint p; p.x = 10; p.y = 20; LPPOINT pp = &p; Функции с применением класса CPoint: CPoint GetCurrentPosition(); возвращает точку, на которой установлено текущее перо. CPoint MoveTo( int x, int y ); или CPoint MoveTo( POINT point ); Функция перемещает перо в указанную точку и возвращает координаты предыдущей точки пера. BOOL LineTo( int x, int y ); или BOOL LineTo( POINT point ); Функция изображает линию текущим пером из текущей точки в указанную. [ ПРЯМОУГОЛЬНИК ] CRect – класс, содержащий структуру RECT, содержит переменные: LONG left – левая координата прямоугольника; LONG right – правая координата прямоугольника; LONG top – верхняя координата прямоугольника; LONG bottom – нижняя координата прямоугольника; LPCRECT – указатель на объект класса CRect или структуру RECT. Пример инициализации объекта класса CRect: CRect r(1,1, 10,10); или CRect r(); r.SetRect(1,1, 10,10); LPCRECT pr = &r; [ ДУГА ] BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 ); или BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); Функция изображает текущим пером эллиптическую кривую внутри прямоугольника: lpRect или (x1,y1; x2,y2) от начальной точки ptStart; (x3,y3) до конечной точки ptEnd; (x4,y4). BOOL AngleArc( int x, int y, int nRadius, float fStartAngle, float fSweepAngle ); Функция изображает текущим пером эллиптическую кривую вокруг центральной точки (x,y) радиусом nRadius от угла fStartAngle до угла fSweepAngle, заданных в градусах относительно ординаты x int SetArcDirection( int nArcDirection ); int GetArcDirection(); Соответственно задается и возвращается направление обрисовки дуги. Параметр nArcDirection принимает значения: · AD_COUNTERCLOCKWISE – против ч.с. · AD_CLOCKWISE – по ч.с [ ПОЛИЛИНИЯ ] BOOL Polyline( LPPOINT lpPoints, int nCount ); Функция последовательно рисует текущим пером отрезки по точкам, заданным в массиве lpPoints, количеством nCount [ Закрашенный прямоугольник ] void FillRect( LPCRECT lpRect, CBrush* pBrush ); Функция закрашивает прямоугольник lpRect кистью pBrush. void FrameRect( LPCRECT lpRect, CBrush* pBrush ); Функция закрашивает единичную рамку вокруг прямоугольника lpRect кистью pBrush. BOOL Rectangle( int x1, int y1, int x2, int y2 ); или BOOL Rectangle( LPCRECT lpRect ); Функция закрашивает текущей кистью прямоугольник lpRect или (x1,y1; x2,y2). BOOL RoundRect( int x1, int y1, int x2, int y2, int x3, int y3 ) Функция закрашивает текущей кистью прямоугольник lpRect или (x1,y1; x2,y2) со скругленными углами, которые задаются эллипсом шириной x3 и высотой y3 void FillSolidRect( LPCRECT lpRect, COLORREF clr ); или void FillSolidRect( int x, int y, int cx, int cy, COLORREF clr ); Функция закрашивает прямоугольник lpRect; (x,y; cx,cy – ширина, высота) цветом clr. [ ЭЛЛИПС ] BOOL Ellipse( int x1, int y1, int x2, int y2 ); или BOOL Ellipse( LPCRECT lpRect ); Функция изображает текущим пером и закрашивает текущей кистью эллипс внутри прямоугольника: lpRect или (x1,y1; x2,y2). [ Закрашенный СЕКТОР] BOOL Pie( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 ); или BOOL Pie( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); Функция рисует текущим пером и закрашивает текущей кистью сектор (против ч.с) внутри прямоугольника: lpRect или (x1,y1; x2,y2) от начальной точки ptStart; (x3,y3) до конечной точки ptEnd; (x4,y4). [ ЗакрашеннАЯ ЗАМКНУТАЯ ОБЛАСТЬ ] BOOL Polygon( LPPOINT lpPoints, int nCount ); Функция рисует текущим пером и закрашивает текущей кистью замкнутую область, ограниченную отрезками, которые задаются точками массива lpPoints, количеством nCount. Пример использования графических функций класса CClientDC. CClientDC MyDC(GetDlgItem(IDC_STATIC1)); // создали объект класса CClientDC, который инициализирует графическое //окно в элементе диалога приложения с идентификатором IDC_STATIC1. CRect Rect; // объявили объект класса CRect CWnd *pWnd = MyDC.GetWindow(); // инициализировали pWnd как указатель на окно, закрепленное за объектом //MyDC(с идентификатором IDC_STATIC1) pWnd->GetClientRect(&Rect); // передали объекту Rect координаты этого окна, т.е. определили область //экрана, где будем выводить графику. MyDC.FillSolidRect( &Rect, RGB(50,100,150) ); // закрасили прямоугольник Rect int w, h; w = Rect.Width()/3; // определили ширину прямоугольника Rect и уменьшили ее в 3 раза h = Rect.Height()/4; // определили высоту прямоугольника Rect и уменьшили ее в 4 раза CRect SmallRect = Rect; //инициализировали малый прямоугольник, объявили его равным //прямоугольнику Rect SmallRect.DeflateRect( w, h ); // уменьшили ширину и высоту малого прямоугольника до значений w и h //соответственно, сохраняя координаты центральной точки прямоугольника. CBrush Br (RGB(100,0,150)); // инициализировали кисть MyDC.SelectObject(&Br); // выбрали ее MyDC.Ellipse( &SmallRect ); // изобразили закрашенный эллипс выбранной кистью, вписанный в малый //прямоугольник. Рис. 1. Полученное изображение 3. Работа с файлами в C / C++. FILE *fopen(const char * filename, const char *mode); Функция fopen() открывает файл и инициализирует связанный с ним поток данных. Аргумент mode устанавливает режим открытия файла (табл. 2). • Спецификация режима может быть дополнена символами t или b, указывающими, в текстовом или двоичном режиме открывается файл. • Возвращаемое значение: Функция возвращает указатель на структуру типа FILE (см. 8). Этот указатель затем передается в качестве аргумента следующим функциям, работающим с потоком. Если файл не может быть открыт, возвращается NULL-указатель. Таблица 2 Режимы открытия файлов
int fprintf (FILE *stream, const char *format...); Функция формирует по заданным аргументам символьную строку, которая записывается в поток stream. Форматирование символьной строки происходит таким же образом, как и в функции printf(). Параметр Описание stream Указатель на структуру FILE потока данных format Символьная строка формата (см. printf()) ... Переменное число аргументов • Возвращаемое значение: число записанных в поток символов. В случае ошибки возвращается отрицательное значение (чаще всего EOF (WEOF)). __________________________________________________________________ int fscanf (FILE *stream, const char *format, ...); Функция считывает данные из потока данных stream. Она использует аргумент format для преобразования считываемых символов по заданному формату. Следующие аргументы являются указателями на переменные, которым присваиваются вводимые значения. • Возвращаемое значение: число успешно преобразованных и присвоенных полей либо EOF в случае попытки считывания конца файла. __________________________________________________________________ int fputc(int character, FILE *stream); Функция выводит отдельный символ из потока ввода-вывода. • Возвращаемое значение: записанный в поток символ или EOF в случае ошибки. __________________________________________________________________ int fputs(const char*string, FILE *stream); Функция записывает символьную строку в поток данных. Перенос завершается при достижении символа конца строки '\0'. Сам нуль-терминатор в файл не передается и не заменяется символом '\n'. • Возвращаемое значение: код последнего записанного в файл символа. В случае ошибки возвращается EOF. __________________________________________________________________ int fgetc(FILE*stream); Функция считывает символ из потока stream. После считывания указатель записи-чтения файла устанавливается в новую позицию. • Возвращаемое значение: считанный символ в виде целого беззнакового значения типа int; EOF означает ошибку или конец файла. __________________________________________________________________ char*fgets(char *string, int n, FILE*stream); Функция считывает строку из потока stream до тех пор, пока не будут считаны nсимволов, либо символ конца строки '\n', либо символ конца файла. Символ '\n' не передается в считанную строку. Функция автоматически дополняет полученную строку нуль-терминатором '\0'. • Возвращаемое значение: указатель на string, а в случае ошибки или при получении символа конца файла — NULL-указатель. __________________________________________________________________ size_t fread(void*buffer, size_t size, size_t nelem, FILE* stream); Функция считывает nelem элементов размером size байт каждый в область памяти, на которую указывает buffer, из открытого потока stream. • Возвращаемое значение: количество безошибочно считанных элементов данных. __________________________________________________________________ size_t fwrite(const void *buffer, size_t size, size_t nelem, FILE *stream); Функция записывает в поток stream nelem элементов данных размером size байтов каждый из области памяти, на которую указывает buffer. После записи указатель записи-чтения потока устанавливается на новое место. Если поток открыт в текстовом режиме, то каждый символ '\n' преобразуется в пару символов: перевода строки и возврата каретки. Возвращаемое значение: число фактически записанных элементов данных. __________________________________________________________________ int fseek(FILE *stream, long offset, int from_where); Функция передвигает указатель записи-чтения файла на заданное аргументом offset количество байтов. Аргумент from_where задает точку отсчета для сдвига. • Для файлов, открытых в двоичном режиме, количество байтов смещения указателя соответствует числу символов, на которые должен передвинуться указатель записи-чтения файла (может быть также и отрицательным). • Для файлов, открытых в текстовом режиме, количество байтов смещения должно вычисляться с помощью функции ftell(), причем аргумент from_where должен быть равен SEEK_SET. Для аргумента from_where могут быть заданы три различные константы. SEEK_CUR сдвиг выполняется от текущей позиции указателя чтения-записи файла SEEK_END сдвиг выполняется от конца файла SEEK_SET сдвиг выполняется от начала файла • Возвращаемое значение: нуль в случае успеха, в противном случае — любое ненулевое значение. __________________________________________________________________ long ftell(FILE *stream); Функция возвращает текущее значение указателя записи-чтения файла, связанного с потоком stream. Возвращаемое значение: текущая позиция указателя записи-чтения файла. • Если файл открыт в двоичном режиме, функция возвращает число байтов от начала файла до текущей позиции. • Если файл открыт в MS DOS текстовом режиме, то каждый символ '\n' преобразуется в пару символов: перевода строки и возврата каретки (CR/LF). В этом случае значение, возвращаемое ftell(), не соответствует физическому байтовому смещению. В случае ошибки возвращаемым значением является 1L. __________________________________________________________________ |