Операционная система Windows


 

Меню

Реклама


"Системное программное забезпечення"

<

Разработка об Єктно-ориєнтованих Программ мовою C ++ В среде Windows 95/98

на основе библиотеки Mfc пакету Visual C ++ 6.0

Программа на assembler:

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

Главное меню:

File

Info

Help

Result

Quit

Open

Input

Save As

Run

Delete

Result

Диалоговое викно



змист

Вступление.....................................

1. Общая структура курсовой работы..........

2. Основные классы и функции.................................. .

3. Cтворення меню

4. Создание диалоговых окон.........

5. Работа с графикой....................

6. Выполнение обработки матрицы на Ассемблере................................

7. Работа с файлами в Visual C++6.0

Выводы................................

Литература..............................

Дополнения..................................


Анотация.

Курсовая работа посвящена разработке обєктно-ориєнтованої программы языком C++ в среде Windows 95/98 на основе библиотеки MFC пакета VISUAL C++ 6.0. Интерфейс в главной программе реализован с помощью меню и диалоговых окон на основе классов библиотеки Mfc . Также выполнена удобная работа с файлами: открытие, сохранение, удаление. Создание собственных диалоговых окон. При создании меню задается желаемое количество кнопок их вид и размещение.

Реализовано параллельное выполнение главной программы и программы на Assembler.

Результаты выполнения арифметических операций представлены в аналитическом и графическом виде.

Вступ

Visual С++ 6.0 представляет собой мощный и сложный инструмент для создания 32-разрядных приложень Windows 95 и Windows NT. Эти приложення намного преобладают как по объему так и по сложности своих предшественников для 16-разрядных Windows да еще намного древниших программ, какие звгали обходятся без графического интерфейса. Но несмотря на то, что объем и складнист программ увеличиваются, для их создания программисту нужно не больше, а намного меньше усилий, по крайней мере для тех, кто правильно вибираенеобхидни инструментальные средства.

Именно таким инструментом является Visual С++ 6.0. Visual С++ 6.0 - это универсальный пакет программирования, который позволяет создавать модули с графическим интерфейсом под операционную систему Windows 9598. Кроме возможностей, которые дает C, С++ предоставляет гибкие и эффективные средства определения новых типов. Используя определение новых типов, которые точно отвечают концепциям прикладных программ, программист может разделять розроблювану программу на части, что легко поддаются контролю. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты простые и надежные в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирования с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, более простые в налаживании и использовании модули и программы.

Отличной особенностью языка С++ является понятие класса, которое еще более широко и ярко реализовано в Visual С++ 6.0. Класс – это новый тип переменной, которая определяется пользователем. Классы обеспечивают укрывательство данных, гарантированную инициализацию данных, неявное превращение типов, динамическое задание типу, управление, которое контролируется пользователем, механизмы перегрузки операций. В Visual С++ 6.0 сохранены возможности языка C по работе с основными объектами аппаратного обеспечения биты, байты, слова, адреса, и т. п..

Visual С++ 6.0 и его библиотеки, как стандартные, так и MFC спроектированы так, чтобы обеспечивать мобильность. Библиотека MFC дает возможность быстро и эффективно реализовать графический интерфейс и обрабатывать нужные функции и сообщения.

1. Общая структура програми

Курсовая работа состоит из нескольких отдельных блоков файлов:

proba.Cpp – основная программа, написанная языком С++ на базе пакета Visual C++6.0, в которой создан графический интерфейс с использованием меню, диалоговых окон, сообщений, графики, работы, с файлами. Она реализует введение из клавиатуры в диалоговом окне матрицы чисел с послидуючим записью данных в файл in.DAT, какой должен находиться в рабочем каталоге; если в рабочем каталоге данного файла нет, программа создаст новый с таким же именем.

proba.Rc – файл ресурсов, который используется главной программой и в котором созданы такие объекты как меню, диалоговые окна для вводу информации, обработки данных и выведения результатов; в файле Lab. rc задаются и определяются все ре

Сурси главного окна, а именно: тип и структура панели меню, форма и вид диалоговых окон, иконы;

oks.Asm – программа на языке Ассемблер, которая открывает файл in.Dat и считывает информацию, записанную главной программой. Программа передает считанные данные в главную программу; программа находит номер строки, где есть минимальный элемент побочной диагонали матрицы. Результат работы программа передает в out.Dat.


2 Основные классы и функции Mfc-програми

Для программы пакета VISUAL C++ 6.0 были использованы стандартные классы и функции из библиотеки MFC. Рассмотрим и коротко опишем основные из них.

Class Cpashawnd: public Cframewnd - класс рабочего окна, которое есть производным от стандартного Cframewnd. Он состоит из функций:

- void Onopen, void Onsaveas, void Ondelete, void Oninput, void Onrun, void Onresult, void Oninfo, void Onquit – функции реакций на выбор команд меню;

Class Cmydialog:public Cdialog – инициализация диалогового окна;

Class Cpashaapp:public Cwinapp – класс, от которого мы создаем свой собственный производный класс, что в работе будет создавать программу.

BOOL Cpashaapp::initinstance – функция инициализации главного окна;

Afxmessagebox – функция, которая выводит окно сообщения с указанным сообщением и заглавием к нему.

Cchecbutton, Сlistbox, Ccombobox, Cedit – стандартные классы с соответствующими функциями обработки активных элементов диалоговых окон.

Dodataexchange – функция вызывается автоматически во время инициализации диалогового окна, она имеет набор DDX макросов;

DDX макросы устанавливают связь между элементом управления и соответствующей переменной;

4. Создание диалоговых викон

