Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Передача параметров функции main




Перегрузка функций

Рекурсия

Рекурсия – это способность функции вызывать саму себя.

Прямая рекурсия – когда функция вызывает сама себя непосредственно.

Косвенная рекурсия – когда функция вызывает себя через другую функцию.

Для нормального завершения любая рекурсивная функция должна содержать хотя бы одну нерекурсивную ветвь, заканчивающуюся оператором возврата.

Классический пример рекурсии – функция вычисления факториала.

Пример программы с функцией вычисления факториала:

#include <iostream.h>

#include <conio.h>

long int factorial(int n)

{

if (n==0 || n==1) return 1;

else return n*factorial(n-1);

}

void main()

{

int x;

clrscr();

cout<<"Ввести число x=";

cin>>x;

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

}

Перегрузка функций – использование нескольких функций с одним и тем же именем, но с различными типами параметров.

Используют перегрузку функций в том случае, когда для разных типов данных применяется один и тот же алгоритм.

Пример

#include <iostream.h>

#include <string.h>

int max(int x, int y)

{ if (x>y) return x;

else return y;

}

double max(double x, double y)

{ if (x>y) return x;

else return y;

}

char *max(char *x, char *y)

{

if (strlen(x)>strlen(y)) return x;

else return y;

}

void main()

{

int a=6, b=8;

double z=12.4, w=45.5678;

char *c="abcd";

char *d="zxcvbnm";

cout<<"Наибольшее целое="<<max(a,b)<<endl;

cout<<"Наибольшее вещественное="<<max(z,w)<<endl;

cout<<"Наибольшая строка="<<max(c,d)<<endl;

}

В данном примере функция max используется для определения наибольшего целого числа, наибольшего вещественного числа и определения самой длинной строки.

При обращении к функции компилятор с помощью фактических параметров определяет, какой вариант функции необходимо вызвать в данном случае. Этот процесс называется разрешением перегрузки. Смысл механизма разрешения – использовать функцию с наиболее подходящими аргументами. Если точного соответствия не найдено, выполняются преобразования типов в соответствии с общими правилами (char в int, float в double и т.д.) Далее могут выполняться преобразования пользовательских типов и т.д. Если соответствие типов может быть получено более чем одним способом, возникает неопределенность и компилятор выдает сообщение об ошибке.

Например, вызов функции max(12.4,10) приводит к ошибке, так как есть неопределенность с числом 10 – отнести его к типу int или к типу double.

 

Главная функция программы main может быть определена с параметрами, которые передаются из внешнего окружения (параметры командной строки, системные переменные). Все эти данные представляются в виде строк. Для передачи этих строк используются параметры: argc, argv[], argp[].

Параметр argc имеет тип int, его значение равно количеству слов в командной строке, включая само имя вызываемой программы.

Параметр argv[] – это массив указателей на строки, каждая из которых содержит одно слово из командной строки. При этом строка с номером 0 содержит полное имя вызываемой программы.

Примечание – Каждое слово командной строки – это последовательность символов, не содержащая пробелов (пробелы используются для разделения слов). Если необходимо, чтобы слово содержало пробел, его нужно брать в кавычки.

Параметр argp[] – массив указателей на строки, которые содержат значения системных переменных (переменные окружения операционной системы).

Пример: Если командная строка при вызове программы имеет вид:

c:progs est print –x a2

То параметры argc и argv[] будут иметь значения:

argc=3

argv[0]=”c:progs est.exe”

argv[1]=”print”

argv[2]=”-x”

argv[3]=”a2”

Пример программы, которая выводит на экран параметры, переданные из командной строки, а также параметры операционной системы:

#include <iostream.h>

#include <conio.h>

void main(int argc, char *argv[],char *argp[])

{ int i;

clrscr();

cout<<"Список аргументов программы"<<endl;

cout<<"Имя программы:"<<argv[0]<<endl;

for (i=1;i<argc;i++)

cout<<i<<"_й параметр="<<argv[i]<<endl;

cout<<"Параметры операционной системы"<<endl;

while (*argp)

{ cout<<*argp<<endl;

argp++;

}

}

 




Поделиться с друзьями:


Дата добавления: 2014-01-13; Просмотров: 390; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.