for i := 1 to n do begin writeln; for j:=1 to m do begin myarr[i,j]:=char(random(31)+128); write(myarr[i,j]:4); end; end; readln;
writeln('Введите слово'); READLN(S);
readln; end.
Подскажите, пожалуйста, как написать программу, которая определяет можно ли из этих букв составить данное слово S?Массив состоит из строк, каждая строка из одного случайной буквы русского алфавита.
Автор: klem4 18.04.2007 1:19
То есть есть набор символов и слово S и нужно опрежделить можно ли составить это слово используя этот набор символов ? Ну тогда можно вот так:
идешь по символам слова S, смотришь если символ S[i] есть в наборе, переходишь к следующему символу слова S (и возможно удаляешь этот символ из набора) иначе выходишь из цикла.
Если проверены все символы слова, то можно.
Автор: vanushka05 18.04.2007 1:36
Цитата(klem4 @ 17.04.2007 22:19)
То есть есть набор символов и слово S и нужно опрежделить можно ли составить это слово используя этот набор символов ? Ну тогда можно вот так:
идешь по символам слова S, смотришь если символ S[i] есть в наборе, переходишь к следующему символу слова S (и возможно удаляешь этот символ из набора) иначе выходишь из цикла.
Если проверены все символы слова, то можно.
Извиняюсь, но не мог бы написать с помощью кода?
Автор: Айра 18.04.2007 3:29
Можно вот так:
program z3; uses wincrt; label metka; var myArr : array [1..100,1..100] of string [1]; i,j,n,m,k:integer; sym:char; s,st:string; begin clrscr;
for i := 1 to n do begin writeln; for j:=1 to m do begin myarr[i,j]:=char(random(32)+224); {я поменяла здесь параметры, а то у меня не буквы, а ерунда какая-то, так русский алфавит} write(myarr[i,j]:4); end; end; writeln;
writeln('Введите слово'); READLN(S); st:=s;
{а вот и нужный цикл} metka: for i:=1 to n do for j:=1 to m do begin if (copy(s,1,1))=myarr[i,j] then begin delete(s,1,1); if length(s)<>0 then goto metka; end; end;
if length(s)=0 then writeln ('из массива можно составить слово ',st,'') else writeln ('из массива нельзя составить слово ',st,'');
readln; end.
Автор: volvo 18.04.2007 3:35
Оля, а не получится так, что, скажем, слово - "молоко", а в матрице - только одна буква "о", и по одной "м", "л" и "к"... По твоему методу будет считаться, что слово составить можно, формально же - нет, потому что букв "о" должно быть 3...
Автор: Айра 18.04.2007 4:03
Цитата
Оля, а не получится так, что, скажем, слово - "молоко", а в матрице - только одна буква "о", и по одной "м", "л" и "к"... По твоему методу будет считаться, что слово составить можно, формально же - нет, потому что букв "о" должно быть 3...
Я об этом тоже подумала, но в условии не сказано, что букву нельзя брать несколько раз...
Добавлено через 1 мин. Попробую осуществить и другой вариант, но не сейчас... Поздно уже)))
Автор: Айра 18.04.2007 10:50
Вот:
metka: for i:=1 to n do for j:=1 to m do begin if (copy(s,1,1))=myarr[i,j] then begin delete(s,1,1); myarr[i,j]:=''; {тут} if length(s)<>0 then goto metka; end; end;
Мы просто использованный символ из массива будем очищать: myarr[i,j]:=''; Тогда второй раз он уже не подойдет.