русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Опрацювання структур у функціях


Дата додавання: 2014-04-22; переглядів: 1089.


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

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

Використовують різні способи передавання структур у функцію для опрацювання: передавання цілих структур через відповідні параметри – структури; передавання адрес структур через параметри – вказівники на структури; передавання окремих полів структур. Залежно від конкретного випадку кожен з цих методів має свої переваги і недоліки.

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

Приклад програми. Є два масиви цілих чисел: в першому зберігаються порядкові номери студентів, в другому – рейтинги студентів. Сформувати масив структур, кожна з яких буде містити інформацію про окремого студента. В цьому масиві знайти порядкові номери студентів з найменшим і найбільшим рейтингом (вважати, що рейтинги унікальні), знайти середній рейтинг, кількість студентів з рейтингом нижчим середнього.

 

#ifndef STUDENT_H

#define STUDENT_H

#include <iostream>

using namespace std;

//-----------------------------------------------------------------

struct student {

int id;

int rating;

}; //--------------------------------------------------------------

void student_add( student a[ ], int pos, int new_id, int new_rating ) {

a[ pos ].id = new_id;

a[ pos ].rating = new_rating;

} //---------------------------------------------------------------

void student_show( student * s ) {

cout << "id = " << s->id << ", rating = " << s->rating << endl;

} //---------------------------------------------------------------

void student_show_all( student a[ ], int n ) {

for ( int i = 0; i < n; i++ )

student_show( &a[ i ] );

} //---------------------------------------------------------------

int student_max_rating( student a[ ], int n ) {

int max = 0;

for ( int i = 1; i < n; i++ )

if ( a[ max ].rating < a[ i ].rating )

max = i;

return max;

} //---------------------------------------------------------------

int student_min_rating( student a[ ], int n ) {

int min = 0;

for ( int i = 1; i < n; i++ )

if ( a[ min ].rating > a[ i ].rating )

min = i;

return min;

} //---------------------------------------------------------------

double student_avg( student a[ ], int n ) {

double avg = 0;

for ( int i = 0; i < n; i++ )

avg += a[ i ].rating;

return avg / n;

} //---------------------------------------------------------------

int student_nof_loosers( student a[ ], int n ) {

int num = 0;

double avg = student_avg( a, n );

for ( int i = 0; i < n; i++ )

if ( a[ i ].rating < avg )

num++;

return num;

}

#endif

 

#include "student.h"

#include <iostream>

using namespace std;

int main() {

const int N = 5;

int sid[ N ] = { 1, 2, 4, 5, 7 };

int srating[ N ] = { 75, 80, 90, 70, 95 };

student s[ N ];

for ( int i = 0; i < N; i++ )

student_add( s, i, sid[ i ], srating[ i ] );

student_show_all( s, N );

cout << "max rating = " << student_max_rating( s, N ) << endl;

cout << "min rating = " << student_min_rating( s, N ) << endl;

cout << "avg = " << student_avg( s, N ) << endl;

cout << "below avg = " << student_nof_loosers( s, N ) << endl;

}


<== попередня лекція | наступна лекція ==>
Багатовимірні масиви як параметри функцій | Вказівники на функції


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн