Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
яметодические указания пратические ООП 2012.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
1.17 Mб
Скачать
  1. Преимущества Visual Studio

  2. Инструментальная панель

  3. Окно настроек свойств интегрированной среды разработки

  4. Утилиты и мастера ms Visual Studio 2005

  5. Создание нового класса

  6. Редактирование классов с помощью Class View

  7. Создание приложения по шаблону с помощью мастера mfc Application Wizard

  8. Файлы проекта

  9. Состав программы

  10. Ядро Windows

  11. Венгерская нотация

  12. Часто используемые типы данных Windows

Практична робота №2 Розробка прикладення для роботи з екранною формою та елементами керування

Мета: Навчитися розроблювати прикладення для роботи з екранною формою та елементами керування

Элементы Windows-приложения

Построение приложения Windows включает выполнение следующих этапов:

Создание WinMain(...) и связанных с ней функций на языке C или C++.

Создание описаний меню и всех дополнительных ресурсов, помещение описаний в файл описания ресурсов.

Создание уникальных курсоров, пиктограмм и битовых образов.

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

Создание файла проекта.

Компиляция и компоновка всего кода.

Создадим пустой проект Windows- приложения с помощью мастера:

File New Project.

Project types: Win32 Templates: Win32 Project.

Ok.

Установить галочку Empty project.

Добавить в проект файл *.cpp.

Project Properties. Вкладка Configuration Properties General.

Значение поля Character Set устанавливаем Use Multi-Byte Character Set.

Добавим следующий код:

#include <windows.h>

LONG WINAPI WndProc(HWND, UINT, WPARAM,LPARAM);

