ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Занятие 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. Расскажите как Вы работали над творческим заданием. Не нашли, что искали? Воспользуйтесь поиском:
|