1 / 145

Программирование

Программирование. Часть 5 Функции. 4 . Структурное программирование 4 .10. Функции. void input_vect (double v [ ], int dim) { … return; }. Структурная декомпозиция программы. Выполнение начинается с main. int main() { … input_vect ( a,n ); … add_vect ( a,b,c,n );

xyla-cantu
Download Presentation

Программирование

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Программирование Часть 5 Функции

  2. 4. Структурное программирование 4.10. Функции void input_vect (double v [ ], int dim) { … return; } Структурная декомпозиция программы Выполнение начинается с main int main() { … input_vect (a,n); … add_vect (a,b,c,n); … output_vect (c,n); … return 0 } void add_vect (double v1 [ ], double v2 [ ], double res [ ], int dim) { … return; } void output_vect (double v [ ], int dim) { … return; } Возврат из main в ОС

  3. 4. Структурное программирование 4.10. Функции void input_vect (double v [ ], int dim) { … return; } Структурная декомпозиция программы Выполнение начинается с main int main() { … input_vect (a,n); … add_vect (a,b,c,n); … output_vect (c,n); … return 0 } void add_vect (double v1 [ ], double v2 [ ], double res [ ], int dim) { … return; } void output_vect (double v [ ], int dim) { … return; } Возврат из main в ОС

  4. 4. Структурное программирование 4.10. Функции void input_vect (double v [ ], int dim) { … return; } Структурная декомпозиция программы Выполнение начинается с main int main() { … input_vect (a,n); … add_vect (a,b,c,n); … output_vect (c,n); … return 0 } void add_vect (double v1 [ ], double v2 [ ], double res [ ], int dim) { … return; } void output_vect (double v [ ], int dim) { … return; } Возврат из main в ОС

  5. 4. Структурное программирование 4.10. Функции void input_vect (double v [ ], int dim) { … return; } Структурная декомпозиция программы Выполнение начинается с main int main() { … input_vect (a,n); … add_vect (a,b,c,n); … output_vect (c,n); … return 0 } void add_vect (double v1 [ ], double v2 [ ], double res [ ], int dim) { … return; } void output_vect (double v [ ], int dim) { … return; } Возврат из main в ОС

  6. 4. Структурное программирование 4.10. Функции void input_vect (double v [ ], int dim) { … return; } Структурная декомпозиция программы Выполнение начинается с main int main() { … input_vect (a,n); … add_vect (a,b,c,n); … output_vect (c,n); … return 0 } void add_vect (double v1 [ ], double v2 [ ], double res [ ], int dim) { … return; } void output_vect (double v [ ], int dim) { … return; } Возврат из main в ОС

  7. 4. Структурное программирование 4.10. Функции void input_vect (double v [ ], int dim) { … return; } Структурная декомпозиция программы Выполнение начинается с main int main() { … input_vect (a,n); … add_vect (a,b,c,n); … output_vect (c,n); … return 0 } void add_vect (double v1 [ ], double v2 [ ], double res [ ], int dim) { … return; } void output_vect (double v [ ], int dim) { … return; } Возврат из main в ОС

  8. 4. Структурное программирование 4.10. Функции void input_vect (double v [ ], int dim) { … return; } Структурная декомпозиция программы Выполнение начинается с main int main() { … input_vect (a,n); … add_vect (a,b,c,n); … output_vect (c,n); … return 0 } void add_vect (double v1 [ ], double v2 [ ], double res [ ], int dim) { … return; } void output_vect (double v [ ], int dim) { … return; } Возврат из main в ОС

  9. 4. Структурное программирование 4.10. Функции void input_vect (double v [ ], int dim) { … return; } Структурная декомпозиция программы Выполнение начинается с main int main() { … input_vect (a,n); … add_vect (a,b,c,n); … output_vect (c,n); … return 0 } void add_vect (double v1 [ ], double v2 [ ], double res [ ], int dim) { … return; } void output_vect (double v [ ], int dim) { … return; } Возврат из main в ОС

  10. 4. Структурное программирование 4.10. Функции void input_vect (double v [ ], int dim) { … return; } Структурная декомпозиция программы Выполнение начинается с main int main() { … input_vect (a,n); … add_vect (a,b,c,n); … output_vect (c,n); … return 0 } void add_vect (double v1 [ ], double v2 [ ], double res [ ], int dim) { … return; } void output_vect (double v [ ], int dim) { … return; } Возврат из main в ОС

  11. 4. Структурное программирование 4.10. Функции void input_vect (double v [ ], int dim) { … return; } Структурная декомпозиция программы Выполнение начинается с main int main() { … input_vect (a,n); … add_vect (a,b,c,n); … output_vect (c,n); … return 0 } void add_vect (double v1 [ ], double v2 [ ], double res [ ], int dim) { … return; } void output_vect (double v [ ], int dim) { … return; } Возврат из main в ОС

  12. 4. Структурное программирование 4.10. Функции void input_vect (double v [ ], int dim) { … return; } Структурная декомпозиция программы Выполнение начинается с main int main() { … input_vect (a,n); … add_vect (a,b,c,n); … output_vect (c,n); … return 0 } void add_vect (double v1 [ ], double v2 [ ], double res [ ], int dim) { … return; } void output_vect (double v [ ], int dim) { … return; } Возврат из main в ОС

  13. 4. Структурное программирование 4.10. Функции void input_vect (double v [ ], int dim) { … return; } Структурная декомпозиция программы Выполнение начинается с main int main() { … input_vect (a,n); … add_vect (a,b,c,n); … output_vect (c,n); … return 0 } void add_vect (double v1 [ ], double v2 [ ], double res [ ], int dim) { … return; } void output_vect (double v [ ], int dim) { … return; } Возврат из main в ОС

  14. 4. Структурное программирование 4.10. Функции void input_vect (double v [ ], int dim) { … return; } Структурная декомпозиция программы Выполнение начинается с main int main() { … input_vect (a,n); … add_vect (a,b,c,n); … output_vect (c,n); … return 0 } void add_vect (double v1 [ ], double v2 [ ], double res [ ], int dim) { … return; } void output_vect (double v [ ], int dim) { … return; } Возврат из main в ОС

  15. 4. Структурное программирование 4.10. Функции void input_vect (double v [ ], int dim) { … return; } Структурная декомпозиция программы Выполнение начинается с main int main() { … input_vect (a,n); … add_vect (a,b,c,n); … output_vect (c,n); … return 0 } void add_vect (double v1 [ ], double v2 [ ], double res [ ], int dim) { … return; } void output_vect (double v [ ], int dim) { … return; } Возврат из main в ОС

  16. 4. Структурное программирование 4.10. Функции void input_vect (double v [ ], int dim) { … return; } Структурная декомпозиция программы Выполнение начинается с main int main() { … input_vect (a,n); … add_vect (a,b,c,n); … output_vect (c,n); … return 0 } void add_vect (double v1 [ ], double v2 [ ], double res [ ], int dim) { … return; } void output_vect (double v [ ], int dim) { … return; } Возврат из main в ОС

  17. 4. Структурное программирование 4.10. Функции • Функция – изолированный именованный блок кода, имеющий определенное назначение • Информация в функцию передается с помощью аргументов (фактических параметров), задаваемых при ее вызове. • Эти аргументы должны соответствовать формальным параметрам, указанным в описании функции. аргументы int k = add_ints (2,3); Значения аргументов заменяют соответствующие параметры в определении функции int add_ints (int a, int b) { return a+b; } Возвращается значение 5 формальные параметры

  18. 4. Структурное программирование 4.10. Функции • Структура функций • Тип_ВозвратаИмя_функции(список_параметров) • { • операторы; • returnвыражение; • } • Область видимости параметров функции, объявленных в ее заголовке и переменных, объявленных в ее теле, ограничивается блоком тела функции. • Эти переменные, если они не объявлены с атрибутом static уничтожаются после завершения выполнения функции, а хранимые ими значения безвозвратно теряются. • Если функция не возвращает значения, в качестве типа возврата указывается void, а оператор return не содержит выражения, значение которого должно быть возвращено в вызываемую функцию. Заголовок Тело функции

  19. 4. Структурное программирование 4.10. Функции • Прототипы функций • К моменту вызова функции компилятор должен иметь информацию о ней, чтобы скомпилировать правильно ее вызов. • Если текст функции размещен в файле с исходным текстом после ее вызова или вообще размещен в другом файле, необходимо объявить функцию с помощью оператора, называемого прототипом функции. • Все прототипы функций обычно помещаются в начале исходного файла программы. Заголовочные файлы, включаемые для использования стандартных библиотечных функций, помимо прочего включают в себя прототипы этих функций. • Описание прототипа ничем не отличается от описания заголовка функции: • Тип_Возврата Имя_функции (список_параметров); • Описание прототипа, в отличие от заголовка, заканчивается точкой с запятой.

  20. 4. Структурное программирование 4.10. Функции Простой пример: функции для ввода и вывода одномерного массива void input_vect(double v[], int n) { for (int i=0; i<=n-1; i++) { cout << "Enter vector[" << i << "] :"; cin >> v[i]; } return; } void input_vect(double v[ ],int n); void output_vect(double v[ ],int n); int main() { const int m=5; double x[5]; input_vect(x,m); output_vect(x,m); return 0; } void print_vector (double v[], int n) { cout << endl << "The vector is:"; for (int i=0; i<=n-1; i++) cout <<setw(10)<<v[i]; cout << endl; return; }

  21. 4. Структурное программирование 4.10. Функции • Способы передачи данных в вызываемую функцию • Путем передачи аргументов функции • С использованием глобальных переменных • Через файлы на внешних запоминающих устройствах • Способы передачи данных из вызываемой функции • Через возвращаемое значение • Через формальные параметры, вызываемые по ссылке • Путем изменения значений глобальных переменных • Через файлы на внешних запоминающих устройствах • Кроме того, функция может выполнять какое-либо действие, не требующее передачи из нее данных в вызывающую функцию

  22. 4. Структурное программирование 4.10. Функции • Передача аргументов в функциюпо значению • В С++ используются два механизма передачи аргументов в функцию: по значению и по ссылке. • При передаче по значению в функции создаются копии аргументов с именами формальных параметров. • Значения аргументов копируются в созданные переменные. • По завершении работы функции обратное копирование из формальных параметров в переменные - аргументы не производится. • Если в теле функции значения формальных параметров были изменены, эти изменения по завершении работы функции будут потеряны и никак не отразятся на значениях фактических параметров. • По умолчанию все аргументы, кроме массивов, передаются в функции по значению

  23. 4. Структурное программирование 4.10. Функции Передача аргументов по значению int my(int i); int main() { int k=3, m=0; m=my(k); cout << k << " " << m; // 3 8 _getch(); return 0; } int my(int i) { int p=2; i*=2; return p+i; } АЛУ k m

  24. 4. Структурное программирование 4.10. Функции Передача аргументов по значению int my(int i); int main() { int k=3, m=0; m=my(k); cout << k << " " << m; // 3 8 _getch(); return 0; } int my(int i) { int p=2; i*=2; return p+i; } АЛУ k i m

  25. 4. Структурное программирование 4.10. Функции Передача аргументов по значению int my(int i); int main() { int k=3, m=0; m=my(k); cout << k << " " << m; // 3 8 _getch(); return 0; } int my(int i) { int p=2; i*=2; return p+i; } АЛУ k i m p

  26. 4. Структурное программирование 4.10. Функции Передача аргументов по значению int my(int i); int main() { int k=3, m=0; m=my(k); cout << k << " " << m; // 3 8 _getch(); return 0; } int my(int i) { int p=2; i*=2; return p+i; } АЛУ 3*2 = 6 k i m p

  27. 4. Структурное программирование 4.10. Функции Передача аргументов по значению int my(int i); int main() { int k=3, m=0; m=my(k); cout << k << " " << m; // 3 8 _getch(); return 0; } int my(int i) { int p=2; i*=2; return p+i; } АЛУ 3*2 = 6 k i m p

  28. 4. Структурное программирование 4.10. Функции Передача аргументов по значению int my(int i); int main() { int k=3, m=0; m=my(k); cout << k << " " << m; // 3 8 _getch(); return 0; } int my(int i) { int p=2; i*=2; return p+i; } АЛУ 2+6 = k i m p

  29. 4. Структурное программирование 4.10. Функции Передача аргументов по значению int my(int i); int main() { int k=3, m=0; m=my(k); cout << k << " " << m; // 3 8 _getch(); return 0; } int my(int i) { int p=2; i*=2; return p+i; } АЛУ 2+6 = 8 k my i m p

  30. 4. Структурное программирование 4.10. Функции Передача аргументов по значению int my(int i); int main() { int k=3, m=0; m=my(k); cout << k << " " << m; // 3 8 _getch(); return 0; } int my(int i) { int p=2; i*=2; return p+i; } АЛУ k my m

  31. 4. Структурное программирование 4.10. Функции • Передача аргументов в функциюпо ссылке • Припередаче по ссылке в вызываемую функцию передаются ссылки на переменные – аргументы. • Копии аргументов с именами формальных параметров не создаются. • Вместо этого, по ссылке обеспечивается доступ к участкам памяти, занимаемым аргументами. • Говоря другими словами, обработка аргументов ведется «на месте». • Чтобы передать значения аргументов по ссылке, в качестве формальных параметров указывают переменные –ссылки. • Все изменения формальных параметров, сделанные в функции, происходят с аргументами. • Если в качестве аргумента по ссылке передается константа, то формальный параметр-ссылка должен быть объявлен с модификатором const.

  32. 4. Структурное программирование 4.10. Функции int my(int &i); int main() { int k=3, m=0; m=my(k); cout << k << " " << m; // 6 8 _getch(); return 0; } int my(int &i) { int p=2; i*=2; return p+i; } АЛУ k m Передача аргументов в функциюпо ссылке

  33. 4. Структурное программирование 4.10. Функции int my(int &i); int main() { int k=3, m=0; m=my(k); cout << k << " " << m; // 3 8 _getch(); return 0; } int my(int &i) { int p=2; i*=2; return p+i; } АЛУ k m i Передача аргументов в функциюпо ссылке

  34. 4. Структурное программирование 4.10. Функции int my(int &i); int main() { int k=3, m=0; m=my(k); cout << k << " " << m; // 3 8 _getch(); return 0; } int my(int &i) { int p=2; i*=2; return p+i; } АЛУ k m p i Передача аргументов в функциюпо ссылке

  35. 4. Структурное программирование 4.10. Функции int my(int &i); int main() { int k=3, m=0; m=my(k); cout << k << " " << m; // 3 8 _getch(); return 0; } int my(int &i) { int p=2; i*=2; return p+i; } АЛУ 3*2 = 6 k m p i Передача аргументов в функциюпо ссылке

  36. 4. Структурное программирование 4.10. Функции int my(int &i); int main() { int k=3, m=0; m=my(k); cout << k << " " << m; // 3 8 _getch(); return 0; } int my(int &i) { int p=2; i*=2; return p+i; } АЛУ 3*2 = 6 k m p i Передача аргументов в функциюпо ссылке

  37. 4. Структурное программирование 4.10. Функции int my(int &i); int main() { int k=3, m=0; m=my(k); cout << k << " " << m; // 3 8 _getch(); return 0; } int my(int &i) { int p=2; i*=2; return p+i; } АЛУ 2+6 = k m p i Передача аргументов в функциюпо ссылке

  38. 4. Структурное программирование 4.10. Функции int my(int &i); int main() { int k=3, m=0; m=my(k); cout << k << " " << m; // 3 8 _getch(); return 0; } int my(int &i) { int p=2; i*=2; return p+i; } АЛУ 2+6 = 8 k m p i Передача аргументов в функциюпо ссылке

  39. 4. Структурное программирование 4.10. Функции int my(int &i); int main() { int k=3, m=0; m=my(k); cout << k << " " << m; // 3 8 _getch(); return 0; } int my(int &i) { int p=2; i*=2; return p+i; } АЛУ k my m Передача аргументов в функциюпо ссылке

  40. 4. Структурное программирование 4.10. Функции • Передача массивов по ссылке • Массивы передаются в функции по ссылке. При этом записывать перед формальным параметров знак ссылки & не следует: • int example (short a[3]); • При описании в качестве формального параметра одномерного массива, его размер указывать необязательно: • int example(short a[ ]); • При описании в качестве формального параметра многомерного массива, его размер по левому измерению указывать необязательно: • int example(short y[ ][4][3]);

  41. 4. Структурное программирование 4.10. Функции void set(short [ ][3], int); int main() { short a[2][3]={0}; set(a,2); return 0; } void set (short k[ ][3], int m) { for (short i=0; i<=m-1; i++) for (short j = 0; j<=2; j++) k[i][j]=i+j; return; } Передача массивов по ссылке a

  42. 4. Структурное программирование 4.10. Функции void set(short [ ][3], int); int main() { short a[2][3]={0}; set(a,2); return 0; } void set (short k[ ][3], int m) { for (short i=0; i<=m-1; i++) for (short j = 0; j<=2; j++) k[i][j]=i+j; return; } Передача массивов по ссылке a m k

  43. 4. Структурное программирование 4.10. Функции void set(short [ ][3], int); int main() { short a[2][3]={0}; set(a,2); return 0; } void set (short k[ ][3], int m) { for (short i=0; i<=m-1; i++) for (short j = 0; j<=2; j++) k[i][j]=i+j; return; } Передача массивов по ссылке a j i m k

  44. 4. Структурное программирование 4.10. Функции void set(short [ ][3], int); int main() { short a[2][3]={0}; set(a,2); return 0; } void set (short k[ ][3], int m) { for (short i=0; i<=m-1; i++) for (short j = 0; j<=2; j++) k[i][j]=i+j; return; } Передача массивов по ссылке a j i m k

  45. 4. Структурное программирование 4.10. Функции void set(short [ ][3], int); int main() { short a[2][3]={0}; set(a,2); return 0; } void set (short k[ ][3], int m) { for (short i=0; i<=m-1; i++) for (short j = 0; j<=2; j++) k[i][j]=i+j; return; } Передача массивов по ссылке a

  46. 4. Структурное программирование 4.10. Функции • Передача указателей в функции • Указатели обычно передаются по значению. Доступ к объектам, на которые они указывают при этом происходит «на месте». • Применение указателя в качестве параметра позволяет функции получить аргумент, а не его копию.

  47. 4. Структурное программирование 4.10. Функции int my(int *i); int main() { int k=3, m=0; m=my(&k); cout << k << " " << m; // 6 8 _getch(); return 0; } int my(int *i) { int p=2; *i *= 2; return p + *i; } АЛУ k m Передача указателей в функции

  48. 4. Структурное программирование 4.10. Функции int my(int *i); int main() { int k=3, m=0; m=my(&k); cout << k << " " << m; // 6 8 _getch(); return 0; } int my(int *i) { int p=2; *i *= 2; return p + *i; } АЛУ &i k m Передача указателей в функции

  49. 4. Структурное программирование 4.10. Функции int my(int *i); int main() { int k=3, m=0; m=my(&k); cout << k << " " << m; // 6 8 _getch(); return 0; } int my(int *i) { int p=2; *i *= 2; return p + *i; } АЛУ &i k m p Передача указателей в функции

  50. 4. Структурное программирование 4.10. Функции int my(int *i); int main() { int k=3, m=0; m=my(&k); cout << k << " " << m; // 6 8 _getch(); return 0; } int my(int *i) { int p=2; *i *= 2; return p + *i; } АЛУ 3*2 = 6 &i k m p Передача указателей в функции

More Related