Помощь - Поиск - Пользователи - Календарь
Полная версия: Массив из русских букв
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
vanushka05
Цитата
program z3;
uses crt;
var
myArr : array [1..100,1..100] of string [1];
i,j,n,m:integer;
sym:char;
s:string;
begin
clrscr;

randomize;
writeln('число строк');
readln(n);
writeln('число столбцов');
readln(m);

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
То есть есть набор символов и слово S и нужно опрежделить можно ли составить это слово используя этот набор символов ? Ну тогда можно вот так:

идешь по символам слова S, смотришь если символ S[i] есть в наборе, переходишь к следующему символу слова S (и возможно удаляешь этот символ из набора) иначе выходишь из цикла.

Если проверены все символы слова, то можно.
vanushka05
Цитата(klem4 @ 17.04.2007 22:19) *

То есть есть набор символов и слово S и нужно опрежделить можно ли составить это слово используя этот набор символов ? Ну тогда можно вот так:

идешь по символам слова S, смотришь если символ S[i] есть в наборе, переходишь к следующему символу слова S (и возможно удаляешь этот символ из набора) иначе выходишь из цикла.

Если проверены все символы слова, то можно.


Извиняюсь, но не мог бы написать с помощью кода? unsure.gif
Айра
Можно вот так:
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;

randomize;
writeln('число строк');
readln(n);
writeln('число столбцов');
readln(m);

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
Оля, а не получится так, что, скажем, слово - "молоко", а в матрице - только одна буква "о", и по одной "м", "л" и "к"... По твоему методу будет считаться, что слово составить можно, формально же - нет, потому что букв "о" должно быть 3...
Айра
Цитата
Оля, а не получится так, что, скажем, слово - "молоко", а в матрице - только одна буква "о", и по одной "м", "л" и "к"... По твоему методу будет считаться, что слово составить можно, формально же - нет, потому что букв "о" должно быть 3...

Я об этом тоже подумала, но в условии не сказано, что букву нельзя брать несколько раз...

Добавлено через 1 мин.
Попробую осуществить и другой вариант, но не сейчас... Поздно уже)))
Айра
Вот:
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]:=''; Тогда второй раз он уже не подойдет.
vanushka05
БОЛЬШОЕ СПАСИБО!!!!!! rolleyes.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.