Помощь в написании студенческих работ
Антистрессовый сервис

Глобальные переменные и директивы препроцессора

РефератПомощь в написанииУзнать стоимостьмоей работы

При возведении матрицы в квадрат нам нужно просто одну и туже перемножить на себя. Printf («%4d «, C);//результат Аналогично функции summa вводятся функции для разности. Так как использовали тип функции float, используем дополнительную функцию. Sum += A * B; //умножение строчки на столбец и сложение элементов. Sum += A * B; //умножение строчки на столбец и сложение элементов. For (X = 0; X < G… Читать ещё >

Глобальные переменные и директивы препроцессора (реферат, курсовая, диплом, контрольная)

Как и во всех программах на языке программирования С++, в самом начале программы подключаются директивы препроцессора. В моей программе, помимо основных директив, я подключала специальные, например, #include и другие. Затем я описала несколько глобальных переменных:

int n, m; //размер матрицы.

int c[10][10]; //результативная матрица.

int i, j, f;

int a[10][10]; //принимают передаваемые значение.

int b[10][10]; //принимают передаваемые значения.

int x[10][10]; //исходная матрица.

int y[10][10]; //исходная матрица.

int DET;//определитель.

FILE *f1, *f2;//описание файлов После директив, я описала ещё семь функций, для каждого пункта меню, к которому я ещё вернусь. А именно функции: void print (), для вывода на экран исходных матриц, void summa (), для сложения исходных матриц, void razn (), для нахождения разности двух матриц, void mult (), для перемножения этих матриц, float Det (), для нахождения определителя матрицы, void trans (), транспонирование матрицы, void Umn (), умножение матрицы на число Разбором функций я займусь в следующей части курсовой работы. А пока я покажу, как эти функции вызываются в основной программе:

Do {.

printf («1 — Просмотр матриц, А и В.»);

printf («2 — Сумма матриц, А и В.»);

printf («3 — Разность матриц, А и В.»);

printf («4 — Умножение матриц, А и В.»);

printf («5 — Нахождение определителя матрицы.»);

printf («6 — Транспонирование матрицы.»);

printf («7 — Умножение матрицы на число. «);

printf («8 — Матрица в квадрате. «);

printf («9 — Выход!»);

printf (««);

switch (c=getch ()).

{case '1': {system («cls»);print (); break;}.

case '2': {system («cls»);summa (); break; }.

case '3': {system («cls»);razn (); break;}.

case '4': {system («cls»);mult (a, b); break;}.

case '5': {system («cls»);print1(); break;}.

case '6': { printf («1 — Транспонирование матрицы А.»);

printf («2 — Транспонирование матрицы В.»);

printf (««);

switch (C=getch ()).

{case '1':system («cls»);trans (a); break;

case '2':system («cls»);trans2(b); break;

} break;

}.

case '7': {system («cls»);Umn (); break;}.

}.

case '8':{ printf («1 — Матрица в квадрате А.»);

printf («2 — Матрица в квадрате В.»);

printf (««);

switch (C = getch ()).

{ case '1': system («cls»); square (a); break;

case '2': system («cls»); square (b); break; }.

while (c≠'9').

Собственно, так и будет выглядеть меню в редакторе. Переменная c типа char. Каждый пункт соответсвтует определённой функции. Вывод меню на экран будет повторяться до тех пор, пока пользователем не будет введено число 9, чтобы выйти из программы.

Начнём описание самих функций. Но для начала определимся, что размер матрицы задается в глобальных переменных const int n=10; Первая из функций — это функция заполнения матриц, вывод их на экран. Так как я использовала чтение матриц из файла, то я использовала проверку на наличие ошибки при открытии файла.

void openf (int A[10][10], int B[10][10])//функция заполнения матриц.

{ if (f == 1)//считывание из файла.

{ if ((f1 = fopen («C:input1.txt» ," r")) == NULL).

{ printf («ОШИБКА ОТКРЫТИЯ ФАЙЛА!!»);

exit (1);

} else.

printf («ФАЙЛ input1 ОТКРЫТ!!»);

printf (««);

if ((f2=fopen («C:input2.txt» ," r"))==NULL).

{ printf («ОШИБКА ОТКРЫТИЯ ФАЙЛА!!»);

exit (1);

} else.

printf («ФАЙЛ input2 ОТКРЫТ!!»);

printf («МАТРИЦА А! «);

fscanf (f1," %d" ,&n);// считывание из файла размер матрицы.

fscanf (f1," %d" ,&m);

for (i = 0; i < n; i++)// счит эл из файла.

for (j = 0; j < m; j++).

fscanf (f1," %d" ,&A[i][j]);

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

for (j = 0; j < m; j++).

x[i][j] = A[i][j];

printf (««);

fscanf (f2," %d" ,&n);

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

for (j = 0; j < m; j++).

fscanf (f2," %d" ,&B[i][j]);

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

for (j = 0; j < m; j++).

y[i][j]=B[i][j];

} else//заполнение случайным образом.

{ printf (««);

printf («введите количество строк матрицы «);

scanf («%d» ,&n);

printf («введите количество столбцов матрицы «);

scanf («%d» ,&m);

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

{ for (j = 0; j < m; j++).

{ A[i][j] = rand ()%10;

x[i][j] = A[i][j]; }.

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

{ for (j = 0; j < m; j++).

{B[i][j] = rand ()%10;

y[i][j] = B[i][j];

}}}}.

void print ()//вывод матрицы на экран {.

printf (««);

printf («МАТРИЦА A!!»);

printf (««);

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

for (j = 0; j < m; j++) {.

printf («%4d «, x[i][j]);//матрица A }.

printf (««);

}printf (««);

printf («МАТРИЦА В!!»);

printf (««);

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

for (j = 0; j < m; j++) {.

printf («%4d «, y[i][j]);//матрица B }.

printf (««);

}}.

Далее следует опсиание функции сложения матриц, в которой я использую счётчики, используемый в цикле i, j, которые помогают компилятору определять начало и конец строк/столбцов в матрице.

void summa ()//функция сложения.

{ int C[10][10];

for (i=0;i.

for (j=0;j.

C[i][j] = x[i][j] + y[i][j]; //A+B.

printf («МАТРИЦА C! (сумма) «);

for (int i=0;i.

{ for (int j=0;j.

{ printf («%4d «, C[i][j]);//результат Аналогично функции summa вводятся функции для разности.

void razn ()//функция разности.

{ int Z[10][10];

for (i=0;i.

for (j=0;j.

Z[i][j] = x[i][j] - y[i][j]; //A-B }}.

printf («МАТРИЦА C!!(разность) «);

for (int i=0;i.

{for (int j=0;j.

printf («%4d «, Z[i][j]);//результат И функция умножения матриц, в которой мы, чтобы получить очередной элемент матрицы, перемножаем соответствующие элементы, а затем складываем их.

void mult (int A[10][10], int B[10][10])//умножение матриц.

{int k, sum;//переменные.

int C[10][10]; //результат.

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

for (j = 0; j < m; j++).

{ sum = 0;// временная переменная.

for (k = 0; k < n; k++).

sum += A[i][k] * B[k][j]; //умножение строчки на столбец и сложение элементов.

C[i][j]=sum;

printf («МАТРИЦЫ C! «);

for (int i=0;i.

{for (int j=0;j.

После выбора в меню данных пунктов, на экране появляется матрица С, которая является результатом вычисления суммы, разности или умножения двух исходных матриц.

Функция умножения матрицы на число:

Первое, что нужно сделать это ввести умножаемое число, затем произведем выбор матрицы:

void Umn ()//умножение матрицы на число.

{ int w=0,q=0;

printf («Введите умножаемое число «);

scanf («%d» ,&w);

printf («Какую матрицу следует умножить «);

printf («1. Матрица А. «);

printf («2. Матрица В. «);

printf («Результат «);

switch (q=getch ()).

{//выбор матрицы.

case '1':

{ for (i=0;i.

{ for (j=0;j.

printf («%4d «, x[i][j]*w);//умножение матрицы A на число w.

printf (««);

}break; }.

case '2': {.

for (i=0;i.

{for (j=0;j.

printf («%4d «, y[i][j]*w);//умножение матрицы B на число w.

printf (««); }.

break; }}}.

Нахождение определителя исходной матрицы. Я не буду ее полностью показывать, но вот только самое интересное из данной реализации:

//вычисление определителя.

int Det (int G, int M[10][10])// G размер матрицы.

{ if (G == 1) //проверка единичной матрицы.

return M[0][0];

else {.

int M1[10][10]; // массив для записи значений.

int x, X, Y, n;

int Res = 0;

n = 1;// знакопеременная.

for (i = 0; i < G; i++)// по строке.

{ for (Y = 1; Y < G; Y++).

{ x = 0;

for (X = 0; X < G; X++)// копирование массива из одного в другой.

if (X ≠ i).

M1[Y-1][x++] = M[Y][X]; }.

Res += n * M[0][i] * Det (G — 1, M1);// запись результата рекурсивно.

n *= -1;// меняем знак переменной }.

return Res; }.

_getch (); }.

где Y и X это счетчики. Тип функции я описала float, поэтому для вывода на экран мне понадобилась дополнительная функция.

void print1 ()//вывод результата.

{int det=Det (n, a);

int det1=Det (m, b);

printf («ОПРЕДЕЛИТЕЛЬ МАТРИЦЫ, А det=%d «, det);

printf («ОПРЕДЕЛИТЕЛЬ МАТРИЦЫ B det=%d «, det1);

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

void trans (int A[10][10])//транспонирование матрицы А.

{ printf (««);

printf («МАТРИЦА A! «);

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

{for (j = 0; j < m; j++).

{ printf («%4d «, A[i][j]);//матрица A.

} printf (««); }.

printf («ТРАНСПОНИРОВАННАЯ МАТРИЦА! «);

for (i=0; i.

for (j=0; j.

{ x[j][i]=A[i][j]; }.

for (i=0;i.

{for (j=0;j.

printf («%4d «, x[i][j]);

printf (««); } }.

void trans2 (int A[10][10])//транспонирование матрицы В.

{ printf («МАТРИЦА B! «);

printf (««);

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

{ for (j = 0; j < m; j++).

{ printf («%4d «, A[i][j]);//матрица B.

} printf (««);}.

При выборе 6 пункта меню, у меня появляются два подпункта, где нужно выбрать над какой матрицей производится транспонирование.

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

void square (int A[10][10]).

{printf («КВАДРАТ «);

mult (A, A); }.

Код программы:

#include «stdafx.h» .

#include.

#include.

#include.

#include.

#include.

#include.

#include.

#include.

using namespace std;

int n, m; //размер матрицы.

int c[10][10]; //результативная матрица.

int i, j, f;

int a[10][10]; //принимают передаваемые значение.

int b[10][10]; //принимают передаваемые значения.

int x[10][10]; //исходная матрица.

int y[10][10]; //исходная матрица.

int DET;//определитель.

FILE *f1, *f2;//описание файлов.

void openf (int A[10][10], int B[10][10])//функция заполнения матриц.

{ if (f == 1)//считывание из файла.

{ if ((f1 = fopen («C:input1.txt» ," r")) == NULL).

{ printf («ОШИБКА ОТКРЫТИЯ ФАЙЛА!!»);

exit (1);

} else.

printf («ФАЙЛ input1 ОТКРЫТ!!»);

printf (««);

if ((f2=fopen («C:input2.txt» ," r"))==NULL).

{ printf («ОШИБКА ОТКРЫТИЯ ФАЙЛА!!»);

exit (1);

} else.

printf («ФАЙЛ input2 ОТКРЫТ!!»);

printf («МАТРИЦА А! «);

fscanf (f1," %d" ,&n);// считывание из файла размер матрицы.

fscanf (f1," %d" ,&m);

for (i = 0; i < n; i++)// счит эл из файла.

for (j = 0; j < m; j++).

fscanf (f1," %d" ,&A[i][j]);

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

for (j = 0; j < m; j++).

x[i][j] = A[i][j];

printf (««);

fscanf (f2," %d" ,&n);

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

for (j = 0; j < m; j++).

fscanf (f2," %d" ,&B[i][j]);

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

for (j = 0; j < m; j++).

y[i][j]=B[i][j]; }.

else//заполнение случайным образом.

{ printf (««);

printf («введите количество строк матрицы «);

scanf («%d» ,&n);

printf («введите количество столбцов матрицы «);

scanf («%d» ,&m);

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

{ for (j = 0; j < m; j++).

{ A[i][j] = rand ()%10;

x[i][j] = A[i][j]; }.

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

{ for (j = 0; j < m; j++).

{ B[i][j] = rand ()%10;

y[i][j] = B[i][j];

}}}} void print ()//вывод матрицы на экран.

{ printf (««);

printf («МАТРИЦА A!!»);

printf (««);

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

{ for (j = 0; j < m; j++).

{ printf («%4d «, x[i][j]);//матрица A.

} printf (««);

} printf (««);

printf («МАТРИЦА В!!»);

printf (««);

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

for (j = 0; j < m; j++) {.

printf («%4d «, y[i][j]);//матрица B }.

printf (««); }}.

void summa ()//функция сложения.

{ int C[10][10];

for (i=0;i.

for (j=0;j.

C[i][j] = x[i][j] + y[i][j]; //A+B.

printf («МАТРИЦА C! (сумма) «);

for (int i=0;i.

{ for (int j=0;j.

printf («%4d «, C[i][j]);//результат }.

printf (««); }}.

void razn ()//функция разности.

{ int Z[10][10];

for (i=0;i.

for (j=0;j.

Z[i][j] = x[i][j] - y[i][j]; //A-B.

}} printf («МАТРИЦА C!!(разность) «);

for (int i=0;i.

{for (int j=0;j.

printf («%4d «, Z[i][j]);//результат }.

printf (««);}}.

void mult (int A[10][10], int B[10][10])//умножение матриц.

{int k, sum;//переменные.

int C[10][10]; //результат.

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

for (j = 0; j < m; j++){.

sum = 0;// временная переменная.

for (k = 0; k < n; k++).

sum += A[i][k] * B[k][j]; //умножение строчки на столбец и сложение элементов.

C[i][j]=sum;

} printf («МАТРИЦЫ C! «);

for (int i=0;i.

{for (int j=0;j.

printf («%4d «, C[i][j]);

printf (««); }}.

//вычисление определителя.

int Det (int G, int M[10][10])// G размер матрицы.

{ if (G == 1) //проверка единичной матрицы.

return M[0][0];

else.

{ int M1[10][10]; // массив для записи значений.

int x, X, Y, n;

int Res = 0;

n = 1;// знакопеременная.

for (i = 0; i < G; i++)// по строке.

{ for (Y = 1; Y < G; Y++).

{ x = 0;

for (X = 0; X < G; X++)// копирование массива из одного в другой.

if (X ≠ i).

M1[Y-1][x++] = M[Y][X];

} Res += n * M[0][i] * Det (G — 1, M1);// запись результата рекурсивно.

n *= -1;// меняем знак переменной }.

return Res; }.

_getch ();

}.

//так как использовали тип функции float, используем дополнительную функцию.

void print1 ()//вывод результата.

{int det=Det (n, a);

int det1=Det (m, b);

printf («ОПРЕДЕЛИТЕЛЬ МАТРИЦЫ, А det=%d «, det);

printf («ОПРЕДЕЛИТЕЛЬ МАТРИЦЫ B det=%d «, det1); }.

void trans (int A[10][10])//транспонирование матрицы А.

{ printf (««);

printf («МАТРИЦА A! «);

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

{for (j = 0; j < m; j++).

{ printf («%4d «, A[i][j]);//матрица A }.

printf (««); }.

printf («ТРАНСПОНИРОВАННАЯ МАТРИЦА! «);

for (i=0; i.

for (j=0; j.

{ x[j][i]=A[i][j]; }.

for (i=0;i.

{for (j=0;j.

printf («%4d «, x[i][j]);

printf (««); } }.

void trans2 (int A[10][10])//транспонирование матрицы В.

{ printf («МАТРИЦА B! «);

printf (««);

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

for (j = 0; j < m; j++) {.

printf («%4d «, A[i][j]);//матрица B }.

printf (««);

}printf («ТРАНСПОНИРОВАННАЯ МАТРИЦА! «);

for (i=0; i.

for (j=0; j.

{ y[j][i]=A[i][j];

}for (i=0;i.

{for (j=0;j.

printf («%4d «, y[i][j]);

printf (««);

} }void Umn ()//умножение матрицы на число.

{ int w=0,q=0;

printf («Введите умножаемое число «);

scanf («%d» ,&w);

printf («Какую матрицу следует умножить «);

printf («1. Матрица А. «);

printf («2. Матрица В. «);

printf («Результат «);

switch (q=getch ()).

{//выбор матрицы.

case '1':

{ for (i=0;i.

{for (j=0;j.

printf («%4d «, x[i][j]*w);//умножение матрицы A на число w.

printf (««);

}break;

} case '2':

{ for (i=0;i.

{for (j=0;j.

printf («%4d «, y[i][j]*w);//умножение матрицы B на число w.

printf (««);

} break; }}}void square (int A[10][10]).

{ printf («КВАДРАТ «);

mult (A, A);

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

{ setlocale (LC_ALL," Russian");

char c, C, d;

printf («КУРСОВАЯ РАБОТА «);

printf.

(«_______________________________________________________________________________ «);

printf («студента группы ПМбд-21 «);

printf («Сазонова Дениса «);

printf (««Программная реализация матричных операций» «);

printf («(для продолжения нажмите Enter.)»);

_getch ();

system («cls»);//пробел между названием и вводом.

printf («Введите способ заполнения матрицы «);

printf («1. Загрузка из файла «);

printf («2. Заполнение случайными числами «);

switch (d = getch ()).

{case'1':

{f = 1;

openf (a, b);

break; }.

case'2':

{ f = 2;

openf (a, b);

break;

}} print ();

do.

{ printf («1 — Просмотр матриц, А и В.»);

printf («2 — Сумма матриц, А и В.»);

printf («3 — Разность матриц, А и В.»);

printf («4 — Умножение матриц, А и В.»);

printf («5 — Нахождение определителя матрицы.»);

printf («6 — Транспонирование матрицы.»);

printf («7 — Умножение матрицы на число. «);

printf («8 — Матрица в квадрате. «);

printf («9 — Выход!»);

printf (««);

switch (c=getch ()).

{ case '1':

{ system («cls»);

print ();

break;

} case '2':

{ system («cls»);

summa ();

break;

}case '3':

{ system («cls»);

razn ();

break;

} case '4':

{ system («cls»);

printf («УМНОЖЕНИЕ «);

mult (a, b);

break; }.

case '5':

{ printf («1 — Определитель матрицы А.»);

printf («2 — Определитель матрицы В.»);

printf (««);

switch (C = getch ()).

{ case '1':

system («cls»);

printf («1 — Определитель матрицы, А = %d», Det (n, a));

break;

case '2':

system («cls»);

printf («1 — Определитель матрицы B = %d», Det (m, b));

break; }.

break; }.

case '6':

{ printf («1 — Транспонирование матрицы А.»);

printf («2 — Транспонирование матрицы В.»);

printf (««);

switch (C = getch ()).

{ case '1':

system («cls»);

trans (a);

break;

case '2':

system («cls»);

trans2(b);

break;

} break;

} case '7':

{ system («cls»);

Umn ();

break; }.

case '8': {.

printf («1 — Матрица в квадрате А.»);

printf («2 — Матрица в квадрате В.»);

printf (««);

switch (C = getch ()) {.

case '1':

system («cls»);

square (a);

break;

case '2':

system («cls»);

square (b);

break;}.

break;

}}} while (c ≠ '9');

_getch ();

return 0;}.

Показать весь текст
Заполнить форму текущей работой