Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [PASCAL] Строки


Автор: Lutichka 10.5.2007, 11:32
В массиве строк найти все слова составленые более чем из 8 букв 

Автор: Klin 10.5.2007, 12:25
Это просто smile

Код

uses CRT; { библиотека для очистки экрана }
var text: string;
      Last: integer;
{--------------------------------------------------------------}

{ функция нахождение пробела с позиции}
function FindSpace(LastPos: integer; mytext: string): integer;
begin
 FindSpace:=Pos(chr(32), Copy(mytext,LastPos,Length(mytext)) );
end;
{--------------------------------------------------------------}
begin
 clrscr; { очистка экрана }
 Last:=0; text:='123456 12345678 1234 123456789';
 { вводим текст любым способом }

 text:=text + chr(32);
 { добавляем к строке пробел }

 writeln('Исходный текст: ',text); writeln;
 writeln(' - слова, в которых букв больше 8:'); writeln;
 { выводим сообщение о наших действиях }

 while Last <> Length(text) do begin  { до тех пор, пока позиция не равна количеству символов }
  if ( FindSpace(Last+1,text)-1> 8) then
    writeln(Copy(text,Last+1,FindSpace(Last+1,text)));
  Last:=Last+FindSpace(Last+1,text);
 end;
 { ищем слова, в которых букв больше 8 и выводим их на экран }

end.


Добавлено через 37 секунд
все слова должны разделяться пробелами

Автор: Lutichka 10.5.2007, 12:32
Спасибо, а как это можно сделать не применяя процедур и функции 

Автор: Klin 10.5.2007, 12:57
уточнять надо smile сейчас переделаем.

Добавлено @ 13:05
Код

uses CRT; { библиотека для очистки экрана }
var text: string;
     Last: integer;
{--------------------------------------------------------------}
begin
 clrscr; { очистка экрана }
 Last:=0; text:='123456 12345678 1234 123456789';
 { вводим текст любым способом }

 text:=text + chr(32);
 { добавляем к строке пробел }

 writeln('Исходный текст: ',text); writeln;
 writeln(' - слова, в которых букв больше 8:'); writeln;
 { выводим сообщение о наших действиях }

 while Last <> Length(text) do begin  { до тех пор, пока позиция не равна количеству символов }
  if ( Pos(chr(32), Copy(text,Last+1,Length(text)))-1>8 ) then
   writeln(Copy(text,Last+1,Pos(chr(32), Copy(text,Last+1,Length(text)))));
  Last:=Last+Pos(chr(32), Copy(text,Last+1,Length(text)));
 end;
 { ищем слова, в которых букв больше 8 и выводим их на экран }

end.

Автор: Lutichka 10.5.2007, 16:05
А КАК ввести это все виде массива строк

Автор: Klin 10.5.2007, 17:29
Немного не понял, что именно нужно:
Код

uses CRT; { библиотека для очистки экрана }
const count = 4;
var text: array[1..count] of string;
     i: integer;
{--------------------------------------------------------------}
begin
 clrscr; { очистка экрана }
 for i:=1 to count do begin
  write('Enter text(',i,'): '); readln(text[i]);
 end;
 { запись строк }
 for i:=1 to count do
  if Length(text[i])>8 then writeln(text[i]);
 { поиск "больших" слов }
end.


или так (поиск в каждом массиве):
Код

uses CRT; { библиотека для очистки экрана }
const count = 4;
var text: array[1..count] of string;
     Last,i: integer;
{--------------------------------------------------------------}
begin
 clrscr; { очистка экрана }


 for i:=1 to count do begin

  Last:=0;text[i]:='123456 12345678 1234 123456789';
  { вводим текст любым способом }

  text[i]:=text[i] + chr(32);
  { добавляем к строке пробел }

  writeln; writeln('Исходный текст (строка номер ',i,'): ',text[i]); writeln;
  writeln(' - слова, в которых букв больше 8:'); writeln;
  { выводим сообщение о наших действиях }

  while Last <> Length(text[i]) do begin  { до тех пор, пока позиция не равна количеству символов }
    if ( Pos(chr(32), Copy(text[i],Last+1,Length(text[i])))-1>8 ) then
     writeln(Copy(text[i],Last+1,Pos(chr(32), Copy(text[i],Last+1,Length(text[i])))));
    Last:=Last+Pos(chr(32), Copy(text[i],Last+1,Length(text[i])));
  end;
  { ищем слова, в которых букв больше 8 и выводим их на экран }

 end;

end.

Автор: Lutichka 10.5.2007, 19:15
Извините lenght(text(i)>8 выдает ошибку 

Автор: Lutichka 10.5.2007, 21:19
я правильно говорю .  там в третьем примере где просто через массив строк пишется именно так

Автор: Klin 11.5.2007, 20:38
Lutichka, ну что вы народ путаете? Синтаксис не знаете, тогда хоть народ не смешите.
НЕ 
Цитата(Lutichka @  10.5.2007,  20:15 Найти цитируемый пост)
lenght(text(i)>8

А
Цитата(Klin @  10.5.2007,  18:29 Найти цитируемый пост)
Length(text[i])>8

Скобки должны быть квадратными, функция должна закрывать и писаться с большой буквы (для некоторых компиляторов).

p.s. Я весь код составляю и проверяю компилятором. Правильно переписывайте, а лучше копируйте код.


keenara, помогло хоть?

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