.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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д