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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 05.01.2012, 17:01   #1
Npwas
Форумчанин
 
Аватар для Npwas
 
Регистрация: 26.09.2011
Сообщений: 158
Злость Найдите ошибку в проге(Delphi)!!!

Там ошибочная часть указана вообщем там должно удалять каждое последующее вхождение каждой буквы
К примеру если ввел: cvnjcvnjcvnjcvnjcvnjcvnjcvnjcvnj
То должно вывести: cvnj
Не могу никак с ошибкой своей разобраться!!!

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
type
  stroka=array[1..100000000] of string;
  mz=set of Char;
  Var
  a:mz;
  s: stroka ;
  x,j,i,n,z:Integer;
  Vrepeat:boolean;
begin
  Writeln('Kakoe kolichestwo slov vi hotite vvesti?');
  Readln(n);
  Writeln('Vvedite ',n,' slov:');
  {Ввод строк}
  for i:=1 to  n do
   Readln(s[i]);
  Writeln;
 {Берёт слово}
  for i:=1 to n-1 do
    begin
      Vrepeat:=true;
     {Берёт поочерёдно букву}
     for j:=1to Length(s[i]) do
       for x:=j+1 to Length(s[i]) do
       begin
       {$B+}     {Сравнивает}
         if(s[i,j]=s[i,x]) and (not(s[i]=s[n]))and (Vrepeat)then
            begin
              Write(s[i],'  ');
              Vrepeat:=false;
            end;
       {$B-}
       end;
   end;
  Writeln;
  Writeln;
  {Ошибочная часть}
  for i:=1 to n-1 do
     for j:=1 to Length(s[i])  do
       for x:=j+1 to Length(s[i])  do
         {$B+}
         if(s[i,j]=s[i,x]) then
           begin
             Include(a,s[i,j]);
           end;
          {$B-}
  For i:=1 to n-1 do
    begin
     For j:=1 to Length(s[i]) do
       begin
        {$B+}
         If s[i,j] in a then
          begin
            For x:=1 to Length(s[i])+1 do
              If (s[i,x] in a) and (s[i,j]=s[i,x]) then
                Delete(s[i],x,1);
          end;
        {$B-}
       end;
     Write(s[i],'  ');
    end;
    {Ошибочная часть}
  Readln;
end.
<----Весы Там.
Npwas вне форума
Старый 05.01.2012, 17:43   #2
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Ээм, не совсем понятно, что вам нужно, но судя по
Цитата:
К примеру если ввел: cvnjcvnjcvnjcvnjcvnjcvnjcvnjcvnj
То должно вывести: cvnj
Нужно удалить из заданной строки повтоярющиеся символы, тогда можно так
Код:
while i<=length(s) do
   begin
     i:=i+1;
     j:=i+1;
     while j<=length(s) do
     begin
        if s[i]=s[j] then begin
                             delete(s,j,1);
                             j:=j-1;
                          end;
        j:=j+1;
      end;
   end;
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума
Старый 05.01.2012, 17:55   #3
Npwas
Форумчанин
 
Аватар для Npwas
 
Регистрация: 26.09.2011
Сообщений: 158
По умолчанию

СПС работает, но както для одного слова
<----Весы Там.

Последний раз редактировалось Npwas; 05.01.2012 в 17:57. Причина: Чуток ошибся
Npwas вне форума
Старый 05.01.2012, 18:08   #4
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Ну тогда код написанный мною выше надо загнать в цикл
Код:
var z: longint;
for z:=1 to hign(s) do
begin
i:=0;
j:=1;
while i<=length(s) do
   begin
     i:=i+1;
     j:=i+1;
     while j<=length(s) do
     begin
        if s[i]=s[j] then begin
                             delete(s,j,1);
                             j:=j-1;
                          end;
        j:=j+1;
      end;
   end;
end;
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума
Старый 05.01.2012, 18:28   #5
Npwas
Форумчанин
 
Аватар для Npwas
 
Регистрация: 26.09.2011
Сообщений: 158
По умолчанию

