на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Розробка програм мовою С++
p align="left">int sum(int, int, int); // прототип функції

main()

{ int nach, kon, shag;

cout << "\n Введіть початкове значення члена ряду: ";

cin >> nach;

cout << "\n Введіть кінцеве значення члена ряду: ";

cin >> kon;

cout << "\n Введіть крок зміни члена ряду: ";

cin >> shag;

cout << "\n Сума ряду дорівнює " << sum (nach, kon, shag);

return 0;

}

// Визначення функції sum

int sum (int nachr, int konr, int shagr)

{ int i, sumr = 0;

for(i = nachr; i< = konr; i+ = shagr)

sumr+ = i;

return (sumr);

}

1.3 Організація та активація функцій з іеформаційним зв'язком через аргументи і параметри. Передача значень функції

В С++ є три способи передачі аргументів у функцію: передача за значенням, передача за посиланням з аргументами-вказівниками і передача за посиланням з аргументами-посиланнями.

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

У попередньому прикладі функція sum( ) передає копії змінних nach, kon, shagr, які використовуються функцією як значення для параметрів nachr, konr, shagr.

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

1.4 Використання вказівників при роботі з функцією, з даними аргумента і параметрами. Передача вказівників

Щоб мати можливість безпосередньо змінювати значення змінних викличної програми, необхідно використати передачу за посиланням з аргументами-вказівниками. Це, звичайно, необхідне в разі, коли в викличну програму потрібно передавати більше одного значення і повернути більше за одне значення. При цьому передаються не копії змінних, а копії адрес змінних. Функція, використовуючи вказівник, здійснює доступ до потрібних елементів пам'яті, і можна змінювати значення об'єкта, розташовані за цією адресою. Дана передача дозволяє передавати в викличну функцію масиви як аргументи. Якщо масив використовується як аргумент функції, передається тільки адреса масиву, а не копії всіх елементів. При виклику функції з ім'ям масиву в функцію передається вказівник на перший елемент масиву. Існує кілька способів оголошення параметра, призначеного для отримання вказівника на масив.

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

Другий спосіб полягає в тому, щоб використати як аргумент функції вказівник на масив.

1.5 Передача за посиланням

В С++ можна здійснювати передачу за посиланням з аргументами-посиланнями. Посилання є неявним вказівником і використовується як інше ім'я вже існуючого об'єкта. Формат визначення посилання є таким:

<тип>& <ім'я посилання> = <вираз; або

<тип>& <ім'я посилання> (<вираз>);

Як вираз, що ініціалізується, має бути ім'я певного об'єкта, що має місце в пам'яті. Значенням посилання після визначення з ініціалізацією стає адреса цього об'єкта. Наприклад,

int х = 7; //Визначена й ініціалізована змінна х

int& ref= х;//Визначене посилання, значенням її є адреса змінної х

Для доступу до вмісту ділянки пам'яті, на який вказує посилання, не треба виконувати розіменування, що є обов'язковим при зверненні до значення змінної через вказівник. Кожна операція над посиланням є операцією над тим об'єктом, з яким вона пов'язана. Можна змінити значення х, записавши х = 35; або ref = 35;.

Існують обмеження при визначенні і використанні посилань:

Не можна взяти адресу змінної типу посилань;

Не можна створити масив посилань;

Не можна створити вказівник на посилання;

Не допускаються посилання на бітові поля.

При використанні посилання як параметра забезпечується доступ із тіла функції до відповідного аргументу, тобто ділянки пам'яті, виділеної для аргументу, тобто початкова змінна може бути змінена за допомогою викличної функції. Щоб указати, що параметр функції передається за посиланням, після типу параметра в прототипі функції записується символ &. У виклику функції змінна вказується на ім'я, але вона буде передана за посиланням.

1.6 Організація та активація функцій з інформаційним зв'язком через зовнішні змінні

Областю дії зовнішніх змінних є всі функції програмного комплексу, якщо ці змінні описані перед якою-небудь функцією, або як extern усередині функції. Це означає, що працювати з зовнішніми змінними можна в межах комплексу і значення, що формуються при цьому, доступні для всіх функцій. У цьому разі немає необхідності здійснювати міжмодульний зв'язок через аргументи і параметри, а достатньо лише активізувати необхідну функцію і продовжити виконання дії з зовнішніми змінними, які були розпочаті в інших функціях. Імена змінних в усіх функціях для позначення відповідних об'єктів повинні обов'язково бути однаковими.

1.7 Рекурсивні функції

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

n х (n-1) х (n-2) х. .. х 3 х 2 х 1,

причому за визначенням факторіал 1! і 0! дорівнює 1. Факторіал числа дорівнює добутку попередніх щодо нього послідовностей чисел, тобто n! = nx(n-1)!. Якщо обчислення факторіала оформити у виді рекурсивної функції, то програма може бути подана в ось якому вигляді:

// Обчислення факторіала

#include <iostream.h>

unsigned long factorial (unsigned int);

void main( )

{ int i; unsigned int n;

cout << endl << "Введіть ціле додатне число";

cin >> n;

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

cout << endl << " Факторіал " << i << "!=" << factorial(i);

return;

}

unsigned long factorial (unsigned int num);

{if (n = = 1 ¦¦ n = = 0)

return 1;

else

return (num*factorial(num-1));

}

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

1.8 Вбудовані функції

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

#include <iostream.h>

inline int min (int x1, int y1)

{ if (x1 < y1)

return (x1);

else

return (y1);

}

void main( )

{ int х, у, z;

{ cout << endl << "Введіть два цілих числа ";

cin >> х >> у;

z = min(х, у);

cout << endl << " Мінімальним з " << х << " і " << у << " є "

<< z;

}

Компілятор може ігнорувати модифікатор inline, якщо вбудований код надто великий, компілятор згенерує звичайний виклик функції.

1.9 Перевантажені функції

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

#include <iostream.h>

int fun (int х, int у)

{ return (х*х+у*у);}

float fun (float х, float у)

{ return (х*х+у*у); }

main( )

{ int x1 = 10, y2 = 3; float x2 = 13.75, y2 = 11.25

cout << endl <<"Сума квадратів чисел " << x1<< " і " << y1 << "дорівнює "

<< fun(x1, y1)

<< endl <<"Сума квадратів чисел " << x2<< " і " << y2 << "дорівнює "

<< fun(x2, y2)

return 0;

}

Перевантажені функції розрізняються за допомогою сигнатури -- комбінації імені функції і типів її параметрів. Компілятор кодує ідентифікатор кожної функції за числом і типом її параметрів, це називається декорируванням імені, щоб мати можливість здійснювати надійне зв'язування типів. Надійне зв'язування типів гарантує, що викликається належна функція і що аргументи узгоджуються з параметрами. Компілятор виявляє помилки зв'язування і видає повідомлення про них. Кожне декороване ім'я починається з символу @, який передує імені функції. Закодований список параметрів починається з символів $g. Типи значень функцій, що повертаються, не відбиваються в декорованих іменах. Перевантажені функції можуть мати різні або однакові типи значень, що повертаються, і обов'язково повинні мати різні списки параметрів. Дві функції, відмінні лише за типами значень, що повертаються, викличуть помилку компіляції.

РОЗДІЛ 2. Програмні модулі

2.1 Завдання 1 Структури

2.1.1 Постановка завдання

У файлі оперативної систекми «Task.in» зберігається в текстовій формі відмість з відомостями про продукти. Кожен рядок цього файлу містить відо-мості про один вид продукту, представлені у такому форматі: 1…2 - порядковий номер продукту; позиція 3 - пробільних літера; позиції 4…15 - назва продукту довжиною не більше 11 имволів, в довільному місці поля; позиція 16 - пробільних літера; позиції 17…19 - вміст білка в 100 грамах продукту (ціле).

Кількість продуктів у відомості дорівнює 16. Приклад зазначеного файлу:

01 щука 20

02 сом 16

Написати:

1) визначення масиву структур для зберігання зазначеної відомості і фрагмент програми, який заповнить відомість даними, вводяться з файлу операційної системи «Task.in» (введення даних повинно здійснюватися в текстовому режимі);

2) фрагмент програми для знаходження і друку (у файл «Task.out») інформацію про продукт з найбільшим вмістом білка.

2.1.2 Програма та програмна реалізація

Дане завдання реалізоване у модулі TASK1.CPP (TASK1.EXE)

Для опису даної програми була введена структура (struct Tbook) та заданий масив (char name[20]) для зберігання даних даного типу. Реалізація програми здійснюється за допомогою файлів “Task_in” та “Task_out”. Зчитування проводиться стандартною функцією scanf згідно визначеного формату даних вхідного файлу «Task_in». Під час роботи програма визначає продукт з найбільшим вмістом білка. Результатом виконання є вивід інформації про продукт та її запис у вихідний файл «Task_out». Тіло програми повністю побудоване згідно алгоритму(додаток 7). Розглянемо програму:

Страницы: 1, 2, 3, 4



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.