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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2010, 01:06   #1
Saka
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 83
По умолчанию delphi задание

помогите с этим:
Дано предложение, состоящее из символов. Вывести это предложение, удалив из него все символы, которые находятся между символами ‘(‘ ‘)’. Сами скобки не удалять, а вместо удаленного текста вставить число, соответствующее количеству удаленных символов. Если хотя бы одной скобки нет, то сообщить об этом.

примечание: используйте универсальную строку для представления в памяти текстовых данных

Saka вне форума Ответить с цитированием
Старый 24.02.2010, 02:02   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

В чем проблема?
p51x вне форума Ответить с цитированием
Старый 24.02.2010, 04:12   #3
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

Как вариант могу предложить придуманный мною алгоритм решения поставленной задачи, вот только реализация ошибок при отсутствии откр. либо закр. скобок не сделана
Использую два Tmemo и одну кнопку.
1.jpg
листинг
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
   str : string;//строка ввода
   strn: string;//строка вывода
   len : integer;//длина строки ввода
   lenn : integer;//длина строки вывода
   i,j : Integer;
   k,l : Integer;
   poss: integer;//позиция откр скобки
   sch : integer;//кол-во удаленных символов из строки ввода
   flag : integer;//флаг первого входа в строку
   label conec,1;
begin
j := 0;
sch := 0;
flag := 0;
poss := 0;
l := 1;
str := memo1.Lines.Text;//формируем строку ввода
len := length(str);//получаем длинну
for i := 1 to len do //проверяем каждый символ
begin
if i = len then goto 1;//если конец проверки перейти к 1
  inc(poss);
  if copy(str,poss,1) = '('  then //если символ равен "(" то
    for k := poss+1 to len do //ищем закр скобку
      begin
        inc(j);//счетчик символов в скобках
        if copy(str,k+1,1) = ')' then //если ноходит
          begin
            strn := strn + copy(str,l,(poss+j+2)-l);//формируем новую строку вывода
            if flag = 1 then //если не первый вход
              begin
                delete(strn,poss+1-(sch),j);
                insert(inttostr(j),strn,poss+1-(sch));
              end else //если первый вход
                begin
                delete(strn,poss+1,j);
                insert(inttostr(j),strn,poss+1);
                flag := 1;
                end;
            l := poss + j + 2;//перевод каретки для поиска следующей откр скобки
            poss := poss + j + 2;
            if j < 10 then //если в скобках число от 1 до 9 то
              sch := sch + (j-1) else
              sch := sch + (j-2);
            j := 0;//обнуляем счетчик символов
            lenn := length(strn);//длинна новой строки
            goto conec;//перейти к "conec"
          end;
     end;
conec:
end;
1: if lenn <> len then //если длины строк ввода и вывода не равны, значит после
                       //последней закрывающей скобки еще есть сомволы-добавим их
     strn := strn + copy(str,l,len-l);
memo2.Lines.Text := strn;//вывод строки вывода
end;
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 24.02.2010, 10:27   #4
Saka
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 83
По умолчанию

а вот этот код можно переделать в console application
Saka вне форума Ответить с цитированием
Старый 24.02.2010, 10:43   #5
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Конечно :
Код:
program Project1;
uses
  SysUtils;
var
   str : string;//строка ввода
   strn: string;//строка вывода
   len : integer;//длина строки ввода
   lenn : integer;//длина строки вывода
   i,j : Integer;
   k,l : Integer;
   poss: integer;//позиция откр скобки
   sch : integer;//кол-во удаленных символов из строки ввода
   flag : integer;//флаг первого входа в строку
   label conec,1;
begin
j := 0;
sch := 0;
flag := 0;
poss := 0;
l := 1;

Write('Исходная строка : ');
Readln(str); //формируем строку ввода
len := length(str);//получаем длинну
for i := 1 to len do //проверяем каждый символ
begin
if i = len then goto 1;//если конец проверки перейти к 1
  inc(poss);
  if copy(str,poss,1) = '('  then //если символ равен "(" то
    for k := poss+1 to len do //ищем закр скобку
      begin
        inc(j);//счетчик символов в скобках
        if copy(str,k+1,1) = ')' then //если ноходит
          begin
            strn := strn + copy(str,l,(poss+j+2)-l);//формируем новую строку вывода
            if flag = 1 then //если не первый вход
              begin
                delete(strn,poss+1-(sch),j);
                insert(inttostr(j),strn,poss+1-(sch));
              end else //если первый вход
                begin
                delete(strn,poss+1,j);
                insert(inttostr(j),strn,poss+1);
                flag := 1;
                end;
            l := poss + j + 2;//перевод каретки для поиска следующей откр скобки
            poss := poss + j + 2;
            if j < 10 then //если в скобках число от 1 до 9 то
              sch := sch + (j-1) else
              sch := sch + (j-2);
            j := 0;//обнуляем счетчик символов
            lenn := length(strn);//длинна новой строки
            goto conec;//перейти к "conec"
          end;
     end;
conec:
end;
1: if lenn <> len then //если длины строк ввода и вывода не равны, значит после
                       //последней закрывающей скобки еще есть сомволы-добавим их
     strn := strn + copy(str,l,len-l);
WriteLn('Результат : ' + strn);//вывод строки вывода
Writeln;
Writeln;
Writeln('Нажмите любую клавишу для выхода ...');
Readln;
end.
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задание по Delphi. Sfera Помощь студентам 0 14.02.2010 09:51
Задание на Delphi Bimmer71 Помощь студентам 1 10.12.2009 23:02
Delphi. Помогите сделать задание. procomp Помощь студентам 2 01.10.2009 01:22
Текстовый файл и очень простое задание DELPHI 08ekhiv1 Помощь студентам 10 03.03.2009 00:28