Другие языки программирования и технологии

1. как в строке выбрать все русские буквы по одному разу? 2.как заполнить массив по правилу латинского квадрата?

1. у меня выбираются все русские буквы, а надо, чтобы они не повторялись (( это как то через множество делать с проверкой принадлежности элемента, но у меня не получается (( 2. заполнить так 12345 23451 34512 45123 51234 вот с этой задачей у меня вообще стопор ((
Д. Королев
Д. Королев
258
1) Непонятно что конкретно надо сделать.. .
Что значит выбрать все русские буквы по одному разу?
А принадлежность элемента русским буквам идёт вот так:
If ( S[ i ] in [ 'а'...'я' ] ) or ( S[ i ] in [ 'А'...'Я' ] ) Then ...
Проверяет входит ли элемент i строки S в множество (а... я) или (А... я) .

2) Решение такое:

VarQ,i,j:integer;
S1,S2,S:real;
Q:=12345;
Writeln(Q);
For i:=1 to 4 Do
Begin
S:=Q;
For j:=1 to 5-i Do
Begin
S:=S/10;
End;
S1:=frac(S);
For j:=1 to 5-i Do
Begin
S1:=S1*10;
End;
S2:=int(S);
Writeln(S1:1:0,S2:1:0 )
End;
Алгоритм поганый довольно.. . Но если надо просто отобразить, то сойдёт!
ЕН
Еркебулан Ныгманов
2 342
Лучший ответ
Доброго времени суток.

>> как в строке выбрать все русские буквы по одному разу?

Выбрать не вопрос, как отбразить результат надо? Если порядок не играет роли, то очень просто.

M := [];
for i:=1 to Length(S) do M := M + [S[ i ]];

Фишка в том, что сколько не пихай в множестово одинаковые элементы, их там больше не станет. Т. е. после такого цикла множество М будет содержать по одному символу из исходной строки. Остается только вывести элементы.

for i:=1 to 255 do if Chr(i) in M then WriteLn(Chr(i));

Если же надо выводить символы в том же порядке, в котором они встречаются во входной строке, то можно так

M := [];
for i:=1 to Length(S) do
if not (S[ i ] in M) then begin {если символа не в множестве}
M := M + [S[ i ]]; {добавим его}
WriteLn(S[ i ]); {и выведем}
end;

Удачи!

Похожие вопросы