Создание диалоговых окон заданной конфигурации в VISUAL C++ 6.0 с использованием библиотеки MFC. Для этого нужно открыть новый ресурс диалоговое окно в созданном проекте и задать выделив манипулятором мышь нужен размер диалогового окна. После этого можно задавать во вновь созданном окне нужны обекти, выбрав тип нужного обекту на верхней панели инструментов. Место расположения нужного обекта рамка, надпись, окно, для редактирования Edit, селекторные кнопкиradiobutton, контрольные переключатели Checkbox, комбинированные списки Combobox, списки Listbox и много других, нужно указать курсором мышки и задать для некоторых из них размер. После того, как изображение элемента зявилось можно задать ему определенных параметров и свойств. Все это происходит визуально.

Создав все необходимы обекти, программа автоматически запишет весь текст программы, который будет отвечать за создание данного диалогового окна, в файл ресурсов Script. RC. На этом визуальная часть создания диалоговых окон скиинчилась. Для того, чтобы такое окно работало, нужно описать в главной программе project. Cрр собственные классы диалоговых окон, которые будут потомками стандартных классов. Для инициализации нужно создать переменные определенных типов для всех активных элементов диалогового окна в созданном для него классе и задать им начальные значения.

Для передачи данных, которые были введены в диалоговом окне, самым простым способом является закрепление за этим диалоговым окном структуры, в которой будут описаны глобальные переменные в соответствии с порядком инициализации активных элементов окна.

Этапы создания диалогового окна в данной курсовой роботи:

1.Створення собственного класса диалогового окна class Cmydialog:public Cdialog. Объявление для элементов управления переменных свойств класса:

- переменные второй категории Control – Cedit m_text, что обеспечивают прямой доступ к элементам управления.

2.инициализация переменных свойств класса:

M_text=_t;

M_list=_t;

3.Обмин данными с элементами диалога

Void Cmydialog::dodataexchangecdataexchange pdx

{

Cdialog::dodataexchangepdx;

Ddx_textpdx, Idc_edit, m_text;

Ddx_lbstringpdx, Idc_list, m_list;

}

4.Организация результатов выполнения диалога после нажатия кнопок OK, Cancel

Void Cmydialog::onok void Cmydialog::oncancel

5.Организация инициализации элементов управления с помощью функции Oninitdialog:

Cdialog::oninitdialog;

Clistbox p=clistboxgetdlgitemidc_list;

p-addstring6;

p-addstring3;

p-addstring5;

6.Видтворення карты сообщений:

Begin_message_mapcpashawnd, Cframewnd

On_commandid_input, Oninput

On_commandid_info, Oninfo

End_message_map;

7.Створення объекту диалогового окна и его отображения:

Cmydialog dialogthis;

dialog. Domodal;

8.Створення функций обработки результатов, которые получили из диалогового окна.

5. Работа из графикою

Для графического отображения результатов используются стандартные библиотечные функции и классы. В WINDOWS для выведения графики нужно использовать контексты устройств:

- Cdс – базовый класс Dс, на основе которого создаются другие устройства;

- Cclientdc – выведение в рабочую часть окна;

- Cpaintdc - определение окна, которое нужно перерисовывать;

- Cwindowdc - выведение на всю область окна;

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

Pen – перо. Brush – кисть.. Color – логический цвет.

Для приложения этих инструментов их нужно создать и инициализировать. Создание и инициализация в данной курсовой работе имеет следующий вид:

Dc. Selectobject Pen3 – инициализация собственных типов тэр.

Dc. Selectobject Вrush – инициализация собственного типа кисти.

Создание собственных тэр: Pen1 = Create Penps_dot,2,rgb255,0,0,

Pen2 = Create Penps_solid,2,rgb255,0,0,

Pen3 = Create Penps_dash,2,rgb255,0,0..

Создание собственной кисти: Brush. Create Solidbrushrgb0,255,255.

Создание собственных кольрив:rgbn1, n2, n3, ni = 0-255,

Rgb255, 0, 0 – красный, Rgb0, 0, 0 – черный.

Сначала нужно объявить эти инструменты:

Cpen pen1; Cbrush brush1;

Висновки.

Дан курсовая работа в некоторой степени раскрывает возможности языка С++ пакета Visual C++ 6.0. здесь можно увидеть перевиги данного пакета над другими как в решении разного рода задач так и в интерфейсе.

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

Таким образом, программирование на Visual C++ 6.0 и Assembler открывает перед программистом безграничное количество вариантов и возможностей реализации поставленных задач, а это достаточно важно сегодня, так как компьютеры и компьютерные сети и системы стали применяться практически во всех отраслях народного хозяйства.

При изучении основных возможностей Visual C++ 6.0 и объектно-ориентированного программирования с использованием MFC – библиотеки были установлены и рассмотрены часть принципиально новых возможностей реализации графического интерфейса и модульного программирования, которые достаточно эффективны и мобильны.

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

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

Литература

Абель П. Язык Ассемблера для IBM PC и программирование.–.МВысш. Шк.,1992.–447 с.

Гладков, Фролов Програмирование в Windows Microsoft

Мешков, Тихомиров Visual C++ MFC 3том.

Тихомиров Visual C++ 6.0 1999г. С.-П.

Марк Луис Visual C++. Москва 1995г.

Кейт Грегори Использованиие Visual C++ 6.0 М. "Издательский дом Вильямс" 2000.- 864 c.

3. створення меню.

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

Типы сообщений в библиотеке MFC распределяют:

1. Сообщение Windows Wm_windowsmessage.

2. Сообщение от дочерних окон и кнопок – элементов управления.

3. Командные сообщения – от меню и панелей инструментов.

Приведем пример обработки сообщений от меню, которое осуществляется в данной программе.

Declare_meseeage_map – таблица реакций, якя связывает выбор команды меню с соответствующей функцией обработки;

Class Cpashawnd:public Cframewnd

