Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 04.04.2010, 08:26   #1 (permalink)
cerlag
Новичок
 
Регистрация: 04.04.2010
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Строки. Pascal

Программа должна удалять каждое четное слово и записывать наоборот каждое нечетное.
Например:
Исходный текст:велик и могуч русский язык
Выходной текст:килев чугом кызя

Вот, что написал я. Программа работает только в том случае, если строка line_out чему то равна, если она изначально пустая, то туда ничего не записывается. Как с этим справиться?

Код HTML:
program stroki_chet_nechet;
uses CRT;
var   i,d,j,k:integer;
       wd1,wd2:integer {wd1-начало слова, wd2-конец слова}
       line_in,line_out:string;
begin
ClrScr;
writeln('Введите текст:');
readln(line_in);

d:=0;
k:=0;
wd1:=1;
i:=1;
while i<=length(line_in) do
 begin
 if line_in[i]=' ' then
  begin
   inc(k);
   if k mod 2=0 then
    wd1:=i+1;
   if k mod 2<>0then
    begin
     wd2:=i;
     inc(d);
      for j:=wd2 downto wd1 do
       begin
        line_out[d]:=line_in[j];
        inc(d);
        writeln(line_out);
       end;
    end;
  end;
 inc(i);
 end;

writeln(line_out);
readln
end.
cerlag вне форума   Ответить с цитированием

Старый 04.04.2010, 08:26
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Если хотите решить проблемы быстрее - посмотрите аналогичные темы

Строки
Строки

Старый 04.04.2010, 08:38   #2 (permalink)
Long Cat
Banned
 
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
По умолчанию

Есть два способа исправить - плохой и хороший.
Плохой:
Дописать в конце программы (перед writeln) line_out[0]:=d;
Хороший: добавлять символы в line_out вот так: line_out:=line_out+line_in[j];
Самый лучший: забросить Паскаль куда подальше и изучать СИ.

Причины проблемы: Паскаль хранит длину строки в символе с индексом[0]. Соответственно, для новой строки эта длина равна неизвестно чему, и writeln не знает, что печатать.
Если же вы что-то запишите в line_out, длина этого чего-то запишется в line_out[0] и все заработает.

Последний раз редактировалось Long Cat; 04.04.2010 в 08:41
Long Cat вне форума   Ответить с цитированием
Старый 04.04.2010, 08:58   #3 (permalink)
cerlag
Новичок
 
Регистрация: 04.04.2010
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо большое, все заработало.
Си конечно хорошо, но обычное обучение никто не отменял
cerlag вне форума   Ответить с цитированием
Старый 04.04.2010, 09:00   #4 (permalink)
Long Cat
Banned
 
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
По умолчанию

Не за что :-)
Long Cat вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 18:51.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.