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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2012, 20:47   #1
Richik123
Пользователь
 
Регистрация: 09.04.2012
Сообщений: 92
По умолчанию Реализовать в виде модуля набор набор подпрограмм для следующих операций со строками : 1) Процедура подсчёта кол-ва букв к в пер

Реализовать в виде модуля набор набор подпрограмм для следующих операций со строками :
1) Процедура подсчёта кол-ва букв к в первом слове;
2) Процедура вывода на экран слов строки, начинающихся и заканчивающихся одной и той же буквой;
3) Функция подсчета количества символов строки до точки с запятой и после нее.
Разработать программу не пользующую программы данного модуля.
Richik123 вне форума Ответить с цитированием
Старый 13.09.2012, 20:57   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Ваши наработки? Черновики? Хоть что-то..
Процедура № 1
Код:
procedure CntOfChar (s : string; var r : Integer);// CounterOfChar
var
        s1, s2, i : Integer; // space1, space2

begin
        i := 1;
        while (i < Length(s)) and (s[i] = ' ') do
                Delete (s, 1, 1);
        s2 := 0;

        for i := 1 to Length(s) do
                if s[i] = ' ' then begin
                        s2 := i;
                        Break
                end;
        if s2 <> 0 then
                r := s2-1
        else
                r := Length(s)
end;

Последний раз редактировалось Poma][a; 13.09.2012 в 21:29.
Poma][a вне форума Ответить с цитированием
Старый 14.09.2012, 12:27   #3
Richik123
Пользователь
 
Регистрация: 09.04.2012
Сообщений: 92
По умолчанию

наработок нету, а как в модуль оформить?
Richik123 вне форума Ответить с цитированием
Старый 14.09.2012, 18:38   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

тыц
но для начала надо написать функции, процудерки

Код:
procedure EqualLetters (const c : string; var r : string);
var
          s1, s2, i : Integer;
          s : string;

begin
         s := ' ' + c + ' ';
         s1 := 1; s2 := 0;
         r := '';

         for i := 2 to Length(s) do begin
                   if s[i] = ' ' then begin
                          if s1 < s2 then
                                 s1 := i
                          else
                                 s2 := i;
                          if s[s1+1] = s[s2-1] then
                            r := r + Copy(s,s1+1, s2-s1-1) + ' ';
                            s1 := s2;
                  end;
        end;
end;

var
        s : string;
        r : string;

begin
        ReadLn (s);
        EqualLetters (s, r);
        WriteLn (r);
P.S. хорошо думается на паре по литературе

Последний раз редактировалось Stilet; 15.09.2012 в 20:03.
Poma][a вне форума Ответить с цитированием
Старый 18.09.2012, 02:39   #5
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Мне вот это особенно понравилось:
Цитата:
Сообщение от Richik123 Посмотреть сообщение
Разработать программу не пользующую программы данного модуля.
- сделать модуль и выкинуть его на фик!.. )))
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 18.09.2012, 09:15   #6
Richik123
Пользователь
 
Регистрация: 09.04.2012
Сообщений: 92
По умолчанию

блин, ошибся:D
использующую

Код:
interface
 
 procedure output(s: string);
 
 
 
 
 implementation
 
 
 procedure output(s: string);
 begin
 
 if s[1]=s[length(s)] then
 writeln(s);
 end;
 
 end.
так? если нет , то ошибки объясните. это ко второму пункту.



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Stilet; 19.09.2012 в 20:46.
Richik123 вне форума Ответить с цитированием
Старый 18.09.2012, 21:10   #7
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Richik123 Посмотреть сообщение
так? если нет , то ошибки объясните. это ко второму пункту.
Слов строки, а не одного слова. Но направление верное
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 18.09.2012, 22:00   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

к верному замечанию Sciv // Вам нужно разбивать строчку на отдельные слова и в них уже сравнивать первую и последнюю букву //
я бы ещё добавил.
1-е. не рекомендую использовать ключевые слова для своих идентификаторов (я имею в виду output). В данном случае, конечно, ошибки не будет. Но неужели имя PrintWordWithEqualsLetters выглядит хуже? Ну, или, на худой конец, если Вам так нравится слово output - назовите процедуру OutputOneWord или OutputW - и то будет безопаснее (надёжнее).

2-е. Когда вы проверяете первую и последнюю букву слова Вы не учитываете, что в процедуру могут передать вообще пустую строчку. Это глюк и возможные рантайм ошибки. и этого легко избежать:
Код:
procedure PrintOneWord(s: string);
begin
 if Length(s)>0 then 
    if s[1]=s[length(s)] then
          writeln(s);
end;
p.s. разбор строки на отдельные слова поищите на форуме, тут таких примеров было много.
навскидку,
разбор строки на отдельные слова (с) Stilet
только вам их сохранять не нужно, поэтому и массив не нужен...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.09.2012, 22:16   #9
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

дык я ж писал выше! и работает и хорошо...
Код:
procedure EqualLetters (const c : string; var r : string);
var
          s1, s2, i : Integer;
          s : string;

begin
         s := ' ' + c + ' ';
         s1 := 1; s2 := 0;
         r := '';

         for i := 2 to Length(s) do begin
                   if s[i] = ' ' then begin
                          if s1 < s2 then
                                 s1 := i
                          else
                                 s2 := i;
                          if s[s1+1] = s[s2-1] then
                            r := r + Copy(s,s1+1, s2-s1-1) + ' ';
                            s1 := s2;
                  end;
        end;
end;

var
        s : string;
        r : string;

begin
        ReadLn (s);
        EqualLetters (s, r);
        WriteLn (r)
end.
Poma][a вне форума Ответить с цитированием
Старый 19.09.2012, 20:30   #10
Richik123
Пользователь
 
Регистрация: 09.04.2012
Сообщений: 92
По умолчанию

но в модуль никак что-то(
Richik123 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализовать в виде модуля набор подпрограмм для выполнения следующих операций с массивом размерности nxm: Лыжник Помощь студентам 1 13.09.2012 14:46
создать набор букв и цифр horpenst Microsoft Office Word 5 18.12.2011 09:31
Очень-очень надо!Завтра сдавать уже=( Реализовать в виде модуля набор подпрограмм...(Pascal) Dizzy Помощь студентам 4 17.12.2010 17:10
Реализовать в виде модуля набор подпрогамм для выполнения следующих операций квадратными матрицами Nomid Общие вопросы C/C++ 3 11.12.2010 15:48
Как реализовать набор вкладок Intersap Компоненты Delphi 2 25.03.2010 21:32