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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2015, 14:48   #1
КСЕНИЯ2
Новичок
Джуниор
 
Регистрация: 13.03.2015
Сообщений: 2
Восклицание нужно создать программу, которая осуществляет обработку символов и строк на языке Pascal

Задание: Заменить первые 3 символа слов,имеющих выбранную длину, на символ '*'
КСЕНИЯ2 вне форума Ответить с цитированием
Старый 14.03.2015, 10:42   #2
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Код:
s[1]:='*';
s[2]:='*';
s[3]:='*';
Так что ли?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 14.03.2015, 10:46   #3
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Наверное, нет.
Нужно перебирать все слова в строке, и если длина текущего слова равна Х (вводится пользователем), то в этом слове и заменять (учесть ситуацию с Х<3).
FPaul вне форума Ответить с цитированием
Старый 14.03.2015, 11:46   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
создать программу, которая осуществляет обработку символов и строк на языке Pascal
сорри за оффтоп, но сабж сразу мне напомнил ЭТО!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 14.03.2015, 11:58   #5
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Код:
const x=3;
var s:string;
    i,j,len,maxlen:integer;
begin
   s:='Variable z is declared but never used in Project1';
   Writeln(s);
   s:=' '+s;
   maxlen:=Length(s);
   i:=1;
   Repeat
      If s[i]=' ' then
      begin
         j:=i;//начнем с позиции Пробел
         Repeat
            j:=j+1;
         Until (j>maxlen) or (s[j]=' ');
         len:=j-i-1;//длина слова
         If len>=x then
            For j:=i+1 to i+x do
               s[j]:='*';
         i:=i+len;
      end;
      i:=i+1;
   Until i>=maxlen;
   Delete(s,1,1);
   Writeln(s);
   Readln;
end.
Сойдет?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 14.03.2015, 12:54   #6
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Там долго рассуждать, но выделение слов удобнее через while, нежели через repeat/until.
Плюс условие "Задание: Заменить первые 3 символа слов,имеющих выбранную длину, на символ '*'".
Итого, кореектнее так
Код:
program laba;

type
  {тип для набора ограничителей слов в строке}
  TCharSet = set of char;
const
  {Список всех ограничителей слов в строке}
  Delim_Set: TCharSet = [' ', '.', ',', '!', '?', '-', ':', ';',
    '(', ')', '[', ']', '{', '}'];

{Нахождение длины слова из строки Src.
 Поиск слова начинается с позиции StartPos.
 На выходе не только длина очередного слова, но и переменная StartPos
 указывает на следующий за словом символ.
 Если слово не найдено, то StartPos=Length(Src)+1.}
  function GetLengthNextWord(const Src: string; var StartPos: integer;
  const Delimiters: TCharSet): integer;
  var
    i: integer;
  begin
    i := StartPos;
    {i-текущая позиция в анализируемой строке}
    {ищем первую букву слова}
    while (i <= Length(Src)) do
      if (Src[i] in Delimiters) then
        Inc(i)
      else
        Break;
    StartPos := i;
    {StartPos указывает на первую букву в слове или на "следующий за последним символом в строке"=Length(Src)+1}
    {теперь просматриваем слово пока не закончится строка или
     не начнутся ограничители слов}
    while (i <= Length(Src)) do
      if not (Src[i] in Delimiters) then
        Inc(i)
      else
        Break;
    GetLengthNextWord := i - StartPos;
    {i - указывает на следующий за словом индекс (т.е. на очередной пробел)}
    StartPos := i;{для дальнейшего использования}
  end;

  procedure CorrectionStr(var s: string; n: integer);
  var
    StartPos: integer;
    I, Len: integer;
  begin
    {Учитываем возможность случая, когда n<3}
    if n < 3 then
      Len := n
    else
      Len := 3;
    StartPos := 1; {слово в строке s начинаем с 1-й позиции}
    while StartPos <= Length(s) do {пока не закончились слова в строке}
      if GetLengthNextWord(s, StartPos, Delim_Set) = n then
        for I := StartPos - n to StartPos - n + Len - 1 do
          s[I] := '*';
  end;

  procedure Test(s: string; n: integer);
  begin
    writeln('n=', n);
    writeln('Before:');
    writeln(s);
    CorrectionStr(s, n);
    writeln('After:');
    writeln(s);
  end;

var
  s: string;
begin
  s := 'Variable z is declared but never used in Project1';
  Test(s, 2);
  writeln('----------------------');
  Test(s, 8);
end.
Это не совсем решение задачи, но если надо, ТС самостоятельно переделает.
FPaul вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организовать обработку каждого элемента: печать строк из информационной части и их первых символов. GIGABYTE16 Общие вопросы C/C++ 6 01.02.2014 13:23
Организовать обработку каждого элемента: печать строк из информационной части и их первых символов. GIGABYTE16 C/C++ Базы данных 0 30.01.2014 15:38
Pascal. нужно написать программу,которая подсчитывает величину информационной энтропии Ирка555 Помощь студентам 3 20.03.2013 09:36
Написать программу на си под линукс которая осуществляет подсчет количества слов в текстовом файле и записывает полученное число в tarasman11 Общие вопросы C/C++ 11 19.11.2012 21:41
задачи: на двумерные массивы,обработку строк,обработку текстовых файлов. (Паскаль) Yaro Помощь студентам 2 12.11.2009 12:55