Материал: metodichka_u_praktika

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Int NumCars; //Количество автомобілів

char Cars[15]; //Название автомобілів

Оскільки в попередній роботі ми не зберігали назви автомобілів і їх кількість, то у вихідному файлі скрізь змінну NumCars доведеться замінити на car[0].NumCars (зберігати кількість автомобілів будемо в нульовому елементі масиву). При натисненні на кнопку ДОДАТИ нам доведеться додавати в масив ще два елементи. З кількістю автомобілів проблем не було, а ось з назвою не все так просто. Робити це потрібно з використанням стандартної функції копіювання рядка:

strcpy(car[NumCars].Cars, m edAdd);

У телі функції OnInitDialog() приберемо все зайве (ініціалізацію масивів) і додамо наступний код:

car[0].NumCars = 0; //На той випадок, якщо файлів не виявиться

FILE *F; //Файловая змінна

if ((F = fopen("base.dat", "r")) == NULL) //Если файл не існує, то AfxMessageBox("Файл 'base.dat' не знайдений!”); //выдать повідомлення

else //иначе прочитати файл в масив car і вивести назви { //автомобилей в список

fread(&car, sizeof(car), 1, F); fclose(F);

for (int i = 0; i < car[0].NumCars; i++) m_lbGarage.AddString(car[i].Cars);

}

Додаємо кнопку ВІДКРИТИ і прописуємо для неї:

Void cLab 04 1Dlg::OnOpen()

{

CFileDialog fd(TRUE,NULL,"*.dat",NULL|*.*|(*.dat)|*.dat|"); int res = fd.DoModal();

if ( res = IDOK) //Если користувач вибрав ВІДКРИТИ

{

for (int i = car[0].NumCars - 1; i >= 0 ; i--)

{

m lbGarage.DeleteString(i); //Очистить списки m lbResult.DeleteString(i);

}

FILE *F;

if ((F = fopen(fd.GetPathName(), "r")) != NULL) //Прочитать файл

fread(&car, sizeof(car), 1, F); //и записати дані в масив fclose(F);

for (i = 0; i < car[0].NumCars; i++) //Вывести дані в список m lbGarage.AddString(car[i].Cars);

}

}

Кнопки ОК і Cansel ми вже видалили. Завдання з пункту 3 здійснимий в обробнику події, яка відповідає натисненню на кнопку ЗАПАМ'ЯТАТИ. Додамо туди наступний код (до що вже є):

CFileDialog fd(FALSE,NULL,"*.dat",NULL|*.*|(*.dat)|*.dat|"); int res = fd.DoModal(); if (res = IDOK)

{

FILE *F;

F = fopen(fd.GetPathName(), "w"); fwrite(&car, sizeof(car), 1, F); fclose(F);

}

При створенні об'єкту класу CFileDialog перший аргумент встановлює типа діалогу. Якщо він має значення TRUE, то відкривається вікно для відкриття файлу, інакше - для збереження.

Робота № 6

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

Мета роботи:

Вивчити порядок використання повзунка як елементу графічного інтерфейс Навчитися обробляти повідомлення, що отримуються програмою. Отримати практичні навики в написанні програм, оброблювальних повідомлення середовища Windows.

  1. Створіть застосування за допомогою MFС AppWizard (exe) з діалоговим вікном як головне. Використовувати вирішену в лабораторних роботах № 4 і № 5 завдання, додавши в неї можливість змінювати мас; вантажу, що перевозиться, за допомогою елементу графічного інтерфейсу Slider (Повзунок)

  2. Удосконалити отриману програму, додавши до методу, що переділяє положення движка обчислення оптимального варіанту використання автомобіля для перевезення вантажу заданою движком мас]

  3. Розробити тестовий приклад (тобто задати декілька варіантів марок автомобілів різної вантажопідйомності, з різною витратою бензину: і різною його вартістю). Дані тестового прикладу вводити з файл< як робилося в роботі № 5. Досліджувати за допомогою елементу графічного інтерфейсу Slider, як змінюється вибір оптимального варіанту при зміні ваги вантажу, що перевозиться

Використовуємо злегка змінені вихідні коди з попередніх робіт, тому детально зупинятися на способах получения/обработки даних не будемо. Розглянемо лише роботу з повзунком і саму програму. У нас є кнопка ВІДКРИТИ, за допомогою якої вибираємо і стандартного діалогу один з файлів, створених нами в лабораторній роботі № 5. Дані з файлу завантажуються в масив, а назви автомобілів - в список. У діалозі також є редактор m_edOptimum. При пересуванні повзунка змінюватиметься маса вантажу, що перевозиться, і обчислюватися вартість поїздки. Залежно від результатів обчислень в редакторові m_edOptimum відображуватиметься назва автомобіля, найбільш відповідного для поїздки.

Додаємо змінну для повзунка. При цьому потрібно на вкладці Member Variables клацнути кнопку Add Variable., задати ім'я змінної (m_slider) і вибрати категорію Control. Потім додамо подію NM_CUSTOMDROW і назвемо обробник ім'ям OnReplace. Код буде таким:

Void cLab_06Dlg::OnReplace(nmhdr* pNmhdr, lresult* pResult)

{

m_edWeight = m slider.GetPos() * 50; //Получить масу вантажу

int Num, j = 0;

float n, z;

float m[10];

//---Обчислити к-ть поїздок і їх вартість

for (int i = 0; i < car[0].NumCars; i++)

{

Num = 1;

if (car[i].Tonnage > 0) //Если вантажопідйомність більше нуля {

Num = int(m edWeight / car[i].Tonnage); z = float(m edWeight)/ float(car[i].Tonnage); if (Num < z) Num = Num++;

}

m[i]= (car[i].Way/100)*car[i].Litres*car[i].Price*Num;

}

n = m[0];

for (i = 0; i < car[0].NumCars; i++) //Найти найменшу вартість {

m_edResult = m[i]; if ( m edResult < n)

{

j = i;

n = m edResult;

}

}

