.NET 4.x Переделать код с PABC.Net: вывод наибольших элементов массива - C#
Формулировка задачи:
Помогите переделать код на C# и С++
Задача: Задан массив Arr из S элементов и число N < S. Не прибегая к сортировке, определить и вывести на экран N наибольших элементов массива.
Исходный код на PABC.Net
Частично переделанный код на C#
Program NMaxNoSort;
var
Arr : Array of Byte;
i, k, l, m, n, p, s : Byte;
Begin
s := Random(10, 255); n := Random(1, s-1); SetLength(Arr, s); k := 0; i := 0;
Repeat Arr[i] := Random(255); Inc(i); Until i > High(Arr); m := Arr[0];
WriteLn ('S = ', s, ' ; N = ', n); WriteLn; i := 0;
Repeat Write (Arr[i]:3, ' '); If (i+1) mod 20 = 0 then WriteLn;
Inc(i); Until i > High(Arr);
i := 1; Repeat If Arr[i] > m then begin m := Arr[i]; k := 1; end else
If Arr[i] = m then Inc(k); Inc(i); Until i > High(Arr); Inc(l, k); k := 0;
If l < n then begin Repeat p := 0; i := 0; Repeat
If (Arr[i] > p) and (Arr[i] < m) then begin k := 1; p := Arr[i];
end else If Arr[i] = p then Inc(k);
Inc(i); Until i > High(Arr); m := p; l += k; Until l >= n; WriteLn; WriteLn;
i := 0; k := 0; Repeat If Arr[i] > m then begin Write (Arr[i]:3, ' ');
If (k+1) mod 20 = 0 then WriteLn; Inc(k); end;
Inc(i); Until (i > High(Arr)) or (k >= n);
i := 0; While k < n do begin Write (m:3, ' '); Inc(k);
If k mod 20 = 0 then WriteLn; end;
end else Repeat Write (m:3, ' '); If (k+1) mod 20 = 0 then WriteLn;
Inc(k); Until k > n; WriteLn; SetLength(Arr, 0); Arr := nil;
End.using System;
namespace Lab5_3.cs
{
class Program
{
static void Main(string[] args)
{
Int16 i, k, l, m, n, p, s; Int16[] Arr;
s = Next(10, 255); n = Next(1, s - 1); SetLength(Arr, s); k = 0; i = 0;
/* NextBytes */ while (i <= High(Arr)) { Arr[i] = Next(255); i++; } m = Arr[0];
Console.WriteLine("S = {0} ; N = {1}", s, n); Console.WriteLine(); i = 0;
while (i <= High(Arr)) { Console.Write ("{0:3}", Arr[i]);
if ((i+1) % 20 == 0) Console.WriteLine(); i++; }
i = 1; while (i <= High(Arr)) { if (Arr[i] > m) { m = Arr[i]; k = 1; } else
if (Arr[i] == m) k++; i++; } l += k; k = 0;
if (l < n) { while (i <= High(Arr)) { p = 0; i = 0; while (l < n) {
if (Arr[i] > p && Arr[i] < m) { k = 1; p = Arr[i]; } else if (Arr[i] == p) k++;
i++; } m = p; l += k; } Console.WriteLine(); Console.WriteLine();
i = 0; k = 0; while (i <= High(Arr) || k < n) { if (Arr[i] > m) { Console.Write ("{0:3}", Arr[i]);
if ((k+1) % 20 == 0) Console.WriteLine(); k++; } i++; }
i = 0; while (k < n) { Console.Write ("{0:3}", m); k++;
if (k % 20 == 0) Console.WriteLine(); }
} else while (k <= n) { Console.Write ("{0:3}", m); if ((k+1) % 20 == 0) Console.WriteLine();
k++; } Console.WriteLine(); SetLength(Arr, 0); Arr = null;
}
}
}
Я пишу код в MS VS 2013 U4, он РЕГИСРОЗАВИСИМ, т.е if и If и IF разные вещи
Может кто-нить показать как инициализировать SetLength, High, Next, NextBytes ? У меня только эти функции/процедуры красным подчёркнуты. Next/NextBytes я так понял это генераторы случайных чисел тут, одиночное число и на весь массив
Решение задачи: «.NET 4.x Переделать код с PABC.Net: вывод наибольших элементов массива»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
#include <iostream>
#include <time.h>
int main()
{
__int16 i, k, l = 0, m, n, p; int s = 0; __int16* Arr = NULL;
srand(time(0)); s = 10 + rand() % 255; n = 5 + rand() % (s - 1);
Arr = (__int16*)realloc(Arr, s * sizeof(__int16));
if (Arr == NULL)
{ free(Arr); Arr = NULL; puts("Error memory"); _getch(); exit(1); }
else { k = 0; i = 0;
while (i < s) { Arr[i] = rand() % 255; i++; } m = Arr[0];
printf("S = %d ; N = %d\n", s, n); i = 0;
while (i < s) { printf("%3d ", Arr[i]); i++; } puts("");
if (s % 20 != 0) puts("");
i = 1; while (i < s) { if (Arr[i] > m) { m = Arr[i]; k = 1; }
else if (Arr[i] == m) k++; i++; } l += k; k = 0;
if (l < n) {
do { p = 0; i = 0;
do { if (Arr[i] > p && Arr[i] < m) { k = 1; p = Arr[i]; }
else if (Arr[i] == p) k++; i++; }
while (i <= s - 1); m = p; l += k; }
while (l < n); i = 0; k = 0;
do { if (Arr[i] > m)
{ printf("%3d ", Arr[i]); k++; } i++; }
while (i <= s - 1 && k < n);
} i = 0; while (k < n) { printf("%3d ", m); k++; }
puts(""); free(Arr); Arr = NULL; _getch();
}
}