Опубликован: 01.11.2011 | Доступ: свободный | Студентов: 1424 / 63 | Оценка: 3.84 / 3.44 | Длительность: 15:38:00
Специальности: Программист
Практическая работа 2:
Основные структуры данных C#
Упражнение 6.6. Вывод на экран двумерного массива (Герберт Шилдт)
Создаем новое консольное приложение C#. Называем проект practice_2_6.
Наберите в окне кода следующую программу:
using System;
class arraySort
{
static void print(int[][] alpha)
{
// Отображаем элементы массива
for (int i = 0; i < alpha.Length; i++)
{
for (int j = 0; j < alpha[i].Length; j++)
{
System.Console.Write("{0}{1}", alpha[i][j], j == (alpha[i].Length - 1) ? "" : " ");
}
System.Console.WriteLine();
}
}
static void Main()
{
int[][] alpha = new int[4][];
alpha[0] = new int[4] { 1, 2, 3, 4 };
alpha[1] = new int[4] { 5, 6, 7, 8 };
alpha[2] = new int[4] { 9, 10, 11, 12 };
alpha[3] = new int[4] { 13, 14, 15, 16 };
print(alpha);
System.Console.WriteLine("Нажмите любую кнопку!");
System.Console.ReadKey();
}
}
Получаем следующий результат:
Упражнение 6.7. Массивы в качестве выходных параметров функций
Создаем новое консольное приложение C#. Называем проект practice_2_7.
Наберите в окне кода следующую программу:
using System;
class ArraySort
{
static void print(int[] alpha)
{
foreach (int i in alpha)
Console.WriteLine(i + " ");
Console.WriteLine();
}
static void FillArray(out int[] alpha)
{
// Создаем массив
alpha = new int[5] { 1, 2, 3, 4, 5 };
}
static void Main()
{
int[] alpha; // Не требуется инициализация
// Заполняем массив
FillArray(out alpha);
// Отображаем элементы массива
System.Console.WriteLine("Отображаем элементы массива:");
print(alpha);
System.Console.WriteLine("Нажмите любую кнопку!");
System.Console.ReadKey();
}
}
Получаем следующий результат:
Упражнение 6.8. Определение факторов геометрического снижения точности ГЛОНАСС
Создаем новое консольное приложение C#. Называем проект practice_2_8.
Наберите в окне кода следующую программу:
using System;
class arraySort
{
static void print(double[,] alpha)
{
int ArraySize = 4;
for (int i = 0; i < ArraySize; i++)
{
for (int j = 0; j < ArraySize; j++)
{
Console.Write("{0}{1}", alpha[i, j], j == (ArraySize - 1) ? "" : " ");
}
Console.WriteLine();
}
}
static void transpositiong(double[,] alpha)
{
int ArraySize = 4;
double x;
for (int i = 0; i < ArraySize - 1; i++)
for (int j = i + 1; j < ArraySize; j++)
{
x = alpha[i, j];
alpha[i, j] = alpha[j, i];
alpha[j, i] = x;
}
}
static void multiplying(double[,] a, double[,] b, double[,] M)
{
int ArraySize = 4;
int irow, icol, k;
double sum;
for (irow = 0; irow < ArraySize; irow++)
for (icol = 0; icol < ArraySize; icol++)
{
sum = 0;
for (k = 0; k < ArraySize; k++)
{
sum += a[irow, k] * b[k, icol];
}
M[irow, icol] = sum;
}
}
////////////////////////////////////////////////////
//Обращение квадратной матрицы методом Жордана-Гаусса
////////////////////////////////////////////////////
static void inversion(double[,] alpha)
{
int col, lin;
col = 100;
lin = 100;
int i, j, k, t, s;
double b, c;
int ArraySize = 4;
//long double a[col][lin];
double[,] a = new double[col, lin];
for (i = 0; i < ArraySize; i++)
{
for (j = 0; j < ArraySize; j++)
{
a[i, j] = alpha[i, j];
a[i, ArraySize + j] = 0;
}
a[i, ArraySize + i] = 1;
}
for (s = 0; s < ArraySize; s++)
{
for (t = s; t < ArraySize; t++)
{
if (a[t, s] != 0) goto beta;
}
Console.WriteLine("Действительных корней нет!"); // exit(1);
beta:
for (j = 0; j < 2 * ArraySize; j++)
{
b = a[s, j];
a[s, j] = a[t, j];
a[t, j] = b;
}
c = 1 / a[s, s];
for (j = 0; j < 2 * ArraySize; j++)
{
a[s, j] *= c;
}
for (t = 0; t < ArraySize; t++)
{
if (t == s) goto teta;
c = -a[t, s];
for (j = 0; j < 2 * ArraySize; j++)
{
a[t, j] += c * a[s, j];
}
teta: ;
}
}
for (i = 0; i < ArraySize; i++)
{
for (j = 0; j < ArraySize; j++)
{
a[i, j] = alpha[i, j];
}
}
Console.WriteLine("\nОбращенная матрица .... ");
for (i = 0; i < ArraySize; i++)
{
Console.WriteLine();
//cout.precision(3); //Два десятичных разряда
for (j = ArraySize; j < 2 * ArraySize; j++)
{
Console.Write("{0}{1}", a[i, j], j == (ArraySize - 1) ? "" : " ");
}
}
double dx, dy, dz, dt;
dx = a[0, 4];
dy = a[1, 5];
dz = a[2, 6];
dt = a[3, 7];
Console.WriteLine();
Console.WriteLine("\ndx = " + dx + "\ndy = " + dy + "\ndz = " + dz + "\ndt = " + dt);
double tdop = Math.Sqrt(dt);
double vdop = Math.Sqrt(dz);
double hdop = Math.Sqrt(dx + dy);
double pdop = Math.Sqrt(dx + dy + dz);
double gdop = Math.Sqrt(dx + dy + dz + dt);
Console.WriteLine("\ngdop = " + gdop + "\npdop = " + pdop + "\nhdop = " + hdop + "\nvdop = " + vdop + "\ntdop = " + tdop);
Console.WriteLine();
Console.WriteLine("Проверяем результат ... ");
for (i = 0; i < ArraySize; i++)
{
Console.WriteLine();
for (j = 0; j < ArraySize; j++)
{
c = 0;
for (k = 0; k < ArraySize; k++)
{
c += a[i, k] * a[k, j + ArraySize];
}
Console.Write("\t" + c);
}
}
Console.WriteLine();
}
static void Main()
{
double[,] A = new double[,] { { 0.0, 0.996, 0.087, 1.0 }, { 0.863, -0.498, 0.087, 1.0 },
{ -0.863, -0.498, 0.087, 1.0 }, { 0.0, 0.0, 1.00, 1.0 } };
Console.WriteLine("Исходная матрица ... ");
print(A);
double[,] T = new double[4, 4];
Array.Copy(A, T, 16);
Console.WriteLine("Транспонирование ... ");
transpositiong(T);
print(T);
double[,] M = new double[4, 4];
multiplying(T, A, M);
Console.WriteLine("Перемножаем матрицы ... ");
print(M);
double[,] I = new double[4, 4];
Array.Copy(M, I, 16);
inversion(I);
//print(I);
Console.WriteLine("Нажмите любую кнопку!");
Console.ReadKey();
}
}
Листинг
.
Получаем следующий результат:


