Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗадачникПоТПиРнаЭВМ.doc
Скачиваний:
28
Добавлен:
11.03.2016
Размер:
1 Mб
Скачать

Содержимое файла “input.Txt”

Рис. 9.4. Исходные данные для построения матрицы В

//L9_2.cpp

#include <fstream>

#include <iostream>

using namespace std;

double** bild_matr(double**, int); //Прототип функции bild_matr( )

void print_matr(double**, int); //Прототип функции print_matr( )

int main( )

{

double **A, **B;

int i, j, n;

setlocale(LC_CTYPE, "russian");

ifstream fin("input.txt");

fin >> n;

A=new double *[n];

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

A[i]=new double[n];

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

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

fin>>A[i][j];

cout<<"Исходная матрица\n";

print_matr(A,n);

B=bild_matr(A,n);

cout<<"Полученная матрица\n";

print_matr(B,n);

cin.get();

return 0;

}

void print_matr(double**A, int n)

{

int i,j;

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

{

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

{

cout.width(5);

cout<<A[i][j];

}

cout<<'\n';

}

}

double** bild_matr(double**A, int n)

{

int i, j, k, l;

double **B;

B=new double*[n];

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

B[i]=new double[n];

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

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

{

B[i][j]=A[i][j];

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

for(l=j-i+k;l<=j+i-k;l++)

if(l>=0 && l<n && B[i][j]<A[k][l])

B[i][j]=A[k][l];

}

return B;

}

Результат выполнения программы листинга 9.2 приведен на рис. 9.5.

Рис. 9.5. Результат работы программы листинга 9.2

Листинг 9.3. Пусть задан массив из 64 целых чисел. Будем считать, что одномерный массив состоит из целых чисел от 1 до 64. Построить матрицу размером 8 × 8 из данного одномерного массива, вставляя элементы одномерного массива в матрицу согласно схеме (рис. 9.6) [26].

Группа 43

Рис. 9.6. Схема размещения элементов одномерного массива в матрице

//L9_3.cpp

#include <iostream>

using namespace std;

int main()

{

int A[8][8], C[64];

int i, j, k, l=0; //Переменная l принимает значение 0 при

//движении по схеме на рис. 9.6 вниз и значение 1

//при движении вверх.

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

C[i]=i+1;

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

{

if(i%2!=0)

for(k=0,j=7-i;k<=i;k++,j++)

{

A[k][j]=C[l];

l++;

}

else

for(k=i,j=7;k>=0;k--,j--)

{

A[k][j]=C[l];

l++;

}

}

for(i=1;i<=7;i++)

{

if(i%2!=0)

for(k=7,j=7-i;j>=0;k--,j--)

{

A[k][j]=C[l];

l++;

}

else

for(k=i,j=0;k<=7;k++,j++)

{

A[k][j]=C[l];

l++;

}

}

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

{

for(j=0; j<8; j++)

{

cout.width(4);

cout<<A[i][j];

}

cout<<'\n';

}

return 0;

}

Результат выполнения программы листинга 9.3 приведен на рис. 9.7.

Рис. 9.7. Результат работы программы листинга 9.3

Листинг 9.4. В программе создается квадратная единичная матрица, порядок которой вводится с клавиатуры. Память под элементы матрицы выделяется динамически во время выполнения программы. Динамически выделенная память освобождается оператором delete [24].

//L9_4.cpp

#include "stdafx.h"

#include <iostream>

#include <locale>

using namespace std;

void _tmain()

{setlocale (LC_ALL,"Russian");

int n;

int i, j;

cout<<"Введите порядок матрицы: \n";

cin>>n;

float **matr;

matr=new float *[n];

if(matr==NULL)

{cout<<"\n Не создан динамический массив" ;

return;

}

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

{matr[i]=new float [n];

if(matr[i]==NULL)

{cout<<"\n Не создан динамический массив" ;

return;

}

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

if(i!=j)

matr[i][j]=0;

else

matr[i][j]=1;

}

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

{cout<<"\n Строка "<<i+1<<":";

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

cout<<'\t'<<matr[i][j];

}

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

delete matr[i];

delete [] matr;

}

Результат выполнения программы листинга 9.4 представлен на рис. 9.8.

Рис. 9.8. Результат работы программы листинга 9.4

Листинг 9.5. В программе создается матрица, элементы которой задаются случайным образом. Память под элементы матрицы выделяется динамически во время выполнения программы. Программа состоит из трех функций: str( ) – функция вычисления среднего значения по строкам матрицы, stlb( ) – функция вычисления среднего значения по столбцам матрицы и функция _tmain( ).

//L9_5.cpp

#include "stdafx.h"

#include <stdio.h>

#include <locale>

#include <iostream>

#include <stdlib.h>

#include <conio.h>

using namespace std;

