Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Файл заметок

Автор: Legolas 28.10.2005 7:51

Всем привет. smile.gif
Вот запутался в одной задаче.
А условие такое:
Написать программу, которая считывает текстовый файл с записями (заметками), записывает это в массив. Потом мы добавляем заметку или удаляем. В файле изменения тоже происходят.
Тут у меня при считывании файла и записи его в массив выводится почему-то всегда последняя строка файла, может кто-нибудь подскажет в чем дело.

Пример файла:
Сегодня нужно купить хлеб
Позвонить Наташе
27 октября зайти к Саше


Код

program oboloch;
uses crt;
var i,j: integer; a: text; Mas: array [1..200] of string;
begin clrscr; textcolor(lightgreen);
{n:=0;}
assign(a,'c:\base.txt');
reset(a);
i:=0;
while not eof(a) do
begin
i:=i+1;
readln(a,Mas[i]);
end;
close(a);
for j:=1 to i do writeln(Mas[i]);
{writeln(a);}
readln;
end.

Автор: Atos 28.10.2005 9:51

for j:=1 to i do writeln(Mas[i]);  
Надо Mas[j] ;)

Автор: Legolas 28.10.2005 13:25

Atos: спасибо smile.gif

Автор: Legolas 28.10.2005 13:30

Вот ребята доделываю прогу, опять баг случился, не могу добавить в массив строку. Может поможете? smile.gif

Код

program oboloch;
uses crt;
var i,j,n,d: integer; a: text;
st,k: string;
Mas: array [1..200] of string;
begin clrscr; textcolor(lightgreen);
assign(a,'C:\base.txt');
reset(a);
i:=0;
while not eof(a) do
begin
i:=i+1;
readln(a,Mas[i]);
end;
close(a);
for j:=1 to i do writeln(Mas[j]);
writeln;
write(' Delete - 1, Dobavit - 2, Escape - 3 >>> ');
readln(d);
case d of
1: begin
      write(' Input number strig massiva for delete> ');
      readln(n);
      for j:=n to i do
      mas[j]:=mas[j+1];
    end;
2:  
{Вот здесь ребята что-то не так...}
{Не обращайте внимание на хлам....}
begin
      write(' Input string> ');
      readln(st);
      k:=j+st;
      for j:=1 to i do
      begin
      {write(' ');}
      readln(mas[j]);
      end;
   end;
{Конец чего-то не так}

else
halt(1);
end;
writeln;
for j:=1 to i do writeln(Mas[j]);
readln;
end.

Автор: volvo 28.10.2005 13:38

Попробуй тот кусок, котрый ты выделил, переписать вот так:

begin
write(' Input string> ');
readln(st); { Прочел строку }
inc(i); { увеличил счетчик строк в массиве на 1 }
mas[i] := st; { и записал ЗА всеми существующими строками новую... }
end;

И все, ничего никуда переносить не нужно...
Единственное, что еще осталось сделать - при удалении строки из массива уменьшать индекс:
1: begin
write(' Input number strig massiva for delete> ');
readln(n);
for j:=n to i do
mas[j]:=mas[j+1];

dec(i); { <-- Вот это !!! }
end;

Тогда у тебя в I в каждый момент будет храниться количество строк в массиве...