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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2013, 02:36   #1
ZveRtheGameS
Пользователь
 
Регистрация: 12.11.2013
Сообщений: 14
По умолчанию Символьный массив в Pascal(Delphi)

Сразу извиняюсь за нелепые вопросы, так как я пока что новичок в pascal*e, собственно сам вопрос:

Ввести 20 строчек на английским языком большими буквами. Определить какие буквы присутствовали в данных предложениях, какая буква встречалась больше раз и напечатать их.
Если вам нужны мои наработки, я могу предоставить, пожалуйста расскажите решение по подробнее, искренне за ранее благодарю за помощь!
ZveRtheGameS вне форума Ответить с цитированием
Старый 12.11.2013, 03:02   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,874
По умолчанию

Ну как-то так (для одной строки):
Код:
type
  TChars = array[Char] of ShortInt;

var
  Chars: TChars;
  S: string[127];
  i: ShortInt;
  MaxCount: ShortInt = 0;
  MaxChar: Char = #0;

begin
  FillChar(Chars, SizeOf(Chars), 0);
  ReadLn(S);
  for i := 1 to Byte((@S)^) do begin
    if not Boolean(Chars[S[i]]) then Write(S[i]);
    Inc(Chars[S[i]]);
    if Boolean((MaxCount - Chars[S[i]]) shr 7) then begin
      MaxCount := Chars[S[i]];
      MaxChar := S[i];
    end; {if}
  end; {for}
  WriteLn(#13#10'Max: ', MaxChar);
end.

Последний раз редактировалось Arigato; 12.11.2013 в 03:06.
Arigato вне форума Ответить с цитированием
Старый 12.11.2013, 03:15   #3
ZveRtheGameS
Пользователь
 
Регистрация: 12.11.2013
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Ну как-то так (для одной строки):
Код:
type
  TChars = array[Char] of ShortInt;

var
  Chars: TChars;
  S: string[127];
  i: ShortInt;
  MaxCount: ShortInt = 0;
  MaxChar: Char = #0;

begin
  FillChar(Chars, SizeOf(Chars), 0);
  ReadLn(S);
  for i := 1 to Byte((@S)^) do begin
    if not Boolean(Chars[S[i]]) then Write(S[i]);
    Inc(Chars[S[i]]);
    if Boolean((MaxCount - Chars[S[i]]) shr 7) then begin
      MaxCount := Chars[S[i]];
      MaxChar := S[i];
    end; {if}
  end; {for}
  WriteLn(#13#10'Max: ', MaxChar);
end.
С ошибкой решение, да и какое то странное... В решении используется массив, фор, логические переменные. Я просто по логике понимаю как записать, но в программе... Да и преподаватель говорит ищите в ответы на вопросы в интернете
ZveRtheGameS вне форума Ответить с цитированием
Старый 12.11.2013, 07:48   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Ну как-то так (для одной строки):
А как же картинка?
Цитата:
for i := 1 to Byte((@S)^) do begin
Суперский Length(s)

Цитата:
Boolean((MaxCount - Chars[S[i]]) shr 7)
Сдесь я что-то не догоняю.. Первую истину мы полчим при MaxCount - Chars[S[i]] = 128... Или нет?
Poma][a вне форума Ответить с цитированием
Старый 12.11.2013, 08:27   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ловите код:
Код:
const n = 20;
var 
  ch : char;
  CounterChars : array['A'..'Z'] of integer;
  i,j, MaxCnt : integer;
  s : string;
begin
  {обнулим массив счётчиков}
  for ch:='A' to 'Z' do CounterChars[ch] := 0;


  WriteLn;
  for j:=1 to n do begin {цикл по всем 20 строчкам}
    Write('Введите ',j,'-ю строку: ');
    Readln(s);

    for i:=1 to Length(s) do
      if s[i] in ['A'..'Z'] then {условиями задачи нам даётся, 
               что буквы только прописные латинские, но защититься от "дурака",
               который ввёл всё, что угодно не помешает!}
          inc(CounterChars[s[i]]); {увеличим на единицу счётчик очердной буквы}

  end; 

  {найдём максимальное значение == какая буква встречалась чаще всего}
  MaxCnt := 0;
  for ch:='A' to 'Z' do 
    if CounterChars[ch] > MaxCnt then MaxCnt := CounterChars[ch];

  {выведем все буквы, которые встретились максимальное число раз}
  for ch:='A' to 'Z' do 
    if CounterChars[ch] = MaxCnt then 
       WriteLn('буква ',ch,' встретилась ',CounterChars[ch],' раз');

  {вывести все буквы, которые встречались}
  WriteLn('Встречались следующие буквы (в алфавитном порядке): ');
  for ch:='A' to 'Z' do 
    if CounterChars[ch] > 0 then 
       Write(ch,'(',CounterChars[ch],' )  ');

  Writeln; 
  WriteLn('Для выхода из программы нажмите ENTER');
  Readln
    
end.
если есть вопросы - задавайте.

Последний раз редактировалось Serge_Bliznykov; 12.11.2013 в 08:30.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.11.2013, 09:49   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,874
По умолчанию

Цитата:
Сообщение от ZveRtheGameS Посмотреть сообщение
С ошибкой решение, да и какое то странное...
В чем ошибка?
Arigato вне форума Ответить с цитированием
Старый 15.11.2013, 03:38   #7
ZveRtheGameS
Пользователь
 
Регистрация: 12.11.2013
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ловите код:
Код:
const n = 20;
var 
  ch : char;
  CounterChars : array['A'..'Z'] of integer;
  i,j, MaxCnt : integer;
  s : string;
begin
  {обнулим массив счётчиков}
  for ch:='A' to 'Z' do CounterChars[ch] := 0;


  WriteLn;
  for j:=1 to n do begin {цикл по всем 20 строчкам}
    Write('Введите ',j,'-ю строку: ');
    Readln(s);

    for i:=1 to Length(s) do
      if s[i] in ['A'..'Z'] then {условиями задачи нам даётся, 
               что буквы только прописные латинские, но защититься от "дурака",
               который ввёл всё, что угодно не помешает!}
          inc(CounterChars[s[i]]); {увеличим на единицу счётчик очердной буквы}

  end; 

  {найдём максимальное значение == какая буква встречалась чаще всего}
  MaxCnt := 0;
  for ch:='A' to 'Z' do 
    if CounterChars[ch] > MaxCnt then MaxCnt := CounterChars[ch];

  {выведем все буквы, которые встретились максимальное число раз}
  for ch:='A' to 'Z' do 
    if CounterChars[ch] = MaxCnt then 
       WriteLn('буква ',ch,' встретилась ',CounterChars[ch],' раз');

  {вывести все буквы, которые встречались}
  WriteLn('Встречались следующие буквы (в алфавитном порядке): ');
  for ch:='A' to 'Z' do 
    if CounterChars[ch] > 0 then 
       Write(ch,'(',CounterChars[ch],' )  ');

  Writeln; 
  WriteLn('Для выхода из программы нажмите ENTER');
  Readln
    
end.
если есть вопросы - задавайте.
Спасибо, Вы очень помогли мне!
ZveRtheGameS вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Символьный массив ISV-777 Помощь студентам 0 14.11.2011 22:49
Задачки на двумерный символьный массив в Delphi Ann_Sh Помощь студентам 5 07.11.2010 18:16
Символьный массив g00d_game Общие вопросы C/C++ 1 12.06.2010 13:38