Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача из 7 урока от Дмитриева Эдуарда.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
fizik
В 7 уроке есть такая задачка, где надо ввести 10 символов и проверить, можно ли из них составить введенное слово.Я написал программу, но у меня она почему то работает некорркектно.Вот код:
Код

Program Puzzle_1;
Uses Crt;
Label zx;
Var
x: Array[1..10] of char;
a,b,c:byte;
s:string;
begin
ClrScr;
Write('Vvedite 10 bukv :');
For a:=1 to 10 do
   begin
   Write(a,') ');
   Readln(x[a]);
   end;
Write('vvedite slovo: ');
Readln(s);
For a:=1 to length(s) do
   Repeat
   Inc(b);
   If b>10 then goto zx;
   If s[a]=x[b] then
      begin
      Inc(c);
      x[b]:='#';
      end;
   Until s[a]=x[b];
zx:
If c=length(s)
Then Write('Iz bukv mozhno sostavitj dannoje slovo!')
Else write('Iz bukv nelzja sostavitj dannoje slovo!');
Readln;
end.

Кстати, почему если я начале вместо Write(a,') ');Readln(x[a]); пишу Write(' ',a,' )');Read(x[a]); , то уменя вместо того, чтобы считывать буквы в строку, прог-а выводит какую-то туфту.
P.S. Заодно, если кому не лень, предложите еЩе варианты решения этой задачи.
APAL
Код

Uses Crt;
Var
x: Array[1..10] of char;
a,b:byte;
s:string;

Function CheckChInSt(Ch :Char) : Boolean;
Var c : Byte;
Begin
CheckChInSt:=False;
For c:=1 to 10 do
If Ch=x[c] then CheckChInSt:=True;
End;

begin
ClrScr;
Write('Vvedite 10 bukv :');
For a:=1 to 10 do
begin
 Write(a,') ');
 Readln(x[a]);
end;
Write('vvedite slovo: ');
Readln(s);
For a:=1 to Length(s) do
 If CheckChInSt(s[a]) then Continue else
   Begin
     write('Iz bukv nelzja sostavitj dannoje slovo!');
     Halt(0);
   End;
Write('Iz bukv mozhno sostavitj dannoje slovo!')
end.
BlackShadow
Туфту оно тебе выдаёт, потому что Read пытается считать выведенное Write'ом значение.
fizik
Новый вариант мне понравился.Но я хочу знать:А в чем у меня была ошибка?( т.е. Почему прога работает неправильно.)
APAL
В твоем варианте не очень проработан алгоритм.
Например с переменной b какой-то бред. Она у тебя работает только один раз - ты ее не скидываешь в ноль после первого и последующего прохода цикла
Код
For a:=1 to length(s)
Попробуй еще раз с самого начала сам написать. И не забывай задавать начальные значение переменным, т.е. b:=0; c:=0; а то ты их INC'ом изменяешь, но какое у них было начальное значение??? (а может быть любое)

И постарайся не использовать GOTO - это плохой тон.
FreeMan
Вы ещё подеритесь за использование Goto <_<
Werwolf86
APAL Совершенно верно. использование Goto - мешает отладке программы
BlackShadow
Если б кто это про JMP сказал - вот я бы смеялся smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.