Как то всеравно не очень!!! Выводит ток четыре буквы!!!
Код:
{Ошибочная часть}
  For x:=1 to n do
   begin
     while i<=length(s[x]) do
      begin

       while j<=length(s[x]) do
         begin
            if s[i]=s[j] then
              begin
                delete(s[x],j,1);
                j:=j-1;
              end;
            j:=j+1;
         end;
         i:=i+1;
       j:=i+1;
      end;
      i:=1;
      j:=2;
   end;
<----Весы Там.
Npwas вне форума
Старый 05.01.2012, 19:45   #6
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

А не проще вот так:
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
type
  stroka=array[1..100000000] of string;
  mz=set of Char;

procedure nevermind(var S:string);
var
//  i,j,lenword,n:integer;
  bukva:char;
  tmp:string;
begin
      TMP:='';
//      LenWord:=length(s);
  //    for j:=1 to lenword do
      while s<>'' do
        begin
          bukva:=s[1];
          TMP:=TMP+s[1];
          delete(S,1,1);
          while pos(bukva,s)<>0 do
            delete(s,pos(bukva,s),1)
        end;
      s:=TMP;
end;

Var
  a:mz;
  s: stroka ;
  TMP:string;
  x,j,i,n,z,LenWord:Integer;
  Vrepeat:boolean;
  bukva:char;
begin
  Writeln('Kakoe kolichestwo slov vi hotite vvesti?');
  Readln(n);
  Writeln('Vvedite ',n,' slov:');
  {Ввод строк}
  for i:=1 to  n do
   Readln(s[i]);
  Writeln;
  for i:=1 to n do
    begin
      nevermind(s[i]);
      writeln(s[i]);
    end;
  readln
end.
?

P.S. Лишних переменных до**я, но почистить не проблема. Просто мне лень :P
Все тривиальное просто

Последний раз редактировалось whatever; 05.01.2012 в 19:54.
whatever вне форума
Старый 05.01.2012, 19:51   #7
Npwas
Форумчанин
 
Аватар для Npwas
 
Регистрация: 26.09.2011
Сообщений: 158
По умолчанию

СПС, но у меня и так вот уже работает!!!
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
type
  stroka=array[1..100000000] of string;
Var
  s:stroka ;
  x,j,i,n:Integer;
  Vrepeat:boolean;
begin
  Writeln('Kakoe kolichestwo slov vi hotite vvesti?');
  Readln(n);
  Writeln('Vvedite ',n,' slov:');
  {Ввод строк}
  For i:=1 to  n do
   Readln(s[i]);
  Writeln;
 {Берёт слово}
  For i:=1 to n-1 do
    begin
      Vrepeat:=true;
     {Берёт поочерёдно букву}
     For j:=1 to Length(s[i]) do
     {Берёт поочерёдно букву}
       For x:=j+1 to Length(s[i]) do
        begin
        {$B+}     {Сравнивает}
          If(s[i,j]=s[i,x]) and (not(s[i]=s[n]))and (Vrepeat)then
             begin
               Write(s[i],'  ');
               Vrepeat:=false;
             end;
        {$B-}
        end;
    end;
  Writeln;
  {Алгоритм исключения из слов последующих вхождений каждой буквы}
  For i:=1 to n do
   begin
     j:=0;
     x:=1;
     while j<=length(s[i]) do
      begin
        j:=j+1;
        x:=j+1;
        while x<=length(s[i]) do
          begin
             if s[i,j]=s[i,x] then
               begin
                 Delete(s[i],Pos(s[i,j],s[i]),1);
                 x:=x-1;
               end;
             x:=x+1;
          end;
      end;
   end;
  For i:=1 to n-1 do
   If not (s[i]=s[n]) then
     Write(s[i],'   ');
  Readln;
end.
<----Весы Там.
Npwas вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти ошибку в проге на Delphi Serjik-ahaha Помощь студентам 15 03.07.2011 13:11
Найдите ошибку в проге, почему не работате она (((( ProgFrog Visual C++ 2 14.04.2011 13:10
найдите ошибку Славик__077 Общие вопросы C/C++ 10 31.01.2011 15:15
Найдите ошибку #Sharp# Паскаль, Turbo Pascal, PascalABC.NET 7 23.12.2010 14:35
Найдите ошибку *natali* Помощь студентам 3 08.11.2009 17:30