Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Methods_AP_LABS_I

.pdf
Скачиваний:
25
Добавлен:
17.03.2016
Размер:
1.53 Mб
Скачать

Розглянемо деяке ціле число, записуване в десятковій системі числення у вигляді AN…A2A1A0, де Ai - деяка цифра від 0 до 9. Необхідно знайти значення всіх Ai, знаючи значення числа.

Через те, що десяткова система є позиційною системою числення9, то будь-яке число в ній може бути презентовано у вигляді кінцевої лінійної комбінації ступенів числа 10:

Наприклад, число 563 може бути презентовано у вигляді: 563=5·102+6·101+3·100

Необхідно знайти такі коефіцієнти ak, що є розв’язанням зазначеної лінійної комбінації.

Функція, що обчислює суму цифр числа, представлена нижче (рисунок

1.18):

Рисунок 1.18 – Лістинг фрагменту програми Оператор % обчислює залишок від ділення лівого операнда на правий

операнд.

Виконайте покрокове трасування даної функції, щоб зрозуміти принцип її роботи.

Напишемо невелику програму для перевірки правильності роботи функції (рисунок 1.19).

9 Позиційна система числення – система числення, у якій значення кожного числового знака (цифри) залежить від його позиції (розряду).

Рисунок 1.19 – Лістинг програми

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

(stderr) наступну діагностичну інформацію:

текст виразу, значення якого дорівнює 0;

ім'я файлу з вихідним кодом (визначений макрос FILE__);

рядок файлу з вихідним кодом (визначений макрос LINE__).

У фінальній конфігурації даний макрос ніяк не впливає на роботу програми.

Увага, макрос assert слід використовувати тільки в тих випадках, коли ви на 100% впевнені у тому, що значення деякого виразу істинно, і що єдина причина, по якій воно може бути неправильним – наприклад, через логічну помилку у Вашій програмі. Зокрема, не слід використовувати макрос assert

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

Завдання (10 балів). Отже, використовуючи функцію SumDigits,

розробіть програму, що виводить у порядку зростання цілі числа діапазону від 1 до 1000, що діляться без залишку на суму своїх цифр.

Додаткові бали (+ 5 балів) можна одержати за реалізацію наступного додаткового функціонала:

• можливість вказівки верхньої границі виведеного діапазону за допомогою аргументу командного рядка. Використовуйте розглянуту нами функцію StringToint для переведення аргументу з рядка в число. Увага,

програма повинна здійснювати перевірку того, що значення верхньої границі діапазону більше або дорівнює 1.

1.3.4 Завдання 4

Завдання (30 балів). Розробіть програму, що виводить числа Фібоначчі10 діапазону від 0 до N. Цілочислений параметр N повинен бути зазначений користувачем у вигляді аргументу командного рядка. Числа

послідовності повинні виводитися через кому по 5 чисел у кожному

рядку.

Увага, програма повинна перевіряти значення вхідних параметрів.

Зокрема, параметр N, повинен бути цілим числом більшим 0. У виді особливостей цілочисленої арифметики мов Сі й Сі++, повинна коректно оброблятися ситуація з переповненням результатів цілочислених виразів. Ви можете зіштовхнутися з даним ефектом, наприклад, при N=2 мільярдам.

1.3.5 Завдання 5

Завдання (60 балів). Розробіть програму, що обчислює відстань, яку пролетить тіло уздовж горизонтальної осі, кинуте у вакуумі під кутом α до обрію з якоюсь початковою швидкістю. Обчислену відстань програма повинна вивести в стандартний потік виведення.

10 Числа Фібоначчі - елементи числової послідовності 1, 1, 2, 3, 5, 8, …, у якій кожне наступне число дорівнює сумі двох попередніх чисел.

Кут і початкова швидкість вводяться користувачем зі стандартного потоку введення. Кут задається в градусах, початкова швидкість у метрах у секунду. Прискорення вільного падіння рівно 9,8 м/с.

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

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

не менш 8 знаків після коми.

Програма повинна обчислювати відстань, безупинно запитуючи величину кута й початкову швидкість доти, поки користувач не введе слово exit (рисунок 1.20):

Рисунок 1.20 – Виведення програми Виділити код обчислення відстані польоту тіла в окрему функцію.

1.4Контрольні запитання і завдання

1.Які засоби для налаштування програми надає середовище візуального проектування програмного забезпечення?

2.Яке призначення прекомпільованих заголовків?

3.Назвіть основні переваги використання IDE при розробці ПЗ.

11 Радіан - основна одиниця вимірювання плоских кутів у сучасній математиці. Радіан визначається як кутова величина дуги одиничної довжини на окружності одиничного радіуса. Таким чином, величина повного кута рівна 2 радіан.

1.5 Порядок виконання лабораторної роботи

1. Виконати практичні завдання розділу 1.3.

На оцінку «відмінно» необхідно набрати не менше 130 балів.

На оцінку «добре» необхідно набрати не менше 90 балів.

На оцінку «задовільно» необхідно набрати не менше 40 балів. 2. Відповісти на контрольні запитання.

Лабораторна робота №2. Лінійний обчислювальний процес. Управляючі конструкції мови С++

Мета роботи: ознайомитися з основними операторами і управляючими конструкціями мови С++ та навчитися використовувати їх для написання програм мовою C++.

2.1 Лінійний обчислювальний процес. Короткі теоретичні відомості Приклад програми (лістинг 2.1), написаної на C++, виконує підрахунок

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

Лістинг 2.1

// Підраховує пробіли в рядку

#include

<stdio.h>// Задані заголовочні файли є в

#include

<string.h>

// пакеті VC++

//і містять необхідні для

//компіляції програми

оголошення

const int TAB_SIZE=8; int main ()

{

char words [80];

// одержання рядка від користувача gets(words) ;

int spaces = 0; // спочатку кількість пробілів = 0 // підрахунок пробілів

for (int i = 0; i < strlen(words); i++)

{

switch (words [i])

{

case ' ': spaces++; break; case '\t':

spaces += TAB_SIZE; break;

default:

break;

}

}

// виведення результату

printf("\n Число пробілів рівно %d\n", spaces);

// функція main повертає значення 0 return 0;

}

Дана програма містить наступні конструкції мови C++:

коментарі;

включення файлів;

функцію main();

змінні;

оператори;

виклик функцій.

2.1.1 Оператори Для обчислення значень виразів використовуються оператори,

операнди та виклики функцій:

Арифметичні оператори: *, /, +, -, % (ділення по модулю);

Оператори відношень: <, >, <=, >=, == (рівно), != (не рівно);

Логічні оператори: && (І), || (АБО), ! (НЕ);

Оператори інкремента/декремента: ++i / i++; —-i / i-—;

Порозрядні оператори: & (І), | (АБО), (виключне АБО), << (зсув вліво), >> (зсув вправо), ~ (доповнення до 1).

2.1.2 Функції, що використовуються при обчисленні

Функції наведено в таблиці 2.1.

 

 

 

 

 

Таблиця 2.1

Функції обчислення виразів

 

 

 

 

 

 

 

Функція в C++

Математичний еквівалент

 

 

 

 

 

 

 

 

int abs(int x)

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

double fabs(double x)

 

x

 

 

 

 

 

 

 

 

 

 

 

 

double acos(double x)

arccos(x)

 

 

 

 

 

 

double asin(double x)

arcsin(x)

 

 

 

 

 

 

double atan(double x)

arctg(x)

 

 

 

 

 

 

double atan2(double y,double x)

arctg(y/x)

 

 

 

 

 

 

double sin(double x)

sin(x)

 

 

 

 

 

 

double cos(double x)

cos(x)

 

 

 

 

 

 

double tan(double x)

tg(x)

 

 

 

 

 

 

double cosh(double x)

ch(x)

 

 

 

 

 

 

double sinh(double x)

sh(x)

 

 

 

 

 

 

double tanh(double x)

th(x)

 

 

 

 

 

 

double exp(double x)

e X

 

 

 

 

 

 

double pow(double x, double y)

xY

 

 

 

 

 

 

double log(double x)

ln(x)

 

 

 

 

 

 

double loglo(double x)

lg(x)

 

 

 

 

 

 

double sqrt(double x)

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

Для використання математичних функцій необхідно включати файл math.h.

2.1.3. Типи даних

Типи даних, що використовуються в C++, діапазони їх значень і

оператори виведення наведені в наступному прикладі (лістинг 2.2).

Лістинг 2.2

#include <stdio.h>

int main ()

{

//Типи даних

//Signed char (1 byte, 8 bit, -128 ... +127) signed char a=-34;

char c=28, cl='M';

printf ("Signed char a= %d c= %d \n", a, c);

printf ("Signed char (char) cl=%c \n", cl);

//Unsigned char (1 byte, 8 bit, 0 ... 255) unsigned char b=232;

printf ("Unsigned char (value) b= %d \n", b); printf ("Unsigned char (oktal) b= %o \n", b); printf ("Unsigned char (hexadecimal) b= %X \n", b);

//Signed short (2 byte, 16 bit, -32768 ... 32767) short d=-1234;

printf ("Signed short d= %hd \n", d);

//Unsigned short (2 byte, 16 bit, 0 ... 65535) unsigned short e=42123;

printf ("Unsigned short e= %u \n", e);

//Signed int (2 byte, 16 bit, -32768 ... 32767) int f=-4321;

printf ("Signed int f= %d \n", f);

//Unsigned int (2 byte, 16 bit, 0 ... 65535) unsigned int g=34343;

printf ("Unsigned int g= %u \n", g);

//Signed long (4 byte, 32 bit, -2147483648 ...

2147483647)

long h=-67464432;

printf ("Signed long h= %ld \n", h);

//Unsigned long (4 byte, 32 bit, 0 ... 4294967295) Unsigned long i=410000000;

printf ("Unsigned long i= %ld \n",I);

//Float (4 byte, 32 bit, 3.4E-38 ... 3.4E+38)

float j=l.12345678;

printf ("Float j = %f \n",j);

// Double (8 byte, 64 bit, 1.7E-308 double ...

1.7Е+308)

double k=l.12345678901234567;

printf ("Double k= %f \n",

k);

printf ("Double k= %20.16f

\n",k);

printf ("Double k= %e \n",

k)

printf ("Double k= %20.16e

\n",k);

printf ("Double k= %E \n",

k);

printf ("Double k= %g \n",

k);

printf ("Double k= %G \n",

k);

// Long double(10 byte, 80 bit, 3.4E-4932 ...

1.1E+4932)

long double l=1.123456789012345678; printf ("Long double 1= %21.18Lf \n",l);

return 0;

}

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

Signed char a= -34 з= 28

Signed char (char) c1=M

Unsigned char (value) b= 232

Unsigned char (oktal) b= 350

Unsigned char (hexadecimal) b= E8

Signed short d= -1234

Unsigned short e= 42123

Signed int f= -4321

Unsigned int g= 34343

Signed long h= -67464432

Unsigned long i= 410000000

Float j= 1.123457

Double k= 1.123457

Double k= 1.123456789B123457

Double k= 1.123457e+00

Double k= 1.1234567890123457e+00

Double k= 1.123457E+00

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]