АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Задача 4. Для заданных квадратных матриц: A = {a i j}3x3 и В = {bi j}4х4 вычислить симметричные им матрицы по правилу:

Читайте также:
  1. VI. Общая задача чистого разума
  2. Вопрос 2 Проверка и оценка в задачах со случайными процессами на примере решения задач экозащиты, безопасности и риска.
  3. Глава 10 Системный подход к задачам управления. Управленческие решения
  4. ГЛАВА 2.1. ЗАЩИТА ИННОВАЦИЙ КАК ЗАДАЧА УПРАВЛЕНИЯ ИННОВАЦИОННЫМИ ПРОЦЕССАМИ
  5. Глава 4. Математические основы оптимального управления в экономических задачах массового обслуживания
  6. Двойственная задача линейного программирования.
  7. Доклад о задачах власти Советов
  8. Доклад об экономическом положении рабочих Петрограда и задачах рабочего класса на заседании рабочей секции Петроградского совета рабочих и солдатских депутатов
  9. Задача 1
  10. Задача 1
  11. Задача 1
  12. Задача 1

Для заданных квадратных матриц: A = {a i j}3x3 и В = {bi j}4х4 вычислить симметричные им матрицы по правилу:

, x- матрица, симметричная матрице y.

Решение:

#include "stdafx.h"

 

void SM(float Y[4][4], int n, float X[4][4 ])/*безтиповая функция вычисления симметричной матрицы X из исходной матрицы Y */

{

int i,j;

for (i=0;i<n;i++)

for (j=i;j<n;j++)

{

X[i][j]=(Y[i][j] + Y[j][i])/2;

X[j][i] =X[i][j];

}

}

void VIVOD(float Y[4][4], int n)// функция вывода матрицы

{for (i=0;i<n;i++)

{for (j=0;j<n;j++) printf("%8.2f",Y[i][j]);

printf("\n");

}

}

void main()

{

float A[4][4], B[4][4], C[4][4], D[4][4];

int i, j;

printf("Введите матрицу А\n");

for (i=0;i<3;i++)

for (j=0;j<3;j++) scanf("%f",&A[i][j]);

printf("Введите матрицу B\n");

for (i=0;i<4;i++)

for (j=0;j<4;j++) scanf("%f",&B[i][j]);

SM(A, 3,C); // обращение к функции SM для матрицы A

SM(B, 4, D); // обращение к функции SM для матрицы B

printf("Симметричная матрица С\n");

VIVOD(C,3);

printf("Симметричная матрица D\n");

VIVOD(D,4);

}


 

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

Перегруженная функция – это функция, которая позволяет при обращении к себе варьировать типы передаваемых параметров. Цель перегрузки состоит в том, чтобы функция с одним и тем же именем возвращала разного типа значение при обращении к ней с различными типами фактических параметров. Рассмотрим этот механизм на примере некоторой абстрактной функции с именем SUM. Допустим, мы имеем три варианта функции SUM.

float SUM (float a, float b);

//принимает два вещественных аргумента и возвращает результат ввиде вещественного числа

 

double SUM (double a, double b);

//принимает два аргумента вещественного длинного типа и возвращает результат ввиде вещественного длинного числа

 

complex SUM (complex a, complex b);

//принимает два аргумента комплексного типа и возвращает результат ввиде комплексного числа

 

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

Наполним функцию SUM банальным алгоритмом вычисления суммы двух чисел.

#include "stdafx.h"

 

#define complex struct compl

complex

{double x,y;};

 

complex SUM (complex a, complex b)

{complex c;

c.x=a.x+b.x;

c.y=a.y+b.y;

return c;

}

float SUM (float a, float b)

{float c;

c=a+b;

return c;

}

double SUM (double a, double b)

{ double c;

c=a+b;

return c;

}

 

 

int _tmain(int argc, _TCHAR* argv[])

{complex z,m,n;

float a=4.5,b=6.5;

z.x=5; z.y=6;

m.x=7;m.y=8;

n= SUM (z,m); //вызов функции SUM для комплексных параметров

printf("%lf+i%lf\n",n.x,n.y);

float d= SUM (a,b); //вызов функции SUM для вещественных параметров

printf("d=%f\n",d);

float d2= SUM (10,35); //неоднозначный вызов функции SUM

printf("d2=%f\n",d2);

return 0;

}

 

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

По типам фактических параметров компилятор определяет, какую именно функцию требуется вызвать. Этот процесс называется разрешением перегрузки (перевод английского слова resolution в смысле «уточнение»). Тип возвращаемого функцией значения в разрешении не участвует. Механизм разрешения основан на достаточно сложном наборе правил, смысл которых сводится к тому, чтобы использовать функцию с наиболее подходящими аргументами или выдать сообщение, если такой не найдется. Если точного соответствия не найдено, выполняется преобразование типов параметров по общим правилам, например char в int; int во float, float в double; и т.п. Если соответствие может быть получено более чем одним способом, вызов считается неоднозначным и выдается сообщение об ошибке. В нашем примере это продемонстрировано вызовом третьим, когда в функцию SUM передаются в качестве параметров два целых числа 10 и 35. Эти параметры могут быть преобразованы как в тип float, так и в тип double, что и вызовет возникновение ошибочной неоднозначности.

При создании перегруженных функций необходимо придерживаться следующих правила:

• Перегруженные функции должны находиться в одной области видимости,

иначе произойдет сокрытие аналогично тому, как это происходит с одинаковыми именами переменных во вложенных блоках.

• Перегруженные функции могут иметь параметры по умолчанию, при этом

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

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

• Функции не могут быть перегружены, если описание их параметров отличается только модификатором const (например, int и const int), или использованием ссылки (например, int и int&).

Более подробную информацию о перегруженных функциях см. в [2].

 


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 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.008 сек.)