m_edResult = m[j];

m_edOptimum = car[j].Cars; //Получить авт-ль, соотв. наим. стоїмо. UpdateData(0);

*pResult = 0;

}

Результат роботи програми:

Робота № 7

Створення меню в Windows Application (на базі одиндокументного застосування). Підключення команд меню до коду програми.

Мета роботи:

Вивчити порядок створення застосування типа Single Document. Навчитися створювати свої пункти меню, підключати до них програмний код. Отримати практичні навики в написанні програм з розвиненим меню.

  1. Створіть застосування за допомогою MFС AppWizard (exe), вибрати типа пропозиції Single document

  2. Перейти на вкладку Res.., знайти ресурс IDR MAINFRAME -меню і перейти в редактор меню. За допомогою засобів візуального редактора меню створити новий пункт меню і до нього декілька підпунктів

  3. Додати до кожного пункту створеного Вами меню програмний код який дозволяє виводити у вікні документа напису відповідне вибраному пункту меню (наприклад: ВИБРАНО 1 пункт меню або ВИБРАНИЙ 2 пункт меню і так далі)

  4. Додати можливість програмного блокування і розблокування окремих пунктів меню, а також можливості зміни написів в пункті меню, установки галочок і крапок напроти написів (використовувати отриману на лекції інформацію)

  5. Додати кнопки на панель інструментів і прив'язати до них команди меню, використовувати ресурс Toolbar. Зробити клавіші акселератори, використовуючи ресурс Accelerator

  6. Додаємо пункт в меню який дозволяє нам ввести дані про автомобілі з файлу створеного в лабораторній роботі № 5. Виводимо отримані дані у вікно програми (використовувати матеріал лекції і попередніх лабораторних робіт)

Пункти і підпункти меню додаються елементарно, тому зупинятися на цьому не будемо. Спершу ініціалізували змінні int в і char punkts[50][16]. Масив punkts зберігатиме вибрані назви пунктів. Для цього клацаємо правою кнопкою миші на класі CLab_07Doc на вкладці CLassView і вибираємо пункт Add Member Variable, де вказуємо типа і ім'я змінної. Потім в класі CLab_07Doc двічі клацаємо по функції OnNewDocument(), де пишемо