{

Public:

Cpashawnd;

Protected:

protected:

afx_msg void Onopen;

afx_msg void Onsaveas;

afx_msg void Onquit;

afx_msg void Ondelete;

afx_msg void Onpaint;

afx_msg void Oninput;

afx_msg void Onhelp;

afx_msg void Onrun;

afx_msg void Onresult;

afx_msg void Oninfo;

Declare_message_map

};

Begin_message_mapcpashawnd, Cframewnd

On_commandid_open, Onopen

On_commandid_save, Onsaveas

On_commandid_delete, Ondelete

On_commandid_quit, Onquit

On_commandid_input, Oninput

On_commandid_help, Onhelp

On_commandid_run, Onrun

On_commandid_info, Oninfo

On_commandid_result, Onresult

On_wm_paint

End_message_map;

Void Cpashawnd::oninput

{

}

Void Cpashawnd::onhelp

{

}

Void Cpashawnd::onrun

{

}

Void Cpashawnd::onresult

{

}

Void Cpashawnd::oninfo

{

}

Cpashawnd::cpashawnd

{

Createnull,my program,

Ws_overlappedwindow, rectdefault, Null,

Makeintresourceidr_menu1; };

7.Робота с файлами в visual c++6.0

Удобный многофункциональный интерфейс данной работы предусматривает также и работу с файлами, их хранение, открытие, уничтожение, которое является удобным для пользователя. Работа с файлами осуществляется с помощью библиотеки iostream. h.

Все функции работы с файлами находятся в меню в пункте File:

Open

Save

Delete

Выбираем нужную нам функцию и файл, с которым будем работать с помощью мыши.

В переменной Dlgopen. Getpathname сохраняется имя файла.

Функции реализованы следующим чином: open

Void Cpashawnd::onopen

{

Cstring m_text;

создания стандартной панели выбора файлу open

Cfiledialog Dlgopentrue,lpcstr,null,

Ofn_hidereadonly,lpcstr ALL Files. |.||;

Видображения стандартной панели выбора файлу

Ifdlgopen. Domodal==idok

Открытия файла и считывания:

FILE f = fopendlg. Getpathname, rt;

if f == Null

{

Afxmessageboxcanъtopen file;

return;

}

int и;

char str[101], acbuf[1001];

acbuf[0]= '\0';

for и = 0; и 10; i++

{

if fgetsstr, 100, f == Null

break;

::lstrcatacBuf, str;

}

Messageboxacbuf, dlg. Getpathname,

Mb_iconinformation | Mb_ok;

fclosef;

}

Save

Void Cpashawnd::onfsaveas

{

char filter[] = Text Files.txt|.txt|All Files.|.|;

Cfiledialog dlgfalse.txt, NULL, Ofn_hidereadonly | Ofn_overwriteprompt, filter;

if dlg. Domodal == Idok

{

FILE f = fopendlg. Getpathname, wt;

if f == Null

{

Afxmessageboxcanъtopen file;

return;

}

char acbuf[400];

if fmatrfilled

{

Calc;

::wsprintfacBuf, Result = %d, result;

}

else

::strcpyacBuf, Matrix has not inputed;

fputsacbuf, f;

::wsprintfacBuf, File: %s succesfully saved, dlg. Getpathname;

Messageboxacbuf, File Saving,

Mb_iconexclamation | Mb_ok;

fclosef;

}

}

Delete

Void Cpashawnd::onfdelete

{ char filter[ ]= Text Files.txt|.txt|All Files.|.|;

Cfiledialog dlgtrue.txt, NULL, Ofn_hidereadonly, filter;

if dlg. Domodal == Idok

{

::removedlg. Getpathname;

Mb_iconinformation | Mb_ok;

}

}

Выведения сообщения после выполнения операции

Messageboxsuccesfully deleted, dlg. Getpathname,

6. Выполнение обработки матрицы на асемблери

Основные функции Асемблера

Главные функции и прерывания, которые были использованы при программировании на языке Ассемблера в данной курсовой работе:

Функция 03сh прерывания 21h – создание файла; в СХ – атрибуты файла, Ds:dx – спецификация файла. В АХ возвращает значение открытого канала для этого файла.

Функция 03dh прерывания 21h – открыть файл; в AL – режим доступа к файлу, Ds:dx – спецификация файла.

Функция 03eh прерывания 21h – закрыть файл; BX – номер канала.

Функция 03fh прерывания 21h – чтение из файла или пристрою; BX – номер канала, СХ – количество байт, что считываются, Ds:dx буфер.

Функция 042h прерывания 21h – переместить указатель файла; BX – номер канала, Cx:dx – смещение указателя.

Взаимодействие Ассемблера и проекта языком visualc++6.0

Для подключения файла Ассемблера к проекту нужно выполнить следующие действия:

Во время создания проекта задать режим не Win32, а 16.

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

Переписать в каталог, где содержится проект сам Ассемблер "Tasm32.EXE".

Написать программу на Ассемблере за правилами интерфейса С++:

Должна совпадать модель памяти по умолчанию Large

Использовать сокращенные названия сегмента.

Все внешние имена на Ассемблере должны иметь знак подчеркивания "__".

Имена внешних переменных и в Ассемблере, и в С++ должны быть одинаковые с учетом регистра.

После введения данных в диалоговое окно они записываются в файл "in. dat"

Программа на Ассемблере считывает из данные из этого файла и превращает их в число.

Над данными выполнить арифметические действия.

Результаты выполнения программы записать в файл "out. dat".

Программа языком Visual С++ считывает эти данные из файла и выводит результат на экран.

Если результат вывели на экран – основная задача и цель работы достигнута.

Дополнение 1.

Листинг программы языком С++ паекту visual c++6.0

#include afxwin. h

#include resource. h

#includestdlib. h

#include stdio. h

#include conio. h

#include afxdlgs. h

#include iostream. h

#include fstream. h

char str2[300];

int radio1=1,radio2=0,radio3=0; int t, и, j;

char str[80];

char buf1[80];

char buf2[80];

Int matrix[20][20];

char str1[300],liststr[10];

Int index, inde, ind=10;

Short int average, max, min;

Class Cmydialog:public Cdialog

{

Public:

Cstring m_text;

Cmydialog:cdialogidd_dialog { m_text=_ttext; }

Protected:

afx_msg void Oninput;

virtual void Dodataexchangecdataexchange pdx;

BOOL Oninitdialog;

afx_msg void Onlist2;

afx_msg void Onlist3;

Declare_message_map

};

Begin_message_mapcmydialog, Cdialog

On_commandidc_ok, Oninput

On_lbn_dblclkidc_list2,onlist2

On_lbn_dblclkidc_list3,onlist3

End_message_map

Void Cmydialog::dodataexchangecdataexchange pdx

{

Cdialog::dodataexchangepdx;

Ddx_textpdx, Idc_edit1,m_text;

//afxmessageboxm_text;

}

Void Cmydialog::oninput

{

//cedit ped=ceditgetdlgitemidc_edit1;

//ped-getwindowtextstr1,sizeofstr1-1;

//afxmessageboxstr1;

//cdialog::onok;

Getdlgitemtextidc_edit1,str1,255;

{char t[10];

int arr[10];

int i=0,n=0,j=0,m=0;

whilestr1[n]!='\0'

{

whileisdigitstr1[n]

{

t[i++]=str1[n];

n++;

}

ifi0

{t[i]='\0';i=0;arr[m++]=atoit;}

n++;

}

int a=50,b=80;

i=0;

//initialization of matrix by the numbers inputed in edit box

//int matrix[20][20];

form=0;mind;m++

forn=0;ninde;n++

matrix[m][n]=arr[i++];

_int16 Newarray16=new _int16[indinde];

m=0;

fori=0;iind;i++

forj=0;jinde;j++

Newarray16[m++]=_int16matrix[i][j];

form=0;mindinde;m++

{

Newarray16[m]=_int16matrix[i][j];

ifj==inde

{

i++;j=0;

}

j++;

ifi==ind

break;

} }

Sendmessagewm_close;

}

BOOL Cmydialog::oninitdialog

/ Cbuttoncbpr1=cbuttongetdlgitemidc_radio1;

Cbuttoncbpr2=cbuttongetdlgitemidc_radio2;

Cbuttoncbpr3=cbuttongetdlgitemidc_radio3;

cbpr1-setcheckradio1;

cbpr2-setcheckradio2;

cbpr3-setcheckradio3;

return TRUE; /

{

char temp1[10];

Cdialog::oninitdialog;

Clistbox d=clistboxgetdlgitemidc_list2;

forint i1=0;i1ind;i1++

{

sprintftemp1,%d,i1;

d-addstringtemp1;

}

char temp2[10];

Cdialog::oninitdialog;

Clistbox k=clistboxgetdlgitemidc_list3;

forint i2=0;i2ind;i2++

{

sprintftemp2,%d,i2;

k-addstringtemp2;

}

return TRUE;

}

void Cmydialog::onlist2

{

//here we are getting list pointer with indentifier Idc_list1

Clistbox lbd=clistboxgetdlgitemidc_list2;

//after obtaining the pointer, we are defining index of selected element

inde=lbd-getcursel;

//find out name of selected element

lbd-gettextinde, liststr;

Messageboxliststr,selection is;

}

Void Cmydialog::onlist3

{

//here we are getting list pointer with indentifier Idc_list1

Clistbox lbk=clistboxgetdlgitemidc_list3;

//after obtaining the pointer, we are defining index of selected element

ind=lbk-getcursel;

//find out name of selected element

lbk-gettextind, liststr;

Messageboxliststr,selection is;

}

Float C;

Const char szpashawndtitle[] = Pashaъs application uses MFC;

Const Stepnum = 20;

Bool brunned;

Class Cpashawnd: public Cframewnd

{

public:

_int16 Newarray16;

Cpashawnd

{

Numofrow = 2;

brunned = false;

RECT r;

r. top=r. left=50;

r. bottom=r. right=500;

Createnull,in any business the most difficul is beginning,

Ws_overlappedwindow|ws_visible, r,null, Makeintresourceidr_menu1;

};

~CPashaWnd {};

afx_msg void ONOPEN;

afx_msg void ONHELP;

afx_msg void ONSAVE;

afx_msg void ONINFO;

afx_msg void ONRENAME;

afx_msg void Oncreatechildwindow;

afx_msg void ONQUIT;

afx_msg void Ondialog;

afx_msg void ONRUUN;

afx_msg void ONRESULT;

afx_msg void Onpaint;

afx_msg void Onrogy;

afx_msg void ONINPUT;

Declare_message_map

int Numofrow;

};

Begin_message_map Cpashawnd, Cframewnd

On_command Id_child, Oncreatechildwindow

On_command Id_childnext, Onrogy

On_command Id_file_open, Onopen

On_command Id_file_info, Oninfo

On_command Id_file_help, Onhelp

On_command Id_file_save, Onsave

On_command Id_ruun_ruun, Onruun

On_command Afx_id_file_rename, Onrename

On_command Afx_id_file_quit, Onquit

// On_command Afx_id_run_run, Onrun

On_command Afx_id_resuet_resuet, Onresult

On_command Afx_id_file_dialog, Ondialog

End_message_map

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

Class Cchildwnd:public Cframewnd

