Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Nickolay0512
57 / 39 / 41
Регистрация: 26.09.2013
Сообщений: 317
Записей в блоге: 1
1

Вывести все буквы, которые входят в наибольшее количество слов строки

09.05.2014, 08:32. Просмотров 718. Ответов 7
Метки нет (Все метки)

Помогите преобразовать программу из турбо паскаля в паскаль абц
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
program Project1;
 
(*Возвращает строку с перечнем букв, которые встречаются в наибольшем
количестве слов.*)
function GetStrAb(const aStrSrc : String) : String;
const
  (*Множество разделителей.*)
  D = [' ', '.', ',', ':', ';', '!', '?', '-', #9, #10, #13];
var
  (*Результирующая строка.*)
  StrRes : String;
  (*Массив счётчиков букв по словам всей строки.
  Т. е., например, если буква "A" входит один или несколько раз в слово, тогда: Inc(ArrAbText['A']);*)
  ArrAbText : array['A'..'Z'] of Integer;
  (*Строка, содержащая множество букв, которые обнаружены в отдельном слове.*)
  StrAbWord : String;
  (*Буква, которая встречается в наибольшем количестве слов.*)
  CharMax : Char;
  (*Для промежуточных вычислений.*)
  CharTmp : Char;
  (*Индексы символов в строках и длина исходной строки.*)
  i, j, Len : Integer;
begin
  (*Обнуляем массив счётчиков букв.*)
  for CharTmp := 'A' to 'Z' do ArrAbText[CharTmp] := 0;
 
  Len := Length(aStrSrc);
  (*Результирующая строка.*)
  StrRes := '';
  (*Строка с множеством букв, найденных в отдельном слове.*)
  StrAbWord := '';
  for i := 1 to Len do begin
    (*Если очередной символ является разделителем - пропускаем итерацию.*)
    if aStrSrc[i] in D then Continue;
 
    (*Обработка символов слова.
    Берём заглавную версию буквы.*)
    CharTmp := UpCase(aStrSrc[i]);
    (*Если этой буквы нет в StrAbWord, то добавляем её.*)
    if Pos(CharTmp, StrAbWord) = 0 then StrAbWord := StrAbWord + CharTmp;
 
    (*Отслеживаем конец слова.*)
    if (i = Len) or (aStrSrc[i + 1] in D) then begin
      (*Наращиваем счётчик по каждой букве, найденной в очередном слове.*)
      for j := 1 to Length(StrAbWord) do Inc( ArrAbText[ StrAbWord[j] ] );
      (*Обнуляем сведения по слову перед следующей итерацией.*)
      StrAbWord := '';
    end;
  end;
 
  (*Находим букву, которая встречается в наибольшем количестве слов.
  Таких букв может быть несколько. Но на этом этапе мы ищем только одну из них.*)
  CharMax := Low(ArrAbText);
  for CharTmp := Low(ArrAbText) to High(ArrAbText) do begin
    if ArrAbText[CharTmp] > ArrAbText[CharMax] then CharMax := CharTmp;
  end;
 
  (*Ищем все буквы, которые встречаются в наибольшем количесве слов.
  И записываем их в строку StrRes.*)
  StrRes := '';
  for CharTmp := Low(ArrAbText) to High(ArrAbText) do begin
    if ArrAbText[CharTmp] = ArrAbText[CharMax] then StrRes := StrRes + CharTmp;
  end;
 
  GetStrAb := StrRes;
end;
 
var
  S : String;
begin
  repeat
    (*Исходная строка.*)
    Writeln('Vvedite stroku:');
    Readln(S);
 
    S := GetStrAb(S);
 
    (*Показываем результат.*)
    Writeln('Bukvi, vstrechajushiesya v naibolshem kolichestve slov:');
    Writeln(S);
 
    Writeln('Povtorit - Enter. Vihod - luboi simvol + Enter.');
    Readln(S);
  until S <> '';
end.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2014, 08:32
Ответы с готовыми решениями:

Вывести все гласные буквы, которые входят в каждое слово
Дан текст, состоящий из слов, содержащих только строчные русские буквы; между...

Вывести в алфавитном порядке все согласные буквы, которые не входят ни в одно слово
Помогите решить задачу написать программу в Паскале ABC, пожалуйста. За ранее...

Вывести на печать все русские согласные буквы, которые не входят ни в одно слово.
Дан массив слов. Слова состоят из строчных латинских, русских букв и цифр....

Вывести на экран все глухие согласные буквы, которые не входят только в одно слово
Ввести четыре слова на русском языке. Вывести на экран все глухие согласные...

Строки. Определить количество слов, которые начинаются с заданной буквы
Задан некоторый текст, содержащий слова, записанные буквами английского...

7
Svager
397 / 376 / 408
Регистрация: 14.09.2013
Сообщений: 1,204
10.05.2014, 01:52 2
Nickolay0512, а не проще,просто взять Ваше задание и написать на турбо,самому? как по мне,так вариант 100% лучший
0
Nickolay0512
57 / 39 / 41
Регистрация: 26.09.2013
Сообщений: 317
Записей в блоге: 1
10.05.2014, 06:09  [ТС] 3
Svager, Я пытался. Из этого ничего не вышло)
0
Puporev
Модератор
56139 / 42994 / 29737
Регистрация: 18.05.2008
Сообщений: 102,034
10.05.2014, 08:47 4
Цитата Сообщение от Nickolay0512 Посмотреть сообщение
Я пытался. Из этого ничего не вышло)
Это понятно, так тебя и просят написать условие задачи.
0
Nickolay0512
57 / 39 / 41
Регистрация: 26.09.2013
Сообщений: 317
Записей в блоге: 1
10.05.2014, 08:51  [ТС] 5
Задана строка символов. Группы символов, разделенные пробелом и не содержащие пробелов внутри себя, будем называть словами. Вывести все буквы, которые входят в наибольшее количество слов строки. Все выводимые буквы преобразовать в прописные.
Например, задана строка :
‘Я учусь программировать на языке Турбо-Паскаль’
Результат работы программы:
Ь

