Занятие 5. Примеры решения творческих задач
Рассмотрите решение творческих заданий учащихся. Наберите программы на компьютере и просмотрите их действие. Подумайте, как ребятам удалось придумать и выполнить такие работы. Эти программы помогут Вам определиться с выбором своей творческой работы.
Задача № 1. С помощью нетипизированного файла проанализировать файлы с расширением .mp3 в заданном пользователем каталоге и создать текстовый файл, содержащий следующую информацию: название песни, исполнитель, имя файла.
Program SedihGetTag;
{$I-}
Uses
Crt;
Var
f : file;
c : char;
S : string;
i : LongInt;
DirInfo : seachrec;
Txt : text;
Procedure Extract;
Begin
assign(f, DirInfo.name);
reset(f, 1); {размер буфера записи равен 1 байту}
l := FileSize(f); {переменной l присваиваем размер файла в байтах}
Seek(f, l-125); {ставим указатель, на 125 символов отступив от конца файла}
{вычислил сам, проанализировав файл данного типа}
while not Eof(f) do
Begin
blockread(f, c, 1); {читаем посимвольно}
S := S + c; {формируем строковую переменную, содержащую нужный тэг}
end;
close(f);
writeln(Txt, copy(S, 1, 30)+'-'+copy(S, 31, 30)+'-'+DirInfo.Name);
{записываем выделенную информацию в файл)}
End;
Begin
ClrScr;
assing(txt,'list.txt');
rewrite(txt);
FindFirst('*.mp3', Arhive, DirInfo);
while DosError=0 do
begin
S := '';
Extract;
FindNext(DirInfo);
end;
close(Txt);
End.
Задача № 2. С помощью нетипизированного файла проанализировать файлы-архивы (архиватор WinRar) и вывести на экран имена заархивированных файлов.
Program LipovcevMaksim;
Uses
Crt;
Var
i, pos : integer;
f : file;
FileName, Ima : string;
s : char;
Procedure Name(Var s : char); Forward;
Procedure Poisk(Var s : char);
Begin
case Ord(s) of
20 : begin
blockread(f, s, 1);
case Ord(s) of
20 : Poisk(s);
48..57 : begin
blockread(f, f, S, 1);
case Ord(S) of
20 : Poisk(S);
1..19 : Name(S);
21..32 : Name(S);
end;
end;
end;
end;
end;
End;
Procedure (Name(Var S : char);
Var
k : integer;
Begin
k:=0;
for i := 1 to 5 do
blockread(f, S, 1);
while (S<>'.') and (k<9) do
begin
blockread(f, S, 1);
k := k+1;
ima := Ima+S;
if S='\'
then
k := 0;
end;
if Pos('.', Ima)<>0
then
begin
for i := 1 to 3 do
begin
blockread(f, S, 1);
Ima := Ima+S;
end;
writeln(Ima);
end;
Ima := '';
End;
Begin
ClrScr;
writeln('Введите полное имя архивного файла RAR');
write('->');
readln(FileName);
reset(f, 1);
writeln('Имена заархивированных файлов:');
while not EOF(f) do
begin
blockread(f, S, 1);
Poisk(S);
end;
close(f);
readKey;
End.
Задача № 3. С помощью нетипизированного файла преобразовать файл c расширением .BMP следующим образом:
разделить рисунок на две части по горизонтали, верхнюю часть поместить на место нижней, разделить её на две части по вертикали и поменять их местами.
Примечание. При исследовании файлов с расширением ВМР выяснилось следующее их описание в зависимости от количества употребляемых цветов:
16 цветов - 118 байт, 256 цветов - 1086 байт, 24 бита - 55 байт. Это колисемтво байт влияет на значение переменное Кol в программе.
Program BaranovA;
Uses
Crt;
Const
n=1234; {установка размера буфера}
Kol=118;
Var
F1, F2 : file;
Name1, Name2 : string;
Buf : Array [1..n] of byte;
AllSize, PicSize, HalfSize : LongInt;
i : integer;
Begin
write('Имя файла >');
readln(Name1);
Name2 := Name1;
if Pos('.', Name2) <> 0
then
begin
Delete(Name2, Pos('.', Name2), Lenth(Name2)-Pos('.', Name2)+1);
Name2 := Name2+'.tmp';
assign(F1, Name1);
reset(F1, 1);
assign(F2, Name2);
rewrite(F2, 1);
AllSize := FileSize(F1); {размер всего файла}
PicSize := AllSize-Kol; {размер всего файла без описания}
HalfSize := PicSize div 2; {половина файла}
blockread(F1, Buf, Kol);
blockwrite(F2, Buf, Kol);
seek(F1, Kol+HalfSize-1);
for i := 1 to HalfSize div n do
begin
blockread(F1, Buf, n); {считываем и записываем из середины файла}
blockwrite(F2, Buf, n);
End;
blockread(F1, Buf, HalfSize mod n); {переписываем оставшиеся байты из не полностью заполненного буфера}
blockwrite(F2, Buf, HalfSize mod n);
Seek(F1, Kol-1);
blockread(F1, Buf, HalfSize mod n);
blockwrite(F2, Buf, HalfSize mod n);
close(F1);
close(F2);
end;
End.
Задание. Выбрав какую-либо категорию файлов, проанализировать их в своей программе, пользуясь возможностями обработки нетипизированного файла, и решить некоторую поставленную Вами задачу. Протестированную программу и листинг покажите учителю для оценки.
Приготовьте рабочие программы и оцененные листинги для проверки учителем.
Проверьте свои знания по теме, ответив на следующие вопросы:
1. Дайте определение нетипизированному файлу.
2. В чем Вы видите преимущества и недостатки работы с нетипизированными файлами по сравнению с типизированными и текстовыви файлами?
3. Объясните назначение параметров специфических для нетипизированных файлов процедур чтения и записи.
4. Какой вид файлов из рассмотренных выше Вам понравился больше и почему?
5. Объясните назначение процедур Аssign, Сlosе, Eof и их параметров.
6. В чем особенность применения процедуры rewrite и какой дополнительный параметр при работе с нетипизированными файлами она имеет?
7. В чем особенность применения процедуры reset и какой дополнительный параметр при работе с нетипизированными файлами она имеет?
8. Объясните назначение процедур Seek, FileSize, FilePos и их параметров.
9. Объясните назначение процедур rename, Truncate, Еrase и их параметров.
10. Расскажите как Вы работали над творческим заданием.
Дата добавления: 2015-05-16; просмотров: 772;