Удаление массива / уничтожение базы данных

lostpoet

Я конечно понимаю, что как таковой команды на удаление массива нету. Но все же посмотрите програму для решения вот такой задачи: Создать систему, которая организует базу данных с заданной структурой и предоставляет следующий сервис: а) ввод данных в базу; б) изменения данных; в) уничтожения данных; г) пересмотр всей базы; д) уничтожение базы; е) дополнительные услуги (согласно заданию).Организовать базу данных для железнодорожного вокзала с таким содержанием: номер поезда, время отправления, пункты следования (названия станций). База данных позволяет по указанному станцией назначения выдавать на экран информацию о все подходящие поезда, отбывающие из данного вокзала в ближайшие сутки.Напёред извиняюсь за гоблинский перевод, так как задания на украинском написано. Ну так вот по сути задачу я почти исполнила, кроме некотрых деталей, я их-то сама доделаю. Но сильно прошу вас посмотрите програмку, так как я не знаю как удалить массив прошу вашей помощи. Может есть какие-то идеи как это сделать, а то уже вторые сутки голову ламаю.
program prakt8_2;
uses crt;
label 25,8;
const n=3;
type dani=record
np:integer;
chv:real;
pp:string;
end;
var MM1:array[1..n] of dani;
i:integer;a,b,c,q,v:integer;  y:string;
begin
clrscr;
writeln('basa danuh she ne stvorena');
25: writeln('oberit iz spysku diju na vikonannia');
writeln('1) vvedennja danih u bazu;');
writeln('2) redaguvannja danih;');
writeln('3) znishhennja danih;');
writeln('4) peregljad usiej bazi;');
writeln('5) znishhennja bazi;');
writeln('6) vivedennja na ekran informatsij pro vsi pihozhi poiizdi.');
readln(a);
clrscr;
case a of
1:for i:=1 to n do
  begin
  writeln('vvedit dani pro potiag(nomer, chas vidpravlennia, pochatkovu ta kinzevi stanzij)');
  readln(MM1[i].np,MM1[i].chv,MM1[i].pp);
  end;
2:begin
 writeln('vvedit nomer potiagu informaziju pro iakoho neobhidno zminyti');
readln(b);
i:=1;  q:=0;
repeat
if MM1[i].np=b then
begin
writeln('vvedit novi dani pro potiag pid nomerom ',b,'(nomer, chas vidpravlennia, pochatkovu ta kincevu stanzij)');
readln(MM1[i].np,MM1[i].chv,MM1[i].pp);
q:=1;
end;
if q=0 then
writeln('potiaga pid takim nomerom u basi nemae. Na zal, Vy ne mozete zminyti dani.');
i:=i+1;
until i>n;
end;
3:begin
writeln('Vy vpevneni, sho hochete vidality vsi dani pro potiagi iz basi danyh? Yaksho tak natisnit 1, yaksho ni - 2');
readln(c);
if c=1 then
begin
for i:=1 to n do
  begin
  MM1[i].np:=0;
  MM1[i].chv:=0;
  MM1[i].pp:='-';
  end;
writeln('dani vidaleno z basi. Yaki budut nastupni dij?');
writeln('Povernutis do pereliku mozlyvih dij:1;');
writeln('                  Vyhid iz programu:2.');
readln(v);
case v of
1:goto 25;
2: goto 8;
end;
end;
if c=0 then
begin
writeln('Yaki budut nastupni dij?');
writeln('Povernutis do pereliku mozlyvih dij:1;');
writeln('                  Vyhid iz programu:2.');
readln(v);
case v of
1:goto 25;
2: goto 8;
end;
end;
end;
4:begin
writeln('nomer potiga               chas vidpravlennia              stancij');
for i:=1 to n do
  begin
  writeln(MM1[i].np,'                    ',MM1[i].chv:2:2,'                 ',MM1[i].pp);
  end;
end;
5:begin
delete(MM1);
end;
6:begin
writeln('vvedit nazvu stanzij');
readln(y);
i:=1;
repeat
if MM1[i].pp=y then
writeln(MM1[i].np,'  ',MM1[i].chv:2:2,' ',MM1[i].pp);
i:=i+1;
until i>n;
end;
end;
8:readln;
end.
Там где по-идеи должен удалятся массив компилятор выдает ошибку.
12 ответов

lostpoet

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


lostpoet

Базу данных не хранят в массиве, как минимум в типизированном файле, который легко уничтожить процедурой erase, хотя думаю что у Вас неверный перевод, зачем создавать и уничтожать..


lostpoet

Базу данных не хранят в массиве, как минимум в типизированном файле, который легко уничтожить процедурой erase, хотя думаю что у Вас неверный перевод, зачем создавать и уничтожать..
А вот, к примеру, массив записей? Почему бы и нет?


lostpoet

Почему бы и нет?
Так это на 1 раз, какая же это база?


lostpoet

Так это на 1 раз, какая же это база?
А, если иметь в виду полноценную базу-то?) Я что-то даже и забыл про базы на паскале


lostpoet

Понимаете у меня сейчас проходит практика по Паскалю. И ето задание по записям, но так-как надо создать базу через запись, то массив создается обязательно. Спрашивала сегодня у учителя что да как, так он ответил, что может не верные задание, мол опечатались создатели, и что можно етот пункт упустить, но если найду решения - то будет здорово!))А что касается типизированых файлов, то говорил что в этой работе их нельзя применять, ведь розсматривали разные варианты роботы. Так в ответ на применение в программе файлов - сказали что нельзя((


lostpoet

lostpoet, это ясно, но что понимается под "удалением массива", не сказали?


lostpoet

Насколько я правильно поняла - то имеется удаления самой базы как таковой. Поначалу думали что нужно просто обнулить все значения, но прочитав задания ище раз - то заметили, что обнуление всех данных уже есть.


lostpoet

Насколько я правильно поняла - то имеется удаления самой базы как таковой. Поначалу думали что нужно просто обнулить все значения, но прочитав задания ище раз - то заметили, что обнуление всех данных уже есть.
Значит 100% динамически. Т.е. сколько выделили, столько и уничтожить.


lostpoet

Значит 100% динамически. Т.е. сколько выделили, столько и уничтожить.
Что-то я не понимаю как ето осуществить...


lostpoet

Вот простой пример создания списка, добавление в него элемента и удаление элемента из списка. Все сделано динамически. Он даже сам очищается после выполнения действий:
program Links;
uses crt;
type
Link = ^Number;
Number = record
 ID: integer;
 Cislo : integer;
 NextRec: Link;
end;
var i, c, j, a: integer;
    Last, First, Curr, spisok, tmp : Link;
 
procedure Add(var spis1:Link ;znach1: integer);
var
  tmp:Link;
begin
  if spis1=nil then {Проверяем не пуст ли список, если пуст, то }
  begin
    GetMem(spis1,sizeof(number));  {создаём его первый элемент}
    tmp:=spis1;
  end
  else {в случае если список не пуст}
  begin
    tmp:=spis1;
    while tmp^.nextrec<>nil do
      tmp:=tmp^.nextrec; {ставим tmp на последний элемент списка}
    GetMem(tmp^.nextrec,sizeof(number)); {создаём следующий элемент}
    tmp:=tmp^.nextrec;   {переносим tmp на новый элемент}
  end;
  tmp^.nextrec:=nil; {зануляем указатель}
  tmp^.cislo:=znach1; {заносим значение}
end;
 
procedure del(var first:link);
var kur: link;
begin
 kur:=first;
 first:=first^.nextrec;
 dispose(kur);
end;
 
procedure ShowList(first: link);
begin
 Writeln('Список элементов:');
 if first=nil then writeln('V spiske net elementov')
 else
  begin
   while first<>nil do
    begin
     writeln(first^.cislo);
     first:=first^.nextrec;
    end;
 end;
end;
 
begin
      Writeln('Укажите длину списка: ');
      Readln(c);
      first:=nil;
      Writeln('Введите целые числа:');
      for i := 1 to c do
 begin
  read(a);
  add(first,a);
 end;
ShowList(first);
Writeln('Укажите индекс элемента для удаления: ');
readln(j);
Curr := First;
for i := 1 to j - 2 do Curr := Curr^.NextRec;
if (j > c) or (j<=0) then writeln('Нету такого индекса.')
    else
    if j = 1
         then First := First^.NextRec
              else if j = c
                  then begin
                      Curr^.NextRec := Nil;
                      Last := Curr^.NextRec;
                      end else
                          Curr^.NextRec := Curr^.NextRec^.NextRec;
 
                          ShowList(first);
 
 if first=nil then
  writeln ('V spiske net elementov')
  else
   while first<>nil do
    del(first);
Writeln('Список удалён');
readln;
showlist(first);
readln;
end.
Оно Вам надо?


lostpoet

Спасибо, конечно за помощь, но как оказалось - задания написано немного не верно и удаление базы не нужно. Но все равно спасибо, как будет время посмотрю и розберусь с Вашим примером.