{

Protected:

POINT p;

afx_msg void Onpaint;

Declare_message_map;

Public:

Cchildwndcwnd pparent

{

Crect wndsize0,0,300,300;

Createnull,childwindow,ws_overlappedwindow|

Ws_child, wndsize, pparent;

}

};

Begin_message_mapcchildwnd, Cframewnd

On_wm_paint

End_message_map

Void Cchildwnd::onpaint

{

Cpaintdc dcthis;

if !bRunned

{

char str2[20];

Cpen pen, pen1;

Crect rect;

Cstring tmp = _t;

sprintfstr2 %f,average;

pen. Createpenps_solid, 2, Rgb0,250,0;

pen1.CreatePenPS_SOLID, 2, Rgb255,255,255;

dc. Selectobjectpen;

Getclientrectrect;

int step = rect. right - rect. left / Stepnum;

int x = average step + 50;

step = rect. bottom - rect. top / Nmax;

pen. Deleteobject;

Cbrush brush, brush1,brush2,brush3;

brush. Createsolidbrushrgb255,255,255;

brush2.CreateSolidBrushRGB255,200,255;

brush3.CreateSolidBrushRGB0,0,0;

brush1.CreateSolidBrushRGB255,255,255;

dc. Selectobjectbrush;

int в = rect. bottom - indexstep;

int к, d,dy = 1;

int flag=1;

int top = 5;

к = top;

whiletop y

{

dc. Selectobjectbrush2;

dc. Selectobjectpen;

dc. Ellipsex, к, x+30, k-30;

ford=0;d1000000;d++;

dc. Selectobjectbrush2;

dc. Selectobjectpen1;

dc. Ellipsex, к, x+30, k-30;

dc. Selectobjectbrush;

dc. Selectobjectpen;

dc. Ellipsex, к, x+30, k-30;

к += dy;

dy += flag;

ifky

{ к = в;

dy = - dy/2;

flag = -1;

top += step; }

ifktop

{ к = top;

dy = 1;

flag = 1; }

}

k-=15;

dc. Selectobjectbrush2;

dc. Selectobjectpen1;

dc. Ellipsex, к, x+30, k-30;

brush. Deleteobject;

}

}

Int cnt=0;

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

Class Cchildnextwnd:public Cframewnd

{

Protected:

POINT p;

afx_msg void Onpaint;

Declare_message_map;

Public:

Cchildnextwndcwnd pparent

{

Crect wndsize0,0,300,300;

Createnull,childwindow,ws_overlappedwindow|

Ws_child, wndsize, pparent;

}

};

Begin_message_mapcchildnextwnd, Cframewnd

On_wm_paint

End_message_map

Void Cchildnextwnd::onpaint

{

Cpaintdc dcthis;

char t[10];

int arr[10];

int i=0,n=0,j=0,m=0;

whilestr1[n]!='\0'

{

whileisdigitstr1[n]

{

t[i++]=str1[n];

n++;

}

ifi0

{t[i]='\0';i=0;arr[m++]=atoit;}

n++;

}

int a=50,b=80;

i=0;

//initialization of matrix by the numbers inputed in edit box

//int matrix[20][20];

form=0;mind;m++

forn=0;ninde;n++

matrix[m][n]=arr[i++];

_int16 Newarray16=new _int16[indinde];

m=0;

fori=0;iind;i++

forj=0;jinde;j++

Newarray16[m++]=_int16matrix[i][j];

form=0;mindinde;m++

{

Newarray16[m]=_int16matrix[i][j];

ifj==inde

{

i++;j=0;

}

j++;

ifi==ind

break;

}

int x=40,y=50;char buf[10];

//filling the screen by numbers that are in matrix

int temp;

int max = matrix[0][ind-1];

dc. Textoutx, y-20,matrix;

form=0;mind;m++

{

forn=0;ninde;n++

{

temp=matrix[m][n];

sprintfbuf,%d,temp;

dc. Textoutx, у,buf, strlenbuf;

x+=30;

}

y+=20;

x=40;

}

{

//for и = 0; и inde; i++

// if matrix[i][inde - и - 1] max

//max=matrix[i][ind - и - 1];

}

Ifstream inout. dat;

if!in

coutfigovina!;

else

{

in min max average;

in. close;

}; max = 10;

dc. Textout50,180,mах;

sprintfbuf,%d,max;

dc. Textout90,180,buf;

}

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

/void Cpashawnd::onrun

{

Cclientdc dcthis;

char t[10];

int arr[10];

int i=0,n=0,j=0,m=0;

whilestr1[n]!='\0'

{

whileisdigitstr1[n]

{

t[i++]=str1[n];

n++;

}

ifi0

{t[i]='\0';i=0;arr[m++]=atoit;}

n++;

}

int a=50,b=80;

i=0;

//initialization of matrix by the numbers inputed in edit box

//int matrix[20][20];

form=0;mind;m++

forn=0;ninde;n++

matrix[m][n]=arr[i++];

_int16 Newarray16=new _int16[indinde];

m=0;

fori=0;iind;i++

forj=0;jinde;j++

Newarray16[m++]=_int16matrix[i][j];

form=0;mindinde;m++

{

Newarray16[m]=_int16matrix[i][j];

ifj==inde

{

i++;j=0;

}

j++;

ifi==ind

break;

}

/int x=40,y=50;char buf[10];

//filling the screen by numbers that are in matrix

int temp;

dc. Textoutx, y-20,matrix;

form=0;mind;m++

{

forn=0;ninde;n++

{

temp=matrix[m][n];

sprintfbuf,%d,temp;

dc. Textoutx, у,buf, strlenbuf;

x+=30;

}

y+=20;

x=40;

}

//here we find out 'Min' element of row that was selected in Listbox

min=matrix[index][0];

form=1;minde;m++

ifminmatrix[index][m]

min=matrix[index][m];

//here we find out 'Max' element of row that was selected in Listbox

max=matrix[index][0];

form=1;minde;m++

ifmaxmatrix[index][m]

max=matrix[index][m];

average=max+min/2;

dc. Textout60,140--This is the number of matrix row having been selected before;

dc. Textout50,140,liststr;

dc. Textout50,160,min;

sprintft,%d,min;

dc. Textout90,160,t, strlent;

dc. Textout50,180,mах;

sprintft,%d,max;

dc. Textout90,180,t;

dc. Textout50,200,average of Min and Max;

sprintft,%d,average;

dc. Textout280,200,t;

brunned=1;

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

//cbrush brush0,rgb0,30,70;

//access=1;

//ontimeraccess;

brunned=1;

}/

