Виконання завдання А1. Порядок дій і команддо програмування завдання з однофайлової компіляції прикладної програми по обчисленню інтегралу функції F(x).
Крок 1. Активізуємо файли проекту для нової програми і зберігаємо їх на диску в задану папку:
Ø На диску D:\ створіть папку Lab2 і усередині дві папки Lab2_А1 і
Lab2_А2;
Ø Запустить у роботу С++ Buіlder і в меню Fіle виконайте команду
New, щоб відкрилось вікно New Іtems, де виберіть Consol Wіzard;
Ø Установить у вікні Consol Wizard для програми опцию С++ и сохранить через ОК. У заголовку вікна С++ Builder буде показано назву Project1, а у заголовку вікна редактора коду буде показана назва Unit1.cрр та на полі редактора коду буде вставлено для програми С++ шаблон основної функції int main():
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
return 0;
}
//---------------------------------------------------------------------------
Ø Далі у меню Fіle виберіть команду Save Project As і з появою запиту на збереження змінюємо назву файлу Unіt1 на файл U_Lab2_А1.срр, а назву проекту Project1.bpr змінюємо на назву
|
|
P_Lab2_А1.bpr.
Крок 2. Набираємо у вікні редактора коду наступний текст програми для виконання завдання А1:
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#include <vcl.h>
#include <system.hpp>
#include <process.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define F(x) (5*(x)*(x)+18*(x)-11)
float d[3];
float h;
/* Функція для введення даних*/
float * input_data(void)
{ char S_1[35],S_2[30],S_3[30],S_4[40];
CharToOem("Уведіть межі інтегрування\n", S_1);
printf(S_1);
CharToOem("Величина а =", S_2);
printf(S_2);
scanf("%f",&d[0]);
CharToOem("\n Величина b=", S_3);
printf(S_3);
scanf("%f",&d[1]);
CharToOem("\n Для ординат F(x) припустима різниця Е =",S_4);
printf(S_4);
scanf("%f",&d[2]);
}
/* Функція для пошуку оптимального кроку
зміни аргументу у F(x) */
float avt_step(float a,float b,float E)
{ float ah; float time;
h=(b-a)/2;
ah=a+h;
gotoxy(40,10);
while(fabs(F(a) - F(ah)) > E)
{ h=h/2;
gotoxy(57,10);
printf("%f",h);
time=0;
while(time < 1000) /* затримка часу для спостереження */
{ time+=0.0001; /* змін розрахункового кроку h */
}
ah = a+h;
}
char S_1[25];
CharToOem("\n Оптимальний крок h дорівнює", S_1);
printf(S_1); printf(" %f",h);
return h;
}
/* Функція підсумовування ординат F(x) */
float sum_ord(float x0,float xk,float h)
{ float x,s=0;
for(x = x0; x <= xk; x += h)
s += F(x);
return s;
}
//-------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{ char S1[30],S2[30];
float IL,IR,Itr;
clrscr();
input_data();
avt_step(d[0], d[1], d[2]);
gotoxy(33,11);
CharToOem("Обчислення інтегралів\n", S1);
printf(S1);
IL=sum_ord(d[0], /* початок інтервалу інтегрування*/
d[1]-h, /* кінець інтервалу інтегрування*/
h)*h; /* h - крок зміни аргументуF(x) */
IR=sum_ord(d[0]+h, /* початок інтервалу інтегрування*/
d[1], /* кінець інтервалу інтегрування*/
|
|
h)*h; /* h - крок зміни аргументу F(x) */
Itr=sum_ord(d[0], /* початок інтервалу інтегрування */
d[1], /* кінець інтервалу інтегрування*/
h)*h /* h - крок зміни аргументу F(x) */
-0.5*F(d[0])*h /* корекція по ординаті F(a) */
-0.5*F(d[1])*h; /* корекція по ординаті F(b)*/
CharToOem("Обчислено такі інтеграли\n", S2);
printf(S2);
printf("\n Il = %f",IL);
printf("\n IR= %f",IR);
printf("\n (IL + IR)/2 =%f",(IL+IR)/2);
printf("\n Itr=%f",Itr);
getch();
return 0;
}
//----------------------------------------------------------------------------------
Крок 3. Виконайте компіляцію набраного тексту (коду) програми С++ і перевірте правильність ії роботи у MS DOS при таких значеннях змінних:
а = 10, b = 45, E = 0.2.
Виконання завдання А2. Порядок дій і командпри виконанні завдання А2 для многофайлової компіляції окремих програмних модулів з обчислення інтегралу функції F(x).
Крок 1. Відкриваємо додаткову сторінку з закладкою у вікні редактора
коду С++ Builder:
Ø У меню Fіle виконайте команду New і виберіть Іtem і файл С++. В результаті у вікні редактора коду відкриється чиста додаткова сторінка з закладкою Fіle1.cpp;
Ø На чисту сторінку вставляйте з буфера обміну опис функцій та їх зберігайте командою Save AS у окремий файл.
Крок 2. Створюємо для функції float * іnput_data(voіd) опис її роботи і зберігаємо у файл:
Ø З файлу U_Lab2_А1.срр копіюйте в буфер обміну визначення функції float * іnput_data(voіd) та вставте з буфера обміну на сторінку Fіle1.cpp у вікні редактора коду;
Ø Збережить файл з назвою Іnput_ab.cpp в папку Lab2_А2.
//-----------------------------------------------------------------------
/* Функція для введення даних*/
float * input_data(void)
{ char S_1[35],S_2[30],S_3[30],S_4[40];
CharToOem("Уведіть межі інтегрування\n", S_1);
printf(S_1);
CharToOem("Величина а =", S_2);
printf(S_2);
scanf("%f",&d[0]);
CharToOem("\n Величина b =", S_3);
printf(S_3);
scanf("%f",&d[1]);
CharToOem("\nДля ординат F(x) припустима різниця Е =", S_4);
printf(S_4);
scanf("%f",&d[2]);
return d;
}
//--------------------------------------------------------------------
Крок 3. Виділяємо з файлу U_Lab2_А1.срр опис макросу F(x) та через буфер обміну зберігаємо у файл F_x.cрр і в папку Lab2_А2:
Ø Оголошення макросу запишіть у такому вигляді
#define F(x) (5*(x)*(x)+18*(x)-11)
Крок 4. Створюємо для функції float sum_ord(float x0,float xk,float h) опис її роботи і зберігаємо у файл:
Ø З файлу U_Lab2_А1.срр копіюйте у буфер обміну визначення функції і вставте з буфера обміну на додаткову сторінку у вікні редактора коду та збережить у файл Sum_ord.cрр і в папку Lab2_А2.
//------------------------------------------------------------------
/* Функція підсумовування ординат F(x) */
float sum_ord(float x0,float xk,float h)
{ float x,s=0;
for(x=x0; x<=xk; x+=h)
s += F(x);
return s;
}
//-------------------------------------------------------------------
Крок 5. Створюємо для функції float avt_step(float a,float b,float E) опис її роботи та зберігаємо у файл:
Ø З файлу U_Lab2_А1.срр копіюйте у буфер обміну визначення функції і вставте з буфера обміну на додаткову сторінку у вікні редактора коду та збережить у файл Avt_step.cрр і в папку Lab2_А2:
//------------------------------------------------------------------
/* Функція з пошуку оптимального кроку зміни аргументу для F(x)*/
float avt_step(float a,float b,float E)
{ float ah; float time;
h=(b-a)/2;
ah=a+h;
gotoxy(40,10);
while(fabs(F(a) - F(ah)) > E)
{ h=h/2;
gotoxy(57,10);
printf("%f",h);
time=0;
while(time < 1000) /* затримка часу для спостереження */
{ time+=0.0001; /* змін розрахункового кроку h */
}
ah=a+h;
}
char S_1[25];
CharToOem("\nОптимальний крок h дорівнює", S_1);
printf(S_1); printf(" %f",h);
return h;
}
//------------------------------------------------------------------
Крок 6. Створюємо основний програмний модуль з функцією main() для многофайлової компіляції методом указівок препроцесору і зберігаємо у окремий файл:
Ø З файлу U_Lab2_А1.срр копіюйте в буфер обміну оператори функції іnt maіn() і вставте з буфера обміну на додаткову сторінку у вікні редактора коду та збережить у файл U_Lab2_А2.cpp і в папку Lab2_А2:
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#include <vcl.h>
#include <system.hpp>
#include <stdio.h>
#include <math.h>
#include <conio.h>
|
|
#include "D:\Lab2\Lab2_А2\F_x.cpp"
float d[3];
float h;
#include "D:\Lab2\Lab2_А2\ Input_abE.cpp"
#include "D:\Lab2\Lab2_А2\ Avt_step.cpp"
#include "D:\Lab2\Lab2_А2\ Sum_ord.cpp"
//--------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
float IL,IR,Itr;
clrscr();
input_data();
avt_step(d[0], d[1], d[2]);
gotoxy(33,11);
char S1[30],S2[30];
CharToOem("Визначення інтегралів\n",S1);
printf(S1);
IL=sum_ord(d[0], /* початок інтервалу інтегрування */
d[1]-h, /* кінець інтервалу інтегрування */
h)*h; /* h - крок зміни аргументу F(x) */
IR=sum_ord(d[0]+h, /* початок інтервалу інтегрування */
d[1], /* кінець інтервалу інтегрування */
h)*h; /* h - крок зміни аргументу F(x) */
Itr=sum_ord(d[0], /* початок інтервалу інтегрування */
d[1], /* кінець інтервалу інтегрування */
h)*h /* h - крок зміни аргументу F(x) */
-0.5*F(d[0])*h /* корекція по ординаті F(a) */
-0.5*F(d[1])*h; /* корекція по ординаті F(b) */
CharToOem("Обчислено інтеграли\n",S2);
printf(S2);
printf("\n Il = %f",IL);
printf("\n IR= %f",IR);
printf("\n (IL + IR)/2 =%f",(IL+IR)/2);
printf("\n Itr=%f",Itr);
getch();
return 0;
}
//---------------------------------------------------------------------------
Крок 7. Виконуємо богатофайлову компіляцію окремих програмних модулів Іnput_ab.cpp, F_x.cpp, Avt_step.cpp, Sum_ord.cpp і U_Lab2_ A2.cpp та перевіряємо роботу програми у середовищі MS DOS:
Ø Перейдіть у вікні редактора коду на додаткову сторінку з закладкою U_Lab2_A2.cpp і зробіть у вікні щелчок правою клавішею мишки, а потім у меню команд виберіть команду Close Page, щоб
відбулось закриття додаткового вікна U_Lab2_A2.cpp.
Ø Відкрийте новий проект для богатофайлової компіляції за допомогою вказівок препроцесора. Для цього через меню Fіle/New або швидкою кнопкою New відкрийте вікно New Іtems і виберіть Console Wіzard. Задайте в полі Source Type опцію С++, щоб в результаті на екрані було наступне:
- у заголовку вікна редактора кодів установиться назва Unіt1.cpp;
- у заголовку вікна C++ Buіlder з'явиться назва проекту Project2.
Ø Завантажте з папки Lab2_A2 файл U_Lab2_A2.cpp у вікно редактора кодів, де будуть видні дві закладки: одна Unіt1.cpp, інша U_Lab2_A2.cpp.
Ø Cкопіюйте через буфер обміну текст з вікна U_Lab2_A2.cpp у вікно Unіt1.cpp, а потім через праву клавішу мишки та командою Close Page закрийте вікно U_Lab2_A2.cpp.
Ø Cохраніть новий проект командою Fіle/Save Project As… у папку Lab2_A2 та при запиті на збереження файла задайте замість Unіt1.cpp назву U_Lab2_A2.cpp, а замість Project2.bpr назвіть файл P_Lab2_A2.bpr.
|
|
Ø Виконайте команду Run для богатофайлової компіляції окремих програмних модулів і перевірки роботи програми С++ в MS DOS при таких значеннях до a, b, E:
- початкове значення інтервалу інтегрування а = 10;
- кінцеве значення інтервалу інтегрування b = 45;
- допустима різниця двох поряд розташованих ординат
функції F(x) E = 0,2.