![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Программа меняет порядок следования слов на обратный.
Возникла проблема с выводом строки в файл. При запуске программы открывается пустое окно вывода результата на экран, файл не создается. В чем ошибка? Сама функция смены порядка слов отдельно работает правильно. Помогите с ВВОДОМ и ВЫВОДОМ! Срочно!Код:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
str:string;
procedure vvodstr(var str:string);
var
fin:TextFile;
begin
AssignFile(fin,'File1.txt');
Reset(fin);
readln(fin,str);
CloseFile(fin);
end;
function smena (str:string):string;
var
pr:integer;
begin
Result:='';
while Length(str)>0 do
begin
pr:=Pos(' ',str);
Insert(Copy(str,1,pr),Result,1);
Delete(str,1,pr);
if pr=0 then
begin
Insert(str+' ',Result,1);
end;
pr:=0;
end;
end;
procedure vivodres;
var
fout:TextFile;
begin
AssignFile(fout,'File2.txt');
Rewrite(fout);
write(fout,smena(str));
CloseFile(fout);
end;
begin
vvodstr(str);
smena(str);
vivodres;
end. |
|
#2
|
|||
|
|||
|
У вас последнее слово не удаляется из строки, цикл никогда не заканчивается (функция smena). То есть до записи результатов процесс даже не доходит.
Код:
function smena (str:string):string;
var
pr:integer;
begin
Result:='';
while Length(str)>0 do
begin
pr:=Pos(' ',str); // Здесь неплохо бы на 0 проверять результат поиска
Insert(Copy(str,1,pr),Result,1);
Delete(str,1,pr);
if pr=0 then
begin
// Вот здесь сделайте что-нибудь с исходной строкой
// Например после инсерта напишите str := ''
Insert(str+' ',Result,1);
end;
pr:=0; // Эта строка совершенно не нужна
end;
end; |