// brunned=1;

Void Cpashawnd::onruun

{

systemoks. exe;

}

Void Cpashawnd::onrogy

{

Cchildnextwnd pframewnd=new Cchildnextwndthis;

pframewnd-showwindow1;

pframewnd-updatewindow;

}

Void Cpashawnd::oncreatechildwindow

{

Cchildwnd pframewnd=new Cchildwndthis;

pframewnd-showwindow1;

pframewnd-updatewindow;

}

Void Cpashawnd::onresult {}

Void Cpashawnd::onsave

{

// создание стандартной панели выбора файла Saveas

Cfiledialog Dlgsaveasfalse,lpstr,null, Ofn_allowmultiselect,

Lpstrdat Files.dat|.dat;

// отображение стандартной панели выбора файла Saveas

ifdlgsaveas. Domodal==idok

{

// создание объекта и открытие файла для записи

ofstream foutdlgsaveas. Getpathname;

if!fout

Afxmessageboxfile hasnъt been created;

else

{

fout ind;

fout inde;

fout index;

for int i=0; iind; i++

for int j=0; jinde; j++

{

fout matrix[i][j];

}

fout. close;

system oks. exe;

} }}

Void Cpashawnd::onrename

{

Cclientdc dcthis;

Cfiledialog Dlgopentrue,lpcstr,null,

Ofn_hidereadonly,lpcstr All Files.dat |.dat||;

ifdlgopen. Domodal==idok

{

Cstdiofile Filedlgopen. Getpathname,cfile::moderead;

File. Close;

File. Removedlgopen. Getpathname;

}

}

Void Cpashawnd::onquit

{

Postquitmessage 0;

}

Void Cpashawnd::onhelp

{

Afxmessageboxнет И НЕ БУДЕТ;

}

Void Cpashawnd::oninfo

{

Afxmessageboxстудент ГРУППЫ 2Ки-98 ПАША;

}

Void Cpashawnd::onopen

{

Int и;

Cclientdc dcthis;

Cfiledialog Dlgopentrue,lpcstr,null,

Ofn_hidereadonly,lpcstr All Files. |.||;

int arr[50];

ifdlgopen. Domodal==idok

{

char buf[255];

FILE in;

if in = fopendlgopen. Getpathname, rt

{

fgetsbuf, 255, in;

Cstring t = _tbuf;

dc. Textout10,10,t;

} } }

Void Cpashawnd::ondialog

{

Cmydialog Mydialog;

Mydialog. Domodal;

brunned = false;

}

Void Cpashawnd::onpaint

{

Cpaintdc dcthis;

int len;

len=strlenbuf1;

iflen

{

dc. Textout20,180,listbox1:;

dc. Textout100,180,buf1,len;

}

len=strlenbuf2;

iflen

{

dc. Textout20,210,listbox2:;

dc. Textout100,210,buf2,len;

}

len=strlenstr;

iflen

{

dc. Textout20,240,edit:;

dc. Textout100,240,str, len;

}

}

Class Cpashaapp: public Cwinapp

{

Public:

Cpashaapp {};

virtual BOOL Initinstance;

};

BOOL Cpashaapp::initinstance

{

m_pmainwnd= new Cpashawnd;

m_pmainwnd-showwindowm_ncmdshow;

m_pmainwnd-updatewindow;

return TRUE;

}

Cpashaapp Pashaapp;


додаток 2.

Proba. rc

#include resource. h

#define Apstudio_readonly_symbols

#include afxres. h

#undef Apstudio_readonly_symbols

#if! definedafx_resource_dll || definedafx_targ_ukr

#ifdef _win32

LANGUAGE 0x22, 0x1

#pragma code_page1251

#endif //_win32

Idr_menu1 MENU Discardable

Begin

POPUP File

Begin

MENUITEM OPEN, Id_file_open

MENUITEM Saveas, Id_file_save

MENUITEM DELETE, Afx_id_file_rename

End

MENUITEM INFO, Id_file_info

MENUITEM HELP, Id_file_help

POPUP Cale

Begin

MENUITEM INPUT, Afx_id_file_dialog

MENUITEM RUN, Id_childnext

MENUITEM RESUET, Id_child

End

MENUITEM QUIT, Afx_id_file_quit

End

#ifdef Apstudio_invoked

1 TEXTINCLUDE Discardable

Begin

resource. h\0

End

2 TEXTINCLUDE Discardable

Begin

#include afxres. h\r\n

\0

End

3 TEXTINCLUDE Discardable

Begin

\r\n

\0

End

#endif // Apstudio_invoked

Idr_accelerator1 ACCELERATORS Discardable

Begin

I, Id_help_info, VIRTKEY, CONTROL, Noinvert

Vk_f10, Id_file_exit, VIRTKEY, CONTROL, Noinvert

End

Idd_dialog DIALOG DISCARDABLE 0, 0, 307, 140

STYLE Ds_modalframe | Ws_minimizebox | Ws_maximizebox | Ws_popup |

Ws_caption | Ws_sysmenu

CAPTION Dialog

FONT 8, MS Sans Serif

