Перевести с Паскаль в C#
Формулировка задачи:
Написать данную программу на си шарп
с файлами,можно без
Program Lab2;
//Вывод матрицы а размера NxN
procedure PrintMatrix(n:integer;a:matrix);
begin
for i:=0 to n-1 do
begin
for j:=0 to n-1 do
write(a[i,j]:4);
writeln;
end;
end;
{Фунция вычисляет для элемента k из змейки чисел его координаты
в матрице размера NxN : a[i,j]=k}
procedure GetCoordinates(k,n:integer;var i,j:integer);
begin
if (n mod 2=1) then
begin
k1:=sqr(n)-k; //Симметричный элемент k с другого конца - Обратная спираль(ОСп)
d:=(1+sqrt(k1))/2+0.999;
q:=trunc(d); //Номер витка ОСп, считая изнутри(начиная с 1)
max:=sqr(2*q-1); //Максим. элемент на витке ОСп - левый верхинй угол
L:=n div 2-q+1; //Левый столбец витка
R:=n div 2+q-1; //Правый столбец витка
T:=n div 2-q+1; //Верхняя столбец витка
B:=n div 2+q-1; //Нижняя столбец витка
Len:=2*q-1; //Длина стороны витка (кол-во элемнтов на ней)
If k1>max-(Len-1) then
//Верхняя сторона витка
begin
i:=T;
j:=L+max-k1;
end
else
if k1>max-2*(Len-1) then
//Правая сторона витка
begin
i:=T+(max-(Len-1)-k1);
j:=R;
end
else
if k1>max-3*(Len-1) then
//Нижняя сторона витка
begin
i:=B;
j:=R-(max-2*(Len-1)-k1);
end
else
//Левая сторона витка
begin
i:=B-(max-3*(Len-1)-k1);
j:=L;
end
end
end;
{Заполнение матрицы а размера NxN числами от 0 до N^2-1 по спирали
с помощью функции вычисления координат}
procedure FillMatrix(n:integer;var a:Matrix);
begin
for k:=0 to N*N-1 do
begin
GetCoordinates(k,n,i,j);
a[i,j]:=k;
end;
end;
Begin
writeln('Enter size of matrix n=');
readln(n);
FillMatrix(n,a);
PrintMatrix(n,a);
End.Решение задачи: «Перевести с Паскаль в C#»
textual
Листинг программы
using System;
class Matrix
{
double[,] a;
int len;
public Matrix(int n)
{
a = new double[n,n];
len = n;
}
public void Print()
{
for(int i = 0; i < len; i++)
{
for (int j = 0; j < len; j++)
Console.Write(a[i, j] + " ");
Console.WriteLine();
}
}
public void Fill()
{
int k = 0;
int count = len;
int value = -len;
int sum = -1;
do
{
value = -1 * value / len;
for (int i = 0; i < count; i++)
{
sum += value;
a[sum / len, sum % len] = k++;
}
value *= len;
count--;
for (int i = 0; i < count; i++)
{
sum += value;
a[sum / len, sum % len] = k++;
}
} while (count > 0);
}
}
public class Lab2
{
public static void Main()
{
Console.WriteLine("Введите размер матрицы: ");
Matrix a = new Matrix(int.Parse(Console.ReadLine()));
a.Fill();
a.Print();
Console.ReadKey();
}
}