Авторизация

Логин: Пароль:
Регистрация Забыли свой пароль?

Указатели

Страницы: 1
Указатели, Ошибка в Л.Р.
Помогите найти ошибку:

Задание: Одно из возможных представлений "длинного" текста - это разделить
его на участки (строки) равной длины и создать массив ссылок на эти строки:
const d =...; {Длина строки }
n =...; {Максимальное число строк}
type stroka = string[d];
Ref = ^stroka;
tekst = Array [1..n] of Ref;
Если текст содержит менее n строк, то последние элементы массива равны Nil. Если в операции над текстом указан номер отсутствующей строки, т.е. элемент массива с этим номером равен Nil, то такая операция не выполняется. Используя данное представление текста, описать процедуру Удалить(T,i), удаляющую i-ю строку из текста T, а следующие за ней строки сдвигает.

Программа:
Код
program lab_13;
const d=25;
      n=100;
type stroka=string[d];
     Ref=^stroka;
     tekst=array [1..n] of Ref;
var i,t:integer;
    f:text;
    s:string;
    s1:stroka;
    a:tekst;
procedure http(k:integer);
var j:integer;
begin
if a[k]<>nil then
dispose(a[k]);
for j:=k to n-1 do
a[j]:=a[j+1];
end;
begin
Writeln('Введите название файла');
readln(s);
Assign(f,s);
Reset(f);
i:=0;
While not eof(f) do
 begin
  Readln(f,s);
  While s<>'' do
   begin
    i:=i+1;
    s1:= copy(s,1,24);
    new(a[i]);
    a[i]^:=s1;
    delete(s,1,24);
   end;
 end;
if i<n then
for t:=i to n do
a[t]:=nil;
Writeln('Введите номер строки для удаления');
readln(t);
http(t);
while a[i]<>nil do
write(a[i]^);
while a[i]<>nil do
dispose(a[i]);
Close(f);
readln;
end.
Если я все правильно понял, то правильно будет вот так
Код
program lab_13;
const d=25;
      n=100;
type stroka=string[d];
     Ref=^stroka;
     tekst=array [1..n] of Ref;
var i,t:integer;
    f:text;
    s:string;
    s1:stroka;
    a:tekst;
procedure http(k:integer);
var j:integer;
begin
if a[k]<>nil then
dispose(a[k]);
for j:=k to n-1 do
a[j]:=a[j+1];
end;
begin
Writeln('Введите название файла');
readln(s);
Assign(f,s);
Reset(f);
i:=0;
While not eof(f) do
begin
  Readln(f,s);
  While s<>'' do
   begin
    i:=i+1;
    s1:= copy(s,1,24);
    new(a[i]);
    a[i]^:=s1;
    delete(s,1,24);
   end;
end;
if i<n then
  for t:=i to n do
    a[t]:=nil;
Writeln('Введите номер строки для удаления');
readln(t);
http(t);
Далее делаем вывод в цикле
i:=1;
while a[i]<>nil do
begin
write(a[i]^);
inc(i);
end;

И снова продолжаем программу далее.
Код
while a[i]<>nil do
dispose(a[i]);
Close(f);
readln;
end.
Спасибо за помощь)
Пожалуйста. Еще нужна будет помощь, пишите. Рад буду помочь.
Код
if i<n then
for t:=i to n do
a[t]:=nil;

А в этом месте разве нет ошибки?
Допустим у нас получается три строки... Значит при считывании из файла на выходе i=3.
И что же получается при t:=i, a[t] указывает на последнюю строку, а мы присваиваем NIL.
Тоесть последней строки нет...

Помойму нада так smile;)
if i<n then
for t:=i+1 to n do
a[t]:=nil;
Изменено: Valera - 29.05.2010 19:01:46
Ты совершенно права smile8)
Огромное спасибо
Кто ПРАВА?
Наталья права!!!
Помогите пожалуйсто решить задачу. Условие: Даны 2 файла F1 и F2(integer) произвольной длины сгенерированные из n1 и n2 элементов соответственно - в диапазоне от -500 до 500.
Цель: Создать F3 файл используя элементы из F1 и F2, отсортированные по возрастанию.
В чем подвох: Нельзя использовать сортировку.
Нужно использовать слияние.
Слияние производить очередями(динамические данные). Т.е. предварительно создать 3 очереди, (Och1, Och2) слить в och3 по возрастанию;

Просьба: Люди если нетрудно помогите решить эту задачу. У меня почемуто неполучается smile:( .
Карина Царь, нам когда то такое тоже задавали
только не помню как решали
А чего без сортировки?
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)