Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота №2 Функції в С .doc
Скачиваний:
0
Добавлен:
13.11.2019
Размер:
80.38 Кб
Скачать

Лабораторна робота №2

Функції в С++

1. Мета роботи:

1) Одержати практичні навички роботи з функціями;

2) одержати практичні навички роботи з шаблонами функцій;

3) одержати практичні навички роботи з покажчиками функцій.

2. Теоретичні відомості

2.1. Функції з початковими значеннями параметрів (за замочуванням)

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

const int N=20;//кількість елементів масиву

char mas1[N][10];//масив імен

int mas2[N]//масив віку

void init(int i, char* name=”Вася ”, int age=17)

{

strcpy(mas1[i],name);

mas2[i]=age;

}

Приклади використання функції init():

1. for (int i=1;i<N;i++)

init(i);

Всім елементам масиву mas1 надається значення «Вася», всім елементам масиву mas2 надається значення 17.

2. for (int i=1;i<N;i++)

{

char Name[10];

cout<<”Введіть ім'я:”; cin>>Name;

init(i,Name);

}

Всім елементам масиву mas1 надається значення змінної Name, всім елементам масиву mas2 надається значення 17.

2.2. Функції зі змінним числом параметрів

В С++ допустимі функції, у яких під час компіляції не фіксується число параметрів, і, крім того, може бути невідомий тип цих параметрів. Кількість і тип параметрів стає відомим тільки у момент виклику, коли явно заданий список фактичних параметрів. Кожна функція із змінним числом параметрів повинна мати хоча б один обов'язковий параметр. Визначення функції із змінним числом параметрів:

тип ім'я (явні параметри. . . )

{

тіло функції

}

Після списку обов'язкових параметрів ставиться кома, а потім три точки, які вказують, що надалі контроль відповідності кількості і типів параметрів під час обробки виклику функції проводити не потрібно. Під час звернення до функції всі параметри і обов'язкові, і необов'язкові розміщуватимуться в пам'яті один за одним. Отже, визначивши адресу обов'язкового параметра як p=&k, де p - покажчик, а k – обов'язковий параметр, можна одержати адреси і решти параметрів: оператор k++; виконує перехід до наступного параметра списку. Ще одна складність полягає у визначенні кінця списку параметрів, тому кожна функція із змінним числом параметрів повинна мати механізм визначення кількості і типів параметрів. Існує два підходи:

  1. відома кількість параметрів, яка передається як обов'язковий параметр;

  2. відома ознака кінця списку параметрів.

//Знайти середнє арифметичне послідовності

//чисел, якщо відома кількість чисел

#include <iostream>

float sum(int k . . .)

//явний параметр k задає кількість чисел

{

int *p=&k;//налаштували покажчик на параметр k

int s=0;

for(;k!=0;k--)

s+=*(++p);

return s/k;

}

void main()

{

//середнє арифметичне 4+6

cout<<”\n4+6=”<<sum(2,4,6);

//середнє арифметичне 1+2+3+4

cout<<”\n1+2++3+4=”<<sum(4,1,2,3,4);

}

Для доступу до списку параметрів використовується покажчик *p типу int. Він встановлюється на початок списку параметрів в пам'яті, а потім переміщується за адресами фактичних параметрів (++p).

/*Найти середнє арифметичне послідовності чисел, якщо відома ознака кінця списку параметрів */

#include<iostream.h>

int sum(int k .)

{

int *p = &k; //створили покажчик на параметр k

int s = *p; // s отримало значення першого параметра

for(int i=1;p!=0;i++) //поки не кінець списку

s += *(++p);

return s/(i-1);

}

void main()

{

//знаходить середнє арифметичне 4+6

cout<<”\n4+6=”<<sum(4,6,0);

//знаходить середнє арифметичне 1+2+3+4

cout<<”\n1+2++3+4=”<<sum(1,2,3,4,0);

}