Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Нахождение буквы в слове, проверка на гласные


Автор: whitey 20.12.2008, 16:30
Программа должна считывать слова в массив пока не будет введено слово, которое начинается на букву "b". После чего программа должна вывести все слова массива которые имею хотя бы одну гласную букву.
Питался делать через ф-цию. Завис на этом месте. Что не так?
Код
uses crt;
var
n,p: word;
mas:array [1..100] of string;
function Flag(const s: string):boolean;
var
i, k: word;
begin
k:= 0;
Flag:= false;
repeat
begin
       n:=n+1;
       readln(mas[n]);
       if mas[n][1]='b' then
       Flag:=true;
end;
begin
clrscr;
n:=0;
repeat
begin
  n:=n+1;
  readln(mas[n]);
end;
until (flag(mas[n])=true) or (n=100);
p:=n;
for n:=1 to p do
    begin
         for i:=1 to length(mas[n]) do if mas[n][i]='a' then inc(k);
         for i:=1 to length(mas[n]) do if mas[n][i]='e' then inc(k);
         for i:=1 to length(mas[n]) do if mas[n][i]='i' then inc(k);
         for i:=1 to length(mas[n]) do if mas[n][i]='y' then inc(k);
         for i:=1 to length(mas[n]) do if mas[n][i]='o' then inc(k);
         for i:=1 to length(mas[n]) do if mas[n][i]='u' then inc(k);
             if k>1 then
                begin
                     write(mas[n],' ');
                end;
    end;
readkey;
end.


Автор: Majar 20.12.2008, 19:06
вот держи код проги:
Код

program vin_3;
uses
 Crt;
const
 glas: set of char = ['a','o','i','e','u','y'];
var
 mas: array [1..100] of string;
 i, k, j: byte;
begin
 ClrScr;
 writeln('Vvod slov: ');
 i:= 0;
 repeat
  begin
   inc(i);
   readln(mas[i]);
  end;
 until mas[i][1] = 'b';
 writeln('');
 writeln('Slova, imeiyzhie xotia bu 1 glasnyiy bykvy: ');
 for k:= 1 to i do
  for j:= 1 to Length(mas[k]) do
   if mas[k][j] in glas then
    begin
     writeln(mas[k]);
     break;
    end;
 readln;
end.


Цитата

Питался делать через ф-цию. Завис на этом месте. Что не так?

Учись пользоваться типом множество и упрощать логические конструкции

Автор: Dobermann 20.12.2008, 19:37
whitey, у тебя в коде 2 repeat'a, а until - 1, чё за?!?!?!

Автор: Hades 20.12.2008, 20:00
whitey, Majar, 
а прописные буквы('A" 'E' 'O' 'I' 'U' 'Y')? smile 

Автор: Majar 20.12.2008, 20:41
Цитата

whitey, Majar, 
а прописные буквы('A" 'E' 'O' 'I' 'U' 'Y')? smile 


Это не принципиально, так как на алгоритм не влияет, надо только расширить множество glas (в этом преимущество множеств)
Если все же надо подправить - пожалуйста.

Исправленный код:
Код

program vin_3;
uses
 Crt;
const
 glas: set of char = ['a','o','i','e','u','y','A','O','I','E','U','Y'];
var
 mas: array [1..100] of string;
 i, k, j: byte;
begin
 ClrScr;
 writeln('Vvod slov: ');
 i:= 0;
 repeat
  begin
   inc(i);
   readln(mas[i]);
  end;
 until mas[i][1] = 'b';
 writeln('');
 writeln('Slova, imeiyzhie xotia bu 1 glasnyiy bykvy: ');
 for k:= 1 to i do
  for j:= 1 to Length(mas[k]) do
   if mas[k][j] in glas then
    begin
     writeln(mas[k]);
     break;
    end;
 readln;
end.
 

Автор: whitey 20.12.2008, 23:23
Цитата(Majar @  20.12.2008,  19:06 Найти цитируемый пост)
Учись пользоваться типом множество и упрощать логические конструкции 

Я так уже делал. Препод сказал переделывайте, мы этого еще не проходили.

Автор: volvo877 21.12.2008, 09:54
Цитата(Majar @  20.12.2008,  18:06 Найти цитируемый пост)
Учись пользоваться типом множество и упрощать логические конструкции 
Ну, и ты учись пользоваться циклом Repeat и упрощать бессмысленные конструкции.

whitey, вот с функцией:
Код
uses crt;

function hasVowels(const s: string): boolean;
var i: integer;
begin
  hasVowels := false;
  for i := 1 to length(s) do
    case upcase(s[i]) of
      'A', 'E', 'O', 'I', 'U': hasVowels := true;
    end;
end;

var
  mas: array[1 .. 100] of string;
  i, n: byte;
begin
  clrscr;
  writeln('Vvod slov: ');
  n := 0;
  repeat
    inc(n);
    readln(mas[n]);
  until mas[n][1] = 'b';

  writeln('');
  writeln('Slova, imeiyzhie xotia bu 1 glasnyiy bykvy: ');
  for i := 1 to n do
    if hasVowels(mas[i]) then writeln(mas[i]);
  readln;
end.

Автор: Majar 21.12.2008, 16:37
Цитата

Ну, и ты учись пользоваться циклом Repeat и упрощать бессмысленные конструкции.

цикл repeat в моем коде абсолютно такой же как и в вашем, а бессмысленные конструкции я не использую. Мой код прекрасно работает, а ограничение на использование множеств в первоначальном вопросе не было - так что последите за своими словами. Хоть вы и модератор, это не дает вам право предъявлять необоснованные обвинения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)