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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2012, 07:26   #1
pashka182
Новичок
Джуниор
 
Регистрация: 31.01.2012
Сообщений: 5
По умолчанию Pascal, кодирование, декодирование информации

Добрый день, завтра зачет и надо исправить программу декодирования.
--------------------------------------------------------------------------
Код:
var s:string;
function decode(s:string):string;
var i,j,c:integer;
    newS:string;
    dp : string;
begin
 writeln('Enter encode string: '); readln(s);
i:=1;
while i <= length(s) do
  begin
    j:=i;
    while s[j] in ['0'..'9'] do inc(j);
    if j-i > 0 then
    begin
      dp := copy(s,i,j-i);
      for c:=1 to strtoint(dp) do newS := newS + s[j];
      delete(s,i,j-i+1);
    end else
    begin
      newS := newS + s[i];
      inc(i);
    end;
  end;
  result:= newS;
  end;
  begin
  writeln('RLE: ',decode(s));
end.
--------------------------------------------------------------------------
А ошибка заключается вот в чём:
Если ввести например 4а, программа выведет "аааа", но если ввести 42(по идее надо вывести "2222"), выводи пустую строку.
Вот как то это исправить надо.

Последний раз редактировалось Stilet; 31.01.2012 в 08:40.
pashka182 вне форума Ответить с цитированием
Старый 31.01.2012, 08:43   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Как-то так:
Код:
  while i <= length(s) do  begin
    if s[i] in ['0'..'9'] do  begin
      for c:=1 to strtoint(s[i]) do newS := newS + s[i+1];
      inc(i);
    end else    newS := newS + s[i];
    inc(i);
  end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.01.2012, 08:55   #3
pashka182
Новичок
Джуниор
 
Регистрация: 31.01.2012
Сообщений: 5
По умолчанию

if s[i] in ['0'..'9'] do begin
ошибку выдает
pashka182 вне форума Ответить с цитированием
Старый 31.01.2012, 08:57   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ошибку выдает
Ай яй яй... Какой нехороший компилятор. Наверно напился или обкурился )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.01.2012, 09:01   #5
pashka182
Новичок
Джуниор
 
Регистрация: 31.01.2012
Сообщений: 5
По умолчанию

Ну блин) что делать то? у меня мозг уже не работает, помогите ребят)
pashka182 вне форума Ответить с цитированием
Старый 31.01.2012, 09:30   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Ну блин) что делать то? у меня мозг уже не работает, помогите ребят)
1) указать какую ошибку выдаёт компилятор (и, кстати, какой у Вас именно компилятор укажите!
например, это точно не Turbo Pascal... Так какой?!)

2) приведите пример вашей программы с внесёнными исправлениями...

3) перестать паниковать и начинать ДУМАТЬ!


Цитата:
Сообщение от Stilet
Ай яй яй... Какой нехороший компилятор. Наверно напился или обкурился )
да нет, это кто-то его (компилятор) пытается обмануть!
Цитата:
Код:
  while i <= length(s) do  begin
    if s[i] in ['0'..'9'] do  begin
лучше ( :-) ) так :
Код:
  while i <= length(s) do  begin
     if s[i] in ['0'..'9'] then  begin

Последний раз редактировалось Serge_Bliznykov; 31.01.2012 в 09:38.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.01.2012, 09:34   #7
pashka182
Новичок
Джуниор
 
Регистрация: 31.01.2012
Сообщений: 5
По умолчанию

Pascal ABC
___________________________________ __________________________________
Код:
var s:string;
function decode(s:string):string;
var i,j,c:integer;
    newS:string;
    dp : string;
begin
 writeln('Enter encode string: '); readln(s);
i:=1;
while i <= length(s) do
  begin
    j:=i;
  while i <= length(s) do  begin
    if s[i] in ['0'..'9'] do  begin
      for c:=1 to strtoint(s[i]) do newS := newS + s[i+1];
      inc(i);
    end else    newS := newS + s[i];
    inc(i);
  end;
  end;
  result:= newS;
  end;
  begin
  writeln('RLE: ',decode(s));
end.
___________________________________ __________________________________
Строка 13 Столбец 26
Неверное выражение

Я просто уже не могу думать




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

Последний раз редактировалось Serge_Bliznykov; 31.01.2012 в 09:51.
pashka182 вне форума Ответить с цитированием
Старый 31.01.2012, 09:50   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не забывайте код на форуме оформлять тегами!


ладно, ловите свою программу с корректировкой (c) Stilet
Код:
function decode(s: string): string;
var i, j, c: integer;
  newS: string;
  dp: string;
begin
  i := 1;
  while i <= length(s) do begin
    if s[i] in ['0'..'9'] then begin
      for c := 1 to strtoint(s[i]) do newS := newS + s[i + 1];
      inc(i);
    end else newS := newS + s[i];
    inc(i);
  end;
  decode := newS;
end;

var s: string;
begin
  writeln('Enter encode string: '); readln(s);
  writeln('RLE: ', decode(s));
  Readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.01.2012, 09:56   #9
pashka182
Новичок
Джуниор
 
Регистрация: 31.01.2012
Сообщений: 5
По умолчанию

Спасибо огромное!!!!
pashka182 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодирование/Декодирование кодом ROT47 Jakudzafan Общие вопросы C/C++ 2 10.02.2011 14:37
кодирование информации. Xcopy Помощь студентам 4 04.05.2010 15:00
Кодирование - декодирование паролей программы jajc V0R0NA JavaScript, Ajax 7 01.12.2009 12:45
Кодирование и декодирование .тхт extrimportal Общие вопросы Delphi 1 05.05.2009 18:47
Кодирование информации!!!!! Girl Безопасность, Шифрование 0 04.03.2007 14:40