в = 0;

strcpy(punkts[y], "Робота з меню");

Потім вибираємо клас CLab_07View і двічі клацаємо по функції OnDrow(). У телі функції пишемо:

void CLab 07View::OnDraw(CDC* pDC){

CLab 07Doc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

for (int i = 0; i <= pDoc->y; i++)

pDC->TextOut(0, i*20, pDoc->punkts[i]);

}

Як додати код до пункту? Вибираємо View -> ClassWizard -> Message Maps. У списку Object IDs вибираємо ідентифікатор потрібного пункту (для першого пункту в нашому випадку це ID_MENUITEM32771). У полі Class name має бути вибраний клас CLab_07View. У списку Messages вибираємо COMMAND і клацаємо кнопку Add Functions. Потім пишемо ім'я функції (для першого пункту хай буде OnFirstPunkt), клацаємо ОК і Edit Code. Пишемо такий код:

CLab 07Doc* pDoc = GetDocument();

strcpy(pDoc->punkts[++pDoc->y], "Перший пункт");

Invalidate(); //Перерисовать вікно

Те ж саме проробляємо з останніми пунктами.

Потім додаємо змінні в клас CLab_07View. Методика описана вищим. А змінні будуть такі:

bool block;

bool ch;

Cstring str;

Потім двічі клацаємо по функції CLab_07View() і ініціалізували змінні:

block = 1;

str = "Нова назва";

Потім для пункту ЗАБЛОКУВАТИ додаємо функцію UPDATE_COMMAND_UI і в її телі пишемо

pCmdUI->Enable(block);

Для пункту ЗАБЛОКУВАТИ додаємо функцію COMMAND і в її телі пишемо block = 0;

Що ж відбуватиметься? По клацанню на пункті ЗАБЛОКУВАТИ змінній block буде привласнено значення 0, функція UPDATE_COMMAND_UI набуде цього значення і виконає код

pCmdUI->Enable(block);

який і заблокує відповідний пункт меню (ЗАБЛОКУВАТИ).

Аналогічно поступаємо з іншими підпунктами. При цьому у функціях UPDATE_COMMAND_UI використовуваний наступні коди:

pCmdUI->SetText(str); //Установить текст напису pCmdUI->SetCheck(ch); //Установить\удалить галочку pCmdUI->SetRadio(ch); //Установить\удалить крапку

У обробниках відповідних подій можна написати:

ch = !ch;

Тоді по кожному клацанню змінною ch привласнюватиметься протилежне значення.

Далі до пунктів меню робимо кнопки на панелі. Знаходимо в ресурсах TolBar. У нім малюємо кнопки і розмішаємо їх на панелі. Клацаємо по потрібній кнопці, у властивостях кнопки вибираємо ID ідентифікатор пункту меню, до якого хочемо приробити кнопку. Для додавання акселераторів треба в ресурсах в теці Accelerator двічі клацаємо по IDR_MAINFRAME. На списку, що відкрився, клацаємо правою кнопкою і вибираємо New Accelerator. Вибираємо ID і поєднання клавіш. Ось що вийшло:

Частина III

Робота №1 Програмування лінійних алгоритмів

1.1. Консольний режим роботи середовища Visual С++ 6.0

Програма, що створюється в середовищі Visual C++, завжди оформляється у вигляді окремого проекту. Проект (project) – це набір взаємозв'язаних вихідних файлів, призначених для вирішення певного завдання, компіляція і компоновка яких дозволяє отримати виконувану програму. У проект входять як файли, що безпосередньо створюються програмістом, так і файли, які автоматично створює і редагує середовище програмування.

Для створення нового проекту необхідно:

• вибрати File – New;

• у вікні, що відкрилося, на закладці Projects вибрати типа проекту Win32 Сonsole Application;

• у полі Project Name ввести ім'я проекту, наприклад maylab1;

• у полі Location ввести ім'я каталога, в якому буде розміщений проект і повна дорога до нього, наприклад D:\WORK\mylab1. Каталог також можна вибрати, використовуючи діалогове вікно Choose Directory, для чого треба клацнути мишею по кнопці . ;

• вказати типа створюваного проекту – Win32 Console Application;

• клацнути мишею по кнопці ОК;

• у вікні майстра застосувань Win32 Console Application, що відкрилося, – Step 1 of 1 вибрати An empty project (порожній проект) і клацнути по кнопці Finish;

• у вікні New Project Information (інформація про новий проект), що відкрилося, клацнути мишею по кнопці ОК.

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

Для створення нового файлу необхідно:

• вибрати File – New;

• у що відкрився вікні на закладці Files вибрати типа файлу C++ Source File;

• у полі File name: ввести ім'я файлу. Для зручності бажано ввести ім'я, співпадаюче з ім'ям проекту, наприклад maylab1;

• клацнути мишею по кнопці ОК.

Для додавання в проект вже існуючого файлу з текстом програми необхідно:

• скопіювати наявний файл (розширення cpp) в робочу теку проекту;

• у вікні Workspace, закладка FileView, клацнути правою кнопкою миші по теці Source Files;

• у діалоговому вікні Insert Files, що відкрилося... вибрати файл, що додається, і клацнути мишею по кнопці ОК.

У теці проекту, як правило, розміщено п'ять файлів і одну вкладену теку. Файли мають наступне призначення.

Файл з розширенням dsw (наприклад mylab1.dsw) – файл проекту, який об'єднує всі вхідні в проект файли.

Файл з розширенням dsp (наприклад mylab1.dsp) призначений для побудови окремого проекту або підпроекту.

Файл з розширенням opt (наприклад mylab1.opt) містить всі налаштування даного проекту.

Файл з розширенням ncb (наприклад mylab1.ncb) – службовий файл.

Файл з розширенням cpp (наприклад mylab1.cpp) – файл тексту програми.

1.2. Функції бібліотеки math.Lib

Функції для розрахунку математичних виразів знаходяться в бібліотеці math.lib (підключення бібліотеки: #include math.h). Всі аргументи в тригонометричних функціях задаються в радіанах. Параметри і аргументи всіх останніх функцій мають типа double (окрім abs(x)).

Математична функція

Функція бібліотеки math.lib

Опис

|x|

аbs(x)

Обчислення абсолютного значення (лише для цілих чисел!)

arccos(x)

acos(x)

Обчислення значення арккосинуса x

arctg(x)

atan(x)

Обчислення значення арктангенса x

arctg(x/y)

atan2(x,y)

Обчислення значення арктангенса двох аргументів x і y

Округлення до більшого

ceil(x)

Функція повертає дійсне значення, відповідне найменшому цілому числу, яке більше або рівне x

cos(x)

cos(x)

Обчислення косинуса x

ch(x)= (ex+e(x) /2

cosh(x)

Обчислення косинуса гіперболічного x

ex

exp(x)

Обчислення експоненти числа x

|x|

fаbs(x)

Обчислення абсолютного значення x

Округлення до меншого

floor(x)

Функція повертає дійсне значення, відповідне найбільшому цілому числу, яке менше або рівне x

Залишок від ділення x на y

fmod(x,y)

Функція повертає дійсне значення, відповідне залишку від цілочисельного ділення x на y

ln(x)

log(x)

Обчислення натурального логарифма x

lg10(x)

log10(x)

Обчислення десяткового логарифма x

xy

pow(x, в)

Піднесення x до ступеня y

sin(x)

sin(x)

Обчислення синуса x

sh(x)= (ex(e(x) /2

sinh(x)

Обчислення синуса гіперболічного x

sqrt(x)

Обчислення квадратного кореня x

tg(x)

tan(x)

Обчислення тангенса x

tgh(x)

tanh(x)

Обчислення тангенса гіперболічного x

Источник: https://studfile.net/preview/14533173/