Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пояснительная.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
78.92 Кб
Скачать
  1. Описание программы

    1. Цепные дроби

Обработка значений происходит так:

static double Function(int x, int n, int max)

{

if (n == max) return n + x;

if (n == 1) return x * 1.0 / (n + x * 1.0 / Function(x, n + 1, max));

return n + (x * 1.0 / Function(x, n + 1, max));

}

Задается числитель и знаменатель:

int n=50, ch=0, zn=0;

int[] h = new int[n];

int[] z = new int[n];

int[] v = new int[n];

Console.WriteLine("Введите числитель: ");

ch= Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Введите знаменатель: ");

zn=Convert.ToInt32(Console.ReadLine());

Console.Clear();

Console.Write("Значение дроби: {0}/{1} = ( ", ch, zn);

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

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

{

h[0] = ch;

z[0] = zn ;

if (z[i] == 0) break;

else

{

v[i] = h[i] / z[i];

Console.Write(v[i]+" ");

z[i + 1] = h[i] - z[i] * v[i];

h[i + 1] = z[i];

}

}

Console.Write(")");

Console.ReadKey();

}

}

}

    1. Топологическая сортировка

Обход графа с целью топологической сортировки:

public static void DFS(int u, int[,] c, int[,] g, int n)

{

int t = 0;

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

{

if (g[u, i] == 1 && c[u, i] == 0)

{

Покраска вершины в серый цвет, это означает, что вершина посещена.

c[u, i] = 1; //grey

t = u;

u = i;

i = t;

DFS(u, c, g, n);

}

if (g[u, i] == 1 && c[u, i] == 1)

{

Покраска в черный цвет.

c[u, i] = 2; //black

Console.WriteLine("(" + (u+1) + ", " + (i+1) + ")");

t = u;

if(i<n-1)

u = i+1;

i = t;

DFS(u, c, g, n);

}

}

}

Массив вершин и цветов:

int n = 4, u = 0;

int[,] g = new int[n, n];

int[,] c = new int[n, n];

Матрица смежности графа.

g[0, 0] = 0; g[0, 1] = 0; g[0, 2] = 0; g[0, 3] = 1;

g[1, 0] = 0; g[1, 1] = 0; g[1, 2] = 0; g[1, 3] = 1;

g[2, 0] = 0; g[2, 1] = 0; g[2, 2] = 0; g[2, 3] = 1;

g[3, 0] = 1; g[3, 1] = 1; g[3, 2] = 1; g[3, 3] = 0;

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

{

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

Console.Write(g[i, j] + " ");

Console.WriteLine();

}

Console.WriteLine();

DFS(u, c, g, n);

Console.ReadKey();

}

}

}