Методы и технологии программирования
Изучение понятия обобщённого программирования — парадигмы программирования, заключающейся в описании данных и алгоритмов, которое можно применять к различным типам данных. Ознакомление с составом технологической инструкции процесса программирования.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 04.05.2014 |
Размер файла | 1,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Оглавление
Введение
1. Обобщенное программирование
1.1.Шаблоны Классов
1.2 Стандартная библиотека шаблонов STL
2.Событийное программирование
2.1 Разработка Windows-приложений
Заключение
Приложения
Введение
Программирование -- сравнительно молодая и быстро развивающаяся отрасль науки и техники. Опыт ведения реальных разработок и совершенствования имеющихся программных и технических средств постоянно переосмысливается, в результате чего появляются новые методы, методологии и технологии, которые, в свою очередь, служат основой более современных средств разработки программного обеспечения. Исследовать процессы создания новых технологий и определять их основные тенденции целесообразно, сопоставляя эти технологии с уровнем развития программирования и особенностями имеющихся в распоряжении программистов программных и аппаратных средств.
Технологией программирования называют совокупность методов и средств, используемых в процессе разработки программного обеспечения. Как любая другая технология, технология программирования представляет собой набор технологических инструкций, включающих:
· указание последовательности выполнения технологических операций;
· перечисление условий, при которых выполняется та или иная операция;
· описания самих операций, где для каждой операции определены исходные данные, результаты, а также инструкции, нормативы, стандарты, критерии и методы оценки и т. п.
На ранних этапах развития программирования, когда программы писались в виде последовательностей машинных команд, какая-либо технология программирования отсутствовала. Первые шаги в разработке технологии состояли в представлении программы в виде последовательности операторов. Написанию последовательности машинных команд предшествовало составление операторной схемы, отражающей последовательность операторов и переходы между ними. Операторный подход позволил разработать первые программы для автоматизации составления программ - так называемые составляющие программы.
В 1958 году были разработаны первые языки программирования, Фортран и Алгол-58. Программа на Фортране состояла из главной программы и некоторого количества процедур - подпрограмм и функций. Программа на Алголе-58 и его последующей версии Алголе-60 представляла собой единое целое, но имела блочную структуру, включающую главный блок и вложенные блоки подпрограмм и функций. Компиляторы для Фортрана обеспечивали раздельную трансляцию процедур и последующее их объединение в рабочую программу, первые компиляторы для Алгола предполагали, что транслируется сразу вся программа, раздельная трансляция процедур не обеспечивалась.
Процедурный подход потребовал структурирования будущей программы, разделения ее на отдельные процедуры. При разработке отдельной процедуры о других процедурах требовалось знать только их назначение и способ вызова. Появилась возможность перерабатывать отдельные процедуры, не затрагивая остальной части программы, сокращая при этом затраты труда и машинного времени на разработку и модернизацию программ.
Следующим шагом в углублении структурирования программ стало так называемое структурное программирование, при котором программа в целом и отдельные процедуры рассматривались как последовательности канонических структур: линейных участков, циклов и разветвлений. Появилась возможность читать и проверять программу как последовательный текст, что повысило производительность труда программистов при разработке и отладке программ. С целью повышения структурности программы были выдвинуты требования к большей независимости подпрограмм, подпрограммы должны связываться с вызывающими их программами только путем передачи им аргументов, использование в подпрограммах переменных, принадлежащих другим процедурам или главной программе, стало считаться нежелательным.
Процедурное и структурное программирование затронули прежде всего процесс описания алгоритма как последовательности шагов, ведущих от варьируемых исходных данных к искомому результату. Для решения специальных задач стали разрабатываться языки программирования, ориентированные на конкретный класс задач: на системы управления базами данных, имитационное моделирование и т.д.
Следующим шагом стало развитие Обьектно-Ориентированного программирования.
Объектно-ориентированное программирование (ООП) -- это способ организации кода в программе путем его группировки в виде объектов, то есть отдельных элементов, которые включают информацию (значения данных) и функции. Объектно-ориентированный подход к организации программы позволяет группировать определенные фрагменты информации (например, музыкальную информацию, такую как название альбома, название трека или имя исполнителя) вместе с часто используемыми функциями или действиями, связанными с этой информацией (например, «добавить трек в список воспроизведения» или «воспроизвести все песни этого исполнителя»). Эти элементы объединяются в один элемент, так называемый объект (например, «Album» или «MusicTrack»). Возможность связать вместе эти значения и функции дает несколько преимуществ. Например, нужно отслеживать только одну переменную, а не несколько; можно сгруппировать вместе связанные между собой функции; можно организовать структуру программы так, чтобы она больше соответствовала реальным потребностям.
Основные понятия:
· Алгоритм - определение процесса перехода из допустимого исходного состояниях к требуемому конечному, при этом для процесса характерны свойства массовости, конечности, определенности, и ,как правило, детерминированности
· Исполнитель - человек или вычислительное устройство (вычислитель) действующие по заданной формальной инструкции (алгоритму)
· Программа - задание алгоритма в виде понятном исполнителю или в виде, который подлежит автоматическому преобразованию в вид понятный исполнителю
· Язык - набор правил лексических (определяющих используемые знаки и слова), синтаксических (определяющих допустимые выражения) и семантических (определяющих реализуемые понятия)
· Язык программирования - язык, на котором выполняется запись программы
1. Обобщенное программирование
Обобщённое программирование (англ. generic programming) -- парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание.
Непосредственную поддержку парадигмы обобщенного программирования в языке в языке программирования обеспечивают шаблоны. Шаблон - это одно из самых сложных и мощных средств в С++. Он не вошел в исходную спецификацию С++, и лишь несколько лет назад стал неотьемлемой частью программирования на С++. Шаблоны позволяют достичь одну из самых трудных целей в программировании - создать многократно используемый код.
Используя шаблоны, можно создавать обобщенные функции и классы. В обобщенной функции(или классе) обрабатываемый ею(им) тип данных задается как параметр. Таким образом, одну функцию или класс можно использовать для разных типов данных, не предоставляя явным образом конкретные версии для каждого типа данных.
Стандартная библиотека шаблоновSTL
Стандартная библиотека шаблонов (STL) (англ. StandardTemplateLibrary) -- набор согласованных обобщенных алгоритмов, контейнеров, средств доступа к их содержимому и различных вспомогательных функций.
Структура библиотеки:
В библиотеке выделяют пять основных компонентов:
· Контейнер (container) - хранение набора объектов в памяти.
· Итератор (iterator) - обеспечение средств доступа к содержимому контейнера.
· Алгоритм (algorithm) - определение вычислительной процедуры.
· Адаптер (adaptor) - адаптация компонентов для обеспечения различного интерфейса.
· Функциональный объект (functor) - сокрытие функции в объекте для использования другими компонентами.
Разделение позволяет уменьшить количество компонентов. Например, вместо написания отдельной функции поиска элемента для каждого типа контейнера обеспечивается единственная версия, которая работает с каждым из них, пока соблюдаются основные требования.
Остановимся подробнее на Контейнерах. Контейнеры - это объекты, содержащие другие объекты. Существует несколько различных типов контейнеров.
· Последовательные
Vector C-подобный динамический массив произвольного доступа с автоматическим изменением размера при добавлении/удалении элемента. Добавление-удаление элемента в конец vector занимает амортизированное O(1) время, та же операция в начале или середине vector -- O(n). Существует специализация шаблона vector для типа bool, которая требует меньше памяти за счёт хранения bool в виде битов.
List - Двусвязный список, элементы которого хранятся в произвольных кусках памяти, в отличие от контейнера vector, где элементы хранятся в непрерывной области памяти. Медленный поиск и доступ за O(n), в любом месте быстрая вставка и удаление за O(1).
Deque - Похож на vector, но с возможностью быстрой вставки и удаления элементов на обоих концах.
· Ассоциативные
Set - Упорядоченное множество уникальных элементов. При вставке/удалении элементов множества итераторы, указывающие на элементы этого множества, не становятся недействительными. Обеспечивает стандартные операции над множествами типа объединения, пересечения, вычитания. Тип элементов множества должен реализовывать оператор сравнения operator< или требуется предоставить функцию-компаратор. Реализован на основе самобалансирующего дерева двоичного поиска.
Multiset - То же что и set, но позволяет хранить повторяющиеся элементы.
Map - Упорядоченный ассоциативный массив пар элементов, состоящих из ключей и соответствующих им значений. Ключи должны быть уникальны. Порядок следования элементов определяется ключами. При этом тип ключа должен реализовывать оператор сравнения operator<, либо требуется предоставить функцию-компаратор.
Multimap - То же что и map, но позволяет хранить повторяющиеся ключи.
· Контейнеры-адаптеры
Stack - Стек -- контейнер, в котором добавление и удаление элементов осуществляется с одного конца.
Queue - Очередь -- контейнер, с одного конца которого можно добавлять элементы, а с другого -- вынимать.
Priority_Queue - Очередь с приоритетом, организованная так, что самый большой элемент всегда стоит на первом месте.
Псевдоконтейнеры.
Bitset - Служит для хранения битовых масок. Похож на vector<bool> фиксированного размера. Размер фиксируется тогда, когда объявляется объект bitset. Итераторов в bitset нет. Оптимизирован по размеру памяти.
basic_string - Контейнер, предназначенный для хранения и обработки строк. Хранит в памяти элементы подряд единым блоком, что позволяет быстрый доступ ко всей последовательности.
Valarray - Шаблон служит для хранения числовых массивов и оптимизирован для достижения повышенной вычислительной производительности. В некоторой степени похож на vector, но в нём отсутствует большинство стандартных для контейнеров операций. Однако, в нём реализованы операции, которые можно эффективно реализовать как на векторных процессорах, так и на скалярных процессорах с блоками SIMD.
1.1 Шаблоны Классов
Требуется создать шаблон некоторого целевого класса А, возможно, реализованный с применением некоторого серверного класса В. Это означает, что объект класса В используется как элемент класса А. В качестве серверного класса может быть указан либо класс, созданный программистом, либо класс из стандартной библиотеки -- например, std:vector.
Целевой шаблонный класс vect , реализовать с применением std::list. (См. Приложение 1.)
Руководство пользователя
Рис. 1.1 Главное меню Программы
Рис.1.2 Выбор целочисленного типа (Нажатие кнопки 1 “int”)
Рис.1.3 Добавление данных в массив(нажатие кнопки 1”add”)
Рис.1.4 Запись элемента в массив
Рис.1.5 Кнопка продолжить(Нажатие 3”out”)
Рис.1.6 Добавление второго элемента в массив(Нажатие кнопки 1“Add”)
Рис.1.7 Удаляем Элементы(Нажатие кнопки 2 “remove”)
Рис.1.8 Выходим их программы(Нажатие кнопки 4”Exit”)
Главное меню:
Рис.1.9 Выбор работы с вещественным типом данных (Нажатие кнопки 2”double”)
Рис.1.10 Добавление данных в массив(нажатие кнопки 1”add”)
Рис.1.11 Удаляем Элементы(Нажатие кнопки 2 “remove”)
Рис.1.12 Выход из программы(Нажатие кнопки 4 “exit”)
Главное меню:
Рис.1.13Выбор работы со строковым типом данных(Нажатие кнопки 3”string ”)
Рис.1.14 Добавляем Элемент father(Нажатие кнопки 1 “add”)
Рис.1.15 Добавляем Второй элементmather(Нажатие кнопки 1 “add”)
Рис.1.16Удалям элемент father( Нажатие кнопки 2 “remove”. Остается 1 элемент mather)
Рис.1.17 Выход в основное меню(Нажатие кнопки 3 “Out”)
Рис.1.18 Выход из программы(“Нажатие кнопки 4 “exit”)
Руководство программиста
void Vect::add(Te) - добавление элемента в контейнер (см. Приложенение 1, стр. 24)
void Vect::remove(Te) - удаление элемента из контейнера
boolVect::exists(Te) - проверка существования элемента в контейнере
voidVect::out() - вывод контейнера
boolVect::empty() - проверка пустой массив
1.2 Стандартная библиотека шаблонов STL
Написать программу для моделирования Т-образного сортировочного узла на железной дороге с использоват1ем контейнерного класса stack из STL. Программа должна разделять на два направления состав, состоящий из вагонов двух типов (на каждое направление формируется состав из вагонов одного типа). Предусмотреть возможность ввода с клавиатуры и из файла. (См. Приложение 2). программирование алгоритм данные
Руководство Пользователя
Рис.1.19 Начальное Состояние
Рис.1.20 Первый Шаг Сортировки
Рис.1.21 Второй Шаг Сортировки
Рис.1.22 Третий Шаг Сортировки
Рис.1.23 Четвертый Шаг Сортировки
Рис.1.24 Пятый Шаг Сортировки
Руководство программиста
Train::Train(string _type) - конструктор с выбором типа поезда(см. Приложение 2, стр.26 )
intTrain::getNumber() - получение номера поезда
stringTrain::getType() - получение типа поезда
voidTrain::setType() - установка типа поезда
stringTrain::getFormatted() - строковое представление поезда(см. Приложение 2)
voidTNode::add(Traint) - добавление поезда в узел
stringTNode::getFormatted() - вывод узла
voidTNode::reverseStack() - обратная сортировка stack
2. Событийное программирование
Событийно-ориентированное программирование (англ. event-driven programming; в дальнейшем СОП) -- парадигма программирования, в которой выполнение программы определяется событиями -- действиями пользователя (клавиатура, мышь), сообщениями других программ и потоков, событиями операционной системы (например, поступлением сетевого пакета).
Применение:
Событийно-ориентированное программирование, как правило, применяется в трёх случаях:
· при построении пользовательских интерфейсов (в том числе графических);
· при создании серверных приложений в случае, если по тем или иным причинам нежелательно порождение обслуживающих процессов;
· при программировании игр, в которых осуществляется управление множеством объектов.
2.1 Разработка Windows-приложений
Оформить решение задач в виде функций и отладить в Visual C++Проект MFCAppWizard (exe), Dialogbased.Для уравнения x^2+p x+q=0 :
1. проверить - корни вещественные или комплексные,
2. вычислить значения корней (См. Приложение 3)
Руководство пользователя
Рис.2.1 Главное окно программы
Рис.2.2 Ввод Квадратного уравнения
Рис.2.3 Нажатие кнопки Пуск и Получение Ответа
Проверка контрольного примера
x2 + 1 = 0
x2 = -1
i - мнимая единица, i2 = -1
x = корень (-1) = корень(i2) = ±i, что соответствует ответам полученным программным путем. Значит программа работает правильно.
Руководство программиста
voidCjuiuhjiDlg::OnBnClickedButton1() - подсчет квадратного уровнения при клике на кнопку “pusk” (см. Приложение 3, стр. 31)
Заключение
Языки программирования имеют богатую историю, на основе которой можно проследить их эволюцию. Наверняка эта эволюция будет продолжаться и в будущем.
Началом программирования были робкие шаги человека в попытке заставить компьютер выполнить определенную задачу.
Изобретение языка программирования высшего уровня позволило нам общаться с машиной, понимать её.
Затем появились первые ЯВУ, которые были предназначены только для очень узкого круга задач. Но современные языки программирования различаются лишь способами (методологиями) программирования, а не классом решаемых задач. При помощи современных ЯВУ программист может решить практически любую задачу; важнее стал вопрос, какой способ программирования применить.
Если мы обратим внимание на темпы роста и развития новейших технологий в области программирования, то можно предположить, что в ближайшем будущем, человеческие познания в этой сфере, помогут произвести на свет языки, умеющие принимать, обрабатывать и передавать информации в виде мысли, слова, звука или жеста.
В будущем, с развитием технологий и появлением новых программных концепций само программирование, возможно, перейдет на качественно новый уровень, когда появится возможность создавать программы для процессоров нано-машин или биологических компьютеров.
Приложение 1
#include <iostream>
#include <list>
#include <string>
#include <cstdlib>
#include <algorithm>
using namespace std;
template<class T> class Vect
{
public:
void add(T e)
{
a.push_back(e);
}
void remove(T e)
{
if(!exists(e)) {
throw 1;
}
a.remove(e);
}
bool exists(T e)
{
typename list<T>::iterator findIter = std::find(a.begin(), a.end(), e);
return findIter != a.end();
}
void out()
{
cout << "vector content: ";
if (empty())
cout << "empty";
for (typename list<T>::iterator it = a.begin(); it != a.end(); it++)
cout << *it << " ";
cout << endl;
}
bool empty()
{
return a.empty();
}
private:
list<T> a;
};
void cls()
{
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__)
system("CLS");
#else
system("clear");
#endif
}
template <typename T> void askOperations(Vect<T> v)
{
int command = 0;
string pressKey;
while(command < 4) {
cls();
cout << "Enter operation type:" << endl;
cout << "1) add" << endl;
if(!v.empty())
cout << "2) remove" << endl;
cout << "3) out" << endl;
cout << "4) exit" << endl;
cin >> command;
if(command == 1) {
T t;
cout << "enter elem to add:" << endl;
cin >> t;
v.add(t);
}
if(command == 2) {
T t;
cout << "enter elem to delete:" << endl;
cin >> t;
try {
v.remove(t);
} catch(int e) {
cout << "Element not found!" << endl;
}
}
v.out();
if(command < 4) {
cout << "Press any key to continue..." << endl;
cin >> pressKey;
}
}
}
int main()
{
cls();
int command;
cout << "Select type of vector:" << endl;
cout << "1) int" << endl;
cout << "2) double" << endl;
cout << "3) string" << endl;
cin >> command;
if(command == 1) {
Vect<int> v1;
askOperations(v1);
}
if(command == 2) {
Vect<double> v2;
askOperations(v2);
}
if(command == 3) {
Vect<string> v3;
askOperations(v3);
}
cout << "Bye bye!" << endl;
return 0;
}
Приложение 2
#include <iostream>
#include <stack>
#include <string>
using namespace std;
const string TYPE_1 = "type1";
const string TYPE_2 = "type2";
int counter = 0;
class Train {
public:
Train(string _type)
{
counter++;
number = counter;
setType(_type);
}
int getNumber() const
{
return number;
}
string getType() const
{
return type;
}
void setType(string _type)
{
type = _type;
}
string getFormatted() const
{
string s = to_string(getNumber());
return "Train #" + s + " (" + getType() + ")";
}
private:
string type;
int number;
};
std::ostream & operator<<(std::ostream & inp, Train const & v) {
inp << v.getFormatted();
return inp;
}
class TNode
{
public:
void add(Train t)
{
start.push(t);
}
string getFormatted()
{
string out = "";
while(!start.empty())
{
Train t = start.top();
start.pop();
if(t.getType() == TYPE_1) {
left.push(t);
} else {
right.push(t);
}
out += " " + t.getFormatted() + "\n";
if(!start.empty() || !left.empty() || !right.empty()) {
out += " |\n";
out += " |\n";
}
}
if(!left.empty() || !right.empty()) {
out += " / \\\n";
out += " / \\\n";
out += " / \\\n";
out += " / \\\n";
}
while(!left.empty() || !right.empty())
{
if(!left.empty() && !right.empty()) {
Train l = left.top();
left.pop();
Train r = right.top();
right.pop();
out += " " + l.getFormatted() + " " + r.getFormatted() + "\n";
} else if(!left.empty()) {
Train l = left.top();
left.pop();
out += " " + l.getFormatted() + "\n";
} else if(!right.empty()) {
Train r = right.top();
right.pop();
out += " " + r.getFormatted() + "\n";
}
if(!left.empty() && !right.empty()) {
out += " | |\n";
out += " | |\n";
} else if(!left.empty()) {
out += " |\n";
out += " |\n";
} else if(!right.empty()) {
out += " |\n";
out += " |\n";
}
}
return out;
}
private:
stack<Train> start;
stack<Train> left;
stack<Train> right;
};
std::ostream & operator<<(std::ostream & inp, TNode & v) {
inp << v.getFormatted();
return inp;
}
int main()
{
TNode n;
n.add(Train(TYPE_1));
n.add(Train(TYPE_2));
n.add(Train(TYPE_1));
n.add(Train(TYPE_2));
n.add(Train(TYPE_1));
cout << n;
return 0;
}
Приложение 3
Project.cpp
#include "stdafx.h"
#include "juiuhji.h"
#include "juiuhjiDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
BEGIN_MESSAGE_MAP(CjuiuhjiApp, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
CjuiuhjiApp::CjuiuhjiApp()
{
}
CjuiuhjiApp theApp;
BOOL CjuiuhjiApp::InitInstance()
{
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
AfxEnableControlContainer();
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
CjuiuhjiDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
}
else if (nResponse == IDCANCEL)
{
}
return FALSE;
}
ProjectDlg.cpp
// juiuhjiDlg.cpp : implementation file
//
#include "stdafx.h"
#include "juiuhji.h"
#include "juiuhjiDlg.h"
#include "math.h"
double f(double x){return x-cos(x);}
double df(double x){return 1+sin(x);}
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
// Implementation
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
CjuiuhjiDlg::CjuiuhjiDlg(CWnd* pParent /*=NULL*/)
: CDialog(CjuiuhjiDlg::IDD, pParent)
, m_e1(0)
, m_e2(0)
, m_e3(0)
, m_e4(0)
, m_e5(0)
, m_e6(0)
, m_e7(0)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CjuiuhjiDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_e1);
DDX_Text(pDX, IDC_EDIT2, m_e2);
DDX_Text(pDX, IDC_EDIT3, m_e3);
DDX_Text(pDX, IDC_EDIT4, m_e4);
DDX_Text(pDX, IDC_EDIT5, m_e5);
DDX_Text(pDX, IDC_EDIT6, m_e6);
DDX_Text(pDX, IDC_EDIT7, m_e7);
}
BEGIN_MESSAGE_MAP(CjuiuhjiDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, &CjuiuhjiDlg::OnBnClickedButton1)
ON_EN_CHANGE(IDC_EDIT1, &CjuiuhjiDlg::OnEnChangeEdit1)
ON_EN_CHANGE(IDC_EDIT2, &CjuiuhjiDlg::OnEnChangeEdit2)
END_MESSAGE_MAP()
BOOL CjuiuhjiDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);// Set big icon
SetIcon(m_hIcon, FALSE);// Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CjuiuhjiDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CjuiuhjiDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this function to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CjuiuhjiDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CjuiuhjiDlg::OnBnClickedButton1()
{
UpdateData(true);
double d = m_e2*m_e2-4*m_e1*m_e3;
if(d>=0) {
m_e4=(-m_e2+sqrt(d))/2*m_e1;
m_e5=(-m_e2-sqrt(d))/2*m_e1;
} else {
m_e4=(double)-m_e2/(2*m_e1);
m_e5=(double)-m_e2/(2*m_e1);
m_e6=(double)sqrt(-d)/(2*m_e1);
m_e7=(double)-sqrt(-d)/(2*m_e1);
}
UpdateData(false);
}
void CjuiuhjiDlg::OnEnChangeEdit1()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
}
void CjuiuhjiDlg::OnEnChangeEdit2()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
}
Project.h
#pragma once
#ifndef __AFXWIN_H__
#error "include 'stdafx.h' before including this file for PCH"
#endif
#include "resource.h"// main symbols
class CjuiuhjiApp : public CWinApp
{
public:
CjuiuhjiApp();
// Overrides
public:
virtual BOOL InitInstance();
// Implementation
DECLARE_MESSAGE_MAP()
};
extern CjuiuhjiApp theApp;
ProjectDlg.h
#pragma once
// CjuiuhjiDlg dialog
class CjuiuhjiDlg : public CDialog
{
// Construction
public:
CjuiuhjiDlg(CWnd* pParent = NULL);// standard constructor
// Dialog Data
enum { IDD = IDD_JUIUHJI_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButton1();
afx_msg void OnEnChangeEdit1();
afx_msg void OnBnClickedButton2();
int m_e1;
int m_e2;
int m_e3;
double m_e4;
double m_e5;
afx_msg void OnEnChangeEdit2();
double m_e6;
double m_e7;
};
Resource.h
#define IDM_ABOUTBOX 0x0010
#define IDD_ABOUTBOX 100
#define IDS_ABOUTBOX 101
#define IDD_JUIUHJI_DIALOG 102
#define IDR_MAINFRAME 128
#define IDC_BUTTON1 1000
#define IDC_EDIT1 1002
#define IDC_EDIT2 1003
#define IDC_EDIT3 1004
#define IDC_EDIT4 1005
#define IDC_EDIT5 1006
#define IDC_EDIT6 1007
#define IDC_EDIT7 1008
// Next default values for new objects
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 129
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1009
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
Stdafx.h
#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif
Размещено на Allbest.ru
...Подобные документы
Цель информационного программирования; алгоритмический язык как система обозначений и правил для единообразной и точной записи алгоритмов и их исполнения. Языки программирования низкого и высокого уровня; классификация и использование структуры данных.
реферат [383,1 K], добавлен 07.01.2012История формирования традиционной технологии программирования. Задачи и предмет структурного программирования, как одного из крупнейших достижений в технологии программирования. Подпрограмма, типы управляющих структур. Понятие модульного программирования.
презентация [1,8 M], добавлен 05.11.2016Классификация систем автоматического программирования по различным критериям, представление о направлениях развития автоматизации программирования, функциональная структура САП Техтран. Проблемно-ориентированный язык программирования оборудования с ЧПУ.
книга [1,4 M], добавлен 14.03.2010Сущность языка программирования, идентификатора, структуры данных. Хранение информации, алгоритмы их обработки и особенности запоминающих устройств. Классификация структур данных и алгоритмов. Операции над структурами данных и технология программирования.
контрольная работа [19,6 K], добавлен 11.12.2011Изучение способов организации консольного ввода/вывода данных в режиме черного экрана. Ознакомление со стандартными типами данных (целый, вещественный, символьный, логический) и методами описания переменных, использующихся на языке программирования С++.
презентация [2,2 M], добавлен 17.04.2010Цели и задачи дисциплины "Технология программирования". Программные средства ПК. Состав системы программирования и элементы языка. Введение в систему программирования и операторы языка Си. Организация работы с файлами. Особенности программирования на С++.
методичка [126,3 K], добавлен 07.12.2011Основные концепции языков программирования, механизмы типизации данных. Описание языков программирования и методов трансляции. Конечные автоматы и преобразователи. Общие методы синтаксического анализа. Формальные методы описания языкового перевода.
курс лекций [5,5 M], добавлен 04.12.2013Теоретическая основа линейного программирования. Задачи линейного программирования, методы решения. Анализ оптимального решения. Решение одноиндексной задачи линейного программирования. Постановка задачи и ввод данных. Построение модели и этапы решения.
курсовая работа [132,0 K], добавлен 09.12.2008Изучение общей структуры языка программирования Delphi: главные и дополнительные составные части среды программирования. Синтаксис и семантика языка программирования Delphi: алфавит языка, элементарные конструкции, переменные, константы и операторы.
курсовая работа [738,1 K], добавлен 17.05.2010Характеристика основных разделов программирования, изучаемых в курсе программирования на языке С++. Описание внутренних переменных, входных и выходных данных. Особенности использования компилятора Microsoft Visual Studio 2008. Руководство пользователя.
курсовая работа [18,8 K], добавлен 14.12.2010История развития и классификация высокоуровневых языков логического программирования. Определение понятий графического интерфейса, сетевых протоколов и моделей баз данных. Современные системы программирования компании Borland/Inprise и фирмы Microsoft.
курсовая работа [72,3 K], добавлен 11.07.2011Основные этапы развития языков программирования. Характеристика машинно-ориентированной, проблемно-ориентированной и процедурно-ориентированной систем программирования. Ознакомление с системами программирования Delphi, Visual Basic и Visual C++.
курсовая работа [102,4 K], добавлен 21.07.2012Краткая характеристика интегрированной среды Turbo Pascal. Принципы программирования разветвляющихся алгоритмов, циклических структур, задач обработки символьных данных, множеств. Правила записи данных в текстовый файл. Понятие явной и косвенной рекурсии.
учебное пособие [1,5 M], добавлен 10.12.2010Понятие математического программирования. Класс как тип структуры, позволяющий включать в описание типа не только элементы данных, но и функции. Рассмотрение основных особенности языка программирования C++. Характеристика среды MS Visual Studio 2008.
контрольная работа [318,0 K], добавлен 13.01.2013Порядок описание процесса разработки модели для разрешения задачи программирования с помощью средств языка программирования. Структуры данных и основные принципы их построения. Этапы компьютерного моделирования. Этапы и значение написания программы.
курсовая работа [19,5 K], добавлен 19.05.2011Основные сведения о языках программирования и их состав. Программа для компьютера. Использование компилятора и операторы. Языки программирования высокого уровня. Концепции объектно-ориентированного программирования. Языки искусственного интеллекта.
презентация [6,3 M], добавлен 14.08.2013Рассмотрение и ознакомление с одним из наиболее используемых языков программирования - С++. Его применение в процессе работы со строковыми типами данных и символами. Исследование кодов написания программ в режиме разработки консольного приложения.
курсовая работа [6,1 M], добавлен 20.01.2016Знакомство с наиболее известными технологиями программирования. Особенности разработки программ для вычисления интеграла по формуле средних прямоугольников. Общая характеристика методов структурного программирования. Рассмотрение формулы Симпсона.
курсовая работа [1,3 M], добавлен 03.03.2015Язык программирования как система обозначений, применяемая в описании алгоритмов для ЭВМ. Разработка программы на языке программирования Бейсик. Освоение приемов работы с электронными таблицами MS Excel. Создание базы данных с помощью СУБД MS Access.
контрольная работа [2,6 M], добавлен 15.02.2010Разработка программы средствами Turbo Pascal для автоматизации процесса работы с небольшими базами данных. Состав используемого аппаратного обеспечения. Общая схема структуры языка программирования Паскаля и приемы процедурного программирования.
курсовая работа [61,6 K], добавлен 09.03.2011