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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2010, 00:05   #1
Shadows_Behind
Новичок
Джуниор
 
Регистрация: 24.05.2010
Сообщений: 3
Стрелка Рекурсия

Задание: Задан набор слов. Построить из них любую цепочку таким образом, чтобы символ в конце слова совпадал с символом в начале следующего.
Пишу в Delphi консольное приложение
Мой код
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
flag:boolean;
bukva:char;
st,st2,buf:string;
i,j,poz2,i2,poz1,poz3,flag3,m:integer;
begin                                       //1
writeln('Vvedite text:');
read(st);                            //считываем текст
st2:=st+' ';                         //ставим в конце пробел чтоб в одном месте в проге не зацикл
m:=length(st2);                   //запоминаем длинну
for I := 1 to m do                   
 begin                                      //2
 if st2[i]=' ' then                  //если наткнулись на пробел
  begin                                      //3
  bukva:=st2[i-1];                      //запоминаем предъидущую букву
  flag:=true;
  flag3:=1;
  j :=(i+1);
  while flag3 <> 2 do
   begin                                     //4
   if flag=true then
   poz1:=j+1;                                //запоминаем позицию след  буквы например ab sg
   flag:=false;
   if (st2[j]=' ') and (st2[j+1]=bukva) then //если дальше пробел и такая же буква
    begin                                         //5
    poz2:=(j+1);                           //запоминаем позицию 1 буквы напр ab sg bn gd
    i2 := poz2;
    while st2[i2]<>' ' do                 //идем вперед до пробела
    i2:=i2+1;
    poz3:=(i2-1);                          //запомин позиц послед буквы напр ab sg bn gd
    while poz2<>poz3 do                
     begin                                          //7
     buf[poz1]:=st2[poz2];             //записываем найденное слово в буфер
     poz1:=poz1+1;                          // тут почему то переходит к последнему end.
     poz2:=poz2+1;
     end;                                          //-7
    buf[poz1]:=st2[poz2];               // тут запомин последнюю тк она не запомнилась в цикле
    flag3:=2;
   end;                                       //-5
   j:=j+1;
  end;                                       //-4
 end;                                      //-3
end;                                    //-2
for i := 1 to m do
begin
if buf[i]='' then             //если пусто то
buf[i]:=st[i];                
end;
for I := 1 to m do
write(buf[i]);
readln;
end.                                 //-1
При попытке компиляции выкидывает просто, если проверять пошагово то в одном месте просто переходит к концу программы. В чем может быть ошибка? И похоже эт на рекурсию вобще?

Последний раз редактировалось Shadows_Behind; 25.05.2010 в 10:53.
Shadows_Behind вне форума Ответить с цитированием
Старый 25.05.2010, 00:08   #2
Katya3636
 
Аватар для Katya3636
 
Регистрация: 23.05.2010
Сообщений: 9
По умолчанию

Shadows_Behind попробуй вот здесь подписать слово windows

uses
SysUtils, windows;

вот так
Katya3636 вне форума Ответить с цитированием
Старый 25.05.2010, 00:11   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Katya3636, зачем, апи не используется тут напрямую?
у него компилится, просто не работает.
ТС, оформи код по человечески(отступы и тд)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.05.2010, 00:18   #4
Katya3636
 
Аватар для Katya3636
 
Регистрация: 23.05.2010
Сообщений: 9
По умолчанию

Пепел Феникса, я просто сразу внимание на это обратила, т.к. недавно у самой проблема была аналогичная, и виною было слово windows, точнее его нехватка )))))))
Ксати, посмотри пожалуйста эту тему http://www.programmersforum.ru/showthread.php?t=99598 , может сможешь помочь, там одной функции всего лишь не хватает..)
Katya3636 вне форума Ответить с цитированием
Старый 25.05.2010, 00:21   #5
Katya3636
 
Аватар для Katya3636
 
Регистрация: 23.05.2010
Сообщений: 9
По умолчанию

я просто сразу внимание на это обратила, т.к. недавно у самой проблема была аналогичная, и виною было слово windows, точнее его нехватка )))))))
Ксати, посмотри пожалуйста эту тему http://www.programmersforum.ru/showthread.php?t=99598 , может сможешь помочь, там одной функции всего лишь не хватает..)
Katya3636 вне форума Ответить с цитированием
Старый 25.05.2010, 10:02   #6
Shadows_Behind
Новичок
Джуниор
 
Регистрация: 24.05.2010
Сообщений: 3
По умолчанию

Пробовал добавить uses windows, не помогло зато теперь он начал после компиляции писать [DCC Warning] Project1.dpr(40): W1036 Variable 'poz1' might not have been initialized в этой строчке buf[poz1]:=st2[poz2]; Почему то не хочет повторно обращатся к poz1, но если делать пошагово на F8, там с poz1 все впорядке она будет содержать число.
Попробовал ввести левую переменную l
Код:
while poz2<>poz3 do
begin
l:=poz1;                                          
buf[l]:=st2[poz2];
poz1:=poz1+1;                          
poz2:=poz2+1;
end;
начал вылетать на строке l:=poz1;

Последний раз редактировалось Shadows_Behind; 25.05.2010 в 10:14.
Shadows_Behind вне форума Ответить с цитированием
Старый 26.05.2010, 15:07   #7
Shadows_Behind
Новичок
Джуниор
 
Регистрация: 24.05.2010
Сообщений: 3
По умолчанию

Проблемма решилась когда я включил {$H-} то биш сделал все строки короткими, ему видать с ними приятней работать)) Но та лабуда, что я написал выше работает некорректно и
я переделал программу она работала, но немного некоректно не очищались буферы я ее модернизировал и теперь появилась другая проблемма,у меня есть переменная buf:array[1..20] of char; и запись со строковой переменной(Note[z].stroka[l]);
когда я хочу присвоить записи значение буфера он пишит ошибку Incompatible types: 'Char' and 'PAnsiChar' вопрос в следующем как теперь мне сделать чтоб в переменная buf стала PAnsiChar?

Последний раз редактировалось Shadows_Behind; 26.05.2010 в 15:19.
Shadows_Behind вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия Jasper92 Помощь студентам 1 27.04.2010 16:58
рекурсия shelest Помощь студентам 3 14.04.2010 10:12
Рекурсия Alexsey1991 Помощь студентам 1 13.04.2010 21:19
Рекурсия. Си. MAKEDON Помощь студентам 5 03.06.2009 17:52
Рекурсия Claster Помощь студентам 7 24.09.2008 20:52