.NET 4.x Переделать код с PABC.Net: вывод наибольших элементов массива - C#

Узнай цену своей работы

Формулировка задачи:

Помогите переделать код на C# и С++ Задача: Задан массив Arr из S элементов и число N < S. Не прибегая к сортировке, определить и вывести на экран N наибольших элементов массива. Исходный код на PABC.Net
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.
Частично переделанный код на C#
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();
  }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы