Приклад 6:
# include <iostream.h>
// Функція сумує значення параметрів типу int
long summa (int k,…)// k – кількість параметрів, що додаються
{int *pik=&k;// вказівник, що звертається до параметрів функції
long total = 0;
for (;k;k--)// поки не вичерпано список параметрів
total+=*(++pik);// відбувається додавання
return total;// повернення результату
}
void main()
{// додаватимуться два параметри
cout<<”\n summa(2, 6, 4)=”<< summa(2,6,4);
// кількість параметрів, які потрібно додати - 6
cout<<”\n summa(6, 1, 2,3,4,5,6)= ”<< summa(6, 1,2,3,4,5,6);
}
Результат виконання:
summa(2,6,4)=10
Наступний приклад 7 ілюструє 2-й підхід до обмеження змінного списку параметрів. Програма містить функцію для визначення добутку змінної кількості параметрів. Ознакою кінця списку фактичних параметрів служить параметр з нульовим значенням.
Приклад 7:
# include <iostream.h>
double prod (doble arg, … )
{double aa=1.0;// початкове значення добутку
double *prt=&arg;// вказівник на перший елемент у списку
if (*ptr==0) return 0.0;// чи є перший елемент нулем?
for (; *ptr; ptr++) aa*=*ptr;// знаходження добутку
return aa;
}
void main()
{cout<< “\n prod(2.0, 4.0, 3.0, 0.0)=”<< prod (2.0, 4.0, 3.0, 0.0);
cout<<”“\n prod(1.4, 3.0, 0.0, 16.0)=”<< prod (1.4, 3.0, 0.0, 16.0);
cout<<“\n prod(0.0)=”<< prod (0.0);
}
Результат виконання:
рrod (2.0, 4.0, 3.0, 0.0)=24
рrod (1.4, 3.0, 0.0, 16.0)=4.2
рrod (0.0)=0.0
10. Структури
Структура об’єднує логічно зв’язані дані різних типів. При описі структури програміст створює новий тип, на основі базових або інших складових типів, за допомогою якого можна в подальшому описувати реальні об’єкти програми, які зберігатимуться у пам’яті. Склад цих об’єктів визначатиметься типом структури, за допомогою якої вони описуються. Структурний тип даних визначається описом:
struct <ім’я структури> {
<опис елементів>
};
Для виділення пам’яті під структуру необхідно визначити структурну змінну:
<ім’я структури> <ім’я змінної>;
Приклад 1.
struct lab{
int num;
char* name;
};// визначення структурного типу з іменем lab
lab Lаb_10;// опис конкретної структуриз іменем Lab_10.
Можна одночасно визначати структурний тип і описувати за допомогою нього структуру:
Приклад 2.
struct gr // ім’я структурного типу
{ char [10];// елемент структури
int year, nomer;// однотипні елементи структури
} grupa1; // ім’я структурної змінної
Елементи структури називають полями (num, name). Поля можуть бути будь-якого базового чи похідного типу, наприклад, масивом, вказівником, об’єднанням або іншою структурою.
Для звернення до полів структури використовуються уточнені імена через операцію вибору: “крапка” (“.”) при зверненні через ім’я структури і операцію непрямого доступу “->” при зверненні через вказівник.
Приклад 3.
Lab_10.num=10;
lab*ptrlab=&Lab_10;
ptrlab->name=”Структури”;
Ввід/вивід структур виконується поелементно (cin>>Lab_10.num;).
Структури одного типу можна копіювати.
Структури, пам’ять під які виділяється на етапі компіляції, можна ініціалізувати, перераховуючи значення їх елементів:
lab Lab10={10, “Структури”}.
Можна створювати масиви структур.
Приклад 4.
// структура для опису дати
struct date { int day,month,year;};
/* масив з 5-ти структур типу date , кожна з яких складається з 3-х елементів типу int, яким надаються початкові значення*/
date d[5]={ { 1,3,1980}, { 5,1,1990}, {1,1,2002}};
Приклад 5.
Програма, що демонструє використання структур для ведення обліку успішності студентів деякої академічної групи:
#include <conio.h>
#include <iostream.h>
struct Spysok {
char PIB[20];// масив для зберігання прізвищ студентів
char Grup[10];// номер групи
int Ot[3];// масив з трьох оцінок
float S_Bal;// середній бал
} *vid;// вказівник, на структуру
void Vvid(int nom, Spysok *vid)
{ cout << "\n Vvedit vidomosti \n" << (nom+1);
cout << "\n PIB - "; cin>>vid->PIB;
cout << " Nomer Gr - "; cin >> vid->Grup;
float s=0;
for(int i=0;i<3;i++) {
cout << "\n Otsinki - "; cin >> vid->Ot[i];
s+=vid->Ot[i];
}
vid->S_Bal=s/3;
}
void main()
{ struct Spysok Stud[50]; int i, N; char Litera;
clrscr();
cout << "\n Vvedit kilkist studentiv u grupi < 50 "; cin >> N;
for(i=0;i<N;i++) Vvid(i,&Stud[i]);
cout << "\n Spysok studentiv”;
for(i=0;i<N;i++)
cout<<"\n"<<Stud[i].PIB<<endl<<Stud[i].Grup<<endl<<Stud[i].S_Bal;
cout << "\n Poshuk vidomostey pro studentiv za pershoyu\ literoyu prizvyscha\n";
cin >> Litera;
if (islower(Litera))toupper(Litera);
cout << "\n Vidomosti pro Students:";
int kod_p=0;
for(i=0;i<N;i++)
if(Stud[i].PIB[0]==Litera)
{ kod_p=1;
cout<<”\n"<<Stud[i].PIB
<<endl<<Stud[i].Grup<<endl<<Stud[i].S_Bal;
}
if(kod_p==0) cout << " Takyx nemae!";
getch();
}
Список використаної літератури
1. Подбельский В.В. Язык СИ++: Уч. Пособие. –5-е издание. –М.: Финансы и статистика, 2001. –560 с.
2. Подбельский В. В., Фомин С. С. Программирование на языке Си: Учеб. пособие. –М.:Финансы и статистика, 1998. –600с.
3. Павловская Т.А. С/С++. Программирование на языке высокого уровня: Учебник для ВУЗов. –СПб.:Питер, 2003. –461 с.
4. Павловская Т.А., Щупак Ю.А. С/С++. Практикум. –СПб.: Питер, 2002. –204 с.
5. Дейтел Х., Дейтел П. Как программировать на С++: Пер. с англ. –М.: Бином, 2000. –1024 с.
6. Прата С. Язык программирования С++. Лекции и упражнения. Учебник: Пер. с англ. –СПб.: ДиаСофтЮП, 2003. –1104 с.
7. Либерти Дж. Освой самостоятельно С++. –М.: Вильямс, 2001. –456 с.
8. Культин Н. С/С++ в задачах и примерах. –СПб.:БХВ-Петербург, 2001. –288 с.