int WINAPI WinMain (HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

HWND hwnd;

MSG msg;

WNDCLASS w;

memset(&w,0,sizeof(WNDCLASS));

w.style = CS_HREDRAW | CS_VREDRAW;

w.lpfnWndProc = WndProc;

w.hInstance = hInstance;

w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

w.lpszClassName = "My Class";

RegisterClass(&w);

hwnd = CreateWindow("My Class", "Окно пользователя", WS_OVERLAPPEDWINDOW,500, 300, 500, 380, NULL, NULL, hInstance, NULL);

ShowWindow(hwnd,nCmdShow);

UpdateWindow(hwnd);

while(GetMessage(&msg,NULL,0,0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)

{

switch (Message)

{

case WM_DESTROY: PostQuitMessage(0); break;

default: return DefWindowProc(hwnd, Message, wparam, lparam);

}

return 0;

}

Скомпилируем и запустим программу. На экране появится Windows-окно.

Комментарии к программе

Все приложения Windows должны содержать два основных элемента: функцию WinMain(...) и функцию окна WndProc.

Функция WinMain(...) служит точкой входа в приложение. Эта функция отвечает за следующие действия:

регистрацию типа класса окон приложения;

выполнение всех инициализирующих действий;

создание и инициализацию цикла сообщений приложения;

завершение программы (обычно при получении сообщения WM_QUIT ).

Функция WndProc отвечает за обработку сообщений Windows. Эта часть программы является наиболее содержательной с точки зрения выполнения поставленных перед программой задач. Если мы хотим, чтобы программа обращала на наши действия внимание, то необходимо добавить ветки case для оператора switch в оконную процедуру WndProc. Например, если мы хотим, чтобы наше приложение обращало внимание на щелчок левой кнопкой мыши – добавляем ветку case WM_LBUTTONDOWN. В настоящий момент в оконной процедуре происходит только обработка сообщения WM_DESTROY. Больше Windows-окно пока ничего делать не умеет.

Заголовочный файл windows.h нужен для любой традиционной Windows программы на C. Именно в нем содержатся разные определения констант ( WM_DESTROY и т. д.).

Параметры функции WinMain:

hInstance (тип HINSTANCE ) – является идентификатором текущего экземпляра приложения. Данное число однозначно определяет программу, работающую под управлением Windows.

hPrevInstance (тип HINSTANCE ) – указывал ранее (Windows 3.1) на предыдущий запущенный экземпляр приложения. В современных версиях Windows он равен NULL.

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

nCmdShow – этот параметр принимает значение одной из системных констант, определяющих способ изображения окна (например, SW_SHOWNORMAL, SW_SHOWMAXIMIZED или SW_SHOWMINIMIZED ).

Регистрация класса окна

Каждое окно, которое создается в рамках приложения Windows, должно основываться на классе окна – шаблоне, в котором определены выбранные пользователем стили, шрифты, заголовки и т.д. Для всех определений класса окна используется стандартный тип структуры. Таким образом, сначала определяется структура WNDCLASS w, а затем поля структуры заполняются информацией о классе окна. У этой структуры много полей, но большинство из них можно определить нулем. В программе это делается строкой memset(&w,0,sizeof(WNDCLASS)) ;

Рассмотрим следующий фрагмент программы:

w.style = CS_HREDRAW | CS_VREDRAW;

w.lpfnWndProc = WndProc;

w.hInstance = hInstance;

w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

w.lpszClassName = "My Class";

RegisterClass(&w);

В этом фрагменте определяется стиль класса (все идентификаторы стилей начинаются с префикса CS_ ). В программе значения поля стиля задаются константами. CS_HREDRAW ¬– обеспечивает перерисовку содержимого клиентской области окна при изменении размера окна по горизонтали, CS_VREDRAW – обеспечивает перерисовку содержимого клиентской области окна при изменении размера окна по вертикали.

w.lpfnWndProc = WndProc - значение указателя на функцию окна ( WndProc ), которая выполняет все задачи, связанные с окном.

w.hInstance = hInstance - определяется экземпляр приложения, регистрирующий класс окна.

w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH) - определяется кисть, используемая для закраски фона окна.

w.lpszClassName = "My Class" - указатель на строку символов, заканчивающуюся на 0, которая определяет имя класса. Класс здесь – это не класс в смысле ООП (объектно-ориентированного программирования). Термин один, но смысла два. Исторически классы окон возникли раньше, чем классы ООП.

RegisterClass(&w) - регистрация происходит при помощи вызова функции RegisterClass().

Создание окна на основе класса окна

hwnd = CreateWindow("My Class","Окно пользователя", WS_OVERLAPPEDWINDOW,500,300,500,380,NULL,NULL,hInstance,NULL);

Первый параметр функции служит для задания класса окна. Второй – это заголовок окна. Третий – определяет стиль окна (обычное перекрывающее окно с заголовком, кнопкой вызова системного меню, кнопками минимизации и максимизации и рамкой). Следующие шесть параметров определяют положение окна на экране (по оси X и по оси Y), размеры окна по оси X и по оси Y, идентификатор родительского окна и идентификатор меню окна. Следующее поле ( hInstance ) содержит идентификатор экземпляра программы, далее следует информация об отсутствии дополнительных параметров ( NULL ). Если создание окна прошло успешно, то функция CreateWindow(...) возвращает идентификатор созданного окна, в противном случае – NULL. После того как окно создано, его надо показать и обновить. Для того чтобы вывести главное окно приложения на экран, необходимо вызвать функцию Windows ShowWindow(...).

ShowWindow(hwnd,nCmdShow) выводит окно на экран. Параметр hwnd содержит идентификатор окна, созданного при вызове CreateWindow(...). Второй параметр определяет, как окно выводится в первый момент.

Последний шаг при выводе окна на экран заключается в вызове функции Windows UpdateWindow(hwnd) , которая приводит к перерисовке клиентской области окна.

Создание цикла обработки сообщений

Теперь программа готова выполнять свою главную задачу – обрабатывать сообщения. Используется стандартный цикл С/С++ цикл while:

while(GetMessage(&msg,NULL,0,0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

Использование функции GetMessage

Вызов этой функции позволяет получить для обработки следующее сообщение из очереди сообщений приложения. Данная функция копирует сообщение в структуру сообщения, на которую указывает указатель msg, и передает его в основной блок программы. Если значение следующего параметра NULL, то будут поступать сообщения, относящиеся к любому окну приложения. Значения последних параметров (0,0) указывает функции, что не надо применять никаких фильтров сообщений. Фильтры могут применяться для распределения получаемых сообщений по категориям, например, нажатия на клавишу или перемещение мыши. После входа в цикл обработки сообщений, выйти из него можно, получив только одно сообщение: WM_QUIT. Когда обрабатывается сообщение WM_QUIT, то возвращается значение "ложь" и цикл обработки сообщений завершается.

Использование функции TranslateMessage

Функция TranslateMessage(...) преобразует сообщения виртуальных клавиш в сообщения о символах.

Использование функции DispatchMessage

Функция DispatchMessage(...) используется для распределения текущего сообщения соответствующей функции окна.

Оконная функция WndProc

Вторая часть в любой программе под Windows – это оконная процедура. В рассматриваемом примере она маленькая (так как программа ничего не делает), но, именно эта часть и является самой главной и интересной в приложении.

Рассмотрим функцию WndProc:

LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)

{

switch (Message)

{

case WM_DESTROY: PostQuitMessage(0); break;

default: return DefWindowProc(hwnd, Message, wparam, lparam);

}

return 0;

}

Основное назначение оконной функции – это обработка сообщений Windows. Каждое приложение получает много сообщений. Их источник может быть разным. Например, сообщения от пользователя или от самой Windows. Обработка этих сообщений происходит именно в оконной функции. Это означает, что для каждого сообщения необходимо написать свой обработчик. Если обработчика не будет, то приложение не будет обращать внимание на сообщение. У оконной функции четыре параметра. Первый из них hwnd типа HWND задает окно, которое будет обрабатывать сообщение. Второй UINT Message – это передаваемое сообщение. Два последних WPARAM wparam, LPARAM lparam задают дополнительные параметры для передаваемого сообщения. Они для каждого сообщения свои. Оконная процедура отправляет сообщение в switch, который в примере имеет только один case:

switch (Message)

{

case WM_DESTROY:

...

То есть, пока рассматриваемая программа обращает внимание только на сообщение WM_DESTROY. Это сообщение окно получает только при своем уничтожении. После принятия этого сообщения необходимо вызвать функцию PostQuitMessage(...). В ответ на сообщение WM_DESTROY необходимо поместить в очередь сообщение WM_QUIT. Это и делает функция PostQuitMessage(...), посылая это сообщение в очередь и говоря, что процесс должен быть завершен. Если мы хотим, чтобы наша программа реагировала еще на что-нибудь, то надо написать еще case.

Рассмотрим далее ветку default. В ней идет вызов функции DefWindowProc(hwnd, Message, wparam, lparam) . Основное предназначение этой функции – обработка сообщений Windows, которые не обрабатываются в нашей программе (то есть, для которых нет своего case ). При этом ничего не делается, но очередь из сообщений идет.

Пример 1

Пример разложения в ряд функции. Графический вывод

Проиллюстируем рассмотренный в предыдущем параграфе теоретичекий материал на примере написания Windows-приложения решения задачи о разложении в ряд некоторой функции.

Задача: Разложить в ряд Тейлора в окрестности точки 0 функции sin(x), cos(x) и вывести в окне график функции .

Напишем функции вычисления синуса и косинуса – разложения в ряд Тейлора в окрестности точки 0. Разложения в ряд имеют вид:

Радиус сходимости для этих рядов – .

const double epsilon = 0.0000001;

const double pi = 3.14159265;

const double x_start = -2*pi;

const double x_end = 2*pi;

double sin_e(double arg, double eps)

{

double result = 0, rn = arg;

for(int i = 1; ;i++)

{

if(rn < eps && rn > -eps) return result;

result += rn;

rn = -rn*arg*arg/(i+1)/(i+2);

i++;

}

}

double cos_e(double arg, double eps)

{

double result = 0, rn = 1;

for(int i = 0; ;i++)

{

if(rn < eps && rn > -eps) return result;

result += rn;

rn = -rn*arg*arg/(i+1)/(i+2);

i++;

}

}

Для дальнейшего решения задачи – вывода графика функции в клиентском окне, будем обрабатывать сообщения, которые будут посылаться окну. Когда необходима перерисовка окна (изменились размеры окна, часть окна перекрылась другим окном и т.п.), система посылает окну сообщение WM_PAINT.

Добавим функции, которые будут выводить в клиентскую часть окна график и координатные оси, а также, необходимые ветви case в операторе switch.

Для построения изображения используем API функции операционной системы: MoveToEx(...), LineTo(...), GetClientRect(...) и т.д. Информацию об этих функциях них можно получить в справочной системе.

void DrawAxis(HDC hdc, RECT rectClient)

{

HPEN penGraph = CreatePen(PS_SOLID,2,RGB(0,0,255));

HGDIOBJ gdiOld = SelectObject(hdc, penGraph);

MoveToEx(hdc, 0, rectClient.bottom/2, NULL);

LineTo(hdc, rectClient.right, rectClient.bottom/2);

LineTo(hdc, rectClient.right - 5, rectClient.bottom/2 + 2);

MoveToEx(hdc, rectClient.right, rectClient.bottom/2, NULL);

LineTo(hdc, rectClient.right - 5, rectClient.bottom/2 - 2);

MoveToEx(hdc, rectClient.right/2, rectClient.bottom, NULL);

LineTo(hdc, rectClient.right/2, rectClient.top);

LineTo(hdc, rectClient.right/2 - 2, rectClient.top + 5);

MoveToEx(hdc, rectClient.right/2, rectClient.top, NULL);

LineTo(hdc, rectClient.right/2 + 2, rectClient.top + 5);

SelectObject(hdc, gdiOld);

}

void DrawGraph(HDC hdc, RECT rectClient)

{

HPEN penGraph = CreatePen(PS_SOLID,2,RGB(255,0,0));

HGDIOBJ gdiOld = SelectObject(hdc, penGraph);

double x_current = x_start;

double step = (x_end - x_start)/rectClient.right;

double y_start = cos_e(x_start, epsilon) + cos_e(x_start, epsilon);

MoveToEx(hdc, 0, int(-y_start/step) + rectClient.bottom/2, NULL);

while(x_current < x_end)

{

x_current += step;

double y_next = cos_e(x_current, epsilon) + cos_e(x_current, epsilon);

LineTo(hdc, int(x_current/step) + rectClient.right/2, int(-y_next/step) + rectClient.bottom/2);

}

SelectObject(hdc, gdiOld);

}

void OnPaint(HWND hwnd)

{

PAINTSTRUCT ps;

RECT rectClient;

HDC hdc = BeginPaint(hwnd,&ps);

GetClientRect(hwnd, &rectClient);

DrawAxis(hdc, rectClient);

DrawGraph(hdc, rectClient);

ValidateRect(hwnd,NULL);

EndPaint(hwnd,&ps);

}

LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)

{

switch (Message)

{

case WM_PAINT:

OnPaint(hwnd);

break;

case WM_MOUSEMOVE:

SetCapture(hwnd);

SetCursor(LoadCursor(NULL,IDC_ARROW));

ReleaseCapture();

break;

case WM_WINDOWPOSCHANGED:

UpdateWindow(hwnd);

break;

case WM_DESTROY: PostQuitMessage(0); break;

default: return DefWindowProc(hwnd, Message, wparam, lparam);

}

UpdateWindow(hwnd);

return 0;

}

Функция DrawGraph(...) выводит на экран график, функция DrawAxis(...) выводит координатные оси. При выводе графика функции на экран используем преобразование системы координат окна приложения в логическую систему координат и наоборот. В результате в клиентской области окна получим искомый график функции :рис. 1

Рис. 1 Построение графика функции

Пример 2

Вычисление длины окружности по введенному радиусу, производится проверка введенного значения, если введенное значение не число или меньше 0, то выводится соответствующее сообщение. В текстовую метку и в диалоговое окно выводятся греческие буквы. Результаты работы программы представлены на рисунках 2-4

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

// Unico.cpp: главный файл проекта.

#include "stdafx.h"

#include "Form1.h"

using namespace Unico;

[STAThreadAttribute]

int main(array<System::String ^> ^args)

{

// Включение визуальных эффектов Windows XP до создания каких-либо элементов управления

Application::EnableVisualStyles();

Application::SetCompatibleTextRenderingDefault(false);

// Создание главного окна и его запуск

Application::Run(gcnew Form1());

return 0;

}

#pragma once

namespace Unico {

using namespace System;

using namespace System::ComponentModel;

using namespace System::Collections;

using namespace System::Windows::Forms;

using namespace System::Data;

using namespace System::Drawing;

/// <summary>

/// Сводка для Form1

/// </summary>

public ref class Form1 : public System::Windows::Forms::Form

{

public:

Form1(void)

{

InitializeComponent();

//

//TODO: добавьте код конструктора

//

}

protected:

/// <summary>

/// Освободить все используемые ресурсы.

/// </summary>

~Form1()

{

if (components)

{

delete components;

}

}

private: System::Windows::Forms::Button^ button1;

protected:

private: System::Windows::Forms::Label^ label1;

private: System::Windows::Forms::Label^ label2;

private: System::Windows::Forms::TextBox^ textBox1;

private:

/// <summary>

/// Требуется переменная конструктора.

/// </summary>

System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code

/// <summary>

/// Обязательный метод для поддержки конструктора - не изменяйте

/// содержимое данного метода при помощи редактора кода.

/// </summary>

void InitializeComponent(void)

{

this->button1 = (gcnew System::Windows::Forms::Button());

this->label1 = (gcnew System::Windows::Forms::Label());

this->label2 = (gcnew System::Windows::Forms::Label());

this->textBox1 = (gcnew System::Windows::Forms::TextBox());

this->SuspendLayout();

//

// button1

//

this->button1->Location = System::Drawing::Point(55, 134);

this->button1->Name = L"button1";

this->button1->Size = System::Drawing::Size(184, 23);

this->button1->TabIndex = 0;

this->button1->Text = L"button1";

this->button1->UseVisualStyleBackColor = true;

this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);

//

// label1

//

this->label1->AutoSize = true;

this->label1->Location = System::Drawing::Point(8, 8);

this->label1->Name = L"label1";

this->label1->Size = System::Drawing::Size(35, 13);

this->label1->TabIndex = 1;

this->label1->Text = L"label1";

//

// label2

//

this->label2->AutoSize = true;

this->label2->Location = System::Drawing::Point(22, 79);

this->label2->Name = L"label2";

this->label2->Size = System::Drawing::Size(35, 13);

this->label2->TabIndex = 2;

this->label2->Text = L"label2";

//

// textBox1

//

this->textBox1->Location = System::Drawing::Point(153, 72);

this->textBox1->Name = L"textBox1";

this->textBox1->Size = System::Drawing::Size(100, 20);

this->textBox1->TabIndex = 3;

//

// Form1

//

this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);

this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;

this->ClientSize = System::Drawing::Size(292, 200);

this->Controls->Add(this->textBox1);

this->Controls->Add(this->label2);

this->Controls->Add(this->label1);

this->Controls->Add(this->button1);

this->Name = L"Form1";

this->Text = L"Form1";

this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);

// ...............

// Программный код, расположенный выше, создан средой Visual Studio

// автоматически, поэтому не приводится

this->ResumeLayout(false);

this->PerformLayout();

}

#pragma endregion

// Программа демонстрирует возможность вывода в текстовую метку, а также

// в диалоговое окно MessageBox греческих букв. Программа приглашает

// пользователя ввести радиус R, чтобы вычислить длину окружности

private: System::

Void Form1_Load(System::Object^ sender, System::EventArgs^ e)

{

this->Font = gcnew System::Drawing::

Font("Times New Roman", 12.0F);

this->Text = "Ввод и вывод"; button1->Text = "Вычислить";

// бета = 2 х Пи х R

label1->Text = String::Format(

"Найдем длину окружности:\n {0} = 2{1}{2}{1}R,\nгде {2} = {3}",

Convert::ToChar(0x3B2), Convert::ToChar(0x2219),

// 0=бета 1 - точка

Convert::ToChar(0x3C0), Math::PI);

// 2 - Пи 3 - число Пи

label2->Text = "Введите радиус R:";

textBox1->Clear();

}

private: System::

Void button1_Click(System::Object^ sender, System::EventArgs^ e)

{

// Проверка - число ли введено:

Single R; // - радиус

bool Число_ли = Single::TryParse(textBox1->Text,

System::Globalization::NumberStyles::Number,

System::Globalization::NumberFormatInfo::CurrentInfo, R);

if (Число_ли == false)

{

MessageBox::Show("Следует вводить числа!", "Ошибка",

MessageBoxButtons::OK, MessageBoxIcon::Error); return;

}

if (R <0)

{

MessageBox::Show("Радиус не может быть меньше 0!", "Ошибка",

MessageBoxButtons::OK, MessageBoxIcon::Error); return;

}

Single beta = 2 * (Single)Math::PI * R;

// 0x3B2 - греческая буква бета

MessageBox::Show(String::Format("Длина окружности {0} = {1:F4}",

Convert::ToChar(0x3B2), beta), "Греческая буква");

}

};

}

