Выбор строки по условию
Дан одномерный массив строк (уже найденый некоей процедурой). Число строк - 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;
Помогите! Плиз!
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.
Попробуй такую. Хотя я хорошо не проверил (у меня
русской раскладки нет) Полагался на твою функцию.
Дан одномерный массив строк (уже найденый некоей процедурой). Число строк - 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[?] но точно не помню..