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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2011, 00:20   #1
erorai 1990
 
Регистрация: 29.12.2011
Сообщений: 5
По умолчанию динамические программирование

Дан текст, оканчивающийся точкой. Среди литер этого текста особую роль играет знак #, появление которого в тексте означает отмену предыдущей литеры текста; k знаков # подряд отменяют k предыдущих литер (если такие есть). Напечатать данный текст, исправленный с учетом такой роли знака # (например, текст ХЭ#Е##НЕLО#LО должен быть напечатан в виде НЕLLО). помогите . я непонемаю
erorai 1990 вне форума Ответить с цитированием
Старый 30.12.2011, 01:19   #2
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Полный код на C++:
Код:
#include <iostream>
#include <string>
#include <iterator>

using namespace std;

string delsharp(string str, char key = '#');

int main()
{
	cout << "Enter your string: ";
	string str;
	getline(cin, str);
	cout << "Edited string: " << delsharp(str) << endl;
	cin.get();
}

string delsharp(string str, char key)
{
	string result;
	string::const_reverse_iterator iter = str.rbegin();
	while (iter != str.rend())
	{
		int n = 0;
		while (iter != str.rend() && *iter == key)
		{
			++iter;
			++n;
		}
		for (int i = 0; iter != str.rend() && i != n; ++i)
			++iter;
		if (iter != str.rend())
			result.push_back(*iter++);
	}
	return string(result.rbegin(), result.rend());
}
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 11.02.2012, 22:11   #3
erorai 1990
 
Регистрация: 29.12.2011
Сообщений: 5
По умолчанию

спасибо , но надо на паскале
erorai 1990 вне форума Ответить с цитированием
Старый 11.02.2012, 22:44   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

меня немного смущают слова "динамические программирование"...

а так, "в лоб"
решение #1
Код:
var s1 : string;
  i : integer;
begin
  s1 := 'ХЭ#Е##НЕLО#LО';
  i:=1;
  while i<=Length(s1) do begin
    if (s1[i]='#') and (i>1) then
       begin Delete(s1,i-1,2); Dec(i) end
    else Inc(i);
  end;
  WriteLn(s1);
  Readln
end.
решение #2
Код:
var s1,s2 : string;
  i : integer;
begin
  s1 := 'ХЭ#Е##НЕLО#LО';
  s2:='';
  for i:=1 to Length(s1) do begin
    if (s1[i]='#') and (Length(s2)>0) 
       then Delete(s2, Length(s2), 1)
    else s2 := s2 + s1[i];
  end;
  WriteLn(s2);
  Readln
end.

решение #3
Код:
var s1,s2 : string;
  i, DelCount : integer;
begin
  s1 := 'ХЭ#Е##НЕLО#LО';
  s2:='';
  DelCount := 0;
  for i:=Length(s1) downto 1 do begin
    if (s1[i]='#') then Inc(DelCount)
    else
       if DelCount>0 then Dec(DelCount)
       else s2 := s1[i]+s2;
  end;
  WriteLn(s2);
  Readln
end.
Достаточно?!


p.s. буду искренне признателен, если кто-то мне объяснит, как эту задачу решать с точки зрения динамического программирования (либо алгоритм, либо решение)!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.02.2012, 07:43   #5
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

может как то так?
Код:
procedure a(var s:string);
  begin
    if pos('#',s)>0 then 
      begin
        delete(s,pos('#',s)-1,2);
        a(s);
      end;
  end;
var st:string;
begin
  st:='ХЭ#Е##НЕLО#LО';
  a(st);
  writeln(st);
end.
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 16.02.2012, 00:37   #6
erorai 1990
 
Регистрация: 29.12.2011
Сообщений: 5
По умолчанию

это задание в разделе Динамические структуры данных
erorai 1990 вне форума Ответить с цитированием
Старый 16.02.2012, 08:25   #7
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
p.s. буду искренне признателен, если кто-то мне объяснит, как эту задачу решать с точки зрения динамического программирования (либо алгоритм, либо решение)!
Есть подозрение, с учётом специфики раздела, что строка в данном задании представлена динамическим линейным массивом символов. Что-то вроде:
Код:
type
   pCharElement = ^CharElement;
  CharElement = record;
    ch : char;
    Next : pCharElement;
    Prev : pCharElement;
  end;{record}
и дальше реализуется вручную заполнение, поиск и удаление элементов из массива по предложенным вариантам с учётом специфики динамических структур.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические изображения. Sectron Паскаль, Turbo Pascal, PascalABC.NET 3 15.04.2014 14:16
Программирование или web-программирование? Дмитрий Батогов Помощь студентам 3 23.06.2011 14:14
Динамические массивы Наташок Паскаль, Turbo Pascal, PascalABC.NET 6 12.04.2011 12:03
динамические программирование zven_ Помощь студентам 1 11.03.2009 21:49