Добавлено через 2 минуты
Вот мои наработки:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
var s:string;
    a:array[1..100] of  string;
    x,n,i,j,k,ko,max:integer;
    f:array[1..100] of integer;
begin
     readln(s); s:=' '+s+' ';
     x:=1; n:=0;
     for i:=0 to length(s)-1 do
     if (s[i]=' ') and (s[i+1]<>' ') then
     begin
          j:=i;
          repeat
                j:=j+1;
                n:=n+1;
          until s[j]=' ';
          a[x]:= copy (s,i+1,n);
          x:=x+1; n:=0;
     end;
     for i:=1 to length(s)-1 do
     begin
         ko:=0;
         for j:=1 to x do
         begin
             for k:=1 to length(a[j]) do
                 if (s[i]=a[j][k]) and (s[i]<>' ') then begin inc(ko); break; end;
         end;
         f[i]:=ko;
     end;
     max:=f[1];
     for i:=1 to length(s)-1 do
         if  f[i]>max then max:=f[i];
     writeln('--->',max);
     for i:=1 to length(s)-1 do
     begin
         k:=0;
         for j:=1 to length(s)-1 do
             if s[i]=s[j] then inc(k);
         if k=max then writeln(upcase(s[i]));
     end;
end.
Я выделяю каждое слово в массив строк и потом ищу вхождения букв. Но что-то идет не так
0
Puporev
Модератор
56139 / 42994 / 29737
Регистрация: 18.05.2008
Сообщений: 102,034
10.05.2014, 10:03 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Я по своему написал
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
uses crt;
const bk=['A'..'Z','a'..'z','А'..'я','Ё','ё'];
var s,s1:string;
    a:array[65..223] of  byte;//входят коды от A лат. до Я, в т.ч. Ё
    n,i,j,max:integer;
begin
writeln('Введите строку из групп символов, разделенных пробелами');
readln(s);
s:=' '+UpperCase(s)+' ';//переведем все буквы в верхний регистр
                        //и добавим пробелы в начало и в конец
n:=length(s);
for i:=65 to 223 do a[i]:=0;//обнулим массив встречаемости букв
i:=1;//начнем с начала
while i<=n do
if (s[i]<>' ') and (s[i-1]=' ') then//если не пробел и перед ним пробел, начало слова
 begin
  s1:='';
  j:=i;
  while(j<=n)and(s[j]<>' ')do//пока не пробел
   begin
    s1:=s1+s[j];//составляем слово
    j:=j+1;
   end;
  for j:=65 to 223 do//проверяем буквы
  if (chr(j) in bk)and(pos(chr(j),s1)>0) then inc(a[j]);//если есть в слове +1
  i:=i+length(s1);//перешагиваем через слово
 end
else i:=i+1;//пропускаем пробелы
max:=0; //найдем макс встречаемость
for i:=65 to 223 do
if a[i]>max then max:=a[i];
writeln('max=',max); //можно убрать
for i:=65 to 223 do
if a[i]=max then write(chr(i));
end.
Добавлено через 2 минуты
Поскольку задание звучит так
Цитата Сообщение от Nickolay0512 Посмотреть сообщение
Группы символов, разделенные пробелом и не содержащие пробелов внутри себя, будем называть словами. Вывести все буквы,
то нужно работать с буквами, а другие символы игнорировать.
1
Nickolay0512
57 / 39 / 41
Регистрация: 26.09.2013
Сообщений: 317
Записей в блоге: 1
10.05.2014, 10:04  [ТС] 7
Большое спасибо)
0
Svager
397 / 376 / 408
Регистрация: 14.09.2013
Сообщений: 1,204
10.05.2014, 12:03 8
Цитата Сообщение от Puporev Посмотреть сообщение
Я по своему написал
Вы меня опередили
0
10.05.2014, 12:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2014, 12:03

Вывести все буквы, которые входят в наибольшее количество слов строки
Помогите мне пожалуйста с решением задачи, а так мне нужно решить три задачи, я...

Напечатать все буквы, которые входят в наибольшее количество слов последовательности
Задана последовательность строчных латинских букв, между словами запятая, за...

Множества. Вывести все глухие согласные буквы, которые входят в каждое нечётное слово и не входят хотя бы в одно чётное
Дано предложение,состоящее из слов,разделённых любым количеством пробелов и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru