Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выбор строки по условию

5.1K
05 января 2004 года
chicher
7 / / 25.12.2003
Помогите! Плиз!

Дан одномерный массив строк (уже найденый некоей процедурой). Число строк - j. Надо найти строку, заканчивающуюся наибольшим числом русских букв.

Если надо, то есть функция возвращающая true если буква русская, false - если нет.

function crus(ch:char):boolean;
begin
crus:=false;
if ((ord(ch)>127) and (ord(ch)<176)) or ((ord(ch)>223) and (ord(ch)<241)) then crus:=true;
end;
1.9K
06 января 2004 года
lexalex
59 / / 23.12.2003
Цитата:
Originally posted by chicher
Помогите! Плиз!



program rus_string;
var
mas:array[1..100] of string;
mas2:array[1..100] of integer;
st:string;
j,k,t,i,num:integer;
function rus(ch:char):boolean;
begin
rus:=false;
if ((ord(ch)>127) and (ord(ch)<176)) or ((ord(ch)>223) and (ord(ch)<241)) then rus:=true;
end;
begin
readln(num);
for i:=1 to num do begin
writeln('Insert ',i,'th string');
readln(mas);
end;
for i:=1 to num do begin
st:=mas;
for j:=1 to length(mas) do begin
if rus(st[j])=true then mas2:=mas2+1;
end;
end;
for i:=1 to num do
if mas2>k then begin
k:=mas2;
t:=i;
end;
writeln(t,'th = ',mas[t]);
readln;
end.

Попробуй такую. Хотя я хорошо не проверил (у меня
русской раскладки нет) Полагался на твою функцию.

5.1K
06 января 2004 года
chicher
7 / / 25.12.2003
ОГРОМНОЕ спасибо! Всё работает ОК.
1.6K
09 января 2004 года
Unexpected
137 / / 09.12.2002
Цитата:
Originally posted by chicher

Дан одномерный массив строк (уже найденый некоей процедурой). Число строк - j. Надо найти строку, заканчивающуюся наибольшим числом русских букв.

Если ЗАКАНЧИВАЮЩУЮСЯ, то вышеприведенный алгоритм не будет работать. (Точнее - будет, но не всегда)
Если строка имеет много русских букв, но заканчивается "не русской" то он всё равно может её выбрать.

Буквально парой сообщений назад тут уже был подобный алгоритм:

[COLOR=darkblue][FONT=courier new]
var m,k,l,i,j as integer;
var st as string;
var mas[???] of string;

m:=-1;
k:=-1;
l:=-1;
 
For i:=0 to length(mas) do
      begin
      st:=mas;
      l:=0;
      for j:=st[0] downto 1 do
            if ((ord(st[j])>127) and (ord(st[j])<176)) or ((ord(st[j])>223) and (ord(st[j])<241))
                  then l:=l+1 else break;
      if l>k then
            begin
            m:=i;
            k:=l;
            end;
      end;
[/FONT][/COLOR]

На выходе: m - номер строки, k - длина.
Если m = -1 -> таких строк нет вобще.

ЗЫ: В принципе st[?] можно, вроде, заменить на mas[?] но точно не помню..

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог