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

Пособие

.pdf
Скачиваний:
66
Добавлен:
22.03.2015
Размер:
1.35 Mб
Скачать

{

int i;

printf("Значення argc = %d \n\n",argc); printf("В командному рядку міститься

%d параметрів \n",argc); for (i=0; i<argc; i++)

printf(" argv[%d]: %s\n", i, argv[i]); printf("Середовище містить

наступні рядки:\n");

for (i=0; env[i] != NULL; i++)

printf(" env[%d]: %s\n", i, env[i]); _getch();

return 0;

}

Організуємо виконання програми з командним рядком таким чином:

C:> c:\tc\testargs.exe 1_st_arg "2_arg " 3 4 "dummy" stop!

Урезультаті роботи програми ви отримаєте приблизно наступне: Значення argc = 7

Укомандному рядку міститься 7 параметрів

argv[0]: c:\tc\testargs.exe argv[1]: 1_st_arg

argv[2]: 2_arg argv[3]: 3 argv[4]: 4 argv[5]: dummy argv[6]: stop!

Середовище містить наступні рядки:

env[0]: COMSPEC=C:\COMMAND.COM env[1]: PROMPT=$p $g

env[2]: PATH=C:\SPRINT;C:\DOS;C:\TC

Максимальна загальна довжина командного рядка, включаючи пробіли та ім’я самої програми, не може перевищувати 128 символів.

101

 

13 ІНДИВІДУАЛЬНІ ЗАВДАННЯ ДО П. 12

Завдання

1.1. Описати функцію Min2(A, B) дійсного типу, що знаходить мінімальне з двох дійсних чисел A і B. За допомогою цієї функції знайти мінімальне з пар чисел A і B, A і C, A і D, якщо дано чис-

ла A, B, C, D.

2.Описати програму, що виводить на екран квадрати чисел від А до В. (А та В отримати за допомогою командного рядка).

3.У банк на трьохвідсотковий вклад поклали S гривень. Описати рекурсивну функцію, що розраховує суму вкладу через N років?

2.1. Описати функцію Max2 (A, B) дійсного типу, що знаходить максимальне з двох дійсних чисел A і B. За допомогою цієї функції знайти максимальне з пар чисел A і B, A і C, A і D, якщо дано числа A, B, C, D.

2.З клавіатури вводяться N чисел. Скласти програму, що визначає кількість від’ємних, кількість додатних та кількість нулів серед введених значень. Число N отримати з командного рядка.

3.У бригаді, що працює на збірці сіна, працює N сінокосарок. Перша сінокосарка працювала m годин, а кожна наступна на 10 хвилин більше, ніж попередня. За допомогою рекурсивної функції розрахувати кількість годин, що відпрацювала вся бригада.

3.1. Описати процедуру Minmax (A, B), що записує в змінну A мінімальне з значень A і B, а в змінну B - максимальна з цих значень (A і B - дійсні параметри, що є одночасно вхідними і вихідними). Використовуючи чотири виклику цієї функції, знайти мінімальне та максимальне з чисел A, B, C, D.

2.Скласти програму, що друкує таблицю переводу відстаней із дюймів в сантиметри (1 дюйм = 2,5 см), для значень довжин від

А до В дюймів. (А та В отримати за допомогою командного рядка).

3.За допомогою рекурсивної функції обчислити суму всіх двозначних чисел.

4.1. Описати функцію Min3 (A, B, C) дійсного типу, що знаходить мінімальне з трьох дійсних чисел A, B і C. За допомогою цієї функції знайти мінімальне з наборів (A, B, C), (A, B, D), (A, C, D), якщо дано числа A, B, C, D.

2.Скласти програму, що отримує із командного рядка N пар чи-

102

сел (першим повинна йти кількість таких пар, а потім самі пари чисел). Порівняти числа в кожній парі та надрукувати більше з них.

3.Дано натуральне n, дійсні a1, a2 ,..., an . За допомогою рекурсивної функції обчислити суму a1a2 + a2 a3 +... + an1an .

5.1. Описати функцію Max3 (A, B, C) дійсного типу, що знаходить максимальне з трьох дійсних чисел A, B і C. За допомогою цієї функції знайти максимальне з наборів (A, B, C), (A, B, D), (A, C, D), якщо дано числа A, B, C, D.

2.Скласти програму, що з командного рядка отримує два натуральні числа від А до В. Надрукувати лише ті з них, що діляться на 3, але не діляться на 5.

3.Бізнесмен взяв кредит m тисяч гривень в банку під 20% річних. За допомогою рекурсивної функції обчислити через скільки років його борг перебільшить s тисяч гривень, якщо він не буде віддавати борг.

6.1. Описати функцію Min4 (A, B, C, D) дійсного типу, що знаходить мінімальне з чотирьох дійсних чисел A, B, C і D. За допомогою цієї функції знайти мінімальне з наборів (A, B, C, D), (A, B, C, E), (A, C, D, E), якщо дано числа A, B, C, D, E.

2.Скласти програму, що друкує ті із двозначних чисел, що діляться на А, але не діляться на В. (А та В отримати з командного рядка)

3.За допомогою рекурсивної функції скласти програму знаходження добутку всіх парних чисел в діапазоні від 2 до 100 включно.

7.1. Описати функцію Max4 (A, B, C, D) дійсного типу, що знаходить максимальне з чотирьох дійсних чисел A, B, C і D. За допомогою цієї функції знайти максимальне з наборів (A, B, C,

D), (A, B, C, E), (A, C, D, E), якщо дано числа A, B, C, D, E.

2.Скласти програм, що генерує N чисел. Якщо квадрат числа менше 100, то надрукувати число та його квадрат. N та діапазон для генерації випадкових чисел отримати із командного рядка.

3.За допомогою рекурсивної функції скласти програму знаходження суми всіх непарних чисел в діапазоні від 1 до 99 включно.

8.1. Описати функцію Fact (N) цілого типу, що обчислює зна-

103

 

чення факторіала N!=1 2 3 ... N (N> 0 – параметр цілого ти-

 

пу). За допомогою цієї функції обчислити факторіали 10 чисел.

 

2. Вводяться координати N точок. Скласти програму, що визна-

 

чає скільки з них попаде в круг з радіусом R, з центром в точці

 

(a, b). Значення N, R, a, b отримати із командного рядка.

 

3. За допомогою рекурсивної функції скласти програму обчис-

 

лення середнього геометричного модулів двох введених цілих

 

числа. Умова виходу з рекурсії – значення числа, рівне 999.

9.

1. Описати функцію Fact2(N) цілого типу, що обчислює зна-

 

чення «подвійного факторіала»: N!=1 3 5 ... N , якщо N – не-

 

парне,

N!= 2 4 6 ... N , якщо N – парне (N> 0 – параметр цілого

 

типу). За допомогою цієї функції обчислити подвійні факторіали

 

десяти даних чисел.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Вводяться дані про зріст N учнів класу. Скласти програму, що

 

визначає середній зріст учнів класу. Кількість учнів отримати з

 

командного рядка.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. Скласти програму для обчислення числа е з точністю до

 

0.000001 за формулою

1 +

1

+

1

+... . Обчислення виконувати за

 

 

 

 

 

 

1! 2! 3!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

допомогою рекурсивної функції.

 

 

 

 

 

 

 

 

 

 

10.

1. Описати нерекурсивну функцію Fib(N) цілого типу, що об-

 

числює

N-е число

Фібоначчі

F(N)

за

формулою:

 

F(1) = F(2) =1, F(k) = F(k 2) + F(k 1), k = 3, 4,K. За допомо-

 

гою цієї функції обчислити 10 чисел Фібоначчі.

 

 

 

 

 

 

 

 

1

1

 

 

 

 

1

. N отри-

 

2. Скласти програму, що обчислює

 

 

+

 

 

+...

+

 

 

22

42

(2n)n

 

мати із командного рядка.

 

 

 

 

 

 

 

 

 

 

 

3. Генеруються цілі числа та послідовно додаються. Знайти кіль-

 

кість згенерованих чисел, коли їх сума перевищила 100. Обчис-

 

лення виконати за допомогою рекурсивної функції.

 

 

11.

1. Описати функцію SumDigit(N,

S), що знаходить суму

 

цифр S цілого числа N (N – вхідний, S – вихідний параметр).

 

Використовуючи функцію, знайти суми цифр п’яти даних чисел.

 

2. Скласти програму, що обчислює

1

+

1

+... +

1

. N отримати

 

1

2

n

 

із командного рядка.

1

 

2

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. Почавши тренування, спортсмен у перший день пробіг 10 км.

 

104

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Кожний день він збільшував денну норму на 10% від норми попереднього дня. За допомогою рекурсивної функції знайти день, коли сумарний пробіг уперше буде більше 60 км.

12.1. Описати нерекурсивну функцію NOD2(A, B) цілого типу, що знаходить найбільший спільний дільник (НСД) двох натуральних чисел A і B, використовуючи алгоритм Евкліда: НОД (A, B)=НСД(B mod A, A), якщо A<>0; НОД(0,B)=B. За допомо-

гою цієї функції знайти найбільші загальні дільники пар A і B, A і C, A і D, якщо дано числа A, B, C, D.

2. Від куска тканини М метрів відрізаються шматки різної дов-

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

3.Знайти добуток двозначних чисел, у яких сума квадратів цифр ділиться на 13. Обчислення роботи за допомогою рекурсивної функції.

13.1. Описати функцію Frac(a, b, p, q), що перетворює дріб a/b до нескороченого p/q (усі параметри функції – цілого типу). Знак результуючого дробу p/q приписується чисельнику (тобто q> 0). За допомогою цієї процедури знайти дроби, що не скорочуються, рівні ba + dc , ba + ef , ba + gh (числа a, b, c, d, e, f, g, h дані ).

2.З командного рядка отримати число А. Знайти серед чисел

1, 1+ 12 , 1+ 12 + 13 ...перше більше А та його номер.

3. Описати рекурсивну функцію C(m,n) цілого типу, що знаходить число поєднань із n елементів по m, використовуючи фор-

мулу C(0,n) =C(n,n) =1, C(m,n) =C(m,n 1) + C(m 1.n 1) при

0 < m < n , де m та n – цілі параметри; n > 0, 0 <= m <= n . Дано

число N та п’ять різних значень M. Вивести числа C(M,N) разом з кількістю рекурсивних викликів функції С, що потрібні для їх знаходження.

14.1. Описати функцію Exp1(x, eps) дійсного типу (параметри x, eps – дійсні, eps> 0), що знаходить наближене значення

105

 

функції exp (x): exp(x) =1+ x +

 

x2

+

x3

+... +

xn

. У сумі врахо-

 

2!

3!

n!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вувати всі складові, більших eps. За допомогою Exp1 знайти

 

наближене значення експоненти для даного x при шести даних

 

eps.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Кожна бактерія ділиться на дві протягом однієї хвилини. В

 

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

 

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

 

моменту часу. Значення часу отримати з командного рядку, а

 

розрахунки провести використовуючи рекурсивну функцію.

15.

1. Описати функцію Sin1(x,

eps) дійсного типу (параметри

 

x, eps – дійсні, eps>0), що знаходить наближене значення фу-

 

нкції sin(x):

[sin(x) = x

 

x3

 

 

x5

 

 

 

 

(1)n x2n+1

 

 

 

+

 

 

 

 

... +

 

 

 

] . У сумі вра-

 

3!

5!

 

(2n +1)!

 

ховувати всі складові, більші за модуль eps. За допомогою

 

Sin1 знайти наближене значення синуса для даного x при шес-

 

ти даних значеннях eps.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Скласти програму отримання в порядку спадання всіх дільни-

 

ків числа. Число отримати з командного рядка, а розрахунки

 

провести за допомогою рекурсивної функції.

 

 

 

 

16.

1. Описати функцію Cos1(x,

eps) дійсного типу (параметри

 

x, eps – дійсні, eps>0), що знаходить наближене значення фу-

 

нкції cos(x):

[cos(x) =1

x2

 

 

x4

 

 

 

 

 

(1)N x2n

 

 

+

 

 

 

... +

 

 

 

] . У сумі вра-

 

2!

 

4!

 

(2n)!

 

 

ховувати всі складові, більші за модуль eps. За допомогою

 

Cos1 знайти наближене значення косинуса для даного x при

 

шести даних значеннях eps.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Розкласти число на прості множники. Число отримати з ко-

 

мандного рядка.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. Знайти суму ряду з точністю ε. Задана точність досягається,

 

коли поточний член ряду відрізняється від попереднього менше

 

ніж на ε. an =

(1)n1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

, ε=0.001.

 

 

Обчислення виконати за допо-

 

 

nn

 

 

 

могою рекурсивної функції.

 

 

 

 

 

 

 

 

 

 

 

 

 

17.

1. Описати функцію Ln1(x, n) дійсного типу (параметри x,

 

eps –дійсні, |x|<1, eps>0), що знаходить наближене зна-

 

106

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

чення функції ln(1+x): ln(1 + x) = x

x2

x3

 

(1)n xn+1

 

 

 

 

+

 

 

... +

 

 

. У

 

2

3

 

n +1

 

 

сумі враховувати всі складові, більші за модуль eps. За допомо-

 

гою Ln1 знайти наближене значення ln(1

+

 

x) для даного x

 

при шести даних значеннях eps.

 

 

 

 

 

 

 

 

 

 

2. Дано дійсне число b. Послідовність a1 , a2 , ... утворена за на-

 

ступним законом:

 

 

a1

=1, a2 = 2 a1 +1,..., ai+1 2 ai +1

(i = 2,3,...) .

 

Необхідно отримати всі a1 , a2 , ... , що менші або рівні b.

b

 

отримати з командного рядка.

 

 

 

 

 

 

 

 

 

 

3. У першокласника Петра m гривень. Морозиво коштує k гри-

 

вень. Петро вирішив скуштувати морозива, для цього він купу-

 

вав по одному морозиву та з’їдав його до тих пір, поки йому ви-

 

стачить грошей. Як Петрові дізнатися скільки грошей залишить-

 

ся у нього в кінці кінців. Врахуйте, що Петро ділити не вміє, а

 

вміє лише віднімати та додавати. Скільки морозива він може

 

з’їсти. Обчислення виконати за допомогою рекурсивної функції.

18.

1. Описати функцію Arctg1(x, n) дійсного типу (параметри

 

x, eps – дійсні, |x|<1, eps>0), що знаходить наближене зна-

 

чення

 

 

 

 

 

функції

 

arctg

 

(x):

 

arg tg(x) = x

x3

 

+

 

x5

 

... +

(1)n x2n

+ . У сумі

враховувати

 

всі

 

3

 

5

 

2n +1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

складові, більші за модуль eps. За допомогою Arctg1 знайти

 

наближене значення arctg(x) для даного x при шести даних

 

значеннях eps.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Знайти

найбільше

та найменше

значення функції

 

y = 3x2 + x 4 , якщо на заданому інтервалі [a,b], х змінюється

 

з кроком h. Значення a, b, h отримати з командного рядка.

 

 

 

3. Знайти суму ряду з точністю ε. Задана точність досягається,

 

коли поточний член ряду відрізняється від попереднього менше,

 

ніж на ε. an =

1

 

 

1

, ε=0.01. Обчислення виконати за допо-

 

 

 

 

+

 

 

 

2n

 

3n

 

могою рекурсивної функції.

 

 

 

 

 

 

 

 

 

19.

1. Описати функцію PowerA(x,a,eps) дійсного типу (пара-

 

метри x, a, eps –дійсні, |x|<1, a>0, eps>0), що знаходить

 

наближене значення функції за формулою:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

107

(1+ x) a =1+a x +a (a 1)

x2

+... + a (a 1) ... (a n +1)

xn

. У сумі враховува-

 

 

2!

 

n!

ти всі складові, більші за модуль eps. За допомогою PowerA знайти наближене значення для даних x і a при шести різних значеннях eps.

2.Знайти з точністю h корені рівняння на вказаних відрізках: x3 + x2 + x +1 . Відрізки та h отримати з командного рядка.

3.Знайти суму ряду з точністю ε. Задана точність досягається, коли поточний член ряду відрізняється від попереднього менше,

ніж на ε.

an =

1

, ε=0.001. Обчислення виконати за

(3n 2)(3n +1)

допомогою рекурсивної функції.

20.1. Описати функцію Otr(Ax,Ay,Bx,By) дійсного типу, що знаходить довжину відрізка AB на площині за координатами йо-

го кінців: AB = sqrt((Ax Bx)2 +(Ay By)2 ) (Ax, Ay, Bx, By – дій-

сні параметри). За допомогою цієї функції знайти довжини відрізків AB, AC, AD, якщо дано координати точок A, B, C, D.

2.Скласти програму друкування всіх трьохзначних чисел, сума цифр якого дорівнює натуральному числу N. N отримати з командного рядка.

3.Знайти суму ряду з точністю ε. Задана точність досягається, коли поточний член ряду відрізняється від попереднього менше,

ніж на ε. an = 10n , ε=0.001. Обчислення виконати за допомо- n!

гою рекурсивної функції.

21.1. Описати функцію Perim(Ax,Ay,Bx,By,Cx,Cy) дійсного типу, що знаходить периметр трикутника ABC за координатами його вершин (Ax, Ay, Bx, By, Cx, Cy – дійсні параметри) . За допомогою цієї функції знайти периметри трикутників ABC, ABD, ACD, якщо дано координати точок A, B, C, D.

2.Скласти програму, що друкує на екран N рядків по М випадкових чисел у діапазоні від А до В. Значення N, M, A та B отримати з командного рядка.

3.Знайти суму ряду з точністю ε. Задана точність досягається, коли поточний член ряду відрізняється від попереднього менше,

ніж на ε. an = 3nn!n , ε=0.001. Обчислення виконати за допомо-

108

гою рекурсивної функції.

22.1. Описати функцію Area(Ax,Ay,Bx,By,Cx,Cy) дійсного типу, що знаходить площу трикутника ABC за формулою Герона:

S ABC = sqrt( p AB) ( p AC) ( p BC) , де p – напівпериметр. За допомогою цієї функції знайти площі трикутників ABC, ABD, ACD, якщо дано координати точок A, B, C, D.

2.Знайти суму чисел від А до В, кратних М. А, В та М отримати з командного рядка.

3.Описати рекурсивну функцію PowerN(x,n) дійсного типу,

що

знаходить значення n-го ступеня

числа х за формулою:

x0

=1, xn = x xn 1 при n > 0, xn =

1

 

при n < 0 ( x >= 0 – дійс-

x n

 

 

 

не число, n – ціле). За допомогою даної функції знайти значення X n при 5 різних значення N для даного Х.

23. 1. Описати функцію Dist(Px,Py,Ax,Ay,Bx,By,D), що зна-

ходить відстань D від точки P до прямої AB за формулою

D = 2SABPAB , де SPAB – площа трикутника PAB. За допомогою цієї

функції знайти відстані від точки P до прямих AB, AC, BC, якщо дано координати точок P, A, B, C.

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

3.Описати рекурсивну функцію SqrtK(x,k,n) дійсного типу,

що знаходить наближене значення кореня k-того ступеня із чис-

 

y(n)

x

1

ла х за формулою y(0) =1, y(n +1) = y(n)

y(n)k

 

 

. За до-

 

k

 

 

 

 

 

помогою даної функції знайти наближені значення кореня k- того ступеня із Х при 6 різних значеннях для даних Х та К.

24.1. Описати функцію eights(Ax,Ay,Bx,By,Cx,Cy,hA,hB, hC), що знаходить висоти hA, hB, hC трикутника ABC, проведені відповідно з вершин A, B, C. За допомогою цієї процедури знайти висоти трикутників ABC, ABD, ACD, якщо дано координати точок A, B, C, D.

2. Дано два двозначних числа А та В. Із цих чисел утворили два

109

чотиризначні числа: перше отримала шляхом написання спочатку числа А, а потім В; для отримання другого спочатку записали В, а потім А. Знайти числа А та В, якщо відомо, що перше чотиризначне число націло ділиться на 99, а друге – на 49. Числа А та В отримати з командного рядка.

3. Описати рекурсивну функцію MinRec(A,N) дійсного типу, що знаходить мінімальний елемент дійсного масиву А розміру N, не використовуючи оператор циклу.

25.1. Описати функцію для визначення НСД трьох натуральних чисел.

2. Дано дійсне а та натуральне n. Обчислити: (1+ 2) (1+ 2 +3) ... (1+ 2 +... +10) . n отримати з командного рядка.

3. Описати рекурсивну функцію MaxRec(A,N) дійсного типу, що знаходить максимальний елемент дійсного масиву А розміру N, не використовуючи оператор циклу.

110