Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> какая из букв встречается в данной строке чаще 
V
    Опции темы
Studeht
  Дата 10.4.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 6.4.2009
Где: Тула

Репутация: нет
Всего: нет



Здравствуйте Господа программисты! Подскажите процедуру, которая определяет какая буква встречается в данной строке чаще всего. А то я совершенно не знаю как этот поиск организовать.. smile 
PM MAIL   Вверх
volvo877
Дата 11.4.2009, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Код
var
  counter: array[char] of integer;
  ch, max_ch: char; i: integer;
  s: string;
begin
  s := 'this is the simplest.test of string';
  fillchar(counter, sizeof(counter), 0);
  for i := 1 to length(s) do inc(counter[s[i]]);

  { А теперь ищешь в массиве counter максимальное значение }
  max_ch := #0;
  for ch := #0 to #255 do
    if counter[ch] > counter[max_ch] then max_ch := ch;
  writeln(max_ch);
end.

PM MAIL   Вверх
Studeht
Дата 11.4.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 6.4.2009
Где: Тула

Репутация: нет
Всего: нет



Спасибо volvo877  Но возник вопрос по другой программе(не стал создавать новую тему, хотя наверное зря) Задание следующее:
TYPE масть=(пик,трефы,бубны,червы);
достоинство=(шесть,семь,восемь,девять,десять,валет,дама,король,туз);
      карта=RECORD
             M: масть;
             д: достоинство;
            END;
Описать логическую функцию KICK(K1,K2,KM), проверяющую, "бьет" ли карта K1 карту K2, с учетом того, что масть KM является козырной

Вот то, что у меня получилось:
Код

type Color=(Spades,Clubs,Diamonds,Hearts);
     Advantage=(Six,Seven,Eight,Nine,Ten,Jack,Queen,King,Ace);
  Card=record
    m:Color;
    d:Advantage;
  end;

procedure InputData(var K1,K2:Card; var KM:Color; var m1,m2,d1,d2,Kz:string);
begin
  writeln('Введите козырную масть ');
  readln(kz);
  writeln('Введите первую карту');
  writeln('Введите масть ');
  readln(m1);
  writeln('Введите достоинство ');
  readln(d1);
  writeln('Введите вторую карту');
  writeln('Введите масть ');
  readln(m2);
  writeln('Введите достоинство ');
  readln(d2);
end;

procedure RecognitionTrumpColor(KM:Color; Kz:string);
begin
    if Kz='пики' then
      KM:=Spades
  else
    if Kz='трефы' then
      KM:=Clubs
  else
    if Kz='бубны' then
      KM:=Diamonds
  else
    if (Kz='червы') or (Kz='черви') then
      KM:=Hearts
  else
      writeln('Неправильно введена козырная масть!!!');
end;

procedure RecognitionColorFirstCard(K1:Card; m1:string);
begin
    if m1='пики' then
      K1.m:=Spades
  else
    if m1='трефы' then
      K1.m:=Clubs
  else
    if m1='бубны' then
      K1.m:=Diamonds
  else
    if (m1='червы') or (m1='черви') then
      K1.m:=Hearts
  else
      writeln('Неправильно введена масть первой карты!!!');
end;

procedure RecognitionColorSecondCard(K2:Card; m2:string);
begin
    if m2='пики' then
      K2.m:=Spades
  else
    if m2='трефы' then
      K2.m:=Clubs
  else
    if m2='бубны' then
      K2.m:=Diamonds
  else
    if (m2='червы') or (m2='черви') then
      K2.m:=Hearts
  else
      writeln('Неправильно введена масть второй карты!!!');
end;

procedure RecognitionAdvantageFirstCard(K1:Card; d1:string);
begin
    if (d1='шесть') or (d1='6') then
      K1.d:=Six
  else
    if (d1='семь') or (d1='7') then
      K1.d:=Seven
  else
    if (d1='восемь') or (d1='8') then
      K1.d:=Eight
  else
    if (d1='девять') or (d1='9') then
      K1.d:=Nine
  else
    if (d1='десять') or (d1='10') then
      K1.d:=Ten
  else
    if (d1='валет') then
      K1.d:=Jack
  else
    if (d1='дама') then
      K1.d:=Queen
  else
    if (d1='король') then
      K1.d:=King
  else
    if (d1='туз') then
      K1.d:=Ace
  else
      writeln('Неправильно введено достоинство первой карты!!!');
end;

procedure RecognitionAdvantageSecondCard(K2:Card; d2:string);
begin
    if (d2='шесть') or (d2='6') then
      K2.d:=Six
  else
    if (d2='семь') or (d2='7') then
      K2.d:=Seven
  else
    if (d2='восемь') or (d2='8') then
      K2.d:=Eight
  else
    if (d2='девять') or (d2='9') then
      K2.d:=Nine
  else
    if (d2='десять') or (d2='10') then
      K2.d:=Ten
  else
    if (d2='валет') then
      K2.d:=Jack
  else
    if (d2='дама') then
      K2.d:=Queen
  else
    if (d2='король') then
      K2.d:=King
  else
    if (d2='туз') then
      K2.d:=Ace
  else
      writeln('Неправильно введено достоинство второй карты!!!');
end;

function KICK(K1,K2:card; KM:Color):boolean;
begin
  if ((K1.m=K2.m) and (K1.d>K2.d)) or ((K1.m=KM) and (K2.m<>KM)) then
    KICK:=true
  else
    KICK:=false
end;

var K1,K2:Card;
    KM:Color;
    m1,m2,d1,d2,Kz:string;
begin
  clrscr;
  InputData(K1,K2,KM,m1,m2,d1,d2,Kz);
  RecognitionTrumpColor(KM,Kz);
  RecognitionColorFirstCard(K1,m1);
  RecognitionColorSecondCard(K2,m2);
  RecognitionAdvantageFirstCard(K1,d1);
  RecognitionAdvantageSecondCard(K2,d2);
  KICK(K1,K2,KM);
    if KICK(K1,K2,KM) then
      writeln(d1,' ',m1,' бьет ',d2,' ',m2)
    else
      writeln(d1,' ',m1,' не бьет ',d2,' ',m2);
  readln;
end.


Не знаю почему но программа всегда выводит сообщение, что карта к1 не бьет карту к2. Вероятнее всего ошибка где-то в функции KICK, но я не знаю в чем. Помогите плз
PM MAIL   Вверх
volvo877
Дата 11.4.2009, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Studeht @  11.4.2009,  12:54 Найти цитируемый пост)
Вероятнее всего ошибка где-то в функции KICK
Ошибка - в том, что надо параметры, которые должны ВЕРНУТЬСЯ из процедуры, передавать по ссылке, а не по значению:

Код
procedure RecognitionColorFirstCard(K1:Card; m1:string);
...
RecognitionTrumpColor(KM,Kz);
Я правильно понимаю, что ты ожидаешь изменения значения переменной KM после вызова процедуры? Напрасно, ты Var забыл, чтобы изменения передались назад. У тебя KM после вызова будет точно таким же, как и до него... Исправляй эту ошибку во всей программе...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.4590 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.