Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Массив из русских букв

Автор: vanushka05 18.04.2007 1:14

Цитата
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 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 (и возможно удаляешь этот символ из набора) иначе выходишь из цикла.

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


Извиняюсь, но не мог бы написать с помощью кода? unsure.gif

Автор: Айра 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;

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 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]:=''; Тогда второй раз он уже не подойдет.

Автор: vanushka05 18.04.2007 16:44

БОЛЬШОЕ СПАСИБО!!!!!! rolleyes.gif