Консультация № 187711
17.01.2014, 14:06
94.84 руб.
0 2 1
Здравствуйте! Прошу помощи в следующем вопросе:
Написать программу на PascalABC :
В файловой системе каталог файлов организован в виде линейного списка
Для каждого файла в каталоге содержатся следующие сведения:
* имя файла
* дата создания
* количество обращений к файлу
Написать программу, которая обеспечит:
1)начальное формирование каталога файлов
2)вывод каталога файлов
3)удаление файлов, дата создания которых меньше заданной
4)выборку файла с наибольшим количеством обращений

Обсуждение

давно
Старший Модератор
31795
6196
21.01.2014, 11:48
общий
21.01.2014, 11:48
Форма ответа, пока не работает, дублирую в мини-форум.
Pascal ABC 3.0.1.35
[code h=200]type
{тип данных дата}
tData=record
day:integer;
month:integer;
year:integer;
end;
{тип данных элемент списка}
pFileSystem=^tFileSystem;
tFileSystem=record
name:string;
data:tData;
access:integer;
next:pFileSystem;
end;
var
a,b,c:pFileSystem;
d:tData;
{функция генерирования имени файла}
function GetMyFileName:string;
begin
GetMyFileName:='my'+chr(48+random(10))+chr(48+random(10))+chr(48+random(10))+'.txt';
end;
begin
{вводим количество файлов}
repeat
write('Enter files number[1..99]:');
readln(d.day);
until(d.day>0)and(d.day<100);
randomize;
{создаем нужное количество файлов}
writeln('myFile System : Create File');
a:=nil;
while d.day>0 do
begin
{создаем элемент списка заполняем поля и включаем его в список}
b:=a;
new(a);
a^.name:=GetMyFileName;
a^.data.day:=random(30)+1;
a^.data.month:=random(12)+1;
a^.data.year:=random(100)+1960;
a^.access:=random(100);
a^.next:=b;
writeln(a^.name:50,
a^.data.day:4,':',
a^.data.month:2,':',
a^.data.year:4,
a^.access:10);
dec(d.day);
end;
writeln('my File System : Delete file before the date');
write('Enter day:');readln(d.day);
write('Enter month:');readln(d.month);
write('Enter year:');readln(d.year);
b:=nil;
while a<>nil do
begin
c:=a;
a:=a^.next;
{проверяем дату}
if(d.year<c^.data.year)or(d.year=c^.data.year)and
(d.month<c^.data.month)or(d.year=c^.data.year)and
(d.month=c^.data.month)and(d.day<c^.data.day)then
begin{да-включаем в новый список}
c^.next:=b;
b:=c;
end
else
begin{нет- выводим и освобождаем память}
writeln(c^.name:50,
c^.data.day:4,':',
c^.data.month:2,':',
c^.data.year:4);
dispose(c);
end;
end;
a:=b;
{выводим список на экран}
writeln('myFile System : List Folder');
b:=a;
while b^.next<>nil do
begin
writeln(b^.name:50,
b^.data.day:4,':',
b^.data.month:2,':',
b^.data.year:4,
b^.access:10);
b:=b^.next;
end;
{вводим дату и начинаем поиск}
{начинаем поиск файла с максимальным количеством доступа}
writeln('my File System : Maximum Access');
c:=a;
b:=a^.next;
while b^.next<>nil do
begin
if c^.access<b^.access then c:=b;
b:=b^.next;
end;
{выводим результат}
writeln(c^.name:50,
c^.data.day:4,':',
c^.data.month:2,':',
c^.data.year:4,
c^.access:10);
{освобождаем память}
repeat
b:=a;
a:=a^.next;
dispose(b);
until a=nil;
{ожидаем клавишу ввод}
writeln('press any key ...');
readln;
end.[/code]
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
23.01.2014, 11:51
общий
это ответ
Здравствуйте, Печников Александр Васильевич!

Смотрите приложение. Вопросы по программе задавайте в мини-форум.
Удачи!

Приложение:
type
{тип данных дата}
tData=record
day:integer;
month:integer;
year:integer;
end;
{тип данных элемент списка}
pFileSystem=^tFileSystem;
tFileSystem=record
name:string;
data:tData;
access:integer;
next:pFileSystem;
end;
var
a,b,c:pFileSystem;
d:tData;
{функция генерирования имени файла}
function GetMyFileName:string;
begin
GetMyFileName:='my'+chr(48+random(10))+chr(48+random(10))+chr(48+random(10))+'.txt';
end;
begin
{вводим количество файлов}
repeat
write('Enter files number[1..99]:');
readln(d.day);
until(d.day>0)and(d.day<100);
randomize;
{создаем нужное количество файлов}
writeln('myFile System : Create File');
a:=nil;
while d.day>0 do
begin
{создаем элемент списка заполняем поля и включаем его в список}
b:=a;
new(a);
a^.name:=GetMyFileName;
a^.data.day:=random(30)+1;
a^.data.month:=random(12)+1;
a^.data.year:=random(100)+1960;
a^.access:=random(100);
a^.next:=b;
writeln(a^.name:50,
a^.data.day:4,':',
a^.data.month:2,':',
a^.data.year:4,
a^.access:10);
dec(d.day);
end;
writeln('my File System : Delete file before the date');
write('Enter day:');readln(d.day);
write('Enter month:');readln(d.month);
write('Enter year:');readln(d.year);
b:=nil;
while a<>nil do
begin
c:=a;
a:=a^.next;
{проверяем дату}
if(d.year<c^.data.year)or(d.year=c^.data.year)and
(d.month<c^.data.month)or(d.year=c^.data.year)and
(d.month=c^.data.month)and(d.day<c^.data.day)then
begin{да-включаем в новый список}
c^.next:=b;
b:=c;
end
else
begin{нет- выводим и освобождаем память}
writeln(c^.name:50,
c^.data.day:4,':',
c^.data.month:2,':',
c^.data.year:4);
dispose(c);
end;
end;
a:=b;
{выводим список на экран}
writeln('myFile System : List Folder');
b:=a;
while b^.next<>nil do
begin
writeln(b^.name:50,
b^.data.day:4,':',
b^.data.month:2,':',
b^.data.year:4,
b^.access:10);
b:=b^.next;
end;
{вводим дату и начинаем поиск}
{начинаем поиск файла с максимальным количеством доступа}
writeln('my File System : Maximum Access');
c:=a;
b:=a^.next;
while b^.next<>nil do
begin
if c^.access<b^.access then c:=b;
b:=b^.next;
end;
{выводим результат}
writeln(c^.name:50,
c^.data.day:4,':',
c^.data.month:2,':',
c^.data.year:4,
c^.access:10);
{освобождаем память}
repeat
b:=a;
a:=a^.next;
dispose(b);
until a=nil;
{ожидаем клавишу ввод}
writeln('press any key ...');
readln;
end.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа