суббота, 17 октября 2015 г.

Контрольная работа 2015 г. для курса "Программирование ЯВУ"



Методические указания к выполнению контрольной работы по курсу «Программирование на языках высокого уровня» для специальности ИСТ заочной формы обучения

1. Общие указания


Целью контрольной работы (КР) по курсу «Программирование на языках высокого уровня» является ознакомление студентов с процедурой программирования с использованием необходимого системного программного обеспечения – компиляторов, загрузчиков, отладчиков. В качестве языка программирования используется язык Си, для которого имеется большое количество свободно-распространяемых инструментальных средств, к которым в первую очередь относятся компилятор gcc и отладчик gdb. Для проверки созданной программы и получения практических навыков необходимо установить и использовать системное программное обеспечение, позволяющее многократно выполнять процессы компиляции, сборки и отладки программных текстов на Си. Лучшим выбором является использование операционной среды ОС семейства Linux (версия дистрибутива значения не имеет, поскольку работы лучше выполнять в консольном режиме). При отсутствии навыков работы в ОС этого семейства можно использовать для среды Windows некоммерческую версию свободной оболочки Dev-C++. Использование каких-либо версий и вариантов на основе Microsoft Visual Studio является нежелательным.

2. Порядок выполнения контрольной работы.


Перед началом выполнения КР следует получить общее представление о структуре программ на языке Си, используемых типах данных, основных операциях, выполняемых над ними, операторах управления потоком выполнения и подключаемых библиотеках общесистемных функций и функций ввода – вывода. Для этого можно использовать любой учебник по классическому языку, например [ 1 ]. Для этих же целей можно порекомендовать Интернет-ресурс дистанционного образования [ 2 ].
Далее следует разработать алгоритм программы, решающий оставленную задачу и записать его в псевдо-алгоритмической или графической форме. В алгоритме необходимо предусмотреть ситуацию обработки возможных ошибок пользователя. Реализацию алгоритма на языке следует выполнить в двух вариантах – одно- и много-файлового модуля.
При работе над текстом следует обратить внимание на правильное описание типов данных, при этом полезно выполнять компиляцию отдельных частей программы (без сборки и выполнения) для обнаружения ошибок синтаксиса языка. В среде Linux большую помощь может оказать система помощи man-pages.
Добившись отсутствия синтаксических ошибок, программу следует выполнить под управлением отладчика, проверяя правильность присвоения значений основным переменным и соответствие числа повторений циклов запланированным значениям.
Полученные результаты и выполненные действия необходимо описать в свободной форме, при этом следует привести тексты на языке, команды компиляции, сборки и отладки с необходимыми опциями, листинги вывода.

3. Требования к оформлению.


КР должна быть оформлена печатным способом на листах формата А4 в любом текстовом редакторе шрифтом с кеглем 12 – 14 пунктов. На титульном листе следует указать название КР, автора-исполнителя и преподавателя, принимающего работу. Остальные листы должны содержать описание выполненных действий, результаты выполнения, ссылки на использованные источники. При необходимости можно добавлять скриншоты и распечатки.

4. Варианты заданий.


Все варианты заданий представляют собой примеры алгоритмов работы с данными агрегатного типа – массивами. Каждая задача должна быть решена двумя способами – с использованием классических массивов и с использованием указателей. Содержание вариантов приведено в таблице 1

Таблица 1.
Вариант
Задание
1
Найти наибольший и наименьший элементы заданного массива
2
Найти наибольший и наименьший элементы массива заданной длины, вводимого с клавиатуры
3
Отсортировать по убыванию заданный массив
4
Отсортировать по убыванию массив заданной длины, вводимый с клавиатуры
5
Отсортировать по возрастанию заданный массив
6
Отсортировать по возрастанию массив заданной длины, вводимый с клавиатуры
7
Объединить два заданных массива так, чтобы элементы нового массива были упорядочены по возрастанию
8
Объединить два заданных массива так, чтобы элементы нового массива были упорядочены по убыванию
9
Объединить два массива, вводимых с клавиатуры так, чтобы элементы нового массива были упорядочены по возрастанию
10
Объединить два массива, вводимых с клавиатуры так, чтобы элементы нового массива были упорядочены по убыванию
11
Найти наибольший и наименьший элементы массива, заданного в файле
12
Отсортировать по убыванию массив, заданный в виде файла
13
Отсортировать по возрастанию массив, заданный в виде файла
14
Объединить два массива, заданных в файлах так, чтобы элементы нового массива были упорядочены по возрастанию
15
Объединить два массива, заданных в файлах так, чтобы элементы нового массива были упорядочены по убыванию
16
Преобразовать заданный массив так, чтобы его элементы оказались расположенными в обратном порядке
17
Преобразовать массив, заданный в виде файла так, чтобы его элементы оказались расположенными в обратном порядке
18
Преобразовать файл, содержащий числовой массив, так, чтобы в преобразованном файле числа оказались расположенными в порядке убывания
19
Преобразовать файл, содержащий числовой массив, так, чтобы в преобразованном файле числа оказались расположенными в порядке возрастания
20
Упорядочить заданный текстовый файл в лексико-графическом (алфавитном) порядке

5. Литература.

1. Брайан Керниган, Деннис Ритчи: Язык программирования Си.

2. http://www.intuit.ru/studies/courses/43/43/info

пятница, 25 января 2013 г.

Программирование Си (технология программирования на ЯВУ)

Запись на курс.
Раздел: Программирование
Подраздел: языки и системы пограммирования
Курс: Основы программирования на языке Си. Уровень - для начинающих, статус - бесплатный, опубликован 26.08.2005, авторы  - Калинина и Костюкова ( курс ничего особенного, но для начала сгодится)

Литература


 Брайан Керниган, Деннис Ритчи: Язык программирования C  (культовая книга  по программированию на языке Си)

Рекомендация: установить на своем ПК любой Linux и выполнять все задания и примеры с помощью компилятора gcc . Различные VisuaStudio от M$ ориентированы на С++ и, хотя "чистый" Си "понимают",  но прячут от пользователя процесс обработки, а в этом курсе главное - не программировать, а понимать. Цель - не прикладное, а системное программирование.

 Темы, выносимые на экзамен.
  1. Программирование на языках высокого уровня и требуемое для этого ПО.
  2. Общая структура программы на языке Си.
  3. Назначение и использование комментариев.
  4. Идентификаторы в Си-программах. Запись в «венгерской» нотации.
  5. Использование служебных слов в языке Си.
  6. Типы констант, поддерживаемых в языке Си.
  7. Общая схема типов данных в языке Си.
  8. Сегментная схема размещения Си-программ в оперативной памяти. Модели памяти, поддерживаемые компиляторами языка.
  9. Понятие класса хранения данных. Характеристики класса – область действия (видимости) и время жизни.
  10. Внешний и локальный классы хранения данных Класс хранения для функций в языке Си.
  11. Объявление (описание) и определение объекта. Отличие определения и описания.
  12. Инициализация данных при их определении в языке Си.
  13. Агрегатный тип данных – массивы и структуры. Определение и инициализация.
  14. Многомерные массивы, передача параметра-массива при вызове функции.
  15. Тип данных – структура, обращений к элементам структуры.
  16. Тип данных  - указатель в языке Си, инициализация, указатель на структуру и обращение к элементам структуры с помощью указателя.
  17. Группа операций ссылки.
  18. Категория унарных операций. Особенности операции логического отрицания (!).
  19. Операции инкремент и декремент. Постфиксная и префиксная запись.
  20. Бинарные операции. Старшинство операций.
  21. Операция присваивания и ее сокращенная запись.
  22. Назначение препроцессора компилятора. Директивы препроцессорной обработки. Применение директив включения, директив макроподстановки, директив условной компиляции.
  23. Организация ввода-вывода в языке Си. ПО, необходимое для использования функций файлового обмена.
  24. Организация доступа к данным файла при вводе-выводе. Открытие и закрытие файла.
  25. Функции файлового ввода- вывода при символьном обмене,. обмене форматированными полями, при строчном обмене, при обмене блоками фиксированной длины
  26. Функции ввода-вывода системного уровня.
 

пятница, 21 декабря 2012 г.

Операционные системы (ОС)

Запись на курс.
Раздел: Операционные системы
Курс: Основы операционных систем. Уровень - для специалистов, статус - бесплатный, опубликован 24.08.2004, авторы  - К.А. Коньков и В.Е. Карпов ( не перепутайте и не запишитесь на видео-курс с таким же названием, видео - это ерунда :-))

Литература

  •  Дейтел Г. Введение в операционные системы М.: Мир, 1987 - простенько, но со вкусом :-)
  • Столлингс В. Операционные системы М.: Вильямс, 2001- хорошая серьезная книга
  • Таненбаум Э. Современные операционные системы СПб.: Издательский дом Питер, 2002 - энциклопедия или претендует на то, чтобы быть ею, но, конечно, круто :-)
  • Робачевский А. Операционная система UNIX  Спб.: BHV, 1999 - очень хорошо, и не только про Юникс
  • Цикритис Д., Бернстайн Ф. Операционные системы М.: Мир. 1977 - а это - первооснова всех учебников, у них все "списывали", только где же ее найдешь?
 Темы, выносимые на экзамен.
 

1.        Назначение операционных систем и их основные функции с системной и пользовательской точек зрения.
2.        Принципы построения ОС.
3.        Основные понятия операционных систем: процесс как основной объект ОС, понятие ресурса в ОС и принцип виртуализации в построении ОС..
4.        Модель процесса в операционной системе. Блок управления процессом, его структура и назначение. Механизм управления процессами с помощью прерываний.
5.        Двухуровневая схема управления процессами в мультипрограммной ОС. Управление на основе схемы компиляции и интерпретации.
6.        Параллельные процессы, критические участки и примитивы взаимоисключения. Алгоритмы Деккера и семафоры Дейкстры.
7.        Структура процесса в UNIX. Контекст процесса. Основные состояния процесса в UNIX. Порождение процессов.
8.        Функции операционной системы по управлению ресурсом памяти. Распределение памяти одним непрерывным разделом, несколькими разделами с фиксированными и переменными границами.
9.        Организация виртуальной памяти. Страничное, сегментное и комбинированное распределения.
10.     Файловая  система ОС. Назначение и основные функции. Имена и типы файлов. Каталоги. Логическая и физическая организация файла.
11.     Современные архитектуры организации файловых систем ОС.
12.     Подсистема ввода-вывода. Физическая организация  и организация ПО : обработка прерываний, драйверы, системная и пользовательская части подсистемы ввода-вывода.

 

четверг, 20 декабря 2012 г.

Системное программное обеспечение (СПО)


Запись на курс.
Раздел - операционные системы
Курс: Основы операционных систем. Практикум.

Уровень: для специалистов || Статус: бесплатный || Опубликован: 16.09.2004
- необходимо проработать и сдать первые шесть занятий , это - материал для практических занятий в сессию. К сожалению, по теоретической части курса на "Интуите" я ничего не нашел, а самому написать ... :-((( Поэтому будем надеяться на сессию. 



Литература



 Л. Бек Введение в системное программирование. М, Мир 1988
 ( Монография учебного характера, написанная толковым специалистом. В ней изложены все основные компоненты системного программного обеспечения. Особое внимание уделено их взаимосвязи с архитектурой вычислительных комплексов. Конкретные реализации компонентов обсуждаются на примере трех современных ( 1988-му году – прим. мое) вычислительных систем: IBM/370, VAX, CYBER . Книга есть в I-net-е )





 Темы, выносимые на экзамен.
  1. Классификация систем программирования. Основные характеристики машинно-ориентированной СП.
  2. Пример характеристик машинно-ориентированной системы программирования для учебной машины.
  3. Относительный, индексный, базовый, косвенный и непосредственный методы адресации памяти в машинно-ориентированных СП и их назначение.
  4. Общая характеристика языка Ассемблера. Команды Ассемблера и директивы ассемблирования.
  5. Постановка задачи проектирования ассемблера, формат объектного модуля
  6. Структуры данных и алгоритмы первого и второго прохода двухпроходного ассемблера
  7. Постановка задачи проектирования специализированного системного ПО – загрузчиков. Виды загрузки.
  8. Задачи управления загрузкой и соответствующие им директивы
  9. Назначение и способ организации оверлейной, динамической и раскручивающей загрузки.
  10. Первоначальная загрузка ОС в ЭВМ с архитектурой IBM PC
  11. Логическая схема компилятора языка высокого уровня (ЯВУ).
  12. Формальная грамматика ЯВУ, ее структура и описание. Деревья грамматического разбора.
  13. Задача лексического анализа программы на ЯВУ. Сканирование и внутреннее представление
  14. Задача синтаксического анализа программы на ЯВУ. Восходящие и нисходящие методы.
  15. Схемы обработки программ на ЯВУ на основе компиляции и интерпретации. Р-код.



Методические указания к выполнению контрольной работы по курсу «Системное программное обеспечение»

1. Цели и задачи.
 Целью контрольной работы является знакомство с системным программированием на уровне машинных команд и языка ассемблера. В качестве примера машинно-ориентированной системы программирования (МО СП) взята система учебной упрощенной машины (УУМ), описаннная в книге Л.Бека «Системное программирование».
Содержанием контрольной работы является составление программы на языке ассемблера УУМ и ручное ассемблирование ее на уровень машинных команд УУМ.

2. Описание процессора УУМ.
В соответствии с правилами описания МО СП приведем следующие ее характеристики:
1.      1.Память – байтовая, 1 машинное слово состоит из 3 байт, адресация слов – по номеру младшего байта.
2.      Регистры общего назначения –аккумулятор А, индексный регистр Х, регистр связи L, программный счетчик РС. Условное изображение процессора приведено на рис.1
3.      Типы данных – 24-разрядные двоичные целые и 1-байтовые символьные (в ASCII-коде)
4.      Структура команд. Команда занимает 1 слово (24 разряда), все команды относятся к типу RM (регистр  - память), во всех операциях в качестве операционного регистра используется регистр А, в котором сохраняется результат выполненной операции. Формат команды и схема адресации памяти (установка эффективного адреса ЕА приведены на рис.2.


CPU
A
SW                   CC
L
PC
X
Р Адреса
Р Данных
Р Команд
Рис.1. Логическая структура процессора УУМ.

Команда УУМ

8
1
7
8
Код операции
x
Адресная часть addr
EA = addr при х=0                 прямая адресация
EA = addr + < X > при х=1   индексная адресация
Рис.2. Формат команды МО СП УУМ.

Система команд учебной упрощенной машины имеет следующий вид:
Мнемоника   код     Смысл (что делает)
ADD  m           18        A:=(A) + (m .. m+2)
AND   m         40        A:=(A) & (m .. m+2)
COMP  m       28        A : (m .. m+2), set CC
DIV  m            24        A:=(A) / (m .. m+2)
  J      m           3C       PC:= m
JEQ  m            30        PC:= m  if  CC set to =
JGT  m 34        PC:= m  if  CC set to >
JLT  m             38        PC:= m  if  CC set to <
JSUB  m          48        (L) := m, PC:= m
LDA  m           00        A:= (m .. m+2)
LDCH  m        50        A[ мл.байт ]:= (m )
LDL  m            08        L:= (m .. m+2)
LDX  m           04        X:= (m .. m+2)
MUL  m          20        A:=(A) * (m .. m+2)
OR   m             44        A:=(A) | (m .. m+2)
RD  m              D8       A[ мл.байт ] := 1 байт с устройства m
RSUB              4C       PC := (L)
STA  m            0C       (m .. m+2):=(A[ мл.байт ])
STCH  m         54        (m ):=(A)
STL  m            14        (m .. m+2):=(L)
STX  m            10        (m .. m+2):=(X)
SUB  m           1C       A:=(A) - (m .. m+2)
TD  m              E0        Установить СС для устройства m
WD  m            DC      A[ мл.байт ] => на устройство m


3. Описание языка ассемблера УУМ.

Формат команды ассемблера   МЕТКА ОПЕРАЦИЯ ОПЕРАНД КОММЕНТАРИЙ

Директивы ассемблирования

START А-начала
END А-точки-входа
WORD число
BYTE `последовательность
RESW число
RESB  число
`
4. Пример программы на языке ассемблера УУМ.

Программа выполняет сложение двух целых чисел, 1 и 2, размещенных в оперативной памяти (ОЗУ)  В таблице 1 приведены команды ассемблера и столбцы для кодов машинных команд. В таблицах SYMTAB (символьных имен) и MOTAB (машинных команд) приведены используемые в примере данные.
Таблица 1. Программа и коды при ручном ассемблировании (заготовка)
Метка
Команда
Операнд
Длина
LC
КОП
Addr

SUMMA
START
100
0
100
-
-
-
ENTRY
STL
RETADR
3
100




LDA
FIRST
3
103




ADD
SECONND
…
…




STA
SUMM






LDL
RETADR






RSUB






FIRST
WORD
1





SECOND
WORD
2





SUMM
RESW
1





RETADR
RESW
1






END
ENTRY






Таблица SYMTAB                                                                    Таблица MOTAB

Имя
Адрес

Мнемоника
КОП
Длина
SUMMA
100

ADD
18
3
ENTRY


LDA
00
3
FIRST


LDL
08
3
SECOND


STA
0C
3
SUMM


STL
14
3
RETADR


RSUB
4C
3

5. Объектный файл.

Объектный файл представляет собой файл, содержащий машинные коды и информацию для загрузчика, на основании которой загрузчик сможет разместить коды в ОЗУ. Объектные файлы в различных системах программирования имеют различный вид. В МО СП УУМ объектный файл в простейшем случае содержит записи трех типов, Н(запись-заголовок), Т (запись, содержащая машинный код) и Е (конечная завершающая запись). Форматы этих записей имеют следующий вид.
H^Имя-программы^А-начала^Длина
Т^А-загрузки^Длина-записи^Коды
Е^Адрес-точки-входа
  
Для рассмотренного ранее примера объектный файл запишется следующим образом.
Н^SUMMA^100^1E
T^100^F^14 01 1B 00 01 12 18 01 15 0C 01 18 08 01 1B
T^10F^9^4C 00 00 00 00 01 00 00 02
E^100

6. Задание для контрольной работы.

В ходе выполнения контрольной работы необходимо составить 2 программы на языке ассемблера, выполнить из ассемблирование вручную и составить соответствующие объектные файлы.
Первая программа описывает вычисление простого выражения с помощью арифметических операций над 2 – 3 переменными, хранимыми в ОЗУ, туда же помещается и результат вычислений. При выполнении этой части контрольной работы следует использовать в качестве образца формы записи, приведенные в пример.
Вторая программа описывает работу с массивами, т.е. данными, расположенными в памяти регулярным образом. При работе с такими данными следует использовать циклические алгоритмы (с командами передачи управления) и индексный способ адресации данных. Предполагается, что все массивы располагаются в ОЗУ и содержат N элементов.

7. Описание вариантов заданий.

Вариант
Первая задача
Вторая задача
1
Х = (а + в )/(а - в)
Найти среднее арифметическое для элементов массива, N= 10
2
Х = (а - в )*(а + в)
Найти наибольший из элементов массива, N= 10
3
Х = (а + в )*(а - в)
Найти наименьший из элементов массива, N= 10
4
Х = (а - в )/(а + в)
Найти наибольший и наименьший из элементов массива, N= 10
5
Х = (а - в )*(2*а * в)
Найти наибольший из элементов массива, N= 15
6
Х = (а + в )/( 2*а * в)
Найти средне значение элементов массива, N= 15
7
Х = (а - в  + с )/ 3
Создать массив, элементы которого являются суммами соответствующих элементов двух других массивов,  N= 10
8
Х = (а + в+ с )*(а +-в)
Создать массив, элементы которого являются разностями соответствующих элементов двух других массивов,  N= 10
9
Х = (а + в+ с)*(а - в)
Создать массив, элементы которого являются произведениями соответствующих элементов двух других массивов,  N= 10
10
Х = (а - в )*( а + в+ с)
Создать массив, элементы которого являются отношениями соответствующих элементов двух других массивов,  N= 10
11
Х = (а - в )*(2*а )
Создать массив, элементы которого являются числами натурального ряда, начиная с 1,  N= 10
12
Х = 2*а * (а - в )
Создать массив, элементы которого являются членами арифметической прогрессии с первым элементом 1 и знаменателем 3,  N= 10
13
Х = 2*а * ( а + в )
Создать массив, элементы которого являются членами геометрической  прогрессии с первым элементом 1 и знаменателем 3,  N= 10
14
Х = (а - в )^2 (возведение в степень)
Создать массив, элементы которого являются членами ряда Фибоначчи с первыми двумя элементами 1 и 1,  N= 10
15
Х = (а +в)^2 (возведение в степень)
Создать массив, элементы которого являются членами ряда Фибоначчи с первыми двумя элементами 1 и 2,  N= 10


6. Рекомендуемые учебные материалы.

1.      Л. Бек Введение в системное программирование. М, Мир 1988.
2.      http://www.mva-zo-it.blogspot.ru/2012/12/blog-post_20.html.