Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2012, 14:47   #1
Миша!
Пользователь
 
Регистрация: 15.11.2012
Сообщений: 10
По умолчанию Все возможные пары букв алфавита

Здравствуйте! Помогите, пожалуйста, справиться с заданием: составить все возможные пары букв русского алфавита и вывести сколько раз они встречаются в заданном тексте.
Миша! вне форума Ответить с цитированием
Старый 20.11.2012, 15:45   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Какой паскаль? turbo/free/...
Какая кодировка будет использована? 866/1251/...
Где свои наработки?
eoln вне форума Ответить с цитированием
Старый 20.11.2012, 18:11   #3
Миша!
Пользователь
 
Регистрация: 15.11.2012
Сообщений: 10
По умолчанию

Желательно АВС или Turbo.
Вот наработка:

uses crt;
var a,b:array[1..100] of char;
n,i,j,k:integer;
begin
clrscr;
k:=0;
write('Количество символов n=');
readln(n);
writeln('Введите ',n,' символов');
for i:=1 to n do
read(a[i]);
writeln('Ведите текст');
for i:=1 to 6 do
read(b[i]);
writeln('Возможные пары символов и их вероятности:');
for i:=1 to n do
begin
for j:=1 to n do
begin
if (b[i]+ b[i+1])=(a[i]+ a[j]) then
inc(k)
else k:=0;
writeln(a[i],a[j],' ', k); end;
writeln;
end;
readln
end.


Все пары букв выводит нормально, а вот с подсчетом встречающихся пар проблема. Предполагалось, что программа будет выводить пары букв русского алфавита, а напротив них будет стоять сколько раз они втречались в тексте, который ввел пользователь с клавиатуры
Миша! вне форума Ответить с цитированием
Старый 20.11.2012, 20:11   #4
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

http://programmersforum.ru/showthread.php?t=213629#4 (сам испытать не могу)
Sasha_Smirnov вне форума Ответить с цитированием
Старый 20.11.2012, 20:25   #5
Миша!
Пользователь
 
Регистрация: 15.11.2012
Сообщений: 10
По умолчанию

мне надо примерно вот так чтобы было выполнино:

Введите текст: привет
Вероятности:
аа - 0
аб - 0
.
.
.
ая - 0

ба - 0
.
.
.
бя - 0

.
.
.

еа - 0
.
.
.
ет - 1
.
.
.
ея - 0
.
.
.

иа - 0
иб - 0
ив - 1
.
.
.

па - 0
.
.
.
пр - 1
.
.
.

яя - 0
Миша! вне форума Ответить с цитированием
Старый 21.11.2012, 11:31   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Миша,
1) почему текст из текстового файла не хотите считывать?
2) почему не используете тип String? Не знаете про такой или Вам запретили им пользоваться?
3) все левые символы должны отбрасываться? а символы без пары игнорировать (слово рубль - какие тут пары ?)
И для текста:
Код:
  мама,  кроит
платье.
распишите, какие пары получаются (нулевые не надо писать, с ними всё понятно!)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.11.2012, 17:27   #7
Миша!
Пользователь
 
Регистрация: 15.11.2012
Сообщений: 10
По умолчанию

Здравствуйте, Serge_Bliznykov!
Считывание из файла планировалось сделать, когда будет полностью готова программа. Про тип String знаю, посто преподаватель советовала использовать char. Да, все левые символы должны отбрасываться, а символы без пары игнорироваться. Для текста "мама, кроит платье." пары будут след.: ма-2, кр-1, ои-1, пл-1, ат-1, ье-1.
Миша! вне форума Ответить с цитированием
Старый 22.11.2012, 08:06   #8
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Пара слов на бэйсике

Сделал действующую модель в документе Word для всех пар (троек и т. д.) любых букв (рис. 1).

