Реферат по предмету "Программирование и компьютеры"


База данных на языке Turbo Paskal

Содержание. 1. ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ 2. ВВЕДЕНИЕ 3.1. СТРУКТУРА МОДУЛЕЙ 3.2. ЗАГОЛОВОК МОДУЛЯ И СВЯЗЬ МОДУЛЕЙ ДРУГ С ДРУГОМ
3.3. ИНТЕРФЕЙСНАЯ ЧАСТЬ 3.4. ИСПОЛНЯЕМАЯ ЧАСТЬ 3.5. ИНИЦИИРУЮЩАЯ ЧАСТЬ 3.6. КОМПИЛЯЦИЯ МОДУЛЕЙ 3.7. ДОСТУП К ОБЪЯВЛЕННЫМ В МОДУЛЕ ОБЪЕКТАМ 3.8. СТАНДАРТНЫЕ МОДУЛИ 4.МОДУЛЬ VVOD 4.1 ПРОЦЕДУРА VPREP 4.2 ПРОЦЕДУРА PECHAT 4.3 ПРОЦЕДУРА ZAMENIT 5. ПРОГРАММА, ИСПОЛЬЗУЮЩАЯ ЭТОТ МОДУЛЬ. 6. ЗАКЛЮЧЕНИЕ 1. ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ Создать журнал загруженности лекциями и лабораторными работами преподавателей (Декан­ – кафедра – фамилия – лекции – практические задания). 2. ВВЕДЕНИЕ Нашей задачей является создание простейшей реляционной базы данных, используя модули языка TURBO PASKAL. В процессе создания нашей программы, нами будет создано два объекта: модуль, содержащий в себе процедуры ввода, вывода и обработки данных, и программа, которая использует созданный нами модуль. Модуль - это автономно компилируемая программная единица, включающая в себя различные компоненты раздела описаний (типы, константы, переменные, процедуры и функции) и, возможно, некоторые исполняемые операторы инициирующей части. В модуле Турбо Паскаля явным образом выделяется некоторая «видимая» интерфейсная часть, в которой сконцентрированы описания глобальных типов, констант и переменных, а также приводятся заголовки глобальных процедур и функций. Появление объектов в интерфейсной части делает их доступными для других модулей и основной программы. Тела процедур и функций располагаются в исполняемой части модуля, которая может быть скрыта от пользователя. Модули представляют собой прекрасный инструмент для разработки библиотек прикладных программ и мощное средство модульного программирования. Важная особенность модулей заключается в том, что компилятор Турбо Паскаля размещает их программный код в отдельном сегменте памяти. Максимальная длина сегмента не может превышать 64 Кбайта, однако количество одновременно используемых модулей ограничивается лишь доступной памятью, что дает возможность создавать весьма крупные программы. 3.1. СТРУКТУРА МОДУЛЕЙ Модуль имеет следующую структуру: UNIT ; INTERFACE IMPLEMENTATION BEGIN END. Здесь UNIT - зарезервированное слово (единица); начинает заголовок модуля; - имя модуля (правильный идентификатор); INTERFACE - зарезервированное слово (интерфейс); начинает интерфейсную часть модуля; IMPLEMENTATION - зарезервированное слово (выполнение); начинает исполняемую часть; BEGIN - зарезервированное слово; начинает инициирующую часть модуля; конструкция BEGIN необязательна; END - зарезервированное слово - признак конца модуля. Таким образом, модуль состоит из заголовка и трех составных частей, любая из которых может быть пустой. 3.2. ЗАГОЛОВОК МОДУЛЯ И СВЯЗЬ МОДУЛЕЙ ДРУГ С ДРУГОМ Заголовок модуля состоит из зарезервированного слова UNIT и следующего за ним имени модуля. Для правильной работы среды Турбо Паскаля и возможности подключения средств, облегчающих разработку крупных программ (см. п.9.6), это имя должно совпадать с именем дискового файла, в который помещается исходный текст модуля. Если, например, имеем заголовок Unit Global; то исходный текст соответствующего модуля должен размещаться в дисковом файле GLOBAL.PAS. Имя модуля служит для его связи с другими модулями и основной программой. Эта связь устанавливается специальным предложением USES Здесь USES - зарезервированное слово (использует); - список модулей, с которыми устанавливается связь; элементами списка являются имена модулей, отделяемые друг от друга запятыми, например: Uses CRT, Graph, Global; Если объявление USES . используется, оно должно открывать раздел описаний основной программы. Модули могут использовать другие модули. Предложение USES в модулях может следовать либо сразу за зарезервированным словом INTERFACE, либо сразу за словом IMPLEMENTATION, либо, наконец, и там, и там (т.е. допускаются два предложения USES). 3.3. ИНТЕРФЕЙСНАЯ ЧАСТЬ Интерфейсная часть открывается зарезервированным словом INTERFACE. В этой части содержатся объявления всех глобальных объектов модуля (типов, констант, переменных и подпрограмм), которые должны стать доступными основной программе и/или другим модулям. При объявлении глобальных подпрограмм в интерфейсной части указывается только их заголовок, например: Unit Cmplx; Interface tуре complex = record re, im: real end; Procedure AddC (x, у : complex; var z : complex); Procedure MulC (x, у : complex; var z : complex); Если теперь в основной программе написать предложение Uses Cmplx; то в программе станут доступными тип COMPLEX и две процедуры - ADDC и MULC из модуля CMPLX Отметим, что объявление подпрограмм в интерфейсной части автоматически сопровождается их компиляцией с использованием дальней модели памяти (см. гл.8). Таким образом, обеспечивается доступ к подпрограммам из основной программы и других модулей. Следует учесть, что все константы и переменные, объявленные в интерфейсной части модуля, равно как и глобальные константы и переменные основной программы, помещаются компилятором Турбо Паскаля в общий сегмент данных (максимальная длина сегмента 65536 байт). Порядок появления различных разделов объявлений и их количество может быть произвольным. Если в интерфейсной части объявляются внешние подпрограммы или подпрограммы в машинных кодах (см. гл. И), их тела (т.е. зарезервированное слово EXTERNAL, в первом случае, и машинные коды вместе со словом INLINE - во втором) должны следовать сразу за их заголовками в исполняемой части модуля (не в интерфейсной!). В интерфейсной части модулей нельзя использовать опережающее описание. 3.4. ИСПОЛНЯЕМАЯ ЧАСТЬ Исполняемая часть начинается зарезервированным словом IMPLEMENTATION и содержит описания подпрограмм, объявленных в интерфейсной части. В ней могут объявляться локальные для модуля объекты - вспомогательные типы, константы, переменные и блоки, а также метки, если они используются в инициирующей части. Описанию подпрограммы, объявленной в интерфейсной части модуля, в исполняемой части должен предшествовать заголовок, в котором можно опускать список формальных переменных (и тип результата для функции), так как они уже описаны в интерфейсной части. Но если заголовок подпрограммы приводится в полном виде, т.е. со списком формальных параметров и объявлением результата, он должен совпадать с заголовком, объявленным в интерфейсной части, например: Unit Cmplx; Interface type complex = record re, im : real
end; Procedure AddC (x, у : complex; var z : complex); Implementation Procedure AddC; begin
z.re := x.re +Y.re; z.im := x.im +y.im end; end. Локальные переменные и константы, а также все программные коды, порожденные при компиляции модуля, помещаются в общий сегмент памяти. 3.5. ИНИЦИИРУЮЩАЯ ЧАСТЬ Инициирующая часть завершает модуль. Она может отсутствовать вместе с начинающим ее словом BEGIN или быть пустой - тогда за BEGIN сразу следует признак конца модуля (слово END и следующая за ним точка). В инициирующей части размещаются исполняемые операторы, содержащие некоторый фрагмент программы. Эти операторы исполняются до передачи управления основной программе и обычно используются для подготовки ее работы. Например, в них могут инициироваться переменные, открываться нужные файлы, устанавливаться связи с другими ПК по коммуникационным каналам и т.п.: Unit FileText; Interface Procedure Print(s : string); Implementation var f: text; const name = 'output.txt'; Procedure Print; begin WriteLn(f, s) end; { Начало инициирующей части: } begin assign(f, name); rewrite(f); { Конец инициирующей части } end. Не рекомендуется делать инициирующую часть пустой, лучше ее опустить: пустая часть содержит пустой оператор, которому будет передано управление при запуске программы. Это часто вызывает проблемы при разработке оверлейных программ (см. гл.11). 3.6. КОМПИЛЯЦИЯ МОДУЛЕЙ В среде Турбо Паскаля имеются средства, управляющие способом компиляции модулей и облегчающие разработку крупных программных проектов. В частности, определены три режима компиляции: COMPILE, MAKE и BUILD (см. прил.1). Режимы отличаются только способом связи компилируемого модуля или основной программы с другими модулями, объявленными в предложении USES, При компиляции модуля или основной программы в режиме COMPILE все упоминающиеся в предложении USES модули должны быть предварительно откомпилированы и результаты компиляции помещены в одноименные файлы с расширением TPU. Например, если в программе (модуле) имеется предложение Uses Global; то на диске в каталоге, объявленном опцией UNIT DIRECTORIES (см. прил.1), уже должен находиться файл GLOBAL.TPU. Файл с расширением TPU (от англ. Turbo Pascal Unit) создается автоматически в результате компиляции модуля (если основная программа может компилироваться без создания исполняемого ЕХЕ-файла, то компиляция модуля всегда приводит к созданию TPU-файла). В режиме МАКЕ компилятор проверяет наличие TPU-файлов для каждого объявленного модуля. Если какой-либо из файлов не обнаружен, система пытается отыскать одноименный файл с расширением PAS, т.е. файл с исходным текстом модуля, и, если искомый файл найден, приступает к его компиляции. Кроме того, в этом режиме система следит за возможными изменениями исходного текста любого используемого модуля. Если в PAS-файл (исходный текст модуля) внесены какие-либо изменения, то независимо от того, есть ли уже в каталоге соответствующий TPU-файл или нет, система осуществляет его компиляцию перед компиляцией основной программы. Более того, если изменения внесены в интерфейсную часть модуля, то будут перекомпилированы также и все другие модули, обращающиеся к нему. Режим МАКЕ, таким образом, существенно облегчает процесс разработки крупных программ с множеством модулей: программист избавляется от необходимости следить за соответствием существующих TPU-файлов их исходному тексту, так как система делает это автоматически. В режиме BUILD существующие TPU-файлы игнорируются, и система пытается отыскать (и компилировать) соответствующий РAS-файл для каждого объявленного в предложении USES модуля. После компиляции в режиме BUILD программист может быть уверен в том, что учтены все сделанные им изменения в любом из модулей. Подключение модулей к основной программе и их возможная компиляция осуществляются в порядке их объявления в предложении USES. При переходе к очередному модулю система предварительно отыскивает все модули, на которые он ссылается. Ссылки модулей друг на друга могут образовывать древовидную структуру любой сложности, однако запрещается явное или косвенное обращение модуля к самому себе. Например, недопустимы следующие объявления: Unit A; Unit В; Interface Interface Uses В; Uses А; . . Implementation Implementation . . end. end. Это ограничение можно обойти, если «спрятать» предложение USES в исполняемые части зависимых модулей: Unit A; Unit В; Interface Interface . . Implementation Implementation Uses B; Uses A; . end. end. Дело в том, что Турбо Паскаль разрешает ссылки на частично откомпилированные модули, что приблизительно соответствует опережающему описанию подпрограммы. Если интерфейсные части любых двух модулей независимы (это непременное условие!), Турбо Паскаль сможет идентифицировать все глобальные идентификаторы в каждом из модулей, после чего откомпилирует тела модулей обычным способом. 3.7. ДОСТУП К ОБЪЯВЛЕННЫМ В МОДУЛЕ ОБЪЕКТАМ Пусть, например, мы создаем модуль, реализующий арифметику комплексных чисел (такая арифметика ни в стандартном Паскале, ни в Турбо Паскале не предусмотрена). К сожалению, в Турбо Паскале нельзя использовать функции, значения которых имели бы структурированный тип (запись, например), поэтому арифметика комплексных чисел реализуется четырьмя процедурами: UNIT Cmplx; {---------------------} INTERFACE {---------------------} type complex = record re, im: real end; Procedure AddC(x, у: complex; var z: complex) ; Procedure SubC(x, у: complex; var z: complex) ; Procedure MulC(x, у: complex; var z: complex) ; Procedure DivC(x, у: complex; var z: complex) ; Const с : complex =(re :0.1; im :-1); {---------------------} IMPLEMENTATION {---------------------} Procedure AddC; begin z.re := x.re + y.re; z . im := x.im + y. im end {AddC}; Procedure SubC; begin z.re := x.re - y. re ; z.im := x.im - y.im end {SubC}; Procedure MulC; begin z.re := x.re*y.re - x.im*y. im; z.im := x.re*у.im + x.im*y.re end {MulC}; Procedure DivC; var zz : real; begin zz := sqr(y.re) + sqr(y.im); z. re := (x.re * y.re + x.im * y.im) / zz; z.im := (x.re * y.im - x.im * y.re) / zz end {DivC}; end. Текст этого модуля следует поместить в файл CMPLX.PAS. Вы можете его откомпилировать, создав TPU-файл, после чего Вашей программе станут доступны процедуры из новой библиотеки. Например, в следующей программе (пример 1) осуществляются четыре арифметические операции над парой комплексных чисел. Пример 1 Uses Cmplx; var а, Ь, с : complex; begin a.re := 1; a.im := 1; b.re := 1; b.im := 2; AddC(a, b, c); WriteLn('Сложение: 'c.re:5:1, c.im:5:1,'i') ; SubC(a, b, c) ; WriteLn('Вычитание: 'с.re:5:1, с.im:5:1,'i');
MulC(a, b, c); WriteLn('Умножение: 'c.re:5:1, c.im:5:l,'i') ; DivC(a, b, c); WriteLn('Деление: 'c.re:5:l, с.im:5:1,'i'); end.
После объявления Uses Cmplx программе стали доступны все объекты, объявленные в интерфейсной части модуля CMPLX. При необходимости можно переопределить любой их этих объектов, как это произошло, например, с объявленной в модуле типизированной константой С. Переопределение объекта означает, что вновь объявленный объект «закрывает» ранее определенный в модуле одноименный объект. Чтобы получить доступ к «закрытому» объекту, нужно воспользоваться составным именем: перед именем объекта поставить имя модуля и точку. Например, оператор WriteLn(cmplx.c.re:5:l, cmplx.с.im:5:1,'i'); выведет на экран содержимое «закрытой» типизированной константы из предыдущего примера. 3.8. СТАНДАРТНЫЕ МОДУЛИ В Турбо Паскале имеется восемь стандартных модулей, в которых содержится большое число разнообразных типов, констант, процедур и функций. Этими модулями являются SYSTEM, DOS, CRT, PRINTER, GRAPH, OVERLAY, TURBOS и GRAPH3. Модули GRAPH, TURBOS и GRAPHS выделены в отдельные TPU-файлы, а остальные входят в состав библиотечного файла TURBO.TPL. Лишь один модуль SYSTEM подключается к любой программе автоматически, все остальные становятся доступны только после указания их имен в списке, следующем за словом USES. Ниже приводится краткая характеристика стандартных модулей. Полное описание входящих в них программных средств приведено в прил.4, а описанию объектно-ориентированной библиотеки Turbo Vision посвящена вся вторая часть книги. Модуль SYSTEM. В него входят все процедуры и функции стандартного Паскаля, а также встроенные процедуры и функции, которые не вошли в другие стандартные модули (например, INC, DEC, GETDIR и т.п.). Как уже отмечалось, модуль SYSTEM подключается к любой программе независимо от того, объявлен ли он в предложении USES или нет, поэтому его глобальные константы, переменные и подпрограммы считаются встроенными в Турбо Паскаль. Модуль PRINTER. Делает доступным вывод текстов на матричный принтер. В нем определяется файловая переменная LST типа TEXT, которая связывается с логическим устройством PRN. После подключения модуля может быть выполнена, например, такая программа: Uses Printer; begin writeln (LST, 'Турбо Паскаль') end. Модуль CRT. В нем сосредоточены процедуры и функции, обеспечивающие управление текстовым режимом работы экрана. С помощью входящих в модуль подпрограмм можно перемещать курсор в произвольную позицию экрана, менять цвет выводимых символов и окружающего их фона, создавать окна. Кроме того, в модуль включены также процедуры «слепого» чтения клавиатуры и управления звуком. Модуль GRAPH. Содержит обширный набор типов, констант, процедур и функций для управления графическим режимом работы экрана. С помощью подпрограмм, входящих в модуль GRAPH, можно создавать разнообразные графические изображения и выводить на экран текстовые надписи стандартными или разработанными программистом шрифтами. Подпрограммы модуля GRAPH после соответствующей настройки могут поддерживать различные типы аппаратных графических средств. Настройка на имеющиеся в распоряжении программиста технические средства графики осуществляется специальными программами - драйверами, которые не входят в файл GRAPH. TPU, но поставляются вместе с ним. Модуль DOS. В модуле собраны процедуры и функции, открывающие доступ программам к средствам дисковой операционной системы MS- DOS. Модуль OVERLAY. Он необходим при разработке громоздких программ с перекрытиями. Как уже говорилось, Турбо Паскаль обеспечивает создание программ, длина которых ограничивается лишь основной оперативной памятью ПК. Операционная система MS-DOS оставляет исполняемой программе около 580 Кбайт основной памяти (без учета резидентных программ и самой системы Турбо Паскаль). Память такого размера достаточна для большинства применений, тем не менее, использование программ с перекрытиями снимает это ограничение. 4.МОДУЛЬ VVOD Созданный нами модуль представляет собой следующий набор процедур: · 3 процедуры ввода информации procedure vdecan(nazdecan:string; var z:jurn); procedure vkafed(nazkafed:string; var z:jurn); procedure vfio(nazfio:string; var z:jurn); procedure vlekc(nazlekc:string; var z:jurn); procedure vlab(nazlab:string; var z:jurn); · Процедура вывода на экран информации procedure pechat(var z:jurn); · Процедура обработки данных procedure zamenit(var z:jurn); Рассмотрим подробней каждую из процедур 4.1 ПРОЦЕДУРАVDEC procedure vdecan; begin writeln('Декан:'); readln(nazdecan); repeat nazdecan:=nazdecan+' '; until length(nazdecan)>9 ; z.decan:='| '+nazdecan; write(fdecan,z.decan); end; {vdecan} Процедура приглашает пользователя вести имя преподавателя, считывает эту информацию и присваивает значение переменной nazdecan. Далее удлиняем строку до 9 символов для табличного отображения информации при последующем использовании процедуры pechat. После удлинения строки информация записывается в файл. Оставшиеся процедуры аналогичны процедуре vdecan лишь с тем отличием, что записи данных производятся в другие файлы. 4.2 ПРОЦЕДУРА PECHAT procedure pechat; begin reset(fkafed);reset(fdecan);reset(ffio);reset(flekc);reset(flab); read(fdecan,z.decan); read(fkafed,z.kafed); read(ffio,z.fio); read(flekc,z.lekc); read(flab,z.lab); textcolor(lightblue); {clrscr;} writeln(z.decan);writeln(z.kafed);writeln(z.fio);writeln(z.lekc);writeln(z.lab); textcolor(white); end; Процедура ставит курсор в начало всех файлов, для этого мы использовали процедуру RESET, далее из каждого файла считывается необходимая информация и выводится на экран голубым цветом. 4.3 ПРОЦЕДУРА ZAMENIT procedure zamenit; var zamgde,zamcto,zamcem:string; j,l,gde:integer; begin writeln('где заменить? если декан - 1, кафедра - 2, фамилия - 3, лекции - 4, лаборатрные - 5'); readln(gde); writeln('======== слово которое надо заменить======='); readln(zamcto); writeln('========== чем заменить=========='); readln(zamcem); case gde of 1: zamgde:=z.decan; 2: zamgde:=z.kafed; 3: zamgde:=z.fio; 4: zamgde:=z.lekc; 5: zamgde:=z.lab; end; begin l:=Length(zamcto);{узнаем длину слова которое надо заменить} j:=pos(zamcto,zamgde);{ищем это слово в строке} if j=0 then begin textcolor(red); writeln; writeln('==============Повторите попытку, вы ошиблись================='); end else begin delete(zamgde,j,l); insert(zamcem,zamgde,j); case gde of 1: begin z.decan:=zamgde; rewrite(fdecan); write(fdecan,z.decan); end; 2: begin z.kafed:=zamgde; rewrite(fkafed); write(fkafed,z.kafed); end; 3: begin z.fio:=zamgde; rewrite(ffio); write(ffio,z.fio); end;
4: begin z.lekc:=zamgde; rewrite(flekc); write(flekc,z.lekc); end; 5: begin z.lab:=zamgde; rewrite(flab); write(flab,z.lab); end; end; end; end;
end; end. Процедура использует 3 переменных типа String: zamgde, zamcto, zamcem; и 3 переменные типа integer: j,l,gde. Процедура задает вопросы пользователю, что, где и чем заменить, ответы присваиваются, соответственно, переменным: zamgde, zamcto, zamcem. Если пользователь введет неверную информацию, то программа либо выключится, либо выдаст сообщение «===ТАКОГО НЕТ===», если информация будет верна, то произойдет замена: из строки будет вырезано необходимое слово и вставлено новое. После всех изменений исправленная строка будет, обратно, записана в файл. 5. ПРОГРАММА, ИСПОЛЬЗУЮЩАЯ ЭТОТ МОДУЛЬ. Рассмотрим код программы EXAMPLE, использующей процедуры из данного модуля. program exaple; uses vvod,crt; label 1 ,2; var decan,kafed,fioar,lekc,lab:string; z:jurn; vop:string; vop1,vop2:integer; begin clrscr; assign(fdecan,'decan.txt'); assign(fkafed,'kafed.txt'); assign(ffio,'fioar.txt'); assign(flekc,'lekc.txt'); assign(flab,'lab.txt'); writeln('если продолжить то 1, заново 2'); readln(vop1); {начало case} case vop1 of 1:begin append(fkafed);append(fdecan);append(ffio);append(flekc);append(flab); pechat(z); append(fkafed);append(fdecan);append(ffio);append(flekc);append(flab); writeln('что вы хотите сделать? Если исправить то 1 если добавить то 2'); readln(vop2); if vop2=1 then goto 1 else goto 2; end; 2:{3}begin rewrite(fkafed);rewrite(fdecan);rewrite(ffio);rewrite(flekc);rewrite(flab); clrscr; end;{3} end; 2:repeat begin vdecan(decan, z); vkafed(kafed, z); vfio(fioar, z); vlekc(lekc, z); vlab(lab, z); writeln('если вы закончили нажмите ESC, если нет то ENTER'); end; until readkey=#27; pechat(z); writeln('выйти (y/n)'); readln(vop); if vop='y' then halt {если получаемответ да то выход, если нет то продолжаем} else begin 1:repeat begin zamenit(z); pechat(z); writeln('если вы закочили нажмити ESC'); end; until readkey=#27; end; end. Программа создает файлы под названием decan.txt, kafed.txt, lab.txt, lekc.txt, fioar.txt в которых, соответственно хранится информация о декане, кафедре, лабораторных, лекциях, фамилии преподавателя. Программа задает вопрос пользователю, что, но хочет сделать: либо продолжить, либо начать заново. Если пользователю необходимо продолжить то запускается процедура PECHAT после, которой пользователю снова задается вопрос либо исправить и тогда запускается процедура ZAMENIT, либо добавить, тогда процедуры vdecan, vlab, vfio, vlekc, vkafed. Если же пользователю нужно добавить информацию, то после нажатия кнопки «2» сразу запустятся эти процедуры и произойдет перезапись информации в файл. 6. ЗАКЛЮЧЕНИЕ В ходе этой работы нами была создана элементарная реляционная база данных, представляющая собой журнал загруженности лекциями и лабораторными работами различных преподавателей. Эта программа была написана на языке TURBO PASKAL, в основе ее работы лежит модуль VVOD, написанный нами на том же языке. Это модуль содержит в себе набор процедур для ввода, вывода и обработки данных. Эту программу можно использовать как диспетчер загруженность преподавателей в университете или в других учебных заведениях.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.