Задание:
Выполнить задания из лабораторной работы №2 (В) оформив каждый пункт задания в виде функции. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.
Цель работы:
Изучить использование функций в C++.
Теоретические сведения:
Объявление функций:
1 2 3 |
[класс] тип имя ([список_параметров])[throw(исключения)] {тело функции } |
Механизм возврата из функции в вызвавшую её функцию реализуется оператором:
1 |
return [выражение] |
Функция может быть с переменным числом параметров. Пример:
1 |
int printf.(const char*, …) |
Это означает, что функция должна содержать 1 параметр типа char * и может либо содержать, либо не содержать других параметров. Для доступа к необязательным параметрам используются макросы библиотеки va_start, va arg и va_end, находящиеся в заголовочном файле <stdarg.h>.
Рекурсивные функции используются также, как и везде.
Можно объявлять функции с одинаковыми именами, но с разными параметрами.
Текст программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
#include <stdio.h> #include <conio.h> #include <math.h> #include <stdlib.h> const M=4; const N=M; int a[M][N]= { 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12, 13,14,15,16 }; int k=2; int b[M][N]; void PrintMatrix(int b[M][N]); void Step(int &m,int &n,int k) ; void DoCalculations(int a[M][N],int b[M][N],int k); void main() { printf("\n"); PrintMatrix(b); DoCalculations(a,b,k); PrintMatrix(b); } void PrintMatrix(int b[M][N]) { printf("\n"); for (int m=0; m<N;m++) { for (int n=0; n<M;n++) { printf("%6i",b[m][n]); } printf("\n"); } } void Step(int &m,int &n,int k) { int n1=n,m1=m; int s=N/2-1; int n2,m2,g; if (n>s) n2=N-1-n; else n2=n; if (m>s) m2=M-1-m; else m2=m; if (m2<n2) g=m2; else g=n2; // printf("Уровень=%i",g); int Num; int N2; N2=N-g*2; if (m==g) Num=n-g; if (n==g) Num=N2-1+N2-2+N2-1+(N2)-m+g; if (n==N-g-1) Num=N2-1+m-g; if (m==N-g-1) Num=N2-1+N2-2+(N2)-n+g; // printf("Число=%i ",Num); Num=Num+k; Num=Num%(N2-1+N2-1+N2-2+N2); // printf("модуль=%i",N2-1+N2-1+N2-2+N2); // printf("Число после=%i N2=%i ",Num,N2); if (Num<=N2-1) {m1=g;n1=Num+g;} if ((Num>N2-1)&&(Num<=N2-1+N2-1)) {n1=N2-1+g; m1=Num-N2+1+g;} if ((Num>N2-1+N2-1)&&(Num<=N2-1+N2-2+N2-1+1)){m1=N2-1+g;n1=N2-(Num-(N2-1+N2-2))+g;} if (Num>N2-1+N2-2+N2-1+1){n1=g;m1=N2-(Num-(N2-1+N2-2+N2-1));} // printf("Новые координаты: m=%i, n=%i",m1,n1); n=n1; m=m1; } void DoCalculations(int a[M][N],int b[M][N],int k) { for (int m=0; m<M;m++) { for (int n=0; n<N;n++) { int m1=m,n1=n; Step(m1,n1,k); b[m1][n1]=a[m][n]; printf("%6i",a[m][n]); // PrintMatrixB(); // getch(); } printf("\n"); } } |
Вывод:
Были изучены функции в C++. Была написана программа на C++ выполняющая данное задание.