48252 (Программирование и основы алгоритмизации)

2016-07-28СтудИзба

Описание файла

Документ из архива "Программирование и основы алгоритмизации", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "48252"

Текст из документа "48252"

Министерство образования Российской Федерации

ЮЖНО-УРАЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Кафедра Автоматики и управления

Пояснительная записка к курсовому проекту

По дисциплине:

Программирование и основы алгоритмизации

Вариант № 1

Проверил:

доцент кафедры

Вставская Е.В.

“____”_____________2007г

Выполнил:

студент группы ПС-164

Лысенко Д.Г.

“____”_____________2007г

Челябинск

2007 г.


Содержание:

1. Постановка задачи 3

2. Метод решения 3

3. Текст программы 4

4. Схема алгоритма 12

5. Вывод результата работы 14

6. Проверка правильности программы 14

Постановка задачи

Даны целые числа a, b и n. Вычислить .

  1. Метод решения

Подключаем файл windowA.inc, в котором будут содержаться базовые структуры и константы Win32. Затем в процедуре start первоначально вызываем функции Win32 API, после чего происходит регистрация окна (определения класса окна и регистрация его в системе). Затем создаем и отображаем, собственно, само окно. Потом запускается цикл обработки сообщения, которые будут посылаться ОС программе и обрабатываться в отдельной процедуре WindowProc и затем собственно выход из программы.

В процедуре обработке сообщений, если нажата клавиша «Вычислить», то считывается значение из поля редактирования, преобразовывается в числовой формат, производятся нужные вычисления и выводится на экран

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

STYLBTN equ 40000000h + 10000000h

;WSCHILD+WS_VISIBLE

STYLEDT equ 40000000h + 10000000h + 800000h + 10000h

;Пример каркасного приложения для Win32

.486

locals

.model flat,STDCALL

include windowA.inc

includelib imp32i.lib

extrn GetModuleHandleA:PROC ;дескриптор класса окна

extrn LoadIconA:PROC ;дескриптор пиктограммы

extrn LoadCursorA:PROC ;дескриптор курсора

extrn GetStockObject:PROC ;дескриптор кисти

extrn RegisterClassExA:PROC ;регистрация класса окна

extrn CreateWindowExA:PROC ;создание экземпляра окна

extrn ShowWindow:PROC ;отображение окна

extrn UpdateWindow:PROC ;перерисовка окна

extrn GetMessageA:PROC ;получение сообщения

extrn TranslateMessage:PROC ;обнаружение сообщения

extrn DispatchMessageA:PROC ;передача сообщения

;оконной функции

extrn ExitProcess:PROC ;завершение процедуры

extrn BeginPaint:PROC ;начало перерисовки

extrn EndPaint:PROC ;конец перерисовки

extrn TextOutA:PROC ;вывод текста

extrn PostQuitMessage:PROC

extrn DefWindowProcA:PROC ;обработчик по умолчанию

extrn MessageBoxA:PROC

extrn SendMessageA:PROC

extrn GetDC:PROC

extrn ReleaseDC:PROC

;оконной функции

public WindowProc

.data

hwnd dd 0 ; дескриптор экземпляра окна

hInst dd 0 ; дескриптор класса окна

hdc dd 0

;

hedt1 dd 0 ;дескриптор поля редактирования

hbtn dd 0 ;дескриптор кнопки

hh1 dd 0

hh2 dd 0

hh3 dd 0

hh4 dd 0

hbtn1 dd 0

hbtn2 dd 0

CPBUT db '&Посчитать',0

CPBUT2 db 'В&ыход',0

CLSBTN db 'BUTTON',0

CPEDT db '',0

CLSEDT db 'EDIT',0

TEXT db ' '

TEXTA db ' '

TEXTB db 'результат: '

TEXTLEN = $-TEXT

ten dw 10

temp dw 0

a dd ?

b dd ?

n dd ?

wcl WNDCLASSEX ;структура для регистрации класса

; окна

message MSG ;структура для регистрации сообщений

szClassName db 'Приложение Win32',0

szTitleName db 'Курсач Лысенко Д. ПС-164',0

MesWindow db 'Введите a,b и n,'

MesWindowLen = $-MesWindow

ps PAINTSTRUCT

.code

start proc near

;Получение дескриптора класса окна

push 0;

call GetModuleHandleA

mov hInst,eax

WinMain:

;для начала инициализируем поля структуры WndClassEx

mov wcl.cbSize,type WNDCLASSEX

mov wcl.style, CS_HREDRAW+CS_VREDRAW ;полная перерисовка

mov wcl.lpfnWndProc,offset WindowProc

mov wcl.cbClsExtra,0

mov wcl.cbWndExtra,0

mov eax,hInst

mov wcl.hInstance,eax

push IDI_APPLICATION ;стандартное приложение 32512

push 0

call LoadIconA

mov wcl.hIcon,eax

push IDC_ARROW ;стандартный курсор стрелка 32512

push 0

call LoadCursorA

mov wcl.hCursor,eax

;определим цвет фона окна

push LTGRAY_BRUSH ;1

call GetStockObject

mov eax,5

mov wcl.hbrBackground,eax

mov dword ptr wcl.lpszMenuName,0 ;без главного меню

mov dword ptr wcl.lpszClassName,offset szClassName

;имя класса окна

mov wcl.hIconSm,0

;регистрируем класс окна

push offset wcl

call RegisterClassExA

;создаем окно:

push 0 ;lpParam

push hInst ;hInstance

push 0 ;menu

push 0 ;parent hwnd

push 200 ;высота окна

push 300 ;ширина окна

push 300 ;координата y л.в. угла окна

