Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Тема №2. Файлы и записиСтр 1 из 2Следующая ⇒ Отчет по учебной практике по модулю ПМ.01 «Разработка программных модулей программного обеспечения компьютерных систем» Вариант № _
Перечень заданий 1) Системное программирование Дано техническое задание и программное средство (модуль). Разработать внешнее описание и функциональную спецификацию ПС. Оценить надежность данного ПС путем тестирования. Выявить системные требования и подключение дополнительных библиотек (внешних модулей операционной системы). Перечень тем для разработки:
Отчет представляет собой текстовый документ, содержащий подробный анализ ПС по схеме: * функциональность, * надежность, * легкость применения, * эффективность, * сопровождаемость, * мобильность. Функциональность - это способность ПС выполнять набор функций, удовлетворяющих заданным или подразумеваемым потребностям пользователей. Надежность - это способность ПС безотказно выполнять определенные функции при заданных условиях в течение заданного периода времени с достаточно большой вероятностью Легкость применения - это характеристики ПС, которые позволяют минимизировать усилия пользователя по подготовке исходных данных, применению ПС и оценке полученных результатов. Эффективность - это отношение уровня услуг, предоставляемых ПС пользователю при заданных условиях, к объему используемых ресурсов. Сопровождаемость - это характеристики ПС, которые позволяют минимизировать усилия по внесению изменений для устранения в нем ошибок и по его модификации. Мобильность - это способность ПС быть перенесенным из одной среды (окружения) в другую, в частности, с одного компьютера на другой. 2) Прикладное программирование Отчет по каждой теме состоит из двух частей. Первая часть – листинг программы на языке Паскаль, за которым следует контрольный счет. Вторая часть – заполнение таблицы ответами на контрольные вопросы и правильными вариантами теста. Тема №1. Множества Пример. Составить программу выделения из множества целых чисел от 1 до 30 следующих подмножеств: множества чисел, кратных 2; множества чисел, кратных 3; множества чисел, кратных 6; множества чисел, кратных 2 или 3. Program mnoj; Const n=30; Type mn=Set Of 1..n; Var n2,n3, n6, n23:mn; {n2 - множество чисел, кратных 2, n3 - множество чисел, кратных 3, n6 - множество чисел, кратных 6, n23 - множество чисел, кратных 2 или 3} k: Integer; procedure print1 (m:mn); var i: Integer; begin for i:=1 to n do if i In m then write(i:3); writeln; end; begin n2=[ ]; n3=[ ]; {начальное значение множеств} for k:=1 to n do {формирование n2 и n3} begin {если число делится на 2, то заносим его в n2} if k mod 2=0 then n2:=n2+[k]; if k mod 3=0 then n3:=n3+[k]; {если число делится на 3, то заносим его в n3} end; {числа, кратные 6, кратны 2 и 3, поэтому это – пересечение двух множеств; числа, кратные 2 или 3, - это объединение этих множеств} n6:=n2*n3; n23:=n2+n3; writeln(‘2’); {вывод множеств} print1(n2); writeln(‘3’); print1(n3); writeln(‘6’); print1(n6); writeln(‘2 3’); print1(n23); readln; end. Задания для работы:
Контрольные вопросы: 1. Что такое тип-множество? 2. Каково максимальное число элементов в множестве? 3. Какие зарезервированные слова используются для задания множества? 4. Какие операции можно проводить над множествами? 5. Что такое конструктор множеств? Тесты: 1. Каков будет результат выполнения программы: type digits=set of 0..9; var d1, d2, d3: digits; begin d1:=[1,3,5]; d2:=[0,4,5]; d3:=d1*d2; write(d3); end. · d3=[0, 1, 3, 4, 5] · d3=[0, 1, 3, 4] · d3=[5] · d3=[1, 3, 5, 0, 4, 5] 2. Какой из представленных типов является перечисляемым? · m: Integer; · type n=(…); · s:string; · g:char; 3. Что нельзя делать с множествами? · Суммировать · Вычитать · Вводить элемент · Умножать 4. Какое максимальное количество элементов в множестве? · 10 · 255 · 355 · 100 5. Чему будет равно с: a:=[6,19,0,5]; b:=[19,3]; c:=a+b; · 19 · [6, 0, 5] · [6, 19, 0, 5, 3] · [0, 6] Тема №2. Файлы и записи. Постановка задачи Для заданной прикладной области разработать описание объектов этой области. Разработать процедуры, реализующие базовые операции над этими объектами, в том числе:
Процедуры и описания данных должны составлять отдельный модуль (модуль типа данных). Для каждой области перечислены параметры объекта. Среди параметров обязательно есть ключевое алфавитное поле (например, фамилия), которое идентифицирует объект, у каждого объекта имеется также одно или несколько числовых полей, по которым вероятны обращения к объекту. Набор характеристик может быть расширен. Для работы с типом данных принимается следующий набор операций:
Пример. База данных «Лесное хозяйство»: наименование лесного массива, площадь, основная порода деревьев, средний возраст деревьев, плотность посадки деревьев. program lh; const max = 10; { maksimalnoe kolichestvo hozyaystv } type { lesnoe hozyaystvo } leshoz = record name: string[31]; { naimenovanie zelenogo massiva } area: real; { ploshad } tree: string[15]; { osnovnaya poroda } age: real; { sredniy vozrast } density: real; { plotnost derevyev } end; var hozyaystva: array [1..max] of leshoz; { massiv hozyaystv } count: integer; { kolichestvo hozyaystv } i: integer; { schetchik } { sortirovka massiva po alfavitnomu pokazatelu } procedure sortAlphabet; var i, j: integer; { schetchiki } tmp: leshoz; { dlya obmena } begin for i:= count - 1 downto 1 do for j:= 1 to i do if hozyaystva[j].name > hozyaystva[j + 1].name then begin { obmen } tmp:= hozyaystva[j]; hozyaystva[j]:= hozyaystva[j + 1]; hozyaystva[j + 1]:= tmp; end; end; { sortirovka massiva po vozrastaniyu ploshadi } procedure sortArea; var i, j: integer; { schetchiki } tmp: leshoz; { dlya obmena } begin for i:= count - 1 downto 1 do for j:= 1 to i do if hozyaystva[j].area > hozyaystva[j + 1].area then begin { obmen } tmp:= hozyaystva[j]; hozyaystva[j]:= hozyaystva[j + 1]; hozyaystva[j + 1]:= tmp; end; end; { vvod znacheniy objektov iz fayla } procedure loadFromFile; var f: text; i: integer; { schetchik } s: string[31]; begin { otkrivaem fayl dlya chteniya } assign(f, 'leshoz.txt'); reset(f); while (not eof(f)) and ((count + 1) <= max) do begin readln(f, s); if length(s) > 0 then begin count:= count + 1; with hozyaystva[count] do begin name:= s; readln(f, area); readln(f, age); readln(f, density); end; end; end; close(f); end; { vivod znacheniy objektov v fayl } procedure saveToFile; var f: text; i: integer; { schetchik } begin { otkrivaem fayl dlya zapisi } assign(f, 'leshoz.txt'); rewrite(f); { nachinaem s dvoyki, t.k. pervoe hozyaystvo est vsegda } for i:= 1 to count do begin with hozyaystva[i] do begin writeln(f, name); writeln(f, area: 0: 2); writeln(f, age: 0: 2); writeln(f, density: 0: 2); end; end; close(f); end; begin writeln('Lesnie hozyaystva.'); writeln('-------------------------'); count:= 0; { vvod dannih iz fayla } loadFromFile; { sortirovka } sortAlphabet; sortArea; { vivod dannih na terminal } for i:= 1 to count do begin writeln; with hozyaystva[i] do begin writeln('Nazvanie zelenogo massiva: ', name); writeln(' Ploshad: ', area: 0: 2); writeln(' Osnovnaya poroda: ', tree); writeln(' Sredniy vozrast: ', age: 0: 2); writeln(' Plotnost derevyev na kv.km: ', density: 0: 2); end; writeln; end; { dobavlenie novogo hozyaystva, esli est mesto dlya nego v massive } if count + 1 <= max then begin writeln('Vvedite informaciyu o novom lesnom hozyaystve.'); writeln; count:= count + 1; { vvod novih dannih } with hozyaystva[count] do begin write('Nazvanie zelenogo massiva: '); readln(name); write(' Ploshad: '); readln(area); write(' Osnovnaya poroda: '); readln(tree); write(' Sredniy vozrast: '); readln(age); write(' Plotnost derevyev na kv.km: '); readln(density); end; writeln; { sortirovka } sortAlphabet; sortArea; { zapis dannih v fayl } saveToFile; end; readln; end. Задания для работы:
Контрольные вопросы: 1. Что такое запись? 2. Определение типа записи. 3. Что такое поля и идентификаторы полей? 4. Что используется для обращения к полям записи? 5. Формат оператора обращения к записи. 6. Что такое файл? 7. Какие зарезервированные слова используются для задания типа-файла? 8. Как определяются файловые пременные? 9. Перечислить стандартные процедуры и функции для работы сфайлами. 10. Какие виды файлов используются в Паскале? Тесты: 1. При помощи какой функции можно определить конец файла? · Eoln · Eof · Odd · End 2. Открытие файла для перезаписи: · append · read · rewrite · write 3. При помощи какой процедуры можно связать программное имя файла с дисковым именем файла? · Append · Close · Assign · Name 4. Как объявляется текстовый файл? · a: text; · a: tfile; · a: file; · a: textf; 5. Каким образом можно поставить маркер конца строки в текущем окне? · Readln · Writeln · End · Read 6. Сколько уровней вложения разрешено использовать в операторе with? · 3 · 5 · 9 · 15 Тема №3. Модуль CRT Пример программы, выводящей на экран в различных текстовых режимах надпись в виде ступеньки с заданным шагом "dx" по оси "х", в каждой строке "у", начиная с позиции (1, 1). PROGRAM FAM; Uses CRT; var N: word; f, dx, x, y, i, j, xm, ym: byte; BEGIN for i:=0 to 9 do begin { режимы работы монитора } if i<4 then N:=i else N:=256+i-4; if i=9 then N:=7; textMode(N); xm:=lo(WindMax)+1; ym:=hi(WindMax)+1; write('xm=',xm, '_ym=',ym, '_N=',N, '_Нажмите Enter'); readln; TextBackGround(1); clrscr; TextColor(14); x:=1; f:=8; dx:=3; { f - длина фамилии + курсор, dx - приращение отступа} for j:=1 to ym-1 do begin y:=j; if (xm-x-f)<0 then x:=1; { контроль выхода надписи за экран } gotoXY(x, y); write('ФАМИЛИЯ'); x:= x + dx; end; Writeln; write('Нажмите Enter'); readln end; TextMode(3) END.
Задания для работы:
Контрольные вопросы: 1. Чем отличается цвет фона от цвета символов? Какие процедуры управляют этими цветами? 2. Что произойдёт, если после вызова процедуры Sound не вызвать процедуру NoSound? 3. Чем отличается Readkey от Readln? 4. Что такое курсор? 5. Куда перемещается курсор после выполнения процедуры ClrScr? 6. Что называют модулем в Паскаль-программе? Тесты: 1. Модуль CRT позволяет: · подключать «мышь» · инициализировать графику · управлять курсором · форматировать дискеты 2. Процедура Window: · устанавливает текстовый режим · рисует прямоугольник · создает графическое окно · задает текстовое окно на экране. 3. Функция readkey: · очищает буфер клавиатуры · анализирует нажатие клавиши · возвращает символ нажатой клавиши · переназначает клавиши 4. Установка текстового режима: · textmode · modetext · text · mode 5. Выключение звука: · NoSound · Sound · Delay · NotSound Тема №4. Графика Пример. Составить программу, рисующую голову робота. Вывести под рисунком строку “Это робот”. Программа составленная на языке Pascal: PROGRAM robot; USES GRAPH; VAR DRIVER,MODE: INTEGER; BEGIN DRIVER:=DETECT; INITGRAPH (DRIVER,MODE,’C:\TP\BGI’); SETCOLOR (BLACK); SETBKCOLOR (WHITE); RECTANGLE (100,100,300,300); CIRCLE (150,170,30); CIRCLE (250,170,30); ARC (150,170,45,135,40); ARC (250,170,45,135,40); ELLIPSE (200,250,0,359,10,20); RECTANGLE (130,280,270,290); MOVETO (100,300); LINETO (50,350); LINETO (350,350); LINETO (300,300); PUTPIXEL (150,170,GREEN); PUTPIXEL (250,170,GREEN); OUTTEXTXX(195,400,’ЭТО РОБОТ’); READLN; CLOSEGRAPH; END. Задания для работы:
Контрольные вопросы: 1. Какие графические адаптеры и режимы вы знаете? 2. Перечислить основные графические примитивы. 3. Каков результат выполнения процедуры GetPalette? 4. Каков результат выполнения функции GraphResult? Тесты: 1. Какой модуль нужно подключить для работы с графикой? · Crt · Printer · Dos · Graph 2. Какая процедура вычерчивает круг? · Putpixel · Arc · Circle · Rectangle 3. Какому цвету соответсвует цифра 0? · Черный · Белый · Синий · Красный 4. Какая функция возвращает текущий цвет рисунка? · GetBkColor · GetColor · FloodFile · Graph 5. Какая процедура перемещает текущий указатель в точку (x,y)? · LineTo · MoveTo · OutText · DoTo Тема №5. Динамические структуры Ознакомиться с понятием списка, стека и очереди.
Решения: 1, 2, 3 Program Example_1234; Type Children=^Child; Child=Record Data:Integer; Next:Children; End; Var circl: Children; n, k: Integer; Procedure Init(Var u: Children; Var k: Integer); Var x, y: Children; i: Integer; Begin Write('Введите число детей'); Readln(n); Write('Введите число слов в считалочке'); ReadLn(k); For i:=1 To N do Begin New(x); x^.data:=i; If u=Nil Then u:=x Else y^.next:=x; y:=x; End; x^.next:=u; End; Procedure Print (u: Children); Var x: Children; Begin x:=u; Repeat Write (x^. Data, '.'); x:=x^.Next; Until x=u; Readln; End; Procedure Game(u: Children); Var x: Children; i: Integer; Begin x:=u; Repeat For i:=1 to k-1 do Begin x:=u; u:=u^.next; End; Write(u^.Data,': '); x^.next:=u^.next; dispose(u); u:=x; Print(u); Until u=u^.next; End; Begin Init (circl,n); Print (circl); Game(circl); Readln; End. 4, 5, 6 Program Example_5678; Type Exst=^st; St=Record Next:exst; Data:Char; End; Var a:String; f:Boolean; i: Integer; Procedure Writestack(Var x1:exst; c:Char); {Процедура занесения элемента в стек} Var u:exst; Begin New(u); u^.Data:=c; u^.next:=x1; x1:=u End; Procedure delstack(Var x1:exst); {Процедура удаления верхнего элемента стека} Var u:exst; Begin u:=x1; x1:=x1^.next; Dispose(u); End; Procedure Solve(a:String); {Процедура проверки правильности расстановки скобок} Var stack: Exst; Begin stack:=Nil; i:=1; While (i<=length(a)) And f Do Begin If (a[i] = '(')Or(a[i] = '{')Or(a[i] = '[') Then Writestack(stack, a[i]) Else If (a[i]=')') Or (a[i]='}') Or (a[i] = ']') Then If Ord(stack^.data)-Ord(a[i])<=2 Then delstack(stack) Else f:=False; Inc (i); End; End; Begin {Основная программа} Writeln('введите строку'); Readln(a); f:=True; If a<>'' Then Begin Solve(a); If f Then Writeln('скобки расставлены верно') Else Writeln('скобка ',a[i-1],'закрыта преждевременно'); End Else Writeln('строка пуста'); Readln; End. 7, 8, 9 Program Example_9101112; Uses Crt; Type Pt=^Node; Node=Record Data: Integer; Left, Right: Pt; End; Var n: Integer; kd:Pt; f: text; Function Tree(n: Integer): pt; Var newnode:pt; x, n1, n2: Integer; Begin If n=0 Then Tree:=nil Else Begin n1:=n Div 2; n2:= n - n1 - 1; Read(f,x); New(newnode); With newnode^ Do Begin Data:=x; Left:=Tree (n1); Right:=Tree(n2); End; Tree:=newnode; End; End; Procedure PrintTree(t:pt; h:Integer); Var i: Integer; Begin If t<> Nil Then With t^ Do Begin PrintTree(left,h+1); For i:= 1 To h Do Write(' '); Writeln (Data:6); PrintTree(Right,h+1); End; End; Begin Clrscr; Assign(f,'f:\1\f.pas'); Reset(f); Write('n='); Readln(n); kd:=tree(n); printtree(kd,0); Readln; End. 10, 11, 12 Program Example_13141516; Uses Crt; Type Words=^Wordtree; Wordtree=Record data: String; k: Integer; left, right: Words; End; Var n: Integer; kd:Words; x: String; f: text; Procedure Tree (x: String; Var p:Words); Begin If p=Nil Then Begin New(p); With p^ Do Begin k:= 1; Data:=x; Left:=Nil; Right:=Nil; End; End Else If x>p^.Data Then Tree (x,p^.Left) Else If x<p^.data Then Tree(x,p^.Right) Else Inc(p^.k); End; Procedure PrintTree(t:Words; h:Integer); Var i: Integer; Begin If t <> nil Then With t^ Do Begin PrintTree(Left, h + 1); For i:= 1 To h Do Write (' '); Writeln (data, ',(', k, ')'); PrintTree(Right,h+1); End; End; Begin Clrscr; Assign (f, 'f:\1\f.dan'); Reset (f); Write ('n = '); Readln(n); kd:=Nil; While n>0 Do Begin ReadLn(f,x); Tree(x,kd); dec(n); End; Close (f); PrintTree (kd, 0); Readln; End. Контрольные вопросы. 1. Какие операции требуется выполнить для вставки элемента списка? 2. Можно ли для построения списка обойтись одной переменной? 3. Сколько элементов может содержать список? Когда прекращать ввод элементов списка?
|