Помощь - Поиск - Пользователи - Календарь
Полная версия: Файл заметок
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Legolas
Всем привет. 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
for j:=1 to i do writeln(Mas[i]);  
Надо Mas[j] ;)
Legolas
Atos: спасибо smile.gif
Legolas
Вот ребята доделываю прогу, опять баг случился, не могу добавить в массив строку. Может поможете? 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
Попробуй тот кусок, котрый ты выделил, переписать вот так:
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 в каждый момент будет храниться количество строк в массиве...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.