Узлиян Фурсов1488
?>

Дан текст, длина которого не превышает 255 символов (текст и его длина определяются пользователем символы в тексте могут повторяться. средствами языка программирования определить информационный вес символа в строке, если известно, что данный текст содержит все символы некоторого алфавита.

Информатика

Ответы

kuznecovav3066
1. Современное решение

// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!

begin
  var s:=ReadlnString('Введите строку:').Select(c->LowCase(c));
  var nd:=s.GroupBy(c->c).Select(c->(c.Key,c.Count)).OrderBy(kv->kv[0]);
  var n:=nd.Count;
  nd.Select(kv->(kv[0],kv[1]/n)).ForEach(kv->Writeln(kv[0],' : ',kv[1]:5:3))
end.

Пример работы
Введите строку: В чащах юга жил бы цитрус? Да, но фальшивый экземплярЪ!
  : 0.250
! : 0.028
, : 0.028
? : 0.028
а : 0.139
б : 0.028
в : 0.056
г : 0.028
д : 0.028
е : 0.028
ж : 0.028
з : 0.028
и : 0.083
й : 0.028
к : 0.028
л : 0.083
м : 0.028
н : 0.028
о : 0.028
п : 0.028
р : 0.056
с : 0.028
т : 0.028
у : 0.028
ф : 0.028
х : 0.028
ц : 0.028
ч : 0.028
ш : 0.028
щ : 0.028
ъ : 0.028
ы : 0.056
ь : 0.028
э : 0.028
ю : 0.028
я : 0.028

2. Школьное решение в стиле ТурбоПаскаль 1983г.

uses Crt;
const
  uc:string[33]='';
  lc:string[33]='';
var
  s:string;
  i,n,k,p:integer;
  mc:array[1..255] of char;
  mn:array[1..255] of byte;
  c:char;
begin
  ClrScr;
  Write('Введите строку: ');
  Readln(s);
  n:=Length(s);
  for i:=1 to 255 do mn[i]:=0;
  k:=0;
  for i:=1 to n do begin
    c:=s[i];
    p:=Pos(c,uc);
    if p>0 then c:=lc[p];
    p:=Ord(c);
    if mn[p]=0 then begin
      mc[p]:=s[i];
      mn[p]:=1;
      k:=k+1
      end
    else mn[p]:=mn[p]+1
    end;
  for i:=1 to 255 do
    if mn[i]<>0 then Writeln(mc[i],' : ',mn[i]/k:5:3);
  ReadKey
end.
FATAHOVAMAINA
Uses crt;
const
    nmax = 20;

var
    A: array[1..nmax] of integer;
    I, m, s: integer;
    Am, kon: text;

begin
    Clrscr;
    Assign(Am, 'Am.txt');
    
    {раскоментировать для записи массива в файл}
    {Rewrite(Am);
    m := Random(nmax - 5) + 5;
    for i := 1 to m do
        Writeln(Am, Random(20));
    Close(Am);}
    
    {считывание данных из файла}
    Reset(Am);
    s := 0;
    m := 0;
    while not eof(Am) do
    begin
        m := m + 1;
        Readln(Am, A[m]);
        s := s + A[m];
    end;
    Close(Am);
    
    Assign(kon, 'kon.txt');
    Rewrite(kon);
    
    if s > 50 then
        Writeln('Сумма элементов массива более 50 и равна: s=', s)
    Else
    begin
        Writeln('Сумма элементов менее 50, вывод исходного массива');
        for i := 1 to m do
        begin
            Writeln('A[', i, ']=', A[i], ' ');
            Writeln(kon, 'A[', i, ']=', A[i], ' ');
        end;
    end;
    
    Close(kon);
    Readkey;
end.
Anton-Yurevich222
1. Решение "по-взрослому"

// PascalABC.NET 3.2, сборка 1389 от 01.03.2017
// Внимание! Если программа не работает, обновите версию!

begin
  var F:real->real:=x->2*x*x-6*x+8;
  var a,b:real;
  Write('a b= '); Read(a,b);
  Writeln('Min=',Range(a,b,9).Select(x->F(x)).Min)
end.

Пример
a b= -2 6
Min=3.50617283950617

2. Решение "по-школьному" ("дедушкин метод")

function F(x:real):real;
begin
  F:=2*x*x-6*x+8
end;

var
  a,b,y,h,min:real;
  i:integer;
begin
  Write('a b= '); Read(a,b);
  h:=(b-a)/9;
  min:=F(a);
  for i:= 1 to 9 do begin
    y:=F(a+i*h);
    if y<min then min:=y
    end;
  Writeln('Min=',min)
end.

Пример
a b= -2 6
Min=3.50617283950617

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Дан текст, длина которого не превышает 255 символов (текст и его длина определяются пользователем символы в тексте могут повторяться. средствами языка программирования определить информационный вес символа в строке, если известно, что данный текст содержит все символы некоторого алфавита.
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

apetrov54
Новиков1139
joini09
Александр Елена1290
Лежачёва355
Вишняков997
Annabill1987
Melnik Kaveshnikova1746
Алена
dovgash2
Irina_Chernyaev532
bugaevnicky
Калмыкова-Петрунина
evgeniy1988486
onboxru16