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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2010, 20:17   #1
dex92
 
Регистрация: 10.05.2010
Сообщений: 5
По умолчанию Из Pascal не работает в Delphi

Всем доброго времени суток.

Условие задачи:
Написать программу, которая переворачивает слова в предложении, сохраняя неизменным их порядок.

Код в задачи для Паскаля:
Код:
Program zsv;
uses crt;
var a,slovo,predl:string;
    i,la:integer;

{-------------------------------------------------}
Procedure INVERS(s:string);
var i,ls:integer;
    j:string;
begin
 ls:=length(s);
 for i:=1 to trunc(ls/2) do
  begin
   j[1]:=s[i]; s[i]:=s[ls+1-i]; s[ls+1-i]:=j[1];
  end;
 predl:=predl+s+' ';
end;
{-------------------------------------------------}

begin
 clrscr;
 writeln('Введите предложение: ');
 readln(a);
 la:=length(a);
  for i:=1 to la do
   begin
    if a[i]<>' ' then slovo:=slovo+a[i];
    if (a[i]=' ') or (i=la) then
                               begin
                                invers(slovo);
                                slovo:='';
                               end;
   end;
  writeln(predl);
  readln;
end.
(Переделать под Дельфи не могу, т.к. сейчас словил вирус...)

Программа запускалась, но как только вводил предложение, выскакивала ошибка:
Access violation at address 00450834

Далее красным цветов выделялась эта строка:
j[1]:=s[i]; s[i]:=s[ls+1-i]; s[ls+1-i]:=j[1];

Если написал в колонку, то так:
j[1]:=s[i];
s[i]:=s[ls+1-i];
s[ls+1-i]:=j[1];

Искал причину ошибки, дошел до:
Цитата:
Если в вашей проблемной строке есть скобочки типа [], то у вас есть хороший довод к проверке допустимости выражения в [].

Источник: gunsmoker.blogspot.com/2009/05/access-violation.html
Как заного переделать эту задачу не знаю... Выкручиваюсь только вышенаписанным готовым решением.

Заранее спасибо за любую помощь.
dex92 вне форума Ответить с цитированием
Старый 10.05.2010, 21:45   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от dex92 Посмотреть сообщение
Код:
Procedure INVERS(s:string);
var i,ls:integer;
    j:string;
begin
 ls:=length(s);
 for i:=1 to trunc(ls/2) do
  begin
   j[1]:=s[i]; s[i]:=s[ls+1-i]; s[ls+1-i]:=j[1];
  end;
 predl:=predl+s+' ';
end;
Строка j - пустая, в неё нет символов. Попытка обратиться к несуществующему символу вызывает ошибку. Поэтому в начале надо установить длину строки
Код:
 ...
 SetLength(j, 1);
 for i:=1 to trunc(ls/2) do
 ...
Или писать просто
Код:
   j:=s[i];
    s[i]:=s[ls+1-i];
     s[ls+1-i]:=j[1];
Можно использовать тип char
eoln вне форума Ответить с цитированием
Старый 10.05.2010, 21:54   #3
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Какой то бессмысленно хитрый алгоритм переворачивания слова.
Вот тебе обычный перевертыш,

Код:
Program zsv;
uses crt;
var a,slovo,predl:string;
    i,la:integer;

{-------------------------------------------------}
Procedure INVERS(s:string);
var i,ls:integer;
    j:string;
begin
 ls:=length(s);
 j:='';
 for i := ls downto 1 do j:= j+s[i];
 predl:=predl+j+' ';
end;
{-------------------------------------------------}

begin
 clrscr;
 writeln('Введите предложение: ');
 readln(a);
 la:=length(a);
 slovo := '';
 predl := '';
  for i:=1 to la do
   begin
    if a[i]<>' ' then slovo:=slovo+a[i];
    if (a[i]=' ') or (i=la) then
                               begin
                                invers(slovo);
                                slovo:='';
                               end;
   end;
  writeln(predl);
  readln;
end.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
INNER JOIN в Delphi не работает. Droid БД в Delphi 2 03.07.2009 12:30
[pascal]Сортировка массива методом прямого выбора, работает неадекватно. fatoldsun Помощь студентам 7 22.04.2009 19:42
Не работает программа на delphi pcholka Софт 5 10.01.2008 20:04
Кто работает с MidLet Pascal? ZhekON Общие вопросы по Java, Java SE, Kotlin 4 25.07.2007 19:24