![]() |
|
|
#1
|
|||
|
|||
|
Решаю задачу по программированию и вылезает такая вот ошибка.
Собственно код: Код:
begin
assign(input,'lookandsay.in');
readln(n);
setlength(str,n);
for i:=1 to n do
begin
readln(st);
m:=length(st);
for y:=1 to m-1 do
begin
if st[y]=st[y+1] then k:= k+1
else
begin
str[i]:=str[i]+inttostr(k)+st[y];
k:=1;
end;//else
end;// for y
end;//for i
assign(output,'lookandsay.out');
for i:=1 to n do writeln(str[i]);
end.Подскажите, где ошибка. Заранее спасибо. |
|
#2
|
|||
|
|||
|
Во первых укажи типы переменных, а во второх кто файлы открывать/закрывать будет?
|
|
#3
|
|||
|
|||
|
Код:
var i,y,n,k,m:integer;
st:string;
str: array of string; |
|
#4
|
|||
|
|||
|
файл на запись/дозапись открой.
|
|
#5
|
|||
|
|||
|
Всмысле reset,rewrite? Пробовал- не помогает.
|
|
#6
|
|||
|
|||
|
Ошибка означает доступ к обьекту которого не существует (обычно). Делаем точну остановки на начале функции и далее трасировкой нах=одим ошибку.
|
|
#7
|
|||
|
|||
|
Вот как типы указал, сразу стало ясно
Код:
var
i, y, n, k, m: Integer;
st: String;
str: array of String; // массив динамический!!! Начинается с нуля!
Input, Output: TextFile;
begin
AssignFile(Input,'lookandsay.in'); // инициализация
Reset(Input);// окрытие
Readln(Input, n); // читается так
Setlength(Str, n);
for i := 0 to n-1 do // здесь у тебя была ошибка
begin
Readln(Input, st);
m := length(st);
k := 1;
for y := 1 to m-1 do
begin
if st[y]=st[y+1] then
Inc(k)
else
begin
str[i] := str[i]+ IntToStr(k) + st[y];
k := 1;
end;
end;
end;
CloseFile(Input); // закрываешь
AssignFile(Output, 'lookandsay.out'); // все аналогично
ReWrite(Output);
for i:=0 to n-1 do
Writeln(Output, str[i]);
CloseFile(Output); |
|
#8
|
|||
|
|||
|
Возникает на end. т.е. при завершении программы.
Drozh, если сделать, как ты показал, возникает другая ошибка - Access violation at adress такой-то in module 'coriede70.bpl'. Последний раз редактировалось [The]Unknown_Master, 03.11.2008 в 15:52. |
|
#9
|
|||
|
|||
|
Хм... У меня все работало... У тебя файлы в дирректории с программой присутствуют? Или просто приведи код полностью
|
|
#10
|
|||
|
|||
|
Цитата:
Видимо дебагер в семерке как то плохо работает, первая ошибка должна была словиться в конце цикла. |
|
#11
|
|||
|
|||
|
Drozh, файлы присутствуют.Пробовал исправить свой, пробовал скопировать и вставить твой код.Ноль эффекта.Хотя нет - стала вылезать другая ошибка(((
|
|
#12
|
|||
|
|||
|
Ты чтото не так используешь, приведи свой код полностью
|
|
#13
|
|||
|
|||
|
Сегодня нашёл ошбку- она заключалась в использовании Delphi 7 под
висту.Перенёс на XP - всё заработало((( |
|
#14
|
|||
|
|||
|
Гм... я свои програмки проверял на висте - все работает.
Единственное, что отказалось работать - одна штука, которая пользует SQLite, но об этом и так известно, что на висте работать не будет (хотя я слышал, что какими-то шаманскими танцами можно и ее заставить работать). |
|
#15
|
|||
|
|||
|
Дело в том, что элементы массива String могут быть разные по длине. А Дельфи обращается к этим самым элементам по адресу в памяти и крайне редко (100% случаев) сбивается.
Я где-то читал, что надо обязательно ограничивать длину строки, когда создаешь динамический массив. |