Begin

DEFPUSHBUTTON Ok,idc_ok,145,45,50,14

PUSHBUTTON Cancel,idcancel,225,45,50,14

LISTBOX Idc_list2,5,85,48,18,lbs_sort | Lbs_nointegralheight |

Ws_vscroll | Ws_tabstop

EDITTEXT Idc_edit1,190,110,49,19,es_autohscroll

CONTROL Byte,idc_radio1,button,bs_autoradiobutton,25,10,35,

10

CONTROL Word,idc_radio2,button,bs_autoradiobutton,115,10,39,

10

CONTROL Dword,idc_radio3,button,bs_autoradiobutton,195,10,45,

10

LTEXT ъ|ы№ъ|еЄ№ Ефъ|т,id_static,65,50,56,8

LTEXT ъ|ы№ъ|еЄ№ ееютяўшъ|т,id_static2,60,90,71,8

LTEXT |LT|Lг-,IDC_STATIC,195,95,37,8

LTEXT List Box,idc_static,20,70,25,10

LTEXT List Box,idc_static,15,110,26,8

LISTBOX Idc_list3,5,40,50,20,lbs_sort | Lbs_nointegralheight |

Ws_vscroll | Ws_tabstop

End

#ifdef Apstudio_invoked

GUIDELINES DESIGNINFO Discardable

Begin

Idd_dialog, Dialog

Begin

LEFTMARGIN, 7

RIGHTMARGIN, 297

BOTTOMMARGIN, 133

End

End

#endif // Apstudio_invoked

STRINGTABLE Discardable

Begin

Afx_id_file_rename Rename

Afx_id_file_quit Quit

Afx_id_resuet_resuet Resuet

Afx_id_dialog_dialog Dialog

Afx_id_file_dialog Dialog

Id_childnext Run

Id_ruun_ruun яюхирыш

Id_file_help Help

End

STRINGTABLE Discardable

Begin

Id_file_open Open

Id_file_save Ruun

End

STRINGTABLE Discardable

Begin

Afx_id_run_run Info

End

#endif // Unknown language: 0x22, 0x1 resources

#ifndef Apstudio_invoked

#endif // not Apstudio_invoked

Дополнение 3.

Resource. h

//{{No_dependencies}}

// Microsoft Developer Studio generated include file.

// Used by proba. rc

//

#define Idr_menu1 101

#define Idr_accelerator1 102

#define Idd_dialog 103

#define Id_list2 1001

#define Idc_list2 1001

#define Id_edit 1002

#define Idc_edit1 1002

#define Idc_radio1 1003

#define Idc_radio2 1004

#define Idc_radio3 1005

#define Id_static 1006

#define Id_static2 1007

#define Id_list1 1008

#define Idc_list1 1008

#define Id_static3 1009

#define Id_list3 1010

#define Idc_list3 1010

#define Idc_ok 1011

#define Id_file_exit 40001

#define Id_help_info 40002

#define Afx_id_file_rename 40003

#define Afx_id_file_quit 40004

#define Afx_id_resuet_resuet 40006

#define Afx_id_dialog_dialog 40007

#define Afx_id_file_dialog 40008

#define Id_child 40009

#define Id_childnext 40010

#define Id_ruun_ruun 40011

#define Id_file_help 40012

#define Afx_id_run_run 65535

#define Id_file_info 65535

// Next default values for new objects

//

#ifdef Apstudio_invoked

#ifndef Apstudio_readonly_symbols

#define _aps_next_resource_value 104

#define _aps_next_command_value 40013

#define _aps_next_control_value 1012

#define _aps_next_symed_value 101

#endif

#endif додаток 4.

Листинг программы на assembler

STACKSG SEGMENT PARA STACK 'Stackъ

DW 80 DUP?

STACKSG Ends

---------------------------------------------------------------------------

DATASG SEGMENT PARA 'Dataъ

HANDLE DW 0

MIN DW 0fff0h;минимальный элемент

MAX DW 0

SREDN DW 0

TEN DB 10

In_fname DB IN. Dat,0;имя входного файла

Out_fname DB OUT. Dat,0;имя выходного файла

NUMROWS DW 1;количество строк

NUMCOLS DW 1;количество столбцов

ROW DW 0

TMP DW?;temporary cell

BUFFER DB 64 Dup5;буфер ввода

Stringlen DB?

STRING DB 4 DUP?;temporary string

DATASG Ends

CODESG SEGMENT PARA 'Codeъ

BEGIN PROC Far

ASSUME Cs:codesg, Ds:datasg, Ss:stacksg

PUSH Ds

SUB AX, Ax

PUSH Ax

MOV AX, Datasg

MOV DS, Ax

CALL Load_from_file;вызов

CALL CALCULATE;пользовательских

CALL Save_to_file;процедур

Ret

BEGIN Endp

Load_from_file PROC Near

MOV Ah,03dh;

MOV Al,0c2h; открытие файла

MOV DX, OFFSET In_fname;

INT 21h

MOV HANDLE, Ax

mov Bx,0

push Bx

@Cicle1:

MOV BX, Handle

MOV Ah,03fh;

MOV Сх,1; считываем 1 байт в буфер

MOV DX, OFFSET NUMROWS;

INT 21h

cmp Numrows,32; Space

jz @EndCicle1

sub Numrows,48

pop Bx

mov AX, Bx

mul Ten

add AX, Numrows

mov BX, Ax

push Bx

jmp @Cicle1

@EndCicle1:

pop Bx

mov NUMROWS, Bx

mov Bx,0

push Bx

@Cicle2:

MOV BX, Handle

MOV Ah,03fh;

MOV Сх,1; считываем 1 байт в буфер

MOV DX, OFFSET NUMCOLS;

INT 21h

cmp Numcols,32; Space

