Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2012, 08:43   #1
Галенька
Пользователь
 
Регистрация: 09.01.2012
Сообщений: 10
По умолчанию Массив МхN содержит буквы русского алфавита, расположенные хаотично. Нужна программа проверки, можно ли составить слово S (Delphi)

Двумерный массив М х N содержит некоторые буквы русского алфавита, расположенные в произвольном порядке. Написать программу, проверяющую, можно ли из этих букв составить данное слово S.

препод хочет чтобы буква из массива использовалась только один раз, а я уже не знаю как сделать(((

Будьте так добры, помогите. Делфи

Код:
program Project1;

 {$APPTYPE CONSOLE}

 uses
 SysUtils;

 Function Kod(s:string):string;
 Var i,d:integer;
 Begin
 result:=s;
 d:=length(result);
 For i:=1 to d do begin
 if (result[i]>='р') and (result[i]<='я') then result[i]:=chr(ord(s[i])-16)
 else if (result[i]>='А') and (result[i]<='п') then result[i]:=chr(ord(s[i])-64)
 end;
 end;

 const n=3; m=2;
 Type Mas=array [1..n] of array [1..n] of char;

 Procedure VVod(out a:mas);
 Var i,j:integer;
 begin
 For i:=1 to n do
 for j := 1 to m do
 begin
 Write('A[',i,',',j,']='); readln(A[i,j])
 end;
 end;

 Procedure Proverka(var a:mas; var s:string);
 var k,j,i:integer; h:integer; s1,s2:string;
 begin
 s2:=s;
 for h := 1 to length(s) do
 begin
 s1:=copy(s,h,1);
 For i:=1 to n do
 begin
 For j:=1 to m do
 begin
 if s1=a[i,j] then Delete(s2,pos(a[i,j],s2),1);
 end;
 end;
 end;
 If s2=''then Writeln(Kod('Можно')) else Writeln(Kod('Нельзя'));
 end;

 Var a:mas; s:string;
 begin
 Vvod(a);
 Write(Kod('Введите слово, которое будем проверять : '));
 Readln(s);
 Proverka(a,s);
 readln;
 end.
Галенька вне форума Ответить с цитированием
Старый 20.01.2012, 08:47   #2
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Так все же элементарно.
Есть много вариантов, как пример, попросту записывать в одномерный массив расположение очередной буквы, и при проверке следующей подходящей буквы, сверять по одномерному массиву - не является ли эта буква повторяющейся.
P.S. И зачем было создавать две одинаковые темы?
Базиля вне форума Ответить с цитированием
Старый 20.01.2012, 09:11   #3
Галенька
Пользователь
 
Регистрация: 09.01.2012
Сообщений: 10
По умолчанию

мм... а какие еще варианты есть?.. по-проще..

p.s. - не могу удалить ту, не до этого пока что
Галенька вне форума Ответить с цитированием
Старый 20.01.2012, 10:18   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а не проще ли поступить так.
1) в цикле(ах) проходим по массиву и все имеющиеся в нём буквы собираем в одну строку.

2) берём поочерёдно буквы из слова S и проверяем их наличие в собранной строке. Если их там нет - выдаём сообщение - что нельзя составить и выходим из цикла. Если же буква найдена - удаляем её из строки.
Если цикл закончился - значит слово можно составить.
выглядит это всё в коде примерно так:
Код:
const n=3; m=2;
Type Mas=array [1..n] of array [1..m] of char;

procedure Proverka(var a: mas; s: string);
var i, j : integer;
    h: integer;
    sAllLetters : string;
    Mozno : boolean;
begin
  sAllLetters := '';
  for i := 1 to n do
    for j := 1 to m do
       sAllLetters := sAllLetters + a[i,j];

  Mozno := true;
  for h := 1 to length(s) do
  begin
     if Pos(s[h], sAllLetters)>0 then Delete( sAllLetters, Pos(s[h], sAllLetters), 1 )
     else begin
        Mozno := false;
        Break;
     end;
  end;

  if Mozno then Writeln(Kod('Можно')) else Writeln(Kod('Нельзя'));
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка ввода на наличие русского алфавита sw47 Паскаль, Turbo Pascal, PascalABC.NET 2 24.03.2011 20:42
Вывод русского алфавита в Debug.exe Эллире Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 26.10.2010 20:04
WriteConsoleOutputCharacter проблема отображения русского алфавита fondreykus-1 Общие вопросы Delphi 5 31.08.2010 17:41
задача со сменой букв русского алфавита koresh3 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 04.01.2010 15:52
Буквы алфавита Golovastik Общие вопросы C/C++ 27 24.07.2009 22:29