В результате запуска программы получим следующие результаты

Рисунок 1

Рисунок 2

Рисунок 4

Рисунок 4

Рисунок 5

Рисунок 6

Задания к выполнению практической работы №2

1.Вывести на экран график функции на заданном промежутке

2.Организовать ввод значения х и проверку на принадлежность заданному промежутку, вывести значение у.

Критерии оценивания:

на "3" студент выполняет одно из заданий на выбор согласно своему варианту

на "4" студент выполняет два задания согласно своему варианту

на "5" студент выполняет два задания согласно своему варианту, объясняет листинги своих программ

Варианты заданий соответствуют № в журнале

  1. y=cos(x), x Є [0,4].

  2. y=tg(x), x Є [0,/2).

  3. y=tg(x), x Є (-/2,0].

  4. y=ctg(x), x Є (0,).

  5. y=x2, x Є [-4,4].

  6. y=x2+2x+1, x Є [-3,3].

  7. y=x2-2x+1, x Є [-3,3].

  8. y=x2(x-2)(x+1), x Є [-2,3].

  9. y=(x-1)2(x-2)3(x+1)4, x Є [-2,3].

  10. y=x2(x+1) , x Є [-2,3].

  11. y=x3 , x Є [0,3].

  12. y= , x Є [0,2].

  13. y=x2ln(x-1), x Є (1,4].

  14. y= , x Є (1,5].

  15. y= , x Є [-5,5].

  16. y= , x Є [-5,-1).

  17. y= , x Є (-1,1).

  18. y=x+ ,x Є (0,5].

  19. y=x+ ,x Є [-5,0).

  20. y= ,x Є [0,10].

  21. y= ,x Є [-10,10].

  22. y= ,x Є [-10,10].

  23. y= ,x Є [0,10].

  24. y= ,x Є [-10,10].

  25. y=ln(x), x Є (0,10].

  26. y=arcsin(x),x Є[-1,1].

  27. y=arccos(x),x Є [-1,1].

  28. y=arctg(x),x Є [-10,10].

  29. y=arcctg(x),x Є [-10,10].

  30. y=2x2-8x+5,x Є [-1,4].

Контрольные вопросы:

1.Построение приложения Windows

2.Функция WinMain(...)

3. API функции операционной системы

4. Функция WndProc

5.Компиляция и компоновка кода

Практична робота №3 Програмування консольних прикладень

Мета: Навчитися програмувати консольні прикладення

Для начала создания консольного приложения в Visual Studio необходимо создать новый проект (последовательность действий через пункты меню и закладки должна быть следующей: File -> New -> Projects -> Win32 Console Application, в строке ввода Project Name необходимо указать имя проекта, а в строке ввода Location – путь к файлам проекта). Для упрощения создания файлов проекта можно выбрать в мастере создания проектов один из вариантов: пустой проект, простое консольное приложение (содержит главный файл приложения с кодом функции main), простое консольное приложение «Hello, World!» (приложение, содержащее код простейшей программы, выводящей на экран указанное сообщение), а также приложение с использование MFC. Главный файл проекта с исходным текстом программы будет называться также как и сам проект и иметь расширение cpp. Открыть этот файл для редактирования можно через закладку FileView ->WorkSpace -> Files -> Source Files. Выполнение компиляции производится путем нажатия комбинации клавиш Ctrl+F7, создание исполняемого файла – F7, запуск программы на выполнение – Ctrl+F5. Настройки создаваемого проекта могут быть изменены с помощью пункта меню Projects -> Settings или по нажатию комбинации клавиш Alt+F7.

Пример 1. Вывод на экран таблицы корней от 0 до 10

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

// ТаблКорней.cpp: главный файл проекта.

// Консольное приложение задает цвета и заголовок консоли, а затем выводит

// таблицу извлечения квадратного корня от нуля до десяти

#include "stdafx.h"

using namespace System;

int main(array<System::String ^> ^args)

{

Console::BackgroundColor = ConsoleColor::Cyan;

Console::ForegroundColor = ConsoleColor::Black;

Console::Title = "Таблица"; Console::Clear();

Console::WriteLine("Число Корень");

for (double i = 0; i <= 10; i++)

{

Console::WriteLine("{0,4} {1,8:F4}", i, Math::Sqrt(i));

}

Console::ReadKey();

return 0;

}

Рисунок 1-Результат работы программы

Пример 2 Работа со строками. Поменять во введенной строке 1 символ на последний, 2 на предпоследний и т.д.

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

#pragma hdrstop

#include<stdio.h>

#include<conio.h>

#include <tchar.h>

#include<string.h>

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

#pragma argsused

void invert(char str1[],int l)

{char t;

for(int i=0;i<l/2;i++)

{

t=str1[i];

str1[i]=str1[l-i-1];

str1[l-i-1]=t;

}

printf("%s",str1);

}

int _tmain(int argc, _TCHAR* argv[])

{ printf("Vvedite stroku proizvolnoy dlini\n");

const int len = 65536;

char x[len];

fgets(x, len, stdin);

int l = strlen(x);

printf("Poluchennaya stroka\n");

invert(x,l);

getch();

return 0;

}

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

Рисунок 2-Результат работы программы

Задания к выполнению практической работы №3

1.Выполнить ввод строки и вывод результата обработки на экран. Использовать функции.

2.Согласно заданию из практической работы №2 вывести значение х и у на указанном промежутке.

Критерии оценивания:

на "3" студент выполняет одно из заданий на выбор согласно своему варианту

на "4" студент выполняет два задания согласно своему варианту

на "5" студент выполняет два задания согласно своему варианту, объясняет листинги своих программ

Варианты заданий соответствуют № в журнале

  1. Пусть вводится последовательность символов длиной не более 20. Определить количество заглавных букв

  2. Пусть вводится последовательность символов длиной не более 20. Найти количество латинских символов

  3. Пусть вводится последовательность символов длиной 10. Подсчитайте, сколько среди них цифр?

  4. Пусть вводится последовательность символов длиной не более 20. Верно ли, что в последовательности содержится четное количество строчных латинских букв?

  5. Подсчитайте, сколько раз среди последовательности символов встречается символ, задаваемый вводом. Количество вводимых символов также определяется вводом.

  6. Напечатайте заданную последовательность символов, заменяя каждую точку многоточием.

  7. Пусть текст вводится с клавиатуры. Известно, что в тексте встречаются комментарии, которые расположены между знаками (*и*). Исключите все комментарии из текста.

  8. Для натурального числа k напечатайте фразу “мы нашли k грибов в лесу”, согласовав окончание слова “гриб” с числом k.

  9. Пусть вводится последовательность символов. Замените каждую из рядом стоящих групп точек одной точкой.

  10. Подсчитайте максимальное количество идущих подряд ! в строке.

  11. Пусть вводится последовательность символов. Напечатайте те строчные латинские буквы, которые не вошли во введенную последовательность.

  12. Пусть задан текст размером не более одной строки. Напечатайте, сколько раз в тексте встречается каждая буква латинского алфавита.

  13. Пусть дан текст из строчных букв. Напечатайте в алфавитном порядке все буквы, которые входят в этот текст по одному разу.

  14. . Выясните, имеются ли среди вводимых символов все буквы, входящие в слово «змея».

  15. Найти количество заданных символов в строке.

  16. Определить имеется ли баланс скобок в заданной строке.

  17. Текст вводится с клавиатуры. Вывести на экран сколько раз встречается каждая буква в тексте.

  18. Пусть вводится последовательность символов длиной 10. Подсчитайте, сколько среди них букв?

  19. Пусть вводится последовательность символов. Замените указанный символ на заданный

  20. Пусть вводится последовательность символов. Продублируйте каждый символ

  21. Пусть вводится последовательность символов. Удвойте каждую цифру

  22. Пусть вводится последовательность символов. Выведите текст в обратном порядке

  23. Пусть вводится последовательность символов. Удалите из текста все заданные символы

  24. Пусть вводится последовательность символов. Замените все строчные буквы на заглавные

  25. Пусть вводится последовательность символов. Выведите строку, состоящую из символов, которые встречаются более 2-х раз

  26. Пусть вводится последовательность символов. Исключите все цифры из текста

  27. Пусть вводится последовательность символов. Замените указанный символ на пробел

  28. Пусть вводится последовательность символов. Уберите все пробелы из строки

  29. Поменять во введенной строке четные и нечетные символы

  30. Во введенной строке вставить пропущенные пробелы после знаков препинания.