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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2018, 01:00   #1
Kamelok
Пользователь
 
Регистрация: 19.11.2017
Сообщений: 36
По умолчанию PASCAL. Несоответствие типов

Вылетает ошибка в процедуре substitution. Я уже без понятия как избавиться от этой ошибки, Постоянна или ошибка 26 и 63 вылетает. Подскажите пожалуйста, а то я в тупике.
Код:
program REPLACEMENT ; 
{sh+} 
uses crt; 
type 
FInt = file of integer; 
var 
f_in,f_out:text; 
s:string; 
F_obr: FInt; 
f_copy:file; 
function unique_letters(s:string):string; 
var 
t,i:integer; 
begin 
for i:=1 to length(s) do {length of each word} 
s[t]:=s[length(s)]; 
s[length(s)]:=s[1]; 
s[1]:=s[t]; 
unique_letters:=s; {formation of transformered words} 
end; 
procedure enter(var f_in,f_out:text); 
begin 
writeln('Hello this program swaps 1 and the last letter in each word.'); 
writeln('You do not need to press any keys, the program will do everything itself'); 
assign(f_in,'test1.TXT'); {binding f_in variable with file TEST1.TXT} 
{si-} reset(f_in); {si+} {ON/OFF procedure for check file TEST1.TXT} 
if IOResult <>0 then {analysis mistake manipulation with file TEST1.TXT } 
begin 
writeln('Error opening of file TEST1.txt'); 
writeln('Program is finished, push ENTER'); 
readln; 
exit; 
end; 
assign(f_out,'TMP2.TXT'); {binding f_out variable with file TEST1.TXT} 
rewrite(f_out); 
writeln; 
end; 
procedure substitution(var f_in, f_out: text; var F_obr: FInt; var s: string); 
var 
p: integer; 
slovo: string; 
begin 
assign(F_obr,'test1.TXT'); 
reset(F_obr); 
while not EOF(F_obr) do {analises END of file TEST1.XT} 
begin 
{readln(F_obr, s); {reading of file variables from INPUT.txt} 
if pos('.', s) <> 0 then {analises of point} 
delete(s, pos('.', s), 1); 
while pos(' ', s) <> 0 do { Several probel’s} 
delete(s, pos(' ', s), 1); {delite several probel’s} 
repeat 
p := pos(' ', s); 
slovo := copy(s, 1, p - 1); {reading of word} 
if p <> 0 then 
begin 
write(f_out, unique_letters(slovo), ' '); 
delete(s, 1, p); 
end; 
until p = 0; 
delete(s, 1, p); 
writeln(f_out, unique_letters(s)); 
end; 
close(f_in); {protection ON for information in INPUT.TXT} 
close(F_obr); 
close(f_out); {protection ON for information in OUTPUT.TXT} 
end; 
procedure output (var f_out:text; s:string); 
begin 
{$I-} reset(f_out); {$I+} {ON/OFF procedure for check file OUTPUT.TXT} 
if IOResult <>0 then {analysis mistake manipulation with file OUTPUT.TXT } 
begin 
writeln('Error opening file TMP2.TXT'); 
writeln('Program finished, push ENTER '); 
readln; 
exit; 
end; 
while not EOF(f_out) do {analises END of file TEST1.XT} 
begin 
readln(f_out,s); {readln and writing massive in OUTPUT.TXT} 
end; 
writeln; 
writeln('The modified file was successfully saved to TMP2.TXT'); 
end; 

Procedure CopyFile(var f_copy:file); 
var 
cursor, size, part: longint; 
s: string; 
nontype:file; 
begin 
assign (nontype, 'TMP2.TXT'); 
reset (nontype, 1); 
assign (f_copy,'TMP2.TXT'); 
rewrite (f_copy, 1); 
cursor := 0; 
part := 256; 
size := filesize (nontype); 
while not eof (nontype) do begin 
blockread (nontype, s, part); 
blockwrite (f_copy, s, part); 
inc (cursor, part); 
if (cursor + part) > size then 
part := size - cursor 
end; 
Close(nontype); 
Close(f_copy); 
writeln('The file has been successfully copied to TMP2.TXT'); 
end; 
begin 
clrscr; 
enter(f_in,f_out); 
substitution(f_in,f_out,F_obr,s); 
output(f_out,s); 
CopyFile(f_copy); 
readln; 
end.
Kamelok вне форума Ответить с цитированием
Старый 04.06.2018, 01:34   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Естественно, трассировкой пользоваться не умеете и сказать, в какой именно строчке процедуры вываливается ошибка - не можете? Попробуем угадать.

Код:
{readln(F_obr, s); {reading of file variables from INPUT.txt}
Если вылетает тут (без скобок комментария, естественно) - то вполне логично, Вы пытаетесь прочитать строку из файла типа integer, отсюда и несоответствие типов.

Код:
function unique_letters(s:string):string; 
var 
t,i:integer; 
begin 
for i:=1 to length(s) do {length of each word} 
s[t]:=s[length(s)]; 
s[length(s)]:=s[1]; 
s[1]:=s[t]; 
unique_letters:=s; {formation of transformered words} 
end;
тут вообще t не определена. И если я правильно понимаю, что Вы тут делаете обмен значениями - нужно все операции присваивания взять в begin ... end.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несоответствие типов данных xbron БД в Delphi 23 29.05.2014 23:00
Несоответствие типов Кристинка89 Общие вопросы Delphi 2 24.05.2011 17:25
несоответствие типов Rin БД в Delphi 7 11.01.2011 14:27
Несоответствие типов. Иван=) Помощь студентам 7 04.11.2010 13:27
Несоответствие типов nusik Общие вопросы Delphi 14 31.05.2009 17:24