jz @EndCicle2

sub Numcols,48

pop Bx

mov AX, Bx

mul Ten

add AX, Numcols

mov BX, Ax

push Bx

jmp @Cicle2

@EndCicle2:

pop Bx

mov NUMCOLS, Bx

mov Bx,0

push Bx

@Cicle3:

MOV BX, Handle

MOV Ah,03fh;

MOV Сх,1; считываем 1 байт в буфер

MOV DX, OFFSET ROW;

INT 21h

cmp Row,32; Space

jz @EndCicle3

sub Row,48

pop Bx

mov AX, Bx

mul Ten

add AX, Row

mov BX, Ax

push Bx

jmp @Cicle3

@EndCicle3:

pop Bx

mov ROW, Bx

MOV AX, Numrows

MOV СХ, Numcols

MUL СХ; AX = NUMROWS Numcols

mov СХ, Ax

mov Si,0

@GlobalCicle:

push Cx

mov Bx,0

push Bx

@Cicle4:

MOV BX, Handle

MOV Ah,03fh;

MOV Сх,1; считываем 1 байт в буфер

MOV DX, OFFSET TMP;

INT 21h

cmp Tmp,32; Space

jz @EndCicle4

sub Tmp,48

pop Bx

mov AX, Bx

mul Ten

add AX, Tmp

mov BX, Ax

push Bx

jmp @Cicle4

@EndCicle4:

pop Bx

mov buffer[SI],bl

inc Si

pop Cx

loop @GlobalCicle

MOV Ah,3eh

MOV BX, Handle

INT 21h

Ret

Load_from_file Endp

CALCULATE PROC Near

MOV BX, OFFSET Buffer

MOV AX, Row

MOV СХ, Numcols

MUL Cx

MOV SI, Ax

MOV СХ, Numcols

mov DX, Si

mov al,[bx+si]

xor ah, ah

mov min, ax

mov max, ax

mov sredn, ax

dec cx

inc si

jcxz @endcycle

@CYCLE1:

MOV Al, [Bx+si]

xor ah, ah

CMP AX, Min

JA @NEXT1

MOV MIN, Ax

@NEXT1:

inc Si

LOOP @CYCLE1

MOV СХ, Numcols

MOV SI, Dx

@CYCLE2:

MOV Al, [Bx+si]

xor ah, ah

CMP AX, Max

JB @NEXT2

MOV MAX, Ax

@NEXT2:

inc Si

LOOP @CYCLE2

MOV AX, Min

ADD AX, Max

SHR Ax,1

MOV SREDN, Ax

@ENDCYCLE:

Ret

CALCULATE Endp

Save_to_file PROC Near

MOV Ah,03ch;

MOV Сх,0; открытие файла

MOV DX, OFFSET Out_fname;

INT 21h

MOV HANDLE, Ax

mov AX, min

push Ax

mov stringlen,0

@2Cicle1:

pop Ax

xor ah, ah

or AL, Al

jz @2EndCicle1

mov BX, Ax

div Ten

push Ax

mul Ten

sub BX, Ax

add Bx,48; '0ъ

mov CL, stringlen

or CL, Cl

jz @end_disl1

xor CH, Ch

mov SI, Cx

@dislocation1:

mov AL, string[Si-1]

mov string[SI], Al

dec Si

loop @dislocation1

@end_disl1:

inc stringlen

mov String[0],bl

jmp @2Cicle1

@2EndCicle1:

MOV BX, HANDLE;

MOV Ah,040h;|

MOV CL, stringlen; сохранение Min

xor ch, ch

MOV DX, OFFSET string;

INT 21h

mov Min,32; Space

MOV BX, Handle

MOV Ah,040h

MOV Сх,1

MOV DX, OFFSET Min

INT 21h

mov AX, max

push Ax

mov stringlen,0

@2Cicle2:

pop Ax

xor ah, ah

or AL, Al

jz @2EndCicle2

mov BX, Ax

div Ten

push Ax

mul Ten

sub BX, Ax

add Bx,48; '0ъ

mov CL, stringlen

or CL, Cl

jz @end_disl2

xor CH, Ch

mov SI, Cx

@dislocation2:

mov AL, string[Si-1]

mov string[SI], Al

dec Si

loop @dislocation2

@end_disl2:

inc stringlen

mov String[0],bl

jmp @2Cicle2

@2EndCicle2:

MOV BX, HANDLE;

MOV Ah,040h;|

MOV CL, stringlen; сохранение Max

xor ch, ch

MOV DX, OFFSET string;

INT 21h

mov Min,32; Space

MOV BX, Handle

MOV Ah,040h

MOV Сх,1

MOV DX, OFFSET Min

INT 21h

mov AX, sredn

push Ax

mov stringlen,0

@2Cicle3:

pop Ax

xor ah, ah

or AL, Al

jz @2EndCicle3

mov BX, Ax

div Ten

push Ax

mul Ten

sub BX, Ax

add Bx,48; '0ъ

mov CL, stringlen

or CL, Cl

jz @end_disl3

xor CH, Ch

mov SI, Cx

@dislocation3:

mov AL, string[Si-1]

mov string[SI], Al

dec Si

loop @dislocation3

@end_disl3:

inc stringlen

mov String[0],bl

jmp @2Cicle3

@2EndCicle3:

MOV BX, HANDLE;

MOV Ah,040h;|

MOV CL, stringlen; сохранение Sredn

xor ch, ch

MOV DX, OFFSET string;

INT 21h

mov Min,32; Space

MOV BX, Handle

MOV Ah,040h

MOV Сх,1

MOV DX, OFFSET Min

INT 21h

MOV Ah,3eh

MOV BX, Handle

INT 21h

Ret

Save_to_file Endp

CODESG Ends

END Begin