push 300 ;координата x л.в. угла

push WS_OVERLAPPEDWINDOW ;стиль окна

push offset szTitleName ;Строка заголовка окна

push offset szClassName ;имя класса окна

push 0 ;дополнительные стили

call CreateWindowExA

mov hwnd,eax ;hwnd - дескриптор окна

;показать окно:

push SW_SHOWNORMAL ;1

push hwnd

call ShowWindow

;перерисовываем содержимое окна

push hwnd

call UpdateWindow

;запускаем цикл сообщений:

cycl_msg:

push 0

push 0

push NULL

push offset message

call GetMessageA

cmp ax,0

je end_cycl_msg

;трансляция ввода с клавиатуры

push offset message

call TranslateMessage

;передача сообщения оконной функции

push offset message

call DispatchMessageA

jmp cycl_msg

end_cycl_msg:

;выход из приложения

push NULL

call ExitProcess

start endp

;Оконная функция WindowProc для обработки сообщений

WindowProc proc

arg @@hwnd:DWORD, @@mes:DWORD, @@wparam:DWORD, @@lparam:DWORD

uses ebx,edi, esi ; регистры должны сохраняться

local @@hdc:DWORD

cmp @@mes,WM_DESTROY

je wmdestroy

cmp @@mes,WM_CREATE

je wmcreate

cmp @@mes,WM_PAINT

je wmpaint

cmp @@mes, WM_COMMAND

je wmcommand

jmp default

wmcreate: ;создание окна

mov eax,0

;;;;поле1

push 0

push hInst

push 0

push @@hwnd

push 20

push 35

push 50

push 10

push STYLEDT

push offset CPEDT

push offset CLSEDT

push 0

call CreateWindowExA

mov hh1,eax

mov eax,0

;;; поле2

push 0

push hInst

push 0

push @@hwnd

push 20

push 35

push 50

push 50

push STYLEDT

push offset CPEDT

push offset CLSEDT

push 0

call CreateWindowExA

mov hh2,eax

mov eax,0

;;;;;;3

push 0

push hInst

push 0

push @@hwnd

push 20

push 35

push 50

push 90

push STYLEDT

push offset CPEDT

push offset CLSEDT

push 0

call CreateWindowExA

mov hh3,eax

mov eax,0

;;;;;

push 0

push hInst

push 0

push @@hwnd

push 20

push 80

push 80

push 10

push STYLBTN ;STYLBTN

push offset CPBUT

push offset CLSBTN

push 0

call CreateWindowExA

mov hbtn,eax

mov eax,0

push 0

push hInst

push 0

push @@hwnd

push 20

push 80

push 80

push 100

push STYLBTN ;STYLBTN

push offset CPBUT2

push offset CLSBTN

push 0

call CreateWindowExA

mov hbtn2,eax

mov eax,0

;возвращаемое значение 0

jmp exit_wndproc

wmcommand:

mov eax, hbtn

cmp @@lparam,eax

je calc

mov eax, hbtn2

cmp @@lparam,eax

je res

wmnodestroy:

mov eax,0

jmp exit_wndproc

res:

jmp wmdestroy

wmpaint:

push offset ps

push @@hwnd

call BeginPaint

mov @@hdc,eax

push MesWindowLen

push offset MesWindow

push 20

push 10

push @@hdc

call TextOutA

;освободить контекст

push offset ps

push @@hdc

call EndPaint

mov eax,0 ;возвращаемое значение 0

jmp exit_wndproc

wmdestroy: ;послать сообщение WM_QUIT

push 0

call PostQuitMessage

mov eax,0 ;возвращаемое значение 0

jmp exit_wndproc

default:

;обработка по умолчанию

push @@lparam

push @@wparam

push @@mes

push @@hwnd

call DefWindowProcA

jmp exit_wndproc

calc:

;считываем поле 1

push offset TEXTA

push 150

push WM_GETTEXT

push hh1

call SendMessageA

push offset TEXTA

call StringToDig

mov a,eax

;поле 2

push offset TEXTA

push 150

push WM_GETTEXT

push hh2

call SendMessageA

push offset TEXTA

call StringToDig

mov b,eax

;поле 3

push offset TEXTA

push 150

push WM_GETTEXT

push hh3

call SendMessageA

push offset TEXTA

call StringToDig

mov n,eax

mov ecx,n

mov eax,1d

repeat:

imul a

loop repeat

imul b

aam

or ax,3030h

mov [TEXTB+12],ah

mov [TEXTB+13],al

push @@hwnd

call GetDC

mov @@hdc,eax

push 18

push offset TEXTB

push 120

push 10

push @@hdc

call TextOutA

exit_wndproc:

ret

WindowProc endp

StringToDig proc near

ARG @@TEXT:DWORD

mov esi,@@TEXT

mov eax,0

mov edx,0

mov dl,[esi]

cmp dl,'-'

jne N

mov temp,1

inc esi

mov dl,[esi]

N: cmp dl,'0'

jl MRET

cmp dl,'9'

jg MRET

and dl,0Fh ; ASCII->BCD

add eax,edx

mul ten

inc esi

mov dl,[esi]

cmp dl,'0'

jl MDIV

cmp dl,'9'

jg MDIV

; mul ten

and dl,0Fh

add eax,edx

jmp MRET

MDIV: div ten

MRET:

cmp temp,1

jne n1

imul eax,-1

mov temp,0

n1: ret

StringToDig endp

end start

  1. Схема алгоритма

Вывод результата работы

  1. Проверка правильности программы

1)

2)

3)

4)

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

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5137
Авторов
на СтудИзбе
440
Средний доход
с одного платного файла
Обучение Подробнее