main () - главна функция в програма

предаване на параметри по стойност
предаване на параметри чрез псевдоними
предаване на параметри чрез указатели
прототип на функция
предефиниране на функция
предаване параметри на функция main

Основната функция на програма от езика C++ е main. Под функция ще разбираме съставна програма единица, съдържаща един или повече оператори и/или други функции. В този език понятието функция е събирателно и включва както функции които връщат определена стойност, така и функции (процедури, подпрограми), които не връщат стойност - void. Използването на функции е в основата на структурното и обектно ориентираното програмиране. Основната причина за ползването им е намаляване обема на въведения код. Веднъж създадена една функция може да бъде ползвана от много места в програмата. Аналогията с цикъл е непълна. В тялото на цикъл се изпълнява многократно вложения в него съставен оператор, но една функция може да бъде изпълнявана един или повече пъти в зависимост от конкретния алгоритъм, при това от различни места в програма. Една функция може да съдържа в тялото си един или повече цикъла, както и в съставния оператор на един цикъл може да се съдържат една или повече функции. За да се реализира процесът извикване на функция трябва в съответния програмен ред да се запише нейното име и в скоби стойности на предаваните параметри. По принцип една функция връща само една определена стойност от декларирания тип на функцията. Разбира се това твърдение е твърде условно. Има вградени възможности, които позволяват една функция да връща повече от една стойност. Всяка от изброените възможности естествено има свои преимущества и недостатъци.

а) използване на глобална променлива. Преимущество - простота на декларирането. Този подход често се прилага при рекурсивна фанкция обработваща масив. Недостатък - трудно се проследява в кои моменти глобално дефинираната променлива променя стойността си.
б) използване на съставна променлива, събирателен тип данни - структура, масив и др.
в) предаване на формални параметри чрез псевдоним;
г) предаване на формални параметри чрез указател
Обърнете внимание на изискването: броя и типа на фактическите предавани параметри трябва да съответства на броя и типа на формалните параметри в декларацията на функцията. Ако на една функция не се предават параметри след името й се записва само двойката малки скоби.

Начало на страницата

предаване на параметри по стойност

При извикване на една функция в програмния стек се заделя място за кода на функцията и за стойностите на предаваните параметри. Когато се осъществява предаване на параметри по стойност фактическите параметри, с които се извиква функцията, се копират в стека, но функцията работи с копията на предаваните параметри, а не с техните оригинални, т.е. предаваните параметри се съхраняват на две различни места в оперативната памет. След приключване работата на извиканата функция заетата от нея памет би трябвало да се освободи. При изпълнението на функциятастойностите на променливите не се променят, защото функцията няма достъп до тези променливи.

В приложената примерна програма се осъществява предаване на параметри по стойност на извиканата функция.
#include <iostream>
using namespace std;

int kub(int strana, int stepen)
{ int i, obem=strana;
  for (i=1; i<stepen; i++) obem*=strana;
  return obem;
} 
 
int main ()
{ int strana, obem;
 cout<<"wywedete strana na kub: ";cin>>strana;
 obem=kub(strana,3);
 cout<<"obem na kub: "<<obem<<endl;
 system("pause");
 return 0; 
}//kraj na programa main

Начало на страницата

предаване на параметри чрез псевдоними

Когато при извикване на функция се осъществи предаване на параметри чрез псевдоним, то нейните формални параметри получават адресите на фактическите параметри, с които е била извикана функцията. Ако в хода на работа се променят стойностите на тези параметри, то извикващата функция може да получи като резултат повече от една стойност.

В приложения пример се разменят стойностите на две променливи като се осъществява предаване на параметри чрез псевдоним:
#include <iostream>
using namespace std;

void swap (int &x, int &y)  //predawane chrez psewdonim
{ int now;
now = x;
x = y;
y = now;
} //predawane chrez psewdonim

int main ()//osnowna funkciq main 
{int a=2,  b=3;
cout << " Nachalno systoqnie a = "<<a<<"; b = " <<b<<endl;
swap (a, b); // 
cout << " Sled razmqna a = " <<a<<"; b = " <<b<<endl;
system("pause");
return EXIT_SUCCESS;
}//kraj na programa main

Начало на страницата


предаване на параметри чрез указатели

При извикване на функция може да се извърши предаване на параметри чрез указатели. Самите формални параметри на функцията се декларират като указатели, които съдържат адреса в паметта на действителните стойности. Да припомним факта, че указател е от целочислен тип. В приложения пример се разменят стойностите на указателите, т.е. на адресите на двете променливи. Примерът е аналогичен с примера за предаване на параметри чрез псевдоним.

#include <iostream>
using namespace std;

void swap (int *x, int *y) //predawane po adres ukazatel
{int now;
now = *x;
*x = *y;
*y = now;
}//predawane po adres ukazatel
 
int main ()//osnowna funkciq main 
{int a=2,  b=3;
 cout << " Nachalno systoqnie a = " <<a<< "; b = " <<b<<endl;
swap (&a, &b); // 
cout << " Sled razmqna a = "<<a<< "; b = " <<b<< '\n';
system("pause");
return 0;}//kraj na programa main