double* str (int** arr, int n, int m)

{

double* res = new double [n];

double k = 0;

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

{

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

{

k += arr[i][j];

}

res[i] = k / m;

k = 0;

}

return res;

}

double* stlb (int** arr, int n, int m)

{

double* res = new double [m];

double k = 0;

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

{

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

{

k += arr[i][j];

}

res[j] = k / n;

k = 0;

}

return res;

}

int _tmain()

{

setlocale(LC_ALL, "Russian");

int n, m;

cout << "Введите количество строк: ";

cin >> n;

cout << "\n";

cout << "Введите количество столбцов: ";

cin >> m;

cout << "\n";

int** arr;

arr = new int*[n];

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

{

arr[i] = new int[m];

}

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

{

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

{

arr[i][j] = rand() % 10;

}

}

cout<<"Матрица: \n"<<endl;

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

{

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

{

cout << arr[i][j];

cout << " ";

}

cout << "\n";

}

cout<<endl;

double* sr_stroki = str(arr, n, m);

cout << "Среднее значение по строкам: \n"<<endl;

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

{

cout << sr_stroki[i] << " ";

}

cout << '\n';

cout<<endl;

double* sr_stolb = stlb(arr, n, m);

cout << "Среднее значение по столбцам: \n"<<endl;

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

{

cout << sr_stolb[i] << " ";

}

cout << '\n';

return 0;

}

На рис. 9.9 представлен результат выполнения программы листинга 9.5.

Рис. 9.9. Результат работы программы листинга 9.5

Упражнения

  1. В файле “input.txt” задана матрица А размером n × m. В первой строке файла указаны ее размеры (n и m), а в следующих строках файла – значения элементов матрицы по строкам. Построить вектор размерностиn, причем bi определяется как максимальное значение в i-ой строке матрицы. Исходную матрицу и полученный вектор записать в файл.

  2. В файле “input.txt” задана матрица А размером n × m. В первой строке файла указаны ее размеры (n и m), а в следующих строках файла – значения элементов матрицы по строкам. Построить вектор размерностиn, причем bi определяется как сумма значений в i-ой строке матрицы. Исходную матрицу и полученный вектор записать в файл.

  3. В файле “input.txt” задана квадратная матрица А размером n × n. В первой строке файла указан ее размер (n), а в следующих строках файла – значения элементов матрицы по строкам. Построить транспонированную матрицу. Исходную и транспонированную матрицы записать в файл.

  4. В файле “input.txt” задана квадратная матрица А размером n × n и n-мерный вектор . В первой строке файла указан размерn, а в следующих строках файла – значения элементов матрицы по строкам и значение элементов вектора . Построить квадратичную форму.

  5. В файле “input.txt” задана квадратная матрица А размером n × n. В первой строке файла указан размер n, а в следующих строках файла – значения элементов матрицы по строкам. Преобразовать матрицу таким образом, чтобы ее первый столбец был упорядочен по убыванию.

  6. В файле “input.txt” задана квадратная матрица А размером n × n. В первой строке файла указан размер n, а в следующих строках файла – значения элементов матрицы по строкам. Построить n мерный вектор , компоненты которого определяются как максимальный элемент соответствующей строки.

  7. В файле “input.txt” задана квадратная матрица А размером n × n. В первой строке файла указан размер n, а в следующих строках файла – значения элементов матрицы по строкам. Построить матрицу B размером n × n, причем элементы определяются как . Вид области для построения матрицы В приведен на рис. 9.10 – 9.15 [26].

Рис. 9.10 Рис. 9.11

Рис. 9.12 Рис. 9.13

Рис. 9.14 Рис. 9.15

  1. В файле “input.txt” задана квадратная матрица А размером n × n. В первой строке файла указан размер n, а в следующих строках файла – значения элементов матрицы по строкам. Построить матрицу B размером n × n, причем ее элементы определяются как среднее значение в области . Вид области  для построения матрицы В приведен на рис. 1 – рис. 6.

  2. В файле “input.txt” заданы квадратные матрицы А и В размером n × n. В первой строке файла указан размер n, а в следующих строках файла – значения элементов матриц по строкам. Написать функцию, которая строит матрицу С=АВ. Полученную матрицу записать в конец файла “input.txt”.

  3. В файле “input.txt” заданы квадратные матрицы А и В размером n × n. В первой строке файла указан размер n, а в следующих строках файла – значения элементов матриц по строкам. Написать функцию, которая строит матрицу С=А+В. Полученную матрицу записать в конец файла “input.txt”.

  4. Дан одномерный массив целых чисел Р размерностью 64. Получить квадратную матрицу А размером 8 × 8, элементы которой являются числами массива Р, расположенный согласно схемам, представленным на рис. 7 и рис. 8 [26].

Рис. 9.16 Рис. 9.17