В частности, до 2-й главы романа «Евгений Онегин» моя читалка дочитала за 26 секунд (при 3 МГц)*, и самая частый пара там — не (как, впрочем, и во всём романе): 219 обнаружений (рис. 2).
Цитата:
Сообщение от Миша! Посмотреть сообщение
Здравствуйте, Sasha Smirnov! А можно глянуть на Ваш код?
Смотрите на здоровье, а ещё лучше — сравните результаты (на одинаковых текстах): http://programmersforum.ru/showthread.php?p=1136508#9
_____________________________
* правда, ещё около 1 минуты шла сортировка по алфавиту 13 тысяч пар букв
Изображения
Тип файла: png 2012-11-22_Мама-мыла-рамы.png (34.8 Кб, 55 просмотров)
Тип файла: jpg МатЛингОвПушкин-2012.jpg (76.5 Кб, 124 просмотров)

Последний раз редактировалось Sasha_Smirnov; 23.11.2012 в 03:41.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 22.11.2012, 16:10   #9
Миша!
Пользователь
 
Регистрация: 15.11.2012
Сообщений: 10
По умолчанию

Здравствуйте, Sasha Smirnov! А можно глянуть на Ваш код?
Миша! вне форума Ответить с цитированием
Старый 22.11.2012, 16:56   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Миша!

такое решение устроит?

Код:
const 
  RusUpper : string = 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
  RusSlower : string = 'абвгдежзийклмнопрстуфхцчшщъыьэюя';

function CharToUpper(OneCh : char) : char;
begin
  if Pos(OneCh, RusSlower)>0 then CharToUpper := RusUpper[Pos(OneCh, RusSlower)]
  else 
    CharToUpper := OneCh;
end;

function IsCharRussionLetter(Onech : char) : boolean;
begin
  IsCharRussionLetter := Pos( CharToUpper(Onech), RusUpper )>0  
end;

var
  AllPairCount : array ['А'..'Я', 'А'..'Я'] of integer; {массив для подсчёта количества пар}
  ich, jch : char; 
  i : integer;
  s : string;

begin
  WriteLn('Введите строку: ');
  {ReadLn(s); }
  s := 'мама, кроит платье';

  {занулим массив счётчиков пар}
  for ich := 'А' to 'Я' do
    for jch := 'А' to 'Я' do
       AllPairCount[ich][jch] := 0; {начальное значение для каждой пары - НОЛЬ}

  {собственно подсчёт}
  i := 1;
  while i<Length(s) do begin
    if IsCharRussionLetter( s[i] ) and
          IsCharRussionLetter( s[i+1] ) then begin
       ich := CharToUpper( s[i] );
       jch := CharToUpper( s[i+1] );
       Inc( AllPairCount[ ich ][ jch ] );
       inc(i,2); {раз пару обработали, тогда перепрыгиваем на два символа}
    end
    else 
      {переходим к следующему символу/паре}
      Inc(i);           
  end;


  {выдадим все пары, которые встретились хотя бы раз (невстречающиеся пары не выводим) }
  WriteLn('Результаты:');
  for ich := 'А' to 'Я' do
    for jch := 'А' to 'Я' do
       if  AllPairCount[ich][jch]>0 then
         WriteLn(ich,jch,'-',  AllPairCount[ich][jch]);

  Readln
end.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определите сколько слов заданного текста составлено из букв русского алфавита, а сколько из букв латинского алфавита. Слова, в кот potemos Паскаль, Turbo Pascal, PascalABC.NET 2 18.04.2012 13:14
Все возможные комбинации X@OC Общие вопросы по Java, Java SE, Kotlin 9 04.07.2011 20:34
Сформировать 2 множества,состоящих из заглавных букв латинского алфавита. Определить элементы,принадлежащ Aktor1992 Паскаль, Turbo Pascal, PascalABC.NET 0 12.04.2011 22:13
задача со сменой букв русского алфавита koresh3 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 04.01.2010 15:52
процедура, которая выводит все слова, начинающиеся с согласных букв латинского алфавита. sergeyfsd Паскаль, Turbo Pascal, PascalABC.NET 6 21.02.2008 22:29