Начало на страницата


прототип на функция

Под прототип на функция ще разбираме указание за компилатора съдържащо тип на функция, нейното ими и списъкът на типа и имената на аргументите. При компилиране на една програма се извършва процес на проследяване имената на всички използвани в тялото на програмата функции. Това и налага изискването всички използвани библиотечни файлове да се декларират в заглавната част на програмата. От своя страна всяка потребителска дефинирана функция може да извиква друга, потребителски дефинирана функция. Условието е извикваната функция да е описана преди извикващата функция. При относително малка програма този процес може лесно да се проследи, но при големи програми проблемът се усложнява. Езикът за програмиране дава възможност за предварително деклариране прототип на функция преди тялото на основната функция main, и някъде в след тялото на главната функция main да се опише цялата функция - тялото на този прототип. Използваните в примера глобални променливи са по-скоро за илюстрация за работа с глобално декларирани променливи.


В следващата примерна програма е използвана функция чрез деклариране на нейния прототип.
#include <iostream>
using namespace std;
int a, b;//globalno deklarirani promenliwi
void swap (); //definirane prototip na funkciq

int main ()//osnowna funkciq main 
{ a=2,  b=3;
 cout << " Nachalno systoqnie a = " <<a<< "; b = " <<b<<endl;
swap (a, b); // 
cout << " Sled razmqna a = "<<a<< "; b = " <<b<< '\n';
system("pause");
return 0;}//kraj na programa main
 
void swap () //tqlo na funkciq
{a = a+b;
b =a- b;
a = a-b;
}

Начало на страницата


предефиниране на функция

Под предефиниране на функция ще разбираме припокриване имената на две функции. В тялото на една функция всяка променлива има собствено уникално име. В тялото на една програма всяка функция има собствено уникално име. Езикът за програмиране предоставя възможност за предефиниране на функция, т.е. да съществуват две отделни функции с едни и същи имена, но само ако двете функции трябва да връщат различен тип данни.

Пример за предефиниране на функция
#include <iostream>
using namespace std;
 
int cena (int a)
{return 2*a;
}//predefinirana funkciq
 
double cena (double a) 
{return 1.2*a;
}//predefinirana funkciq
 
int main () //osnowna funkciq main 
{ int materiali;
  double trud,dds;
  
 cout << "Wywedete stojnost na materiala ";cin>> materiali;
 trud=cena(materiali);
 cout<<"Stojnost s wloveniq trud: "<<trud<<endl;
 dds=cena(trud);
 cout<<"Krajna cena s DDS: "<<dds<<endl;
 system("pause");
return 0;}//kraj na programa main predefinirana funkciq

Начало на страницата


предаване параметри на функция main

Има определени случаи, когато е наложително предаване праметри на функция main. Един пример: имаме съвкупност от данни въведени в различни файлове. Дали данните трябва да се обединяват, да се прекодират, да се извърши определена обработка на информацията в тях не е от принципно значение в случая. От друга страна има изработен програмен инструмент, на който чрез конзолата или чрез файл за пакетна обработка се предават пълната файлова спецификация на всички подлежащи на обработката файлове. Като входна информация са необходими брой аргументи и стойност на конкретния брой аргументи.

На функция main могат да се подават 3 параметъра, като всеки от тях има име служебна дума на езика:
а) параметър argc от тип int - броя на предаваните аргументи.
б) параметър argv е масив от указатели към масив от низове. Параметърът с индекс 0 е името на стартиралото приложение, всички останали параметри се разделят с пробел. Броят им трябва да съответства на предадената стойност за argc;
в) параметър envp - указател към char и дава информация за средата (environment), в която се изпълнява програмата. Този параметър в общия случай не задължителен.
Следващата примерна програма трябва да бъде компилирана до изпълним файл и стартирана в конзолен режим.
#include <iostream>
using namespace std;
 
int main (int argc, char *argv[] ) //predawane parametri na main
{ int i;
cout<<"promenliwata argc sydyrva broj predadeni parametri, ako\n";
cout<<"programata e startirana w konzolen revim - pod DOS.\n";
cout<<"parametyr 0 e mqstoto i imeto na samata programa.\n";
cout<<"wsichki sledwashi parametri trqbwa da bydat razdeleni s interwal.\n";
cout<<"w masiwa argv se sydyrvat stojnostite na predadenite parametri.\n";
 
cout<<"Pri startirane na programa sa podadeni "<<argc-1<<" broq parametri: \n";
  for ( i= 0; i< argc; i++)
 { cout<<"Parametyr "<<i<<" = "<< argv[i] << endl;//izwevda stojnost na podadenite parametri
 }//for
 system("pause");
 return 0; 
}//kraj na programa main - parametri

Задачи с подобни функции и служебни думи са разгледани в страницата с електронни уроци по информатика - програмиране.
Илюстриране работата на характерни алгоритми можете да намерите в предоставените електронни помагала съдържащи решени примери.



Начало на страницата

 
Размер на шрифта
Increase Font Size Option 3 Reset Font Size Option 3 Decrease Font Size Option 3
Bulgarian Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish
Търсене в сайта: