Другие языки программирования и технологии

Программа на c#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp13
{
class Range< T > where T : IComparable
{
public T From;
public T Till;
public Range(T _From, T _Till)
{
From = _From;
Till = _Till;
}
public bool Between(T _Value)
{
int iFrom = _Value.CompareTo(From);
int iTill = _Value.CompareTo(Till);
return (iFrom > 0 || iFrom == 0) && (iTill < 0 || iTill == 0);
}
}

class Filter< T, F > where T : IComparable
{
private F DefaultValue;
private List< KeyValuePair< Range< T >, F >> Ranges = new List< KeyValuePair< Range< T >, F>>();

public void SetDefault(F _DefaultValue)
{
DefaultValue = _DefaultValue;
}

public void AddRange(T _From, T _Till, F _Value)
{
Ranges.Add(new KeyValuePair< Range< T >, F >(new Range< T >(_From, _Till), _Value));
}

public F GetFilterValue(T _Value)
{
foreach (KeyValuePair< Range< T >, F> a in Ranges)
if (a.Key.Between(_Value))
return a.Value;
return DefaultValue;
}

}

class Program
{
static void Main(string[] args)
{
Filter< int, int > MarkRanges = new Filter< int, int >();
MarkRanges.SetDefault(0);
MarkRanges.AddRange(91, 100, 5);
MarkRanges.AddRange(81, 90, 4);
MarkRanges.AddRange(71, 80, 3);
MarkRanges.AddRange(61, 70, 2);
MarkRanges.AddRange(51, 60, 1);

Console.Write("n=");
int n = Convert.ToInt32(Console.ReadLine());
Random r = new Random(DateTime.Now.Millisecond);
int cnt = 0;

for (int i = 0; i < n; i++)
{
int Points = r.Next(30, 100);
int Mark = MarkRanges.GetFilterValue(Points);
Console.WriteLine("{0} points are marked {1}", Points, Mark);
if (Mark == 5 || Mark == 4)
cnt++;
}

Console.WriteLine("Total 4 and 5 marks: {0}", cnt);
Console.ReadKey();
}
}
}
Никита Кляуз
Никита Кляуз
65 819
Лучший ответ
Игорь Евгеньевич Спасибо большое за старание, правда я ещё не проходил столько команд :(
Игорь Аулов Код избыточный и нарушает принципы ООП. Стиль ужасный. Зачем?