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


Автор: Nastya90 12.4.2009, 19:09
плиз помогите с решением задачки про процедуры и функциии, а остальные попробудю решить сама, ориантируясь на эту!!!! плиззззззз!!!
 
напечатать Все различные русские слова

Автор: volvo877 12.4.2009, 19:52
Для домашних заданий, курсовых, существует "Центр Помощи"

Тема перенесена! 

Автор: Akonkagva1 13.4.2009, 00:11
Что значит все возможные русские слова ? Можно поконкретнее... Все реально существующие или как ?

Автор: Nastya90 13.4.2009, 04:27
ну вот к примеру есть строка: YA k тебе сегодня priedy vecherom
 вот их этой строки нужно выбрать только русские слова

Автор: t_gran 13.4.2009, 08:09
Блин, с вами и на Pas-ca-ca-l-е научишься в совершенстве кодить! smile
Код

uses crt;

const
   CAlfLen= 255;
   CChars= 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
   CDelimiters= ' {},.!?`~^&%';
type
   TAlf= array [0..CAlfLen] of boolean;

{----------------------------------------------}
{Создаём на базе шаблона алфавит}
procedure AlfCreateFromPattern (var theAlf: TAlf; const thePattern: string);
var
   i: integer;
begin
   for i:= 0 to CAlfLen do
      theAlf[i]:= false;
   for i:= 0 to length(thePattern) do
      theAlf[integer(thePattern[i])]:= true;
end;
{----------------------------------------------}
{Проверяем, входит ли данный символ в алфавит}
function CharInAlf (theChar: char; theAlf: TAlf): boolean;
begin
   CharInAlf:= theAlf[integer(theChar)];
end;
{----------------------------------------------}
{Состоит ли слово из символов данного алфавита}
function WordCompareWithAlf (theWord: string; theAlf: TAlf): boolean;
var
   i: integer;
   r: boolean;
begin
   r:= true;
   for i:= 1 to length(theWord) do
      if not CharInAlf (theWord[i], theAlf) then
      begin
         r:= false;
         break;
      end;
   WordCompareWithAlf:= r;
end;
{----------------------------------------------}
{Вырезаем первое слово из строки + уничтожаем все разделители}
function PopWordFromString (var theStr: string; var theWord: string; theDelimiter: TAlf): boolean;
var
   i, j: integer;
   len: integer;
begin
   len:= length(theStr);
   if (len = 0) then
   begin
      theWord:= '';
      PopWordFromString:= false;
      exit;
   end;
   i:= 1;
   while (i < len) and (not CharInAlf (theStr[i], theDelimiter)) do
      inc(i);
   j:= i;
   while (j < len) and CharInAlf (theStr[j], theDelimiter) do
      inc(j);
   if (i < len) then
      dec(i);
   if (j < len) then
      dec(j);
   theWord:= copy (theStr, 1, i);
   Delete (theStr, 1, j);
   PopWordFromString:= true;
end;
{----------------------------------------------}
var
   str, word: string;
   alf, del: TAlf;
begin
   AlfCreateFromPattern (alf, CChars);
   AlfCreateFromPattern (del, CDelimiters);
//   write ('Предложение: ');
//   readln (str);
   str:= 'Привет мир I gо :-) to хом';
   while (PopWordFromString(str, word, del)) do
   begin
      if (WordCompareWithAlf(word, alf)) then
         write (word, ' ');
   end;
end.

Автор: volvo877 13.4.2009, 12:26
Цитата(t_gran @  13.4.2009,  08:09 Найти цитируемый пост)
научишься в совершенстве кодить!
А ты что, на Паскале задачу решал? Нет тут Паскаля, и даже не пахнет им... Ты пишешь на Сях? Вот и пиши... А в Паскале (я бы просил не коверкать название языка!!!) есть гораздо более подходящие средства для решения этой задачи. И то, что тебе пришлось эмулировать множество - это твои личные заморочки - половину функций в топку, вторая половина становится вполовину меньше объемом, функциональность остается прежней. Помощники, блин... А потом вот такие "спецы" как ты и разжигают все холивары, дескать, смотрите, какой неправильный язык. А ты его ЗНАЕШЬ, чтоб на нем (и О НЕМ) писать?

Автор: t_gran 14.4.2009, 04:02
Многоувожаемый, volvo877, прошу извенить меня за столь "грубые" высказывания в адрес этого легендарного языка.

Цитата

есть гораздо более подходящие средства для решения этой задачи

Не спорю, множества есть.

Цитата

эмулировать множество - это твои личные заморочки

Вы правы, это мои личные заморочки!

Цитата

половину функций в топку, вторая половина становится вполовину меньше объемом

Тек в чём проблема, написали бы, а то кричать из за угла любой горазд.

А разжигать холивар я бы и не посмел, т.к. я очень уважаю труды Н.Вирта.
Что же касается моего сорказма, то не берите в голову, я просто был в "хорошем" настроении.

Автор: t_gran 14.4.2009, 07:21
А какая критика будет на этот код?
Код

uses crt;
const
   CChar= ['А'..'Я','а'..'я'];
   CDelim= [' ','{','}',',','.','!','?','`','~','^','&','%'];
type
   TAlf= set of char;
{-----------------------------------------------}
function WordCompareWithAlf (theWord: string; theAlf: TAlf): boolean;
var
   i: integer;
   r: boolean;
begin
   r:= true;
   for i:= 1 to length(theWord) do
      if not (theWord[i] in theAlf) then
      begin
         r:= false;
         break;
      end;
   WordCompareWithAlf:= r;
end;
{-----------------------------------------------}
function PopWordFromString (var theStr: string; var theWord: string; theDelimiter: TAlf): boolean;
var
   i, j: integer;
begin
   i:= 1;
   while not (theStr[i] in theDelimiter) do
      inc(i);
   j:= i;
   while (theStr[j] in theDelimiter) do
      inc(j);
   theWord:= copy (theStr, 1, i-1);
   Delete (theStr, 1, j-1);
   if (length(theWord) = 0) then
      PopWordFromString:= false
   else
      PopWordFromString:= true;
end;
{-----------------------------------------------}
var
   str, word: string;
begin
   str:= 'Привет мир, I g? :-) to хом';
   while (PopWordFromString(str, word, CDelim)) do
   begin
      if (WordCompareWithAlf(word, CChar)) then
         write (word, ' ');
   end;
end.


Кстати следующая строка не однозначна, и упирается в реализацию конкретного компилятора:
Код

3.  CChar= ['А'..'Я','а'..'я'];

Т.к. значения интервала бируться из таблицы в которой может иметь место разрыв (в котором будут распологаться совсем не те символы которые нам необходимы). Поэтому я и вводил константную сторку, чтобы исключить вероятность возникновения такой проблемы.

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