Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
работа с массивами.doc
Скачиваний:
9
Добавлен:
05.11.2018
Размер:
358.91 Кб
Скачать
    1. Формирование единичной матрицы

Единичная матрица представляет собой квадратную матрицу с единичными значениями элементов главной диагонали и нулевыми значениями всех остальных элементов. Например, матрица размером 4*4 имеет значения элементов

i

1 0 0 0

j 0 1 0 0

0 0 1 0

0 0 0 1

Алгоритм формирования единичной матрицы выполняется в два шага. Сначала формируется нулевая матрица, ведь наибольшее количество элементов – это элементы с нулевыми значениями. Далее в главную диагональ нулевой матрицы записываются значения, равные 1. Рассмотрим текст программы формирования единичной матрицы.

#include "stdafx.h"

#include <conio.h>

#include <locale.h>

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

{

//Программа табуляции функции 5*sin(x) от 0град. с шагом 15град

//

const int n_Max = 20; //Предельный размер квадратной матрицы

float b[n_Max][n_Max]; //Сам массив b

int n; //Текущий предельный размер массива матрицы

int i;

int j;

setlocale( LC_ALL, "russian" ); // установка русского режима

printf("Программа формирования единичной матрицы\n");

printf("Введите количество строк квадратной матрицы\n");

scanf("%d",&n); //n теперь определено

//обнуление всех элементов массива b

//Задание j – номеров строк обнуляемых элементов массива

for (int j = 0; j<n; j++)

//Задание i – номеров столбцов строки j элементов массива

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

b[j][i] = 0.0;

//Формирование единичной диагонали

//Задание j – номеров строк и столбцов единичных элементов

//массива матрицы

for (int j = 0; j<n; j++)

b[j][j] = 1.0;

//Печать единичной матрицы

printf("Значения элементов единичной матрицы:\n");

//Задание j – номеров строк распечатываемых элементов массива

for (int j = 0; j<n; j++)

//Задание i – номеров столбцов строки j элементов массива

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

printf("b[%d][%d]= %f\n", j, i, b[j][i]);

//Завершение выполнения программы

printf("\nНажмите любую клавишу\n");

_getch();

return 0;

}

Формирование единичных элементов главной диагонали осуществляется одним циклом, поскольку номера строк и столбцов элементов главной диагонали совпадают:

j j

b[0,0] = 1

b[1,1] = 1

b[2,2] = 1

b[3,3] = 1

    1. Табуляция функции в массив

Наконец, проанализируем готовую программу табуляции функции 5*sin(х) от 0о с шагом 30о в одномерный массив записей.

#include "stdafx.h"

#include <conio.h>

#include <math.h>

#include <locale.h>

#define k_Max 100 //Предельный размер массива

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

{

//Программа табуляции функции 5*sin(x) от 0град с шагом 30град

//в одномерный массив записей

typedef struct Type_Elements_a { //Тип элементов массива

float x; // Аргумент функции

float y; // Функция

} Type_Elements_a;

typedef Type_Elements_a Type_a[k_Max]; //Тип массива a

Type_a a; //Сам массив a

int k; //Текущий предельный размер массива

float r; //Значение предшествующего

//и последующего аргумента таблицы

setlocale( LC_ALL, "russian" ); // установка русского режима

printf("Программа табуляции функции 5*sin(x)\n");

printf("от 0 град с шагом 30 град в одномерный");

printf(" массив записей\n");

printf("Введите количество точек функции\n");

scanf("%d",&k); //k теперь определено

//Табулирование функции */

r = 0.0; //Начальное значение угла таблицы, град.

//Задание i - номера инициализируемого элемента массива

for (int i = 0; i < k; i++)

{

// Инициализация очередного i-го элемента

a[i].x = r * 3.14159 / 180.0;

a[i].y = 5.0 * sin(r * 3.14159 / 180.0);

// Расчет значения следущего члена арифметической прогрессии

r = r + 15.0; // Новое значение аргумента функции

}

//Вывод на экран монитора массива a

printf("Значения элементов одномерного массива a:\n");

//Задание i - номера выводимого элемента массива

for (int i = 0; i < k; i++)

printf("%4d) x = %f y = %f\n", i + 1,a[i].x, a[i].y);

//Завершение выполнения программы

printf("\nНажмите любую клавишу\n");

_getch();

return 0;

}