Параметри і аргументи функції. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Параметри і аргументи функції.



У мові С є особливість, зв’язана з тим, що всі аргументи функції передаються за значенням. При виклику функції в стеку виділяється місце для формальних параметрів. Туди заносяться значення фактичного параметра. Далі функція міняє і використовує значення зі стеку. При виході з підпрограми вони втрачаються.

В мові С викликана функція не може змінити змінні, вказані як фактичні параметри при зверненні до неї. Функція swap(), яка ніби повинна поміняти місцями значення, цього не робить.

Void swap (int a, int b)

{

int tmp = a;

a = b;

b = tmp;

}

Якщо це необхідно зробити, то треба в якості параметра передавати, не значення, а адреси змінних, які необхідно поміняти, (передавати вказівники на змінну). Такий прийом в мові С називається передача параметра за посиланням.

Функція swap() буде виглядати так:

Void swap (int *a, int *b)

{

int tmp = *a;

*a = *b;

*b = tmp;

}

Якщо в якості аргумента використовується масив, то є тільки один спосіб – передача параметра за посиланням. В якості аргумента функції треба вказати адресу початку масиву. Це можна зробити трьома способами:

1. function (int ar[10]);

2. function (int ar[ ]);

3. function (int *ar);

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

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

#include,stdio.h> /* сортуваня*/

void sort (int arr[ ], int n);

Main ()

{

int mass [10] = {1,3,-5,7,9,0,22,4,6,8};

int size = 10, i;

printf (“Before sorting:”);

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

printf (“%d”,mass[i]);

printf (“\n”);

sort (mass,size);

printf (“ after sorting:”);

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

printf (“%d”,mass[i]);

return 0;

}

void sort (int arr[ ],int n) /*можна ще писати void sort(int arr[10], int n), або void sort(int *arr, int n)*/

{

int i, j, tmp;

for(i=0; i<n-1; i++)

for(j=0; j<n-1; j++)

if (arr[j+1] < arr[j])

{

tmp = arr[j];

arr[j] =arr[j+1];

arr[j+1] = tmp;

}

Елементи масиву mass[] змінять свої значення (будуть впорядковані).


 

Приклад. Дана прямокутна матриця А розміром 4*5. Скласти програму обчислення добутку ненульових елементів кожного рядка матриці. Обчислення добутку в рядку виконати у вигляді процедури.

 

Блок-схема Блок-схема

програми процедури

 
 


Текст програми

Program prc;

Var

A:array [1..4,1..5] of real;

D: array [1..4] of real;

I,j: integer;

F: real;

Procedure dob(k: integer);

Var n: integer;

Begin

F:=1;

For n:=1 to 5 do

If a[k,n]<>0 then f:=f* a[k,n]

End;

Begin

For i:=1 to 4 do

For j:=1 to 5 do

Begin

Write(‘a[‘,i,’,’,j,’]=’);

Readln(a[i,j])

End;

For i:=1 to 4 do

Begin

Dob(i); d[i]:=f;

Writeln(‘d[‘,i,’]=’,d[i]:8:2)

End

End.


Приклад. Дана прямокутна матриця А розміром 4*5. Скласти програму обчислення добутку ненульових елементів кожного рядка матриці. Обчислення добутку в рядку виконати у вигляді функції.

 

Блок-схема Блок-схема

програми функції

 
 


Програма мовою С

#include <stdio.h>

#define ROWS 4

#define COLS 5

float b[ROWS][COLS]={

{1e-1, 2e-1, 1.2, 1.4, 3.5},

{4e-1, -1.6, 3.2, 1.2, 1,5},

{2.1, 3.5, 1.2, -3.6, 7.1},

{2.4, 1.5, 3.2, 4.1, 1e-1}

},

mul(int,int); int i;

Main()

{

for(i=0;i<ROWS;i++)

printf(“d[%i]=%f\n”,i,mul(b,i));

}

Float mul(int c,int k)

{

float c[ROWS][COLS]; int i; float d=1;

for(i=0;i<COLS;i++)

if (c[k][i]!=0) d*=c[k][i];

return (d);

}

d[0]=0.117600

d[1]=-3.686400

d[2]=-225.439194

d[3]=4.723200


Завдання

1. Дано квадратну матрицю А розміром n * n. Скласти програму нормування матриці, поділивши всі елементи кожного рядка на максимальний елемент за модулем цього рядка. Пошук максимального елемета рядка оформити у вигляді процедури.

 

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

 

3. Оформити у вигляді програми обчислення фукції ех = 1+Х+Х2 / 2!+ Х3 / 3!+... і порівняти одержаний результат зі значенням, отриманим при використанні стандартної функції EXP(x), для Х=2.3;8.5.

 

4. Дано три одновимірні масиви. Переставити числа таким чином, щоб на початку кожного масиву знаходились всі додатні числа, а в кінці від’ємні. Перестановку чисел виконати у вигляді процедури.

 

5. Дано два одновимірні масиви, які складаються не більше 30 елементів кожний. Використавши підрограму пошуку максимального елемента, знайти півсуму максимальних елеметів заданих масивів.

 

6. Дано два трикутники зі сторонами а, b, c і d, e, f. Використавши підпрограму, визначиити, чи ці трикутники є прямокуті, чи ні?

 

7. Дано сторони двох трикутників: a, b, c та d, e, f. Знайти, наскільки площа одого трикутника більша від другого. Площа трикутника А, В, С обчислюється за формолую Герона

де R -півпериметр трикутника АВС. Обчислення площі трикутників оформити у вигляді процедури.

 

8. Дано три квадратні матриці. Сформувати вектор, який складається з мінімальних елементів кожної матриці, відмінних від нуля. Пошук мінімального елемента виконати у вигляді процедури.

 

9. Дано прямокутна матриця. Сформувати вектор, який складається з максимальних елементів кожного стовпця (рядка) матриці. Пошук максимального елемента в стовпці (рядку) виконати у вигляді підпрограми.

 

10. Використовуючи підпрограму обчислення значеня однієї функції, обчислити і надрукувати таблицю значень таких функцій g=X2/(1+X)2. 2, y=(2+X)/(1+X)3. Аргумент х змінюється від початкового значення 2.8 з кроком 0.15 до кінцевого 3.7.

 

11.Використовуючи підпрограму, обчислити значення функції t = sin(X+j)/X. Для зачень X, які містяться в проміжку [-1.5;1.5] з кроком DХ=0.5, j=0 і для значень X, які містяться в проміжку [-2.5; 3] з кроком 0.6; j=0.1. Передбачити недопустимість ділення на 0.

 

12. Скласти програму перестановки стовпців прямокутної матриці розміром nxn таким чином, щоб сума елементів стовпця зростала від першого стовпця до останього. Перестановку стовпців виконати в процедурі.

 

13. Обчислити значення перших n (n<30) елементів геометричної прогресії з допомогою процедури, якщо відомо перший елемент прогресії а та знаменник прогресії q. Кожний наступний елемент геометричої прогресії утворюється множенням попередього на знаменник прогресії. Для розміщення в пам’яті обчислених елементів їх слід оголосити як одновимірний масив.

 

 

14. Обчислити сполучення з n елементів по n (n>m) . Обчислення факторіала використати у вигляді процедури.

 

15. Дано декартові координати 8 точок. Підрахувати скільки точок належить площині, обмеженій колом з радіусом R і центром в точці (0;0). Перевірку належності оформити у вигляді процедури.

 

16. Дано декартові координати 5 точок. Обчислити і вивести на друк полярні координати, впорядкувати за зростанням полярного радіуса (полярного кута). Полярний радіус і полярний кут обчислюється так: ; , де х, у – декартові координати точок. Переведення в полярні координати виконати у вигляді процедури.

 

17. Дано декартові координати 6 точок і координати базової точки. Визначити сумарну віддаль між базовою і рештою точок, також максимальну віддаль. Обчислення віддалі між точками оформити у вигляді процедури.

 

18. Дано дві квадратні матриці одного порядку А і В. Показати, що для них вірний асоціативний закон, тобто А*В=В*А. У випадку стверджувальної відповіді вивести на друк повідомлення “КОМУТАТИВНИЙ ЗАКОН ВИКОНУЄТЬСЯ”, в противному випадку – “ КОМУТАТИВНИЙ ЗАКОН НЕ ВИКОНУЄТЬСЯ”. Обчислення добутку двох матриць виконати у вигляді процедури.

 

19. Дано експериментальні значення чотирьох випадкових величин, кожна з яких має не більше 8 значень. Обчислити дисперсію випадкової величини ri, і=1, 2, 3, 4 вважаючи її експериметальними значеннями. Математиче сподівання і дисперсія випадкової ввеличини Х обчислюються так:

; . Обчисленя математичного сподівання оформити у вигляді процедури.

 

20. Дано три прямокутні матриці. Знайти слід кожної матриці і вивести а друк значення найменшого за модулем сліду. Обчислення сліду матриці оформити у вигляді процедури. Слідом матриці називається сума елементів головної діагоналі.

 

21. Дано три вектори. Визначити максимальний парний елемент кожного вектора і впорядкувати їх за спаданням. Пошук максимального елемента вектора виконати у вигляді процедури.

 

22. Дано дві прямокутні матриці. Розв’язати рівняння px + q = 0, де р – мінімальний за модулем елемент першої матриці; q – мінімальний за модулем елемент другої матриці. Пошук мінімального елемента виконати у вигляді процедури.

 

23. Дано координати точок х11; х22; х33; х44. Визначити і вивести на друк координати точок, для яких кут між віссю абсцис і променем, що з’єднує точку з початком координат, є максимальним. Обчислення величини кута між між віссю абсцис і променем, що з’єднює точку з початком координат, оформити у вигляді процедури.

 

24. Обчислити наближено площу фігури, яка обмежена віссю Х, прямими Х=а і Х=b, (a<b) і кривою . Інтервал зміни Х поділити на 10 частин і підсумувати площі 10 прямокутників з основою 0.2; висота прямокутника дорівнює значенню функції на лівій границі його основи. Обчислення площі оформити у вигляді процедури. Для значень а=3; b=5; a=7;b=9.

 


Лабораторна робота №8.

Тема: Обробка текстів.

Мета роботи:

1. Оволодіти правилами опису рядкового типу даних.

2. Вивчити операції та стандартні функції і процедури, які застосовуються до рядків.

3. Здобути навички роботи з рядками символів.



Поделиться:


Последнее изменение этой страницы: 2016-09-05; просмотров: 361; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.132.194 (0.028 с.)