Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Аленский. лекции по проге.doc
Скачиваний:
26
Добавлен:
11.11.2018
Размер:
1.35 Mб
Скачать

2.3. Возврат значений из функции с помощью ссылочного типа

В этом случае ссылочный тип используется следующим образом:

  • в заголовке функции параметрырезультаты (в нашем примере y, z) записываем как переменные ссылочного типа, то есть с символом &;

  • в тексте функции никакие дополнительные символы для этих переменных не используем, то есть работаем, как с обычными переменными;

  • при вызове функции в качестве фактических параметров, указываем простые переменные соответствующего типа (cs, sn), объявленные обычным образом;

  • входные параметры как параметрызначения используются по тем же правилам (см. §1);

  • вызов функции с несколькими результатами осуществляется как вызов любой функции типа void, то есть отдельно, а не в выражении (см. § 1).

Почему полученное значение возвращается в вызывающую функцию? С помощью ссылочного типа определяется другое имя ячейки. Поэтому для формального (y) и фактического (cs) параметров отводится одна и та же ячейка, которая в функции называется y, а при вызове в головной функции — cs. Поэтому если в функции получим y, то этим самым определим и значение cs, то есть полученное в функции значение возвращается в вызывающую функцию. Аналогичная ситуация имеет место для переменных z и sn.

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

void CHANGE (float &u, float &v)

{ float temp;

temp=u; u=v; v=temp;

}

Тогда вызвать её можно, например, следующим образом:

float a=1.1, b=2.2;

CHANGE( a, b);

Так как a и u — это два имена одной и той же ячейки, то изменение u с 1.1 на 2.2 автоматически приведёт к изменению переменной a. Аналогично изменится и переменная b, если изменили значение переменной v. И тогда оператор cout<<a<<” “<<b; выведет изменённые значения 2.2 и 1.1, полученные в результате их перестановки.

Задачи и упражнения

  1. Составить и проверить функцию, которая в текстовом режиме с помощью символов псевдографики рисует границу прямоугольника, не заполняя его внутреннюю область.

void ramka (int x0, int y0, int, int);

int main ()

{ ramka (2,5, 10, 30); getch(); return 0;

}

void ramka (int x0, int y0, int n1, int n2)

{ int x,y,i; x=x0; y=y0;

gotoxy(x,y++); printf("%c",218); // символ левого верхнего угла

for (i=0;i<n1-2;i++)

{ gotoxy(x,y++); printf("%c", 179); // для вертикальной линии

}

gotoxy(x++,y); printf("%c",192); // левый нижний угол

for (i=0;i<n2-2;i++)

{ gotoxy(x++,y); printf("%c",196); // для горизонтальной линии

}

gotoxy(x,y--); printf("%c",217); // правый нижний угол

for(i=0;i<n1-2;i++)

{ gotoxy(x,y--); printf("%c",179);

}

gotoxy(x--,y); printf("%c",191); // правый верхний угол

for(i=0;i<n2-2;i++)

{ gotoxy(x--,y); printf("%c",196);

}

}

Коды всех символов, в том числе и символов псевдографики, можно вывести с помощью следующей программы:

main()

{ clrscr(); textcolor(2);

for (int i=1; i<256; i++)

{ cprintf("%4d",i); printf("%c%c" , i, i%12?' ':'\n');

}

getch(); return 0;

}

Здесь по формату "%4d выводим код символа указанным в textcolor вторым цветом, а по формату "%cвыводим символ с этим кодом цветом по умолчанию. При этом если i кратно 12, то выполняется переход на следующую строку экрана.

  1. Составить функцию для нахождения действительных корней квадратного уравнения ax2 + bx + c =0. Используя ее, составить и проверить функцию решения биквадратного уравнения az4 + bz2 + c =0.

  2. Составить и проверить функцию решения линейного уравнения вида ax=b.

  3. Вывести n параллельных горизонтальных линий разными цветами. Составить и использовать функцию для рисования одной горизонтальной линии.

  4. Вывести n параллельных вертикальных линий разными цветами. Составить и использовать функцию для рисования одной вертикальной линии.

  5. В текстовом режиме заполнить все окно вывода следующими фигурами, не заполняя их внутри:

    1. ромбами;

б) равнобедренными треугольниками;

в) прямоугольными треугольниками с прямым углом внизу слева;

г) прямоугольными треугольниками с прямым углом внизу справа.

Составить и использовать функцию для рисования границы одной фигуры в зависимости от варианта.

  1. В текстовом режиме нарисовать последовательность заполненных внутри прямоугольников, разместив их одним из следующих способов:

а) по диагонали окна, начиная с левого верхнего угла;

б) по диагонали окна, начиная с левого нижнего угла;

в) в шахматном порядке.