Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Programmirovanie_i_osnovyi_algo

.pdf
Скачиваний:
10
Добавлен:
05.03.2016
Размер:
9.5 Mб
Скачать

Файл TASK02.H

Включаемый файл для проекта TASK02.PRJ: содержит стандартные включаемые файлы и прототипы функций.

// предотвращение многократного включения данного файла #ifndef TASK02__H

^define

TASK02_H

 

 

 

^include

<stdio.h>

//

Для функций

ввода-вывода

^include

<stdlib.h>

//

Для функции

exit

//Прото типы функций

void.

ReadData ( float

&Length,

float

&Width

);

void

WriteDat(

float

Length,

float

Width );

 

void.

Area ( float

Length,

float

Width, float

&Square )

void

WriteRes(

float

Square );

 

 

#endif

// Конец

файла TASK02.H

 

Файл TASK02_1.CPP

Чтение исходных данных из файла TASK02.DAT. Используется в

поограммном проекте TASK02.PRJ

V

// Стандартные включаемые файлы и прототипы функций

^include

"task02,h"

 

 

 

void ReadData(

 

 

 

float

&Lenght,

//

Длина садового

участка

float

&Width )

//

Ширина садового

участка

{

*f__in;

//

Указатель на структуру со

FILE

IIсведениями о файле для чтения

//Открываем файл для ввода

±f( ( f_in

= fopen( "task02.dat",

"г" ; ; =- NULL )

{

 

 

printf(

"\n Ошибка 10. Файл task02,dat для чтения не"

 

" открыт \п" ) ;

 

exit ( 10 ) ;

 

}

//Читаем данные

±f(

fscanf(

f__in, " %f %f", &Lenght,

&Width ) != 2 )

(

printf(

"\n Ошибка 20. Произошла ошибка чтения из"

 

 

 

" файла task02.dat \п"

);

 

exit ( 20 );

 

}

 

 

 

//

Закрываем файл для чтения

 

430

±f( fclose ( f_in ) == EOF )

{

printf( "\n Ошибка 30. Файл task02.dat не " "закрыт \n" ) ;

exit ( 30 );

}

iretuirn/

/ / Конец файла TASK02_1.CPP

/*

Файл TASK02 2.CPP

Печать исходных данных в файл TASK02.RES. Используется в программном проекте TASK02.PRJ

// Стандартные включаемые файлы и прототипы функций

^Include

"task02.h"

 

 

 

void WrlteDat(

 

 

 

float

Lenght^

//

Длина садового

участка

float

Width )

//

Ширина садового

участка

(

 

 

 

 

FILE

*f_out/

//

Указатель на структуру со

//сведениями о файле для записи

//Открываем файл для записи и печатаем исходные данные

±f(

( f_out

= fopen( "task02.res", "w" ) )

== NULL )

{

printf(

"\n Ошибка 40. Файл task02.res

для записи не"

 

 

 

 

"

открыт \п" );

 

 

}

exit

( 4 0

);

 

 

 

 

 

 

 

 

 

 

fprlntf (

f_OUtr

 

 

 

"\n

Вычисление площади садового участка

\п"

"\п

 

Длина садового

участка: %д

 

"

"\п

 

Ширина садового

участка: %д'\ Lenght,

Width );

//Закрываем файл для вывода

if( fclose(

f_out

)

== EOF )

{

 

 

 

prlntfi

"\n Ошибка 50. Файл task02.res не "

 

"закрыт \n" ) /

exit ( 50 ) ;

 

 

}

 

 

 

return/

 

 

 

}

//

Конец файла TASK02 2.GPP

Файл TASK02_3.CPP

 

Вычисление

плош,ади

прямоугольника. Используется в про-

граммном проекте TASK02.PRJ

431

// Стандартные включаемые

 

файлы и

прототипы

функций

iinclude

"task02.h"

 

 

 

 

 

 

void.

Area

(

 

 

//

Длина

садового

 

участка

float

Lenght,

 

 

float

Widths

)

//

Ширина

садового

 

участка

float

& Square

//

Площадь садового

участка

{

 

 

 

 

 

 

 

 

 

//

Вычисление

площади

садового

участка

 

Square

= Lenght

*

Width;

 

 

 

 

retxum;

 

 

 

 

 

 

 

 

}

 

 

 

 

//

Конец

файла

TASK02_3.CPP

__

Файл

TASK02_4.CPP

в

файл

TASK02. RES.

Используется

в про­

Печать

результатов

граммном

проекте

 

TASK02.PRJ

 

 

 

 

 

 

 

 

 

 

*/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/ / Стандартные

включаемые

 

файлы

и

прототипы

 

функций

 

 

^include

 

 

"task02.h"

 

 

 

 

 

 

 

 

 

 

 

 

 

void

WriteRes(

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

float

 

 

Square

)

//

 

Площадь

садового

 

 

участка

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FILE

 

 

*f_out;

 

//

 

Указатель

на

структуру

со

 

 

 

 

 

 

 

 

//

 

сведениями

о

файле для

 

записи

//

Открываем

файл

для

дозаписи

 

 

 

 

 

 

 

±f(

(

f_out

 

=

fopen(

"task02.res",

"a"

)

)

== NULL )

' {

printf(

 

 

"\n Ошибка

60.

Файл

task02.res

 

 

для

 

дозаписи"

 

 

 

 

 

 

 

 

 

 

 

"

не

открыт

\п"

)

;

 

 

 

 

 

 

 

 

exit

(

60

)

;

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//

Печать

результатов

работы

программы

 

 

 

 

 

fprintf

(

 

f_out,

садового

 

участка:

%д",

Square

)

;

"\п\п

 

 

 

Площадь

 

//

Закрываем

файл

 

 

 

 

 

 

 

 

 

 

 

 

 

±f(

fclose

 

(

f_out

)

= -

EOF

)

 

 

 

 

 

 

 

 

{

printf(

 

 

"\n

Ошибка

70.

Файл

task02.res

 

 

не"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

"

закрыт

\n"

) ;

 

 

 

 

 

 

 

 

 

 

exit

(

70

)

;

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

return;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

//

Конец

файла

TASK02

4.CPP

 

432

в приведенном примере рекомендуем.

1. Обратить внимание на оформление заголовочного файла и его подключение к файлам проекта.

Повторим здесь еще раз, что обычно в заголовочный файл по­ мещают директивы ^include', прототипы функций; определения встроенных (inline) функций; объявления (extern) данных, опреде­ ленных в другом файле; определения (const) констант; перечисления (епит), директивы условной трансляции (#ifndef, i^endif VL др.), мак­ роопределения (Udeflne), именованные пространства имен (name­ space), определения типов (class, struct), объявления и определения шаблонов (template).

Заголовочные файлы никогда не должны содержать определе­ ния невстроенных функций, определения данных (объектов), опре­ деления массивов и неименованные пространства имен.

2.Обратить внимание на оформление функций и, особенно, на оформление заголовка функции.

3.Обратить внимание на оформление заголовочных коммента­ риев файлов программного проекта.

Приложение П.б. Примерная программа дисциплины "Программирование и основы алгоритмизации".

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

УТВЕРЖДАЮ Начальник Управления образовательных программ

и стандартов высшего и среднего профессиональ­ ного образования

2000 г.

ПРИМЕРНАЯ ПРОГРАММА д и с ц и п л и н ы

'Программирование и основы алгоритмизации"

Рекомендуется Минобразованием России для подготовки бакалавров по на­ правлению 5502 "Автоматизация и управление" (и подготовки специалистов по направлению 6519 "Автоматизация и управление")

434

1. Цели и задачи дисциплины

Цель дисциплины состоит в поэтапном формировании у студентов следую­ щих слоев знаний и умений,

Слой 1: знание основных понятий программирования.

Слой 2: знание базового языка программирования.

Слой 3: умение решать задачи на вычислительных машинах ВМ.

Формированию отмеченных уровней (слоев) знаний и умений соответствуют разделы дисциплины. Изучение курса предполагает, что студенты знакомы с прин­ ципами работы ВМ, десятичной, двоичной, восьмеричной и шестнадцатеричной системами счисления, а также основными понятиями информатики.

2.Требования к уровню освоения содержания дисциплины

Врезультате изучения дисциплины студенты должны:

1.Знать основные понятия программирования.

2.Знать базовый язык программирования.

3.Уметь решать задачи на ВМ.

Примечание. Слой 3 в полном объеме и слой 4 знаний и умений -умение про­ ектировать программное обеспечение — формируются у студентов в процессе изуче­ ния дополнительной дисциплины "Технология программирования", которая являет­ ся органическим продолжением данной.

3. Объем дисциплины и виды учебной работы

Вид учебной работы

Всего часов

Семестр

Общая трудоемкость дисциплины

130

2

Аудиторные занятия

68

2

Лекции

34

2

Практические занятия (упражнения)

17

2

Курсовая работа

17

2

Самостоятельная работа

62

2

Вид итогового контроля (зачет, экзамен)

Экзамен

2

4. Содержание дисциплины

4.L Разделы дисциплины и виды занятий

iN» п/п

Раздел дисциплины

1 Основные понятия профаммрфования

2Си/С+-1-: базовый язык программирования (алфавит, синтаксис, типы данных, выражения и операции, структурное программирование, операторы ветвлений

ициклов, массивы и структуры, модальное програм­ мирование, функции, ввод и вывод, описатели класса хранения, области действия и время жизни данных, указатели, препроцессор)

3Прикладное профаммирование (сортировки массивов, рекурсия и итерация, транспортная задача, элементы обработки списков, работа с динамической памятью)

Лекции

ПЗ

ЛР

 

(упражнения) (курс, рабо­

*

 

та)

*

*

 

 

*

 

435

4,2. Содермсание

разделов

дисциплины

Раздел 1.

Основные

понятия

программирования

(лекции

и самостоятельная

работа: 16 часов)

1.Алгоритм, данные, программа, структура данных.

2.Регистр: разрядность, графическое изображение. Совокупность регистров как ос­ нова оперативного запоминающего устройства (ОЗУ). Адрес, хранимое слово. Работа ОЗУ в режимах чтения и записи.

3.Простейший набор арифметических операций. Выполнение простейших арифме­ тических операций.

4.Работа ВМ при последовательном выполнении команд. Ветвления в программах. Команды условных переходов и безусловной передачи управления.

5.Прямая и косвенная адресация. Зачем нужна косвенная адресация?

6.Классификация и краткая характеристика языков программирования. Машиннозависимые язьпси: машинные (О GL - О Generation of the Language), ассемблеры (1 GL) и макроассемблеры (2 GL). Машинно-независимые языки: процедурные (3 GL), проблемные (4 GL) и универсальные (5 GL).

7.Введение в языки ассемблера (1 GL). Операторы языка ассемблера ВМ с "очень простой" архитектурой. Символические команды. Псевдокоманды. Схема трансляции в два прохода.

8.Периферийные устройства ВМ и их разновидности. Накопители на магнитных дисках (НМД) с жёсткими дисками. Прямой и последовательный доступ к ин­ формации. Монитор, работа в текстовом и графическом режимах. Клавиатура и мышь. Принтеры. Взаимодействие программ с ПУ.

9.Программные продукты. Основные виды, этапы проектирования и жизненный цикл.

Раздел 2. Си/С++: базовый язык

программирования

(лекции, практические

занятия и самостоятельная

работа: 80 часов)

Цель этой части курса - овладение подмножеством языка C++, изобразитель­ ные средства которого обеспечиваются большинством языков третьего поколения (3 GL).

\.Программирование на языках высокого уровня (на примере Си/С++). Язык Си:

история, первоначальная область применения (системное программирование). Принцип построения: компилируемые конструкции и интерпретируемые средст­ ва (библиотека стандартных функций). Раздельная трансляция, компилятор и ре­ дактор связей.

2.Алфавит языка. Способы описания синтаксиса языка: металингвистические фор­ мулы и синтаксические диаграммы. Определение понятия "идентификатор". Служебные слова. Комментарии.

3.Типы данных. Имена и объявления. Целые типы данных: int, short, long, char. Кодовый формат. Описание данных, литералы. Тип целых констант. Арифмети­ ческие операции для целых операндов.

4.Плавающие типы данных: float, double. Кодовый формат. Описание данных, ли­ тералы. Тип констант с плавающей точкой. Арифметические операции для веще­ ственных операндов. Математические функции стандартной библиотеки Си. На­ значение стандартных заголовочных файлов. Компоновка программы из объект­ ных модулей и библиотек.

5.Понятие преобразования данных. Зачем нужны преобразования? Примеры пре­ образований. Явное преобразование типа. Правила преобразования операндов в

436

процессе вычислений.

6.Оператор-выражение. Операции уменьшения и увеличения, префиксная и пост­ фиксная форма. Операции простого и составного присваивания. Приоритеты опе­ раций.

7.Оператор-выражение. Операции отношения. Результат вычисления отношений. Представление булевских значений "ложь", "истина" в Си. Логические операции: !, II, &&. Операции простого и составного присваивания. Приоритеты операций.

8.Структурное программирование. Операторы ветвления: if и switch. Оператор if, синтаксис, выполнение оператора. Операции отношения. Составной оператор. Сложные условия и логические операции: !, ||, &&. Вложение операторов if, опе­ ратор if... else if... else. Оператор switch, выполнение, использование оператора break.

9.Структурное программирование. Операторы цикла с предусловием (while) и по­ стусловием (do-while). Примеры применения циклов. Изменение хода выполне­ ния цикла с помощью операторов break и continue.

10.Одномерные массивы, пример использования. Связь массивов и указателей. Об­ ращение к элементу массива, адресная арифметика. Структурное программиро­ вание. Оператор цикла с шагом: for. Строки, кодовый формат, строковые литера­ лы. Двумерные массивы. Функция индексации для двумерного массива.

11.Структуры, описание, пример использования. Операция выбора элемента струк­ туры. Операции над структурой в целом. Структуры как аргументы функций. Объявление типа: typedef. Размещение структур в памяти.

12.Модульное программирование. Функции. Рациональные размер и количество па­ раметров функции. Пример функции. Аргументы и параметры. Передача аргу­ ментов по значению и по ссылке. Прототипы функций. Преобразование аргумен­ тов в точке вызова. Оператор return.

13.Ввод и вывод (передача) с преобразованиями. Понятие набора данных и файла. Открытие и закрытие потоков. Функции передачи: fscanf и fprintf. Управляющая строка, форматы при вводе и при выводе. Передача без преобразований (в кодо­ вых форматах).

14.Время жизни и способ размещения данных. Спецификация класса памяти. Ста­ тический способ размещения. Спецификаторы класса памяти extern и static. Ди­ намический процесс исполнения программы и концепция памяти auto / register. Данные с управляемым способом размещения, операции new и delete. Инициали­ зация данных.

15.Объявления и определения. Область действия описаний. Структура программы на языке Си. Переобъявления во вложенных блоках. Определения и объявления на внешнем уровне. Определения и объявления на внутреннем уровне.

16.Указатели, адресная арифметика, указатели и массивы. Введение в обработку списков. Создание и уничтожение узлов списка, вставка и исключение узлов спи­ ска.

17.Препроцессор Си. Директива препроцессора #define. Терминология: макроопре­ деление, макрообращение, макрорасширение. Макросы с параметрами, аналогия с функциями. Директива препроцессора #include. Директивы условной компиля­ ции.

По материалу разд. 2 в рамках практических занятий и самостоятельной рабо­ ты выполняются следующие практические работы.

Проверочные работы по следующим темам (каждая длительностью 20-30 ми­

нут):

- ввод-вывод с использованием функций fscanf - fprintf;

437

-ветвления и циклы;

-структуры;

-функции;

-области действия и время жизни объектов;

-указатели;

-операции с линейным списком.

Простой программный проект, предусматривающий решение трех элементар­ ных задач с использованием языка C++ (однофайловые программы с одной функци­ ей):

-программирование формулы:

-программирование ветвления;

-программирование цикла.

В процессе выполнения программного проекта изучаются программная документа­ ция:

-единая система программной документации (ЕСПД);

-состав ЕСПД, назначение и содержание программных документов (пять из них - "Техническое задание", "Текст программы", "Описание программы", "Программа и методика испытаний" и схема программы - используются при оформлении про­ граммного проекта).

Раздел 3, Прикладное программирование

(лекции, практические занятия и самостоятельная работа: 34 часа)

Цель этого раздела - овладение основами науки программирования, а также профессиональным стилем программирования на Си/С++.

Выделено шесть часто встречающихся в приложениях типов задач: сортиров­ ка массивов, рекурсивные методы, обработка списков, работа с таблицами, работа с файлами, обработка текстов. Решение задач включает алгоритмизацию и програм­ мирование. Умение решать эти задачи составляет основу профессиональной квали­ фикации любого программиста.

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

Рассматриваемые ниже задачи демонстрируют использование при проектиро­ вании программного продукта иерархической декомпозиции задачи.

1.Сортировка: виды, терминология, обозначения. Простые алгоритмы сортировки (выбором, вставками, обменом). Разработка функций, оценка производительно­ сти.

2.Сортировка сложным выбором: с помощью двоичного дерева. Идея, пример ра­ боты, разработка функции, оценка производительности.

3.Сортировка сложными вставками: метод Шелла. Идея, пример работы, разработ­ ка функции, оценка производительности.

4.Сортировка сложным обменом: быстрая сортировка Хоора (нерекурсивный вари­ ант). Идея, пример работы, разработка функции, оценка производительности.

5.Рекурсия и итерация. Рекурсия как метод вычислений. Рекурсивный вариант бы­ строй сортировки Хоора. Когда не следует использовать рекурсию? Поиск пути минимального суммарного веса во взвешенном неориентированном графе.

6.Элементы обработки списков. Инвертирование списка ссылок в задаче поиска пути минимального суммарного веса во взвешенном неориентированном графе.

7.Сортировка массива сложным обменом: быстрая сортировка Хоора (рекурсив-

438

ный вариант).

По материалу разд. 3 в рамках практических занятий и самостоятельной работы выполняется более сложный программный проект, реализующий решение некоторой содержательной задачи. Проект содержит несколько файлов с исходным текстом и несколько функций, расположенных в этих файлах. Большое внимание в проекте уделяется методике тестирования спроектированного программного продукта.

Как указывалось выше, для более полной подготовки в области программиро­ вания требуется формирование дополнительных знаний и умений, включая даль­ нейшее развитие слоя 3 и освоение дополнительного слоя 4: умение проектировать программное обеспечение. Достижению этой цели способствует последующий курс "Технология программирования".

5.Лабораторный практикум (не предусматривается)

6.Учебно-методическое обеспечение дисциплины

6.7. Рекомендуемая литература

Основная литература:

1.Трои Д. Программирование на языке Си для персонального компьютера IBM PC: Пер. с англ. - М.: Радио и связь, 1991.

2.Уэйт М., Прата С, Мартин Д. Язык Си: Пер. с англ. - М.: Мир, 1988.

3.Керниган Б., Ритчи Д., Фъюер А. Язык программирования Си: Задачи по языку Си: Пер. с англ. - М.: Финансы и статистика, 1985.

4.Давыдов В.Г. Теория и технология программирования. Конспект лекций. Ч. 1. ~- Санкт-Петербургский государственный технический университет, СПб.: 2000.

5.Давыдов В.Г. Теория и технология программирования. Конспект лекций. Ч. 2. - Санкт-Петербургский государственный технический университет, СПб.: 2001.

Дополнительная литература:

1.Рассохин Д. От Си к Си++. М.: Издательство "ЭДЕЛЬ", 1993.

2.От Си к Си++ / Е.И. Козелл, Л.М. Романовская, Т.В. Русс и др. М.: Финансы и статистика, 1993.

3.Эллис М., Строуструп Б. Справочное руководство по языку программирования C++ с комментариями: Пер. с англ. - М.: Мир, 1992.

4.Бруно Б. Просто и ясно о C++: Пер. с англ. - М.: БИНОМ, 1995.

5.Пол Ирэ. Объектно-ориентированное программирование с использованием C++: Пер. с англ. / Ирэ Пол. - К.: НИПФ "ДиаСофт Лтд", 1995.

6.Ю. Тихомиров. Visual C++ 6 - СПб.: БХВ - Санкт-Петербург, 1999.

7.Давыдов В.Г., Пекарев М.Ф. Учебный машинно-ориентированный язык (ПМассемблер): Учебное пособие. Санкт-Петербургский государственный техниче­ ский университет, СПб.: 2000.

6.2, Средства обеспечения освоения дисциплины

Любая интегрированная среда программирования языка C++ (желательно бо­ лее простая, чтобы сосредоточить внимание на вопросах программирования). Выби­ рается по усмотрению вуза.

439

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]