Технология программирования

 

?.А.ЖОЛДАСБЕКОВ АТЫНДА?Ы ЭКОНОМИКА Ж?НЕ ???Ы? АКАДЕМИЯСЫ

АКАДЕМИЯ ЭКОНОМИКИ И ПРАВА ИМЕНИУ.А. ДЖОЛДАСБЕКОВА




Экономико-технический факультет

Кафедра СГД И ИС



УТВЕРЖДАЮ

проректор

по учебно-методической работе

Алишпанова Ж.Ж ___________

«___»____________2011 г.




Учебно-методический комплекс

дисциплины: Технология программирования

(общая часть)

Специальность: 5B070300 «Информационные системы»

Форма обучения: очная







Талдыкорган 2011 г.

Учебно-методический комплекс составлен Тукеновой Н.И.

На основании ГОСО РК специальности 050703 «Информационные системы» и типовой учебной программы.

________________________________

(подпись преподавателя)

Рассмотрен на заседании кафедры от

«___»_____________________________г., протокол №___________.

Зав. кафедрой _____________________

Одобрен методическим бюро факультета ЭТФ

«___»_____________________________г., протокол №___________.


Председатель МБ факультета ____________


Экономико-технический факультет

Кафедра СГД И ИС


СИЛЛАБУС

Дисциплина: Технология программирования

Специальность: 5В070300 Информационные системы

Форма обучения: очная


на базе средне - специального образованияКурс2Семестр3Количество кредитов 1(2 трансферта)Всего часов45Всего аудиторных часов 9из них:Лекции2Семинары-Консультаций F2F7Всего дистанционных часов 36 из них:СРС13лекций13практические-Консультации on-line, off-line 10Рубежный контроль2Экзамены3







Талдыкорган 2011 г.

Пререквизиты дисциплины:

·Информатика;

·Алгоритмизация и языки программирования.

Постреквизиты дисциплины:

·Схемотехника,

·Основы ИС

·Информационная безопасность и защита информации

·Проектирование ИС.

Целью преподавания дисциплины является изучение классификации языков программирования, типов данных, операций, операторов языка Си, разработки программ с использованием подпрограмм, стандартных модулей, стиля программирования, организации памяти и адресации, разработки программ с использованием указателей, особенностей программирования на языке С++.

Задачи курса:

формирование представлений о парадигмах программирования;

освоение инструментальной среды программирования;

разработка и создание собственных программных приложений;

изучение способов оценки сложности и эффективности алгоритмов.

После изучения курса студент будет знать:

основные понятия программирования на С++;

механизм реализации возможностей языка;

способы взаимодействия механизмов языка;

применимость языка для широкого спектра реальных задач;

совместимость с традиционным языком Си;

После изучения курса студент будет уметь:

грамотного писать эффективные программы на языке С++;

использовать основные конструкции языка при решении задач;

§работать с различными типами данных.

Краткое содержание курса


Изучение дисциплины позволит развить у студентов структурный подход к составлению программ, отработать основы математической логики, обучить студентов основным принципам и методам построения программ на языках программирования, необходимых при создании, исследовании и эксплуатации алгоритмов различной природы, ознакомить с семантикой языков программирования, формальными языками спецификаций, с объектно-ориентированными спецификациями, тенденциями программирования, методами проектирования программных комплексов, основанных на международных стандартах, структурным и объектно - ориентированным подходами к программированию.

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


Основные требования к компонентам курса, его изучению.


Изучение курса должно быть активным, а не пассивным, поэтому студент должен регулярно, систематически готовиться к занятиям и выполнять все задания СРС. Студент должен приходить подготовленным на лекции и лабораторные занятия. Подготовка к занятиям будет проверяться тестовым или устным опросом.

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

Студент не должен без уважительных причин пропускать занятия. При пропусках практических занятий студент должен обязательно их отработать в установленные сроки.

Все задания по самостоятельной работе должны сдаваться в установленные сроки. Если задания сдаются не во время, то оценка по ним будет выставляться с понижающим коэффициентом 0,8.

Студент должен быть вежливым, терпимым, открытым, доброжелательным к преподавателям и студентам.


Политика выставления оценок:


Балльно-рейтинговая буквенная система оценка знаний

Оценка по буквенной системеЦифровой эквивалентПроцентное содержаниеОценка по традиционной системеA4,095-100ОтличноA-3,6790-94B+3,3385-89ХорошоB3,080-84B-2,6775-79C+2,3370-74УдовлетворительноC2,065-69C-1,6760-64D+1,3355-59D150-54F00-49Неудовлетворительно

Общая разбалловка оценки знаний курса

Оцениваемая позицияКоличество оцениваний за 1-8 неделиКоличество оцениваний за 9-15 неделиМаксимальное количество баллов Сроки выставления баллов в электронный журналСР22100 баллов за каждую СР4,7,11,14 неделиРубежный контроль11100 баллов за каждый рубежный контроль8 и 15 неделиРейтинг допуска 1R 1 = (СР1+СР2+R)/31008 неделяРейтинг допуска 2R2 =(СР3+СР4+R)/310015 неделяРейтинг допуска за академический периодR = (R1+R2)/210015 неделяЭкзаменE 10016-17 неделиИтоговая оценкаI = R*0.6+E*0.4100

Критерии выставления оценок

Вид контроляМаксимальная оценкаСроки выставления баллов в журнал преподавателяСР 1 Задание 1 Задание 2 Задание 3 Задание 4 100 25 25 25 25 По графику сдачи заданий СРСР 2 Задание 1 Задание 2 Задание 3 Задание 4 100 25 25 25 25 По графику сдачи заданий СР СР 3 Задание 1 100 100По графику сдачи заданий СР СР 4 Задание 1 Задание 2 Задание 3 Задание 4 100 25 25 25 25По графику сдачи заданий СРРубежный контроль 1: 1 Вариант: Вопрос 1 - оценка Вопрос 2 - оценка 2 Вопрос 3 - оценка 3 Итоговая (в.1+в.2+в.3)/3 2 Вариант: Тестирование100 100 100 100 100 8 неделяРубежный контроль 2 : 1 Вариант: Вопрос 1 - оценка Вопрос 2 - оценка 2 Вопрос 3 - оценка 3 Итоговая (в.1+в.2+в.3)/3 2 Вариант: Тестирование 100 100 100 100 100 15 неделя

Календарно-тематический план лекций

№ Тема лекции Кол.часНеделяЛитература 1. Введение. Цели и задачи дисциплины. Программные средства ПК1дис 11. Хортон А. Visual C++ 2010: полный курс. Диалектика г.Киев.2010. - 1216 c. 2. Мошилев А.В., Пак Н.И. Хеннер Е.К. Практикум по информатике - М.: Академия, 2001. - 608 с. 3. Павловская Т.А. С/С++. Программирование на языке высокого уровня. - Спб.: Питер, 2001. - 464 с. 4. Пратта С. Язык программирования С++. Лекции и упражнения - М.: Диа-Софт, 2003. - 656 с.2. Методология программирования1дис21. Семакин И.Г., Шестаков А.П. Основы программирования - М.: Мастерст-во, 2001. - 432 с. 2. Страуструп Б. Дизайн и эволюция языка C++. Объектно-ориентированный язык программирования. - М.: ДМК-Пресс, 2000. - 448с. 3. Шилд Г. С/С++. Справочник программиста - М.: Вильямс, 2000. - 448 с. 4. Шмидский Я.К. Программирование на языке С/С++ - М.: Диалектика, 2003. - 352 с.3, 4Основы технологии программирования2(контакт)3, 41. Стефан Р. для `чайников`, 6-е издание Дэвис . C++. Вильямс г.Киев. 2010 . - 336 c. 2. Шилдт Г. C++ для начинающих. Шаг за шагом. ЭКОМ г.Москва. 2010. - 640 c. 3. Дэвид Р. Мюссер. C++ и STL: справочное руководство, 2-е изд. Вильямс г.Киев. 2010. - 432 c. 4. Ишкова Э.А. C++. Начала программирования 3-е изд. стер. БИНОМ г.Москва. 2011. - 368 c.5. Введение в систему программирования Си. Директивы препроцессора. Состав системы программирования, элементы языка. 1 дис51. Шилдт Г. C++ для начинающих. Шаг за шагом. ЭКОМ г.Москва. 2010. - 640 c. 2. Дэвид Р. Мюссер. C++ и STL: справочное руководство, 2-е изд. Вильямс г.Киев. 2010. - 432 c. 3. Ишкова Э.А. C++. Начала программирования 3-е изд. стер. БИНОМ г.Москва. 2011. - 368 c. 4. Герберт Шилд. C++: базовый курс, 3-е изд. Вильямс г.Киев. 2010. - 624 c.6. Типы данных: int, short, long, unsigned, float, double. Объявления. Выражения и присваивания. Операции языка Си. 1 дис61. Шилд Г. С/С++. Справочник программиста - М.: Вильямс, 2000. - 448 с. 2. Шмидский Я.К. Программирование на языке С/С++ - М.: Диалектика, 2003. - 352 с. 3. Стефан Р. для `чайников`, 6-е издание Дэвис . C++. Вильямс г.Киев. 2010 . - 336 c. 4. Шилдт Г. C++ для начинающих. Шаг за шагом. ЭКОМ г.Москва. 2010. - 640 c.7. Операторы языка Си. Условный оператор. Оператор выбора.1 дис71. Семакин И.Г., Шестаков А.П. Основы программирования - М.: Мастерст-во, 2001. - 432 с. 2. Страуструп Б. Дизайн и эволюция языка C++. Объектно-ориентированный язык программирования. - М.: ДМК-Пресс, 2000. - 448с. 3. Шилд Г. С/С++. Справочник программиста - М.: Вильямс, 2000. - 448 с. 4. Шмидский Я.К. Программирование на языке С/С++ - М.: Диалектика, 2003. - 352 с.8. Операторы цикла. Операторы goto, break, continue.1 дис81. Мошилев А.В., Пак Н.И. Хеннер Е.К. Практикум по информатике - М.: Академия, 2001. - 608 с. 2. Павловская Т.А. С/С++. Программирование на языке высокого уровня. - Спб.: Питер, 2001. - 464 с. 3. Пратта С. Язык программирования С++. Лекции и упражнения - М.: Диа-Софт, 2003. - 656 с. 4. Семакин И.Г., Шестаков А.П. Основы программирования - М.: Мастерст-во, 2001. - 432 с.9. Функции ввода и вывода. Функции. Описание, определение функции. Примеры функций. 1 дис91. Шмидский Я.К. Программирование на языке С/С++ - М.: Диалектика, 2003. - 352 с. 2. Стефан Р. для `чайников`, 6-е издание Дэвис . C++. Вильямс г.Киев. 2010 . - 336 c. 3. Шилдт Г. C++ для начинающих. Шаг за шагом. ЭКОМ г.Москва. 2010. - 640 c. 4. Дэвид Р. Мюссер. C++ и STL: справочное руководство, 2-е изд. Вильямс г.Киев. 2010. - 432 c.10. Указатели и адресная арифметика. Организация памяти и адресация.1 дис101. Страуструп Б. Дизайн и эволюция языка C++. Объектно-ориентированный язык программирования. - М.: ДМК-Пресс, 2000. - 448с. 2. Шилд Г. С/С++. Справочник программиста - М.: Вильямс, 2000. - 448 с. 3. Шмидский Я.К. Программирование на языке С/С++ - М.: Диалектика, 2003. - 352 с. 4. Стефан Р. для `чайников`, 6-е издание Дэвис . C++. Вильямс г.Киев. 2010 . - 336 c.11. Одномерные массивы и указатели. Двумерные массивы. Использование указателей для двумерных массивов. 1 дис111. Шилдт Г. C++ для начинающих. Шаг за шагом. ЭКОМ г.Москва. 2010. - 640 c. 2. Дэвид Р. Мюссер. C++ и STL: справочное руководство, 2-е изд. Вильямс г.Киев. 2010. - 432 c. 3. Ишкова Э.А. C++. Начала программирования 3-е изд. стер. БИНОМ г.Москва. 2011. - 368 c. 4. Герберт Шилд. C++: базовый курс, 3-е изд. Вильямс г.Киев. 2010. - 624 c.12. Структуры данных. Описание структур. Указатели и структуры данных.1 дис121. Семакин И.Г., Шестаков А.П. Основы программирования - М.: Мастерст-во, 2001. - 432 с. 2. Страуструп Б. Дизайн и эволюция языка C++. Объектно-ориентированный язык программирования. - М.: ДМК-Пресс, 2000. - 448с. 3. Ишкова Э.А. C++. Начала программирования 3-е изд. стер. БИНОМ г.Москва. 2011. - 368 c. 4. Герберт Шилд. C++: базовый курс, 3-е изд. Вильямс г.Киев. 2010. - 624 c.13. Строки. Обработка строк. 1 дис131. Дэвид Р. Мюссер. C++ и STL: справочное руководство, 2-е изд. Вильямс г.Киев. 2010. - 432 c. 2. Ишкова Э.А. C++. Начала программирования 3-е изд. стер. БИНОМ г.Москва. 2011. - 368 c. 3. Мошилев А.В., Пак Н.И. Хеннер Е.К. Практикум по информатике - М.: Академия, 2001. - 608 с. 4. Павловская Т.А. С/С++. Программирование на языке высокого уровня. - Спб.: Питер, 2001. - 464 с.14. Файлы. Описание структуры файлов. Организация работы с файлами. 1 дис141. Мошилев А.В., Пак Н.И. Хеннер Е.К. Практикум по информатике - М.: Академия, 2001. - 608 с. 2. Павловская Т.А. С/С++. Программирование на языке высокого уровня. - Спб.: Питер, 2001. - 464 с. 3. Шилд Г. С/С++. Справочник программиста - М.: Вильямс, 2000. - 448 с. 4. Шмидский Я.К. Программирование на языке С/С++ - М.: Диалектика, 2003. - 352 с.15. Работа с окнами. Графика. Особенности программирования на С++. Основы программирования на языке С++.1 дис151. Шилдт Г. C++ для начинающих. Шаг за шагом. ЭКОМ г.Москва. 2010. - 640 c. 2. Дэвид Р. Мюссер. C++ и STL: справочное руководство, 2-е изд. Вильямс г.Киев. 2010. - 432 c. 3. Пратта С. Язык программирования С++. Лекции и упражнения - М.: Диа-Софт, 2003. - 656 с. 4. Семакин И.Г., Шестаков А.П. Основы программирования - М.: Мастерст-во, 2001. - 432 с.Всего:15

Лекционный комплекс


Лекция №1


Тема: Введение. Цели и задачи дисциплины

План:

1. Технология

. Программные средства ПК

. Экспертная система


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

Внедрение мини- и микро -ЭВМ в самую гущу сложных производственных отношений современных предприятий, учреждений, КБ и научных лабораторий ставит перед программированием принципиально новые, несопоставимо более сложные задачи и соответственно накладывает на эту до недавнего времени «точную» дисциплину отпечаток естественных, а в ряде случаев и гуманитарных наук.

Еще 20 лет назад смысл последних достижений молекулярной генетики обычно поясняли с помощью простой аналогии: «код первичной структуры ДНК играет для функционирования генетического аппарата живого организма ту же роль, что код программы для функционирования ЭВМ». В 1981 г. журнал «Computer & People» опубликовал статью «Техника автоматизации процессов разработки программного обеспечения», автор которой, кроме прочего, разъяснил читателям популярного компьютерного журнала, что «программное обеспечение играет для машины ту же самую роль, которую ДНК играет для живого организма».

Растущий интерес к естественнонаучным и гуманитарным аспектам процесса технологической эволюции вообще, а науки об ЭВМ в особенности неслучаен. Быстро убегающий барьер сложности изделий современной вычислительной техники уже не позволяет рассчитывать в ближайшем будущем на успех каких-либо практически интересных попыток описания их структуры и функций в категориях лишь традиционных «точных» наук.

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

Наука о программах, история развития

На заре эры ЭВМ Дж. фон Нейман отмечал, что «многое из опыта нашей работы с искусственными автоматами может быть до некоторой степени1 перенесено на наше понимание естественных организмов». Попытки использовать математические результаты «опыта работы с искусственными автоматами» для разработки абстрактных схем интеллектуального «акта творения» (например, для формализации процесса создания простейших автоматов) восходят к работам Дж. Буля, Лейбница, Декарта и, видимо, далее в глубь веков к Архимеду и эпистемологическим учениям древних греков. Первая волна широкого общественного интереса к этому научному направлению совпала по времени с появлением ЭВМ и была инициирована, как принято считать, выходом в 1948 г. книги Н. Винера «Кибернетика или управление и связь в животном и машине».

После того как с начала 60-х годов миражи «глобальной кибернетизации» начали постепенно рассеиваться, научные исследования двустороннего интеллектуального взаимодействия «человек - ЭВМ» на некоторое время оказались локализованными в небольшом числе разрозненно действующих исследовательских групп, связанных между собой в основном лишь претенциозным термином-лозунгом: «искусственный интеллект». Ренессанс искусственного интеллекта (ИИ) как одного из научных направлений в теории вычислительной техники начался за рубежом в 80-х годах вслед за внезапно пронесшимся над ИИ- лабораториями «золотым дождем» многомиллионных дотаций, вызванным обострением соперничества между США и Японией за первенство в компьютерной технологии 90-х годов (проект создания ЭВМ «пятого поколения»).

К этому времени ряд ИИ- исследовательских коллективов начал эволюционировать в своей практической деятельности за пределы чисто абстрактных упражнений (по «естественно-языковой» тематике, машинному доказательству избранного типа теорем и другим умиротворяюще безысходным, хотя и весьма почтенным занятиям) к конструктивным исследованиям, направленным на создание конкретных проблемно-ориентированных «баз знаний». На этом направлении в конце 70-х годов были получены те первые практически полезные результаты, которые позволили начать в 80-х годах постепенно слой за слоем снимать сложившийся за два десятилетия непроницаемый налет схоластики с «искусственного интеллекта» как научного направления в теории ЭВМ. К настоящему времени в мире действует уже 2-3 десятка практически полезных «экспертных систем» (по некоторым разделам медицины, геологии, химии и другим «трудно формализуемым» областям знаний). Разрабатываются элементы промышленной технологии обработки данных с использованием машинно-экстрагируемых из профессионалов знаний (knowledge engineering). Именно вокруг этих прагматической ориентации научных коллективов и университетских лабораторий начали формироваться специализированные подразделения промышленных предприятий и независимые исследовательские фирмы, занятые поиском областей приложений и коммерческим внедрением компьютерных систем, реализующих принципы «технологии знаний».

Программы ЭВМ - разумеется, не единственный и далеко не первый доступный для анализа продукт интеллектуального акта творения. Машиностроительные чертежи, схемы радиотехнических изделий, архитектурные проекты, музыкальные и литературные произведения, произведения изобразительного искусства уже долгие годы дают богатейший материал для такого рода анализа. Вместе с тем, следует отметить, что программы ЭВМ являются, видимо, одним из наиболее благодарных объектов для такого анализа. Анализ процесса создания программ может быть выполнен по самым различным научным методикам: психологическим, эстетическим, физиологическим, математическим, технологическим и т. д.

Долгое время человечество волнует вопрос о том, к какому роду деятельности

относится программирование. В 60-х - 70-х годах XX века данный вопрос активно

обсуждался на научных конференциях. Существовало 2 популярных точки зрения:

«программирование это искусство» и «программирование это наука». К единому мнению придти так и не удалось. В настоящий момент мы можем добавить к этим популярным трактовкам еще одну: «программирование это бизнес»

Контрольные вопросы:

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

2.Роль вычислительной техники в информационных системах.

.Примеры использования информационных систем в различных отраслях производства. Компьютеризация учебного процесса.

4.Методы автоматизации программирования. Алгоритмические языки.

5.Назначение алгоритмического языка и требования предъявляемые к нему.

.Понятие о процедурно-ориентированных языках и ООП.

.Понятие о программном обеспечении ПК. Диалоговые средства связи пользователей с ПК. Интегрированные системы программирования.


Лекция №2.


Тема: Введение. Программные средства ПК

План:

1.Этапы и уровни разработки программ

2.Разработка структурных схем алгоритмов

.Стиль программирования. Показатели качества программирования


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

Инструментальные программные средства общего назначения

Несмотря на широкие возможности использования компьютеров для обработки самой разной информации, самыми популярными являются программы, предназначенные для работы с текстами - текстовые редакторы и издательские системы. Текстовыми редакторами называют программы для ввода, обработки, хранения и печатания текстовой информации в удобном для пользователя виде. Эксперты оценивают использование компьютера в качестве печатающей машинки в 80%.

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

Графические редакторы позволяют пользоваться различным инструментарием художника, стандартными библиотеками изображений, наборами стандартных шрифтов, редактированием изображений, копированием и перемещением фрагментов по страницам экрана и др. Для выполнения расчетов и дальнейшей обработки числовой информации существуют специальные программы - электронные таблицы. В процессе деятельности любого специалиста часто требуется представить результаты работы в виде таблиц, где одна часть полей занята исходными данными, а другая -. результатами вычислений и графического анализа. Характерными для них является большой объем перерабатываемой информации, необходимость многократных расчетов при изменении исходных данных. Автоматизацией подобной рутинной работы и занимаются электронные таблицы.

Одним из наиболее перспективных направлений развития вычислительной техники является создание специальных аппаратных средств для хранения гигантских массивов информационных данных, и последующей нечисловой обработки их -поиска и сортировки. Для компьютерной обработки подобных баз данных используют системы управления базами данных. СУБД - это набор средств программного обеспечения, необходимых для создания, обработки и вывода записей баз данных. Различают несколько типов СУБД: иерархические, сетевые, реляционные. При работе с СУБД выделяют несколько последовательных этапов:

проектирование базы данных;

создание структуры базы данных;

заполнение базы данных;

просмотр и редактирование базы данных;

сортировку базы данных;

поиск необходимой записи;

выборку информации;

создание отчетов.

Как правило, большинство популярных систем управления базами данных поддерживают эти этапы и предоставляют удобный инструментарий для их реализации.

Универсальные интегрированные системы разрабатывались по принципу единой системы, содержащей в качестве элементов текстовые и графические редакторы, электронные таблицы и систему управления базами данных. Примеры: Framework, Works, Мастер. Современная концепция интеграции программных средств - кооперация отдельных прикладных программных систем по типу широко известного пакета MicroSoft Office. Сами системы, входящие в пакет, являются независимыми, более того, они сами представляют локально интегрированный пакет, поскольку помимо основной своей задачи поддерживают функции других систем. Например, текстовый редактор Word обладает возможностью манипулировать с электронными таблицами и базами данных, а в электронной таблице Excel встроен мощный текстовый редактор. Для сопряжения информационных данных из различных программных систем в них предусматривают импорт- экспортную систему обмена с перекодировкой форматов представления данных.

Инструментальные программные средства специального назначения

Разработчики создают специальные программные системы целевого назначения для специалистов в некоторой предметной области. Такие программы называют авторскими инструментальными системами. Авторская система представляет интегрированную среду с заданной интерфейсной оболочкой, которую пользователь может наполнить информационным содержанием своей предметной области.

Экспертная система - это программа, которая ведет себя подобно эксперту в некоторой узкой прикладной области. Экспертные системы призваны решать задачи с неопределенностью и неполными исходными данными, требующие для своего решения экспертных знаний.

Кроме того, эти системы должны уметь объяснять свое поведение и свое решение.

Принципиальным отличием экспертных систем от других программ является их адаптивность, т.е. изменчивость в процессе самообучения.

Принято выделять в экспертных системах три основных модуля:

модуль базы знаний;

модуль логического вывода;

интерфейс с пользователем.

В последнее время широкую популярность получили программы обработки гипертекстовой информации. Гипертекст - это форма организации текстового материала не в линейной последовательности, а в форме указании возможных переходов (ссылок), связей между отдельными его фрагментами. В обычном тексте используется обычный линейный принцип размещения информации и доступ к нему осуществляется последовательно. В гипертекстовых системах информация напоминает текст энциклопедии, и доступ к любому выделенному фрагменту текста осуществляется произвольно по ссылке. Организация информации в гипертекстовой форме используется при создании справочных пособий, словарей, контекстной помощи (Help) в прикладных программах.

Расширение концепции гипертекста на графическую и звуковую информацию приводит к понятию гипермедиа. Идеи гипермедиа получили распространение в сетевых технологиях, в частности в Интернет-технологиях. Технология WWW (World Wide Web) позволила структурировать громадные мировые информационные ресурсы посредством гипертекстовых ссылок. Появились программные средства, позволяющие создавать подобные Web-странички. Стали развиваться механизмы поиска нужной информации в лабиринте информационных потоков. Популярными поисковыми средствами в Интернет являются Yahoo, AltaVista, Magellan, Rambler и др.

Мультимедиа (multimedia) - это взаимодействие визуальных и аудиоэффектов под управлением интерактивного программного обеспечения

Контрольные вопросы:

1.Методы автоматизации программирования. Алгоритмические языки.

2.Назначение алгоритмического языка и требования предъявляемые к нему.

.Понятие о процедурно-ориентированных языках и ООП.

.Понятие о программном обеспечении ПК. Диалоговые средства связи пользователей с ПК. Интегрированные системы программирования.


Лекция №3


Тема: Методология программирования

План:

1.Директивы препроцессора.

2.Состав системы программирования, элементы языка

.Определение макросов

Технологии программирования - путь к успеху в разработке ПО.

Технология - совокупность производственных процессов в определенной отрасли производства, а также научное описание способов производства. Создание любой программной системы выполняется по некоторой схеме. Данная схема представляет собой последовательность стандартных этапов : анализ, проектирование, разработка, тестирование, модификация.

Анализ: Определение требований к программе. Что является исходными данными, что - конечными результатами? Как должна вести себя программа, если конечный результат по каким-то причинам не может быть получен? Вам предстоит ответить на эти и, возможно, на некоторые другие аналогичные вопросы.

Проектирование: Составление / выбор алгоритма решения поставленной задачи. Примечание: Алгоритм - это последовательность действий, необходимая для достижения какого-либо результата.

Разработка: Написание команд программы (исходного кода, исходника) на каком-либо языке программирования высокого уровня - ЯВУ. Примечание: высокоуровневый язык программирования означает высокую долю абстрагирования от языка машин. То есть чем более высокий уровень языка программирования, тем он ближе к человеческому языку, тем он более абстрагирован от сугубо компьютерных понятий. Например, Delphi - высокоуровневый язык программирования, а вот машинные коды - низкоуровневый язык программирования (так как ближе к компьютеру, а нормальному человеку обычно непонятен).

Модификация: Отладка программы. Это процесс поиска и устранения ошибок в программе. Ошибки могут быть: синтаксические (неверно использовали конструкции языка программирования), алгоритмические (программист что-то упустил), ошибки времени исполнения (возникают из-за неверных данных).

Тестирование: Основная цель тестирования - исключить из программы максимальное число возможных ошибок. Это можно сделать, проверив работоспособность проекта на максимально большом числе входных данных. Этап важный, неясно почему им пренебрегли авторы Готики 3 или Delphi 2005.

Именно на этих этапах и возникают существенные финансовые затраты.

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

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

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

Итак, технология программирования - совокупность методов, приемов и средств для сокращения стоимости и повышения качества разработки программных систем.

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

Контрольные вопросы:

.Этапы и уровни разработки программ

.Разработка структурных схем алгоритмов

.Стиль программирования. Показатели качества


Лекция №4


Тема: Основы технологии программирования

План:

1.Методы проектирования программного обеспечения.

2.Выбор языка программирования.

.Структурное программирование. Модульное программирование.

.Программирование с защитой иот ошибок. Этап отладки и испытания программ. Документирование программ. Вид программной документации, установленной ГОСТом. Единая система программной документации (ЕСПД).


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

Методы проектирования алгоритмов и программ очень разнообразны, их можно классифицировать по различным признакам, важнейшими из которых являются:

степень автоматизации проектных работ;

принятая методология процесса разработки.

По степени автоматизации проектирования алгоритмов и программ можно выделить:

методы традиционного (неавтоматизированного) проектирования;

методы автоматизированного проектирования (CASE-технология и ее элементы).

Проектирование алгоритмов и программ может основываться на различных подходах, среди которых наиболее распространены:

структурное проектирование программных продуктов;

информационное моделирование предметной области и связанных с ней приложений;

объектно-ориентированное проектирование программных продуктов.

В основе структурного проектирования лежит последовательная декомпозиция, целенаправленное структурирование на отдельные составляющие. Начало развития структурного проектирования алгоритмов и программ падает на 60-е гг. Методы структурного проектирования представляют собой комплекс технических и организационных принципов системного проектирования.

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

нисходящее проектирование, кодирование и тестирование программ;

модульное программирование;

структурное проектирование (программирование) и др.

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

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

Объектно-ориентированный подход к проектированию программных продуктов основан на:

выделении классов объектов;

установлении характерных свойств объектов и методов их обработки;

создании иерархии классов, наследовании свойств объектов и методов их обработки.

Каждый объект объединяет как данные, так и программу обработки этих данных и относится к определенному классу. С помощью класса один и тот же программный код можно использовать для относящихся к нему различных объектов.

Объектный подход при разработке алгоритмов и программ предполагает:

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

объектно-ориентированное проектирование.

Для проектирования программных продуктов разработаны объектно-ориентированные технологии, которые включают в себя специализированные языки программирования и инструментальные средства разработки пользовательского интерфейса.

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

Объектно-ориентированная технология разработки программных продуктов объединяет данные и процессы в логические сущности - объекты, которые имеют способность наследовать характеристики (методы и данные) одного или более объектов, обеспечивая тем самым повторное использование программного кода. Это приводит к значительному уменьшению затрат на создание программных продуктов, повышает эффективность жизненного цикла программных продуктов (сокращается длительность фазы разработки).При выполнении программы объекту посылается сообщение, которое инициирует обработку данных объекта.

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

Известно несколько основных парадигм программирования, важнейшими из которых на данный момент времени являются парадигмы директивного, объектно-ориентированного и функционально-логического программирования. Для поддержки программирования в соответствии с той или иной парадигмой разработаны специальные алгоритмические языки.и Pascal являются примерами языков, предназначенных для директивного программирования (directive programming), когда разработчик программы использует процессно-ориентированная модель, то есть пытается создать код, должным образом воздействующий на данные. Активным началом при этом подходе считается программа (код), которая должна выполнить все необходимые для достижения нужного результата действия над пассивными данными.

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

Сейчас весьма распространенным стал объектно-ориентированный (object oriented) подход, реализуемый, например, языками C++ и Java. При этом, наоборот, первичными считаются объекты (данные), которые могут активно взаимодействовать друг с другом с помощью механизма передачи сообщений (называемого также и механизмом вызова методов). Функция программиста в этом случае подобна роли бога при сотворении Вселенной -- он должен придумать и реализовать такие объекты, взаимодействие которых после старта программы приведет к достижению необходимого конечного результата.

Функциональное и логическое программирование использует языки типа Lisp, Haskell и Prolog. Эта парадигма базируется на принципиально иной трактовке понятия программы. Здесь главным является точная формулировка задачи, а выбор и применение необходимого для ее алгоритма решения -- проблема исполняющей системы, но не программиста. Принцип, на котором зиждется технология структурного программирования - фундаментальная научная и техническая идея о выделении множества базисных элементов, с помощью которых можно выразить (из которых можно собрать) любой объект из некоторого широкого набора.

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

Нисходящее и восходящее проектирование

Одна из основных идей, положенных в большинство известных технологий программирования - нисходящее проектирование. Существуют также другие названия: ``программирование с пошаговым совершенствованием'', ``систематическое программирование'', ``иерархическое программирование''. Принцип его - сначала определяются основные функции, которые должны быть обеспечены изготавливаемой программой, а затем доопределяются дополнительные функции, вытекающие из основных.

Вот некоторые принципы нисходящего проектирования:

Подробное формальное и строгое описание проектировщиком входов, функций и выходов всех модулей программ или системы.

Как только Вы убедитесь, что некоторая часть задачи может быть реализована в виде отдельного модуля, Постарайтесь больше не думать об этом.

На каждом уровне проекта пытайтесь записать реализацию модуля в виде символических кодов или блок схемы (размер описания в идеале не должен превосходить одного листа, чтобы при последующем анализе перед глазами находилась наиболее полная картина).

Проектированию структуры данных и их движения следует не меньше времени, чем программе.

Методы проектирования алгоритмов:

Методы проектирования алгоритмов включают: нисходящее проектирование, модульность, структурное программирование.

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

Контрольные вопросы:

1.Нисходящее и восходящее проектирование программ и их сочетание.

2.Стиль программирования. Показатели качества программирования.

.Читаемость программ, комментарии.

Лекция №5


Тема: Введение в систему программирования Си

План:

1.Директивы препроцессора.

2.Состав системы программирования, элементы языка.


Препроцессор находит директивы препроцессора (которые называют также управляющимистроками препроцессора) и выполняет лексический анализ находящихся в них фраз.

Препроцессор Turbo C++ включаетв себя сложный процессор макросов, сканирующий исходный код перед обработкойего компилятором.Препроцессор обеспечивает мощные средства и гибкость, заключающиеся в следующем:

Определение макросов, которые служат для снижения трудоемкости программирования и улучшении читаемости кода. Некоторые макросы позволяют избежать затрат на вызов функций.

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

Установка условной компиляции для улучшения мобильности получаемых кодов и для целей отладки.

Директивы препроцессора обычно помещаются в начало исходного кода, но допустимы в любой точке программы.

Любая строка с ведущим символом # рассматривается как директива препроцессора, если только # не входит в строковый литерал, символьную константу или комментарий. Ведущему символу # может предшествовать, либо следовать за ним, пробельные символы (за исключением символа новой строки).

Пустая директива #

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

Директивы #define и #undef

Директива #define определяет макрос. Макросы обеспечивают механизм замены лексемы набором формальных, подобных используемых в функциях параметров, либо пустой замены.

Простые макросы #define

В простых случаях, без параметров, синтаксис данной директивы следующий:

#define идентификатор_макроса <последовательность_лексем>

Каждое вхождение идентификатора_макроса в исходный код после данной управляющей строки будет заменено на месте - возможно, пустой, -последовательностью_лексем (имеются некоторые рассматриваемые ниже исключения). Такие замены называются макрорасширениями. Последовательность лексем иногда называют телом макроса.

Директива #undef

Можно отменить определение макроса при помощи директивы #undef:

#undef идентификатор_макроса

Данная строка удаляетлюбую ранее введенную последовательность лексем из идентификатора макроса;определение макроса теряется, и идентификатор его становится неопределенным.

Макрорасширения внутри строк #undef не выполняются.

Состояние определенности и неопределенности является важным свойством идентификатора, независимо от его фактического определения. Условные директивы препроцессора #ifdef и #ifndef, которые служат для проверки того, является ли идентификатор в текущий момент определенным, или нет, представляют собой гибкий механизм управления многими аспектами компиляции.

Контрольные вопросы:

1.Какой процессор включает в себя препроцессор Turbo С++?

2.Как рассматривается любая строка с ведущим символом #?

3.Расскажите о дерективах.


Лекция №6


Тема: Типы данных

План:

1.Типы данных: int, short, long, unsigned, float, double.

2.Объявления. Выражения и присваивания.

.Операции языка Си.


Простые типы в С++ делятся на целочисленные типы и типы с плавающей точкой. Для описания стандартных типов определены следующие ключевые слова:

·int (целый);

·char (символьный);

·bool (логический);

·float (вещественный);

·double (вещественный с двойной точностью).

Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений стандартных типов:

·short (короткий);

·long (длинный);

·signed (со знаком);

·unsigned (без знака).


Таблица 1.3. Диапазоны значений простых типов данных для IBM PC

Тип Диапазон значенийРазмер (байт) Bool true и false 1 signed char -128 … 127 1 Unsigned char 0 … 255 1 signed short int -32 768 … 32 767 2 Unsigned short int0 … 65 535 2 signed long int-2 147 483 648 … 2 147 483 647 4 Unsigned long int 0 … 4 294 967 295 4 Float 3.4e-38 … 3.4e+38 4 Double 1.7e-308 … 1.7e+308 8 long double 3.4e-4932 … 3.4e+4932 10

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

Все переменные должны быть объявлены раньше, чем будут использоваться, при этом некоторые объявления могут быть получены неявно - из контекста. Объявление специфицирует тип и содержит список из одной или нескольких переменных этого типа, как, например, в

int lower, upper, step;с, line[1000];

Переменные можно распределять по объявлениям произвольным образом, так что указанные выше списки можно записать и в следующем виде:

int lower;upper;step;

char c;line[1000];

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

В своем объявлении переменная может быть инициализирована, как, например:

char esc = '\\';i = 0;limit = MAXLINE+1;eps = 1.0e-5;

Инициализация неавтоматической переменной осуществляется только один раз - перед тем, как программа начнет выполняться, при этом начальное значение должно быть константным выражением. Явно инициализируемая автоматическая переменная получает начальное значение каждый раз при входе в функцию или блок, ее начальным значением может быть любое выражение. Внешние и статические переменные по умолчанию получают нулевые значения. Автоматические переменные, явным образом не инициализированные, содержат неопределенные значения ("мусор).

К любой переменной в объявлении может быть применен квалификатор const для указания того, что ее значение далее не будет изменяться.

const double е = 2.71828182845905;char msg[] = "предупреждение: ";

Применительно к массиву квалификатор const указывает на то, что ни один из его элементов не будет меняться. Указание const можно также применять к аргументу- массиву, чтобы сообщить, что функция не изменяет этот массив:

int strlen(const char[]);

Реакция на попытку изменить переменную, помеченную квалификатором const зависит от реализации компилятора.


Таблица 1.5 Основные операции языка С++

ОперацияКраткое описаниеУнарные операции++увеличение на 1- -уменьшение на 1 sizeofразмер~поразрядное отрицание!логическое отрицание-арифметическое отрицание (унарный минус)+унарный плюс&взятие адреса*разадресацияnewвыделение памятиdeleteосвобождение памяти(type)преобразование типаБинарные операции*умножение/деление%остаток от деления+сложение-вычитание<<сдвиг влево>>сдвиг вправо<меньше<=меньше или равно>больше>=больше или равно==равно!=не равно&поразрядная конъюнкция (И)^поразрядное исключающее ИЛИ|поразрядная дизъюнкция (ИЛИ)&&логическое И||логическое ИЛИ? :условная операция (тернарная)=присваивание*=умножение с присваиванием/=деление с присваиванием%=остаток отделения с присваиванием+=сложение с присваиванием-=вычитание с присваиванием<<=сдвиг влево с присваиванием>>=сдвиг вправо с присваиванием&=поразрядное И с присваиванием|=поразрядное ИЛИ с присваиванием^=поразрядное исключающее ИЛИ с присваиванием,последовательное вычисление

Контрольные вопросы:

1.Какие спецификаторы типов вы знаете?

2.Перечислите простые типы данных в С#.

.Как осуществляется инициализация переменной ?


Лекция №7


Тема: Операторы языка Си

План:

1.Условный оператор

2.Оператор выбора

.Операторы goto, break, continue


Оператор "выражение"

Любое выражение, завершающееся точкой с запятой, рассматривается как оператор, выполнение которого заключается в вычислении выражения. Частным случаем выражения является пустой оператор ; (он используется, когда по синтаксису оператор требуется, а по смыслу - нет). Примеры:

i++;//выполняется операция инкремента* = b + c;//выполняется умножение с присваиванием

fund (k).// выполняется вызов функции

Операторы ветвления.

Инструкция if-else используется для принятия решения. Формально ее синтаксисом является:

if (выражение)

инструкция1

инструкция2

причем else-часть может и отсутствовать. Сначала вычисляется выражение, и, если оно истинно (т. е. отлично от нуля), выполняется инструкция1. Если выражение ложно (т. е. его значение равно нулю) и существует else-часть, то выполняется инструкция2.

Пример:

if (а > b)= а;= b;

Оператор switch

Инструкция switch используется для выбора одного из многих путей. Она проверяет, совпадает ли значение выражения с одним из значений, входящих в некоторое множество целых констант, и выполняет соответствующую этому значению ветвь программы:

switch (выражение) {конст-выр: инструкцииконст-выр: инструкции: инструкции

}

Каждая ветвь case помечена одной или несколькими целочисленными константами или же константными выражениями. Вычисления начинаются с той ветви case, в которой константа совпадает со значением выражения . Константы всех ветвей case должны отличаться друг от друга. Если выяснилось, что ни одна из констант не подходит, то выполняется ветвь, помеченная словом default, если таковая имеется, в противном случае ничего не делается.

Инструкции break и continue

Иногда бывает удобно выйти из цикла не по результату проверки, осуществляемой в начале или в конце цикла, а каким-то другим способом. Такую возможность для циклов for, while и do-while, а также для переключателя switch предоставляет инструкция break. Эта инструкция вызывает немедленный выход из самого внутреннего из объемлющих ее циклов или переключателей.

Инструкция continue в чем-то похожа на break, но применяется гораздо реже. Она вынуждает ближайший объемлющий ее цикл (for, while или do-while) начать следующий шаг итерации.

Контрольные вопросы:

1.Расскажите про Оператор switch

2.Перечислите операторы цикла.

3.Расскажите об операторах goto, break, continue.


Лекция №8


Тема: Операторы цикла

План:

1.Цикл while

2.Цикл do-while

.Инструкция for


Цикл while

В цикле

while (выражение)

инструкция

вычисляется выражение. Если его значение отлично от нуля, то выполняется инструкция, и вычисление выражения повторяется. Этот цикл продолжается до тех пор, пока выражение не станет равным нулю, после чего вычисления продолжатся с точки, расположенной сразу за инструкцией.

Цикл do-while

В Си имеется еще один вид цикла, do-while, в котором эта проверка делается внизу после каждого прохождения тела цикла, т. е. после того, как тело выполнится хотя бы один раз. Цикл do-while имеет следующий синтаксис:

do

инструкция(выражение);

Сначала выполняется инструкция, затем вычисляется выражение. Если оно истинно, то инструкция выполняется снова и т. д. Когда выражение становится ложным, цикл заканчивает работу. Цикл do-while эквивалентен циклу repeat-until в Паскале с той лишь разницей, что в первом случае указывается условие продолжения цикла, а во втором - условие его окончания.

Инструкция for

for (выр1; выр2; выр3)

инструкция(тело цикла)

Например, начало цикла, обрабатывающего первые n элементов массива, имеет следующий вид:

for (i = 0; i < n; i++)

...

Внутри скобок имеются три выражения, разделяемые точкой с запятой. Первое выражение - инициализация= 0

выполняется один раз перед тем, как войти в цикл. Второе - проверка условия продолжения цикла< n

Условие вычисляется, и если оно истинно, выполняется тело цикла. Затем осуществляется приращение шага:

i++ // i= i+1;

и условие вычисляется снова. Цикл заканчивается, когда условие становится ложным.

Контрольные вопросы:

.Формат оператора цикла с предусловием.

.Формат оператора цикла с предусловием

.Каким образом выполняется оператор for?


Лекция №9


Тема: Функции

План:

1.Функции ввода и вывода. Описание, определение функции.

2.Примеры функций. Объявление и определение функций

.Возвращаемое значение. Параметры функции. Рекурсивные функции.

.Функция main(). Функции стандартной библиотеки.


Функции представляют собой центральный вопрос программирования на Turbo C++. Такие языки программирования, как Паскаль, делают различие между процедурами и функциями. В Turbo C++ функции играют обе роли.

Объявление и определение функций

Функция - это именованная последовательность описаний и операторов, выполняющая какое-либо законченное действие. Функция может принимать параметры и возвращать значение.

Любая программа на C++ состоит из функций, одна из которых должна иметь имя main (с нее начинается выполнение программы). Функция начинает выполняться в момент вызова. Любая функция должна быть объявлена и определена. Как и для других величин, объявлений может быть несколько, а определение только одно. Объявление функции должно находиться в тексте раньше ее вызова. Для того, чтобы компилятор мог осуществить проверку правильности вызова.

Объявление функции (прототип, заголовок, сигнатура) задает ее имя, тип возвращаемого значения и список передаваемых параметров.

Определение функции содержит, кроме объявления, тело функции, представляющее собой последовательность операторов и описаний в фигурных скобках:

[ класс ] тип имя ([ список_параметров ])[throw ( исключения )] { тело функции }

Возвращаемое значение

Механизм возврата из функции в вызвавшую ее функцию реализуется оператором

return [ выражение ];

Функция может содержать несколько операторов return (это определяется потребностями алгоритма). Если функция описана как void, выражение не указывается. Оператор return можно опускать для функции типа void, если возврат из нее происходит перед закрывающей фигурной скобкой, и для функции main. В этой книге для экономии места оператор return в функции main не указан, поэтому при компиляции примеров выдается предупреждение. Выражение, указанное после return, неявно преобразуется к типу возвращаемого функцией значения и передается в точку вызова функции.

Параметры функции

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

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

Рекурсивные функции

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

Классическим примером рекурсивной функции является вычисление факториала (это не означает, что факториал следует вычислять именно так). Для того чтобы получить значение факториала числа n, требуется умножить на n факториал числа (п-1). Известно также, что 0!=1 и 1!=1.

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

Функция main()

Функция, которой передается управление после запуска программы, должна иметь имя main. Она может возвращать значение в вызвавшую систему и принимать параметры из внешнего окружения. Возвращаемое значение должно быть целого типа. При запуске программы параметры разделяются пробелами. Имена параметров в программе могут быть любыми, но принято использовать argc и argv. Первый параметр (argc) определяет количество параметров, передаваемых функции, включая имя самой программы, второй параметр (argv) является указателем на массив указателей типа char*. Каждый элемент массива содержит указатель на отдельный параметр командной строки, хранящийся в виде С-строки, оканчивающейся нуль-символом. Первый элемент массива (argv[0]) ссылается на полное имя запускаемого на выполнение файла, следующий (argv[l]) указывает на первый параметр, argv[2] - на второй параметр, и так далее. Параметр argv[argc] должен быть равен 0.

Если функция main () ничего не возвращает, вызвавшая система получит значение, означающее успешное завершение. Ненулевое значение означает аварийное завершение. Оператор возврата из mainO можно опускать.

Функции стандартной библиотеки

Любая программа на C++ содержит обращения к стандартной библиотеке, в которой находятся определения типов, констант, макросов, функций и классов. Чтобы использовать их в программе, требуется с помощью директивы #iinclude включить в исходный текст программы заголовочные файлы, в которых находятся соответствующие объявления. В программах на C++ могут использоваться функции, унаследованные от библиотеки С.

Функции библиотеки можно разбить на группы по их назначению: ввод/вывод, обработка строк, математические функции, работа с динамической памятью, поиск и сортировка и т.д.

Контрольные вопросы:

1.Дайте определение функции.

2.Назовите примеры функций.

.Рекурсивные функции.


Лекция №10


Тема: Указатели и адресная арифметика

План:

1.Организация памяти

2.Адресация


Для большинства типов T T* является типом арифметический указатель на T. То есть, в переменной типа T* может храниться адрес объекта типа T.

Указатели делятся на две основные категории: указатели объектов и указатели функций. Указатели обоихтипов представляют собой специальные объекты, хранящие адреса памяти.

Два этиклассауказателей имеют отличные друг от друга свойства, назначения и правила манипулирования, хотя и те и другие разделяют между собойопределенные операцииTurbo C++. Вообще говоря, указатели функций используются для доступа к функциям и для передачиодних функцийдругим в качествеаргументов; выполнение арифметических операцийс указателямифункций не допускается. И напротив, указателиобъектов при сканировании массивов или более сложных структур памяти регулярно инкрементируются и декрементируются.

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

Объявления указателей

Объявление указателя всегда должно устанавливать его на некоторый конкретный тип, даже если этот тип void (что фактическиозначает указатель на любой тип). Однако, уже после объявления указатель обычно может быть переназначен на объект другого типа. Turbo C++ позволяет переназначать указатели без приведения в соответствие типа, но компилятор выдаст при этом предупреждение, если только первоначально указатель не был объявлен с типом void. В С (но не в С++) вы можете назначить указатель void* на указатель, не имеющий тип void*.

Если type есть любой предопределенный или определенный пользователем тип, включая void, то объявление*ptr;/* Опасно - неинициализированный указатель */

объявит ptr как "указатель на тип type". К объявленному таким образомобъекту ptr применимы все правила, связанные с контекстом, продолжительностью и видимостью.

Указатель со значением null это адрес, гарантированно отличный от любого допустимого указателя, используемого в программе. Присвоение указателю целой константы 0 присваивает указателю значение null.

Указатель типа "указатель на void" не следует путать с нулевым (null) указателем.

Арифметические операции с указателями

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

Арифметические операции с указателями ограничены сложением, вычитанием и сравнением. Арифметические операции с указателями объектов типа "указатель на тип type" автоматически учитывают размер этоготипа, то есть число байт, необходимое для хранения в памяти объекта данного типа. При выполнении арифметических операций с указателями предполагается, что указатель указывает на массив объектов. Таким образом, если указатель объявлен как указатель на type, то прибавление к нему целочисленного значения перемещает указатель на соответствующее количество объектов type. Если type имеет размер 10 байтов, то прибавление целого числа 5 к указателю этого типа перемещает указатель в памяти на 50 байт. Разность представляет собой число элементов массива, разделяющих два значения указателей. Например, если ptr1 указывает на третий элемент массива, а ptr2 на десятый, то результатом выполнения вычитания ptr2 - ptr1 будет 7э

Контрольные вопросы:

1.Объясните организацию памяти и адресацию.

2.Расскажите про указатели.


Лекция №11


Тема: Массивы

План:

1.Одномерные массивы и указатели.

2.Двумерные массивы.

.Использование указателей для двумерных массивов.


Массивы - это группа элементов одинакового типа (double, float, int и т.п.). Из объявления массива компилятор должен получить информацию о типе элементов массива и их количестве. Объявление массива имеет два формата:

спецификатор-типа описатель [константное - выражение];

спецификатор-типа описатель [ ];

Описатель - это идентификатор массива .

Спецификатор-типа задает тип элементов объявляемого массива. Элементами массива не могут быть функции и элементы типа void.

Константное-выражение в квадратных скобках задает количество элементов массива. Константное-выражение при объявлении массива может быть опущено в следующих случаях:

при объявлении массив инициализируется,

массив объявлен как формальный параметр функции,

массив объявлен как ссылка на массив, явно определенный в другом файле.

В языке СИ определены только одномерные массивы, но поскольку элементом массива может быть массив, можно определить и многомерные массивы. Они формализуются списком константных-выражений следующих за идентификатором массива, причем каждое константное-выражение заключается в свои квадратные скобки.

Каждое константное-выражение в квадратных скобках определяет число элементов по данному измерению массива, так что объявление двухмерного массива содержит два константных-выражения, трехмерного - три и т.д. Отметим, что в языке СИ первый элемент массива имеет индекс равный 0.

Примеры:a[2][3]; /* представлено в виде матрицы

a[0][0] a[0][1] a[0][2][1][0] a[1][1] a[1][2] */b[10]; /* вектор из 10 элементов имеющих тип double */

int w[3][3] = { { 2, 3, 4 },

{ 3, 4, 8 },

{ 1, 0, 9 } };

В последнем примере объявлен массив w[3][3]. Списки, выделенные в фигурные скобки, соответствуют строкам массива, в случае отсутствия скобок инициализация будет выполнена неправильно.

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

Примеры:s[2][3];

Если при обращении к некоторой функции написать s[0], то будет передаваться нулевая строка массива s.b[2][3][4];

При обращении к массиву b можно написать, например, b[1][2] и будет передаваться вектор из четырех элементов, а обращение b[1] даст двухмерный массив размером 3 на 4. Нельзя написать b[2][4], подразумевая, что передаваться будет вектор, потому что это не соответствует ограничению наложенному на использование сечений массива.

Пример объявления символьного массива.str[] = "объявление символьного массива";

Следует учитывать, что в символьном литерале находится на один элемент больше, так как последний из элементов является управляющей последовательностью '\0'.

Контрольные вопросы:

1.Расскажите про одномерные массивы и указатели.

2.Что такое двумерные массивы?

3.Понятие массива.

4.Как можно нумеровать элементы массива?

.Каким образом происходит сортировка массива?


Лекция №12


Тема: Структуры данных

План:

1.Описание структур.

2.Указатели и структуры данных.

.Обработка строк.


Структуры (struct)

Структура - это одна или несколько переменных (возможно, различных типов), которые для удобства работы с ними сгруппированы под одним именем. (В некоторых языках, в частности в Паскале, структуры называются записями.) Структуры помогают в организации сложных данных (особенно в больших программах), поскольку позволяют группу связанных между собой переменных трактовать не как множество отдельных элементов, а как единое целое.

Традиционный пример структуры - строка платежной ведомости. Она содержит такие сведения о служащем, как его полное имя, адрес, номер карточки социального страхования, зарплата и т. д. Некоторые из этих характеристик сами могут быть структурами: например, полное имя состоит из нескольких компонент (фамилии, имени и отчества); аналогично адрес, и даже зарплата. Другой пример (более типичный для Си) - из области графики: точка есть пара координат, прямоугольник есть пара точек и т. д.

Объявление структуры начинается с ключевого слова struct и содержит список объявлений, заключенный в фигурные скобки. За словом struct может следовать имя, называемое тегом структуры (от английского слова tag - ярлык, этикетка. - Примеч. пер.), point в нашем случае. Тег дает название структуре данного вида и далее может служить кратким обозначением той части объявления, которая заключена в фигурные скобки.

Перечисленные в структуре переменные называются элементами (members - В некоторых изданиях, в том числе во 2-м издании на русским языке этой книги structure members переводится как члены структуры. - Примеч. ред). Имена элементов и тегов без каких-либо коллизий могут совпадать с именами обычных переменных (т. е. не элементов), так как они всегда различимы по контексту. Более того, одни и те же имена элементов могут встречаться в разных структурах, хотя, если следовать хорошему стилю программирования, лучше одинаковые имена давать только близким по смыслу объектам.

Перечисления(enum)

При написании программ часто возникает потребность определить несколько именованных констант, для которых требуется, чтобы все они имели различные значения (при этом конкретные значения могут быть не важны). Для этого удобно воспользоваться перечисляемым типом данных, все возможные значения которого задаются списком целочисленных констант. Формат:

enum [ имя_типа ] { список констант };

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

Контрольные вопросы:

1.Дайте определение структуре.

2.Расскажите про указатели и структуры данных.

.Как производится обработка строк?

Лекция №13


Тема: Строки

План:

1. Обработка строк


Приступая к решению задач этого раздела, следует вспомнить, что:

1.каждому символу соответствует число - код символа;

2.в Cи строка - это массив символов;

.последним символом строки обязательно должен быть нуль-символ, код которого равен 0, и который в тексте программы изображается так: ' \ 0 ';

.сообщения или подсказки, используемые в программе, удобно представить как массив указателей на строки и инициализировать массив, задать сообщения в инструкции объявления массива:

.char *mes[] ={"Сообщение 1","Сообщение 2", ... , "Сообщение"};

.если вводимая во время работы программы строка содержит пробелы, то функция scanf вводит только часть строки до первого пробела, а функция gers - всю строку, в том числе и соответствующий клавише <Enter> символ ' \п'.

Приведем примеры решения задач на строки:

Задача 165

// Приветствие #include <stdio.h> #include <conio.h> void main() {name[15]; // имяfam[20]; // фамилия

printfC'KaK Вас зовут?\п");("Введите свое имя и фамилию,");

printf("затем нажмите <Enter>") ;("-> ");("%s", &name);("%s", sfam);

// функция scanf читает из буфера клавиатуры символы

//до разделителя - пробела("Здравствуйте, Is %s!\n", name, f am) ;("\пДля завершения нажмите <Enter>"); getch()

Задача 166

// Приветствие (посимвольный ввод строки) #include <stdio.h> #include <conio.h> void main()name[40]; // имя и отчество пользователя char ch; int i;'KaK Вас зовут?\п");("(введите свое имя, отчество и нажмите <Enter>"); printf("-> "); i = 0;

while ((ch=getch()) != 13 && i < 40) // пока не нажата

/¦/ клавиша <Enter>

h); name[i++] - ch; }] = '\0'; printf("ХпЗдравствуйте, %s!\n", name); И

И printf("\пДля завершения нажмите <Enter>"); I getch О; И

Задача 167// Вычисляет длину строки HI #include <stdio.h> #include <conio.h> void main(){ char st[80]; // введенная строка int i = 0; // длина строки IB

1 II HI puts("ХпВведите строку и нажмите <Enter>"); Н printf("->"); 111 gets(st); while( st[i++])

III

¦ HI printf("Длина введенной строки: %i\n", i) ; printf("Для завершения работы нажмите <Enter>"); 8^o,

Контрольные вопросы:

.Какое число соответствует каждому символу?

.Как выполняется обработка строк?


Лекция №14


Тема: Файлы

План:

1.Описание структуры файлов

2.Организация работы с файлами


Обычная СИ-программа представляет собой определение функции main, которая для выполнения необходимых действий вызывает другие функции. Приведенные выше примеры программ представляли собой один исходный файл, содержащий все необходимые для выполнения программы функции. Связь между функциями осуществлялась по данным посредством передачи параметров и возврата значений функций. Но компилятор языка СИ позволяет также разбить программу на несколько отдельных частей (исходных файлов), оттранслировать каждую часть отдельно, и затем объединить все части в один выполняемый файл при помощи редактора связей.

При такой структуре исходной программы функции, находящиеся в разных исходных файлах могут использовать глобальные внешние переменные. Все функции в языке Си по определению внешние и всегда доступны из любых файлов. Например, если программа состоит из двух исходных файлов, как показано на рис.2., то функция main может вызывать любую из трех функций fun1, fun2, fun3, а каждая из этих функций может вызывать любую другую.

main ()

{ ...

}()

{ ...

} . fun2()

{ ...

}()

{ ...

}.cfile2.c

Для того, чтобы определяемая функция могла выполнять какие либо действия, она должна использовать переменные. В языке СИ все переменные должны быть объявлены до их использования. Объявления устанавливают соответствие имени и атрибутов переменной, функции или типа. Определение переменной вызывает выделение памяти для хранения ее значения. Класс выделяемой памяти определяется спецификатором класса памяти, и определяет время жизни и область видимости переменной, связанные с понятием блока программы.

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

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

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

Область видимости - это часть текста программы, в которой может быть использован данный объект. Объект считается видимым в блоке или в исходном файле, если в этом блоке или файле известны имя и тип объекта. Объект может быть видимым в пределах блока, исходного файла или во всех исходных файлах, образующих программу. Это зависит от того, на каком уровне объявлен объект: на внутреннем, т.е. внутри некоторого блока, или на внешнем, т.е. вне всех блоков.

Если объект объявлен внутри блока, то он видим в этом блоке, и во всех внутренних блоках. Если объект объявлен на внешнем уровне, то он видим от точки его объявления до конца данного исходного файла.

Объект может быть сделан глобально видимым с помощью соответствующих объявлений во всех исходных файлах, образующих программу.

Контрольные вопросы:

1.Что представляет собой обычная СИ-программа?

2.Дайте определение термину «время жизни».

.Перечислите графические функции библиотеки Turbo C++.


Лекция №15


Тема: Работа с окнами. Графика

План:

1.Графические функции

2.Черчение

.Заполнение

Turbo C++ поставляется с полной библиотекой графических функций, позволяющих создание экранных графиков и диаграмм. Рабочий режим экрана определяется, когда ваша программа вызывает одну из функций определения режима (textmode, Initgraph или setgraphmode).

В графическом режиме экран компьютера делится на пиксели; каждый пиксель представляет собой отображение на экране одной точки. Число пикселей на экране (т.е. его разрешающая способность) зависит от типа подключенного к вашей системе видео адаптера и режима, в который установлен этот адаптер. Для получения на экране графических изображений Turbo C++ предоставляет библиотеку графических функций: вы можете создавать на экране линии и формы, заполненные шаблонами замкнутые области, а также управлять цветом каждого пикселя.

В текстовом режиме позиция верхнего левого угла экрана определяется координатами (1,1),где x-координата растет слева -направо, а y-координата растет сверху-вниз. В графическом режиме позиция верхнего левого угла определяется координатами (0,0), с теми же направления возрастания координат.

В графическом режиме вы также можете определить некоторую прямоугольнуюобласть экрана PC; эта область называется графическим окном. Когда ваша графическаяпрограмма выполняет вывод рисунков и т.д., графическое окно действует каквиртуальный экран. Остальная часть экрана (вне графического окна) остается без изменений.

За исключением функций определения текстовых играфических окон,все остальныефункции, как текстового, так и графического режимов, даются в локальных координатах активного текстовогоили графческого окна, а не в абсолютных экранных координатах. При этом верхний левый угол текстового окна будет являться началом координат (1,1); в графическомрежиме начало координат графического окна будет равно (0,0).C++ имеет отдельную библиотекус более чем 70 графическими функциями, начиная от функций высокого уровня (таких как setviewport, bar3d и drawpoly) и кончая бит-ориентированными функциями (ипа getimage иputimage). Графическая библиотека поддерживает многочисленные стили линий и заполнителей, а также предоставляютвам различныетекстовые шрифты, которые вы можете изменять по размерам, способу выравнивания, а также ориентировать их либо по горизонтали, либо по вертикали.

Эти функциинаходятсявбиблиотечномфайле

GRAPHICS.LIB, а их прототипы - в файле заголовка graphics.h. Кроме этих двух файлов, в состав графического пакета входят драйверы графических устройств (файлы *.BGI) и символьные шрифты (*.CHR-файлы)..

Графические функции Turbo C++ делятся на несколько категорий:

управления графической системой

черчения и заполнения

манипулирования экранами и графическими окнами

вывода текстов

управления цветами

обработки ошибок

запроса состояния

Для запуска графической системы вы должны прежде всего вызвать функцию initgraph. initgraph загружает графический драйвер и переводит систему в графический режим.

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

(через обращение к restorecrtmode).

Ниже приводится краткий обзор функций черчения и заполнения:

Черчение:

arcЧертит дугу окружности.

circleЧертит окружность.

drawpolyЧертит контур многоугольника.

ellipseЧертит эллиптическую дугу.

getarccoordsВозврашает координаты последнего вызова

arc или ellipse.Возвращает коэффициент сжатия для текуще

го графического режима.Возвращает текущий стиль линии, шаблон

линии и толщину линии.

lineЧертит линию из (x0,y0) в (x1,y1).

linerelЧертит линию в точку, задаваемую относитель

ным расстоянием от текущей позиции (CP).

linetoЧертит линию из текущей позиции (CP) в (x,y).Перемещает текущую позицию (CP) в (x,y).

moverelПеремещает текущую позицию (CP) на относитель

ное расстояние.

rectangleРисует прямоугольник.

setaspectratio Изменяет коэффициент сжатия по умолчанию.

setlinestyleУстанавливает ширину и стиль текущей линии.

Заполнение:

barЧертит и заполняет столбик.

bar3dЧертит и заполняет трехмерный столбик.

fillellipseЧертит и заполняет эллипс.

fillpolyЧертит и заполняет многоугольник.

getfillpattern Возвращает определяемый пользователем

шаблон заполнения.Возвращает информацию о текущкм шаблоне

и цвете заполнения.

piesliceЧертит и заполняет сектор окружности.

sectorЧертит и заполняет эллиптический сектор.

setfillpattern Выбирает шаблон заполнения, определяемый

пользвателем.

setfillstyleУстанавливает шаблон и цвет заполнения.

При помощи функций черчения и раскрашивания Turbo C++ вы можете вычерчивать цветные линии, дуги, окружности, эллипсы, прямоугольники, секторы, дву- и трехмерные столбики, многоугольники, а такжеразличные правильные или неправильные формы, являющиеся комбинациями перечисленныхграфических примитивов. Ограниченную форму изнутри или снаружи можно заполнить одним из 11 предопределенных шаблонов, либо шаблоном, определенным пользователем. Можнотакже управлять толщиной и стилем линии вычерчивания, а также местоположением текущей позиции.

Контрольные вопросы:

1.Каким образом можно включить и выключить графический режим?

2.Какие координаты имеют углы экрана?


Лекция №16


Тема: Особенности программирования на С++

План:

1.Основы программирования на языке С++

2.Операторы while, for.

программирование файл оператор

Си - универсальный язык программирования. Он тесно связан с системой UNIX, так как был разработан в этой системе, которая как и большинство программ, работающих в ней, написаны на Си. Однако язык не привязан жестко к какой-то одной операционной системе или машине. Хотя он и назван "языком системного программирования", поскольку удобен для написания компиляторов и операционных систем, оказалось, что на нем столь же хорошо писать большие программы другого профиля.

Многие важные идеи Си взяты из языка BCPL, автором которого является Мартин Ричардс. Влияние BCPL на Си было косвенным - через язык B, разработанный Кеном Томпсоном в 1970 г. для первой системы UNIX, реализованной на PDP-7.и B - "бестиповые" языки. В отличие от них Си обеспечивает разнообразие типов данных. Базовыми типами являются символы, а также целые и числа с плавающей точкой различных размеров. Кроме того, имеется возможность получать целую иерархию производных типов данных из указателей, массивов, структур и объединений. Выражения формируются из операторов и операндов. Любое выражение, включая присваивание и вызов функции, может быть инструкцией. Указатели обеспечивают машинно-независимую адресную арифметику. В Си имеются основные управляющие конструкции, используемые в хорошо структурированных программах: составная инструкция ({. . .}), ветвление по условию (if-else), выбор одной альтернативы из многих (switch), циклы с проверкой наверху (while, for) и с проверкой внизу (do), а также средство прерывания цикла (break). В Си нет прямых операций над составными объектами, такими как строки символов, множества, списки и массивы. В нем нет операций, которые бы манипулировали с целыми массивами или строками символов, хотя структуры разрешается копировать целиком как единые объекты. В языке нет каких-либо средств распределения памяти, помимо возможности определения статических переменных и стекового механизма при выделении места для локальных переменных внутри функций. Наконец, в самом Си нет средств ввода-вывода, инструкций READ (читать) и WRITE (писать) и каких-либо методов доступа к файлам. Все это - механизмы высокого уровня, которые в Си обеспечиваются исключительно с помощью явно вызываемых функций. Большинство реализованных Си-систем содержат в себе разумный стандартный набор этих функций. В продолжение сказанного следует отметить, что Си предоставляет средства лишь последовательного управления ходом вычислений: механизм ветвления по условиям, циклы, составные инструкции. Компактность языка имеет реальные выгоды. Поскольку Си относительно мал, то и описание его кратко, и овладеть им можно быстро. Программист может реально рассчитывать на то, что он будет знать, понимать и на практике регулярно пользоваться всеми возможностями языка.

Си не является "строго типизированным" языком, но в процессе его развития контроль за типами был усилен.

Однако основной философией Си остается то, что программисты сами знают, что делают; язык лишь требует явного указания об их намерениях.

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

В целом, С++ является над-множеством языка С. Это означает, что, вообще говоря, можно компилировать программы С в среде С++, однако компилировать программы С++ в среде С при наличии в них каких-либо специфических для С++ конструкций нельзя. Некоторые ситуации требуют специального внимания.

Одна и та же функция func, дважды объявленная в С с различными значениями аргументов, вызовет ошибку повторения имен. Однако, в С++ func интерпретируется как перегруженная функция - а то, допустимо это или нет, зависит от других обстоятельств.

Контрольные вопросы:

1.Дайте определение языку программирования Си.

2.Перечислите все бестиповые языки.

.Какие основные операторы используются на языке Си?


Календарно-тематический план консультаций в режимах F2F, on-line (СРСП), off-line

№ с№ срсп Тема Кол. час F2Fоn-line, off-lineКол. часНеделя11Тема: Введение. Цели и задачи дисциплины Вопросы: Цели и задачи дисциплины. Роль вычислительной техники в информационных системах. Примеры использования информационных систем в различных отраслях производства. Компьютеризация учебного процесса. Тема: Программные средства ПК Вопросы: Методы автоматизации программирования. Алгоритмические языки. Назначение алгоритмического языка и требования предъявляемые к нему. Понятие о процедурно-ориентированных языках и ООП. Понятие о программном обеспечении ПК. Диалоговые средства связи пользователей с ПК. Интегрированные системы программирования. Тема: Методология программирования Вопросы: Этапы и уровни разработки программ. Техническое задание на разработку программ. Этап технического проектирования программ. Разработка структурных схем алгоритмов. Организация данных. Разработка структуры программ и внутрипрограммного интерфейса.121,2,32Тема: Основы технологии программирования Вопросы: Методы проектирования программного обеспечения. Нисходящее и восходящее проектирование программ и их сочетание. Структурное программирование. Модульное программирование. Выбор языка программирования. Стиль программирования. Показатели качества программирования. Читаемость программ, комментарии. Программирование с защитой иот ошибок. Этап отладки и испытания программ. Документирование программ. Вид программной документации, установленной ГОСТом. Единая система программной документации (ЕСПД). Тема: Введение в систему программирования Си. Вопросы: Директивы препроцессора. Состав системы программирования, элементы языка. 124,563Тема: Типы данных: Вопросы: Типы данных: int, short, long, unsigned, float, double. Объявления. Выражения и присваивания. Операции языка Си. Тема: Операторы языка Си. Вопросы: Условный оператор. Оператор выбора. Операторы goto, break, continue. Тема: Операторы цикла. Вопросы: Цикл while Цикл do-while Инструкция for116,7,84Тема: Функции. Вопросы: Функции ввода и вывода. Описание, определение функции. Примеры функций. Объявление и определение функций. Возвращаемое значение. Параметры функции. Рекурсивные функции. Функция main(). Функции стандартной библиотеки. Тема: Указатели и адресная арифметика. Вопросы: Организация памяти и адресация.129,105Тема: Массивы Вопросы: Одномерные массивы и указатели. Двумерные массивы. Использование указателей для двумерных массивов. Тема: Структуры данных. Вопросы: Описание структур. Указатели и структуры данных.1111,126Тема: Строки. Вопросы: Обработка строк. Тема: Файлы. Вопросы: Описание структуры файлов. Организация работы с файлами. 1113, 147Тема: Работа с окнами. Графика. Вопросы: Графические функции. Черчение. Заполнение. Тема: Особенности программирования на С++. Вопросы: Основы программирования на языке С++.1115Всего:71015

Календарно-тематический план СРС

№ Содержание заданийКол. часовСрок сдачиФорма контроля1.Обработка символьной информации2 4-нед Графические режимы работы с экраном2Вычерчивание графических объектов.1Движение графических объектов. 2Разработка программ с использованием классов. 2 Библиотека графических подпрограмм.1Разработка программ с использованием различных стандартных модулей.1Примеры использования модульного программирования при решении сложных задач.2 Всего:13

Материалы для СРС:

Содержание заданийФорма контроля1. Категории типов данных <file:///D:\Мои%20Документы\C++\Книги\ПРОГРАММИРОВАНИЕ%20НА%20ЯЗЫКЕ%20СИ\h12.htm>

. Целый тип данных <file:///D:\Мои%20Документы\C++\Книги\ПРОГРАММИРОВАНИЕ%20НА%20ЯЗЫКЕ%20СИ\h12.htm>

. Данные плавающего типа <file:///D:\Мои%20Документы\C++\Книги\ПРОГРАММИРОВАНИЕ%20НА%20ЯЗЫКЕ%20СИ\h12.htm>

4. Указатели <file:///D:\Мои%20Документы\C++\Книги\ПРОГРАММИРОВАНИЕ%20НА%20ЯЗЫКЕ%20СИ\h12.htm>Подготовить конспект по данным темам Подготовить конспект по данной теме Подготовить конспект по данной теме Подготовить конспект по данной теме5. Оператор return <file:///D:\Мои%20Документы\C++\Книги\ПРОГРАММИРОВАНИЕ%20НА%20ЯЗЫКЕ%20СИ\h14.htm>. Оператор goto. <file:///D:\Мои%20Документы\C++\Книги\ПРОГРАММИРОВАНИЕ%20НА%20ЯЗЫКЕ%20СИ\h14.htm>

. Указатели на многомерные массивы

. Операции с указателями <file:///D:\Мои%20Документы\C++\Книги\ПРОГРАММИРОВАНИЕ%20НА%20ЯЗЫКЕ%20СИ\h17.htm>

8. Массивы указателей <file:///D:\Мои%20Документы\C++\Книги\ПРОГРАММИРОВАНИЕ%20НА%20ЯЗЫКЕ%20СИ\h17.htm>Подготовить конспект по данной теме Подготовить конспект по данной теме Подготовить конспект по данной теме Подготовить конспект по данной теме9. Прямая и косвенная рекурсия 10. Графика в С++. Написать программу, которая выводит на экран гистограмму успеваемости учеников класса, например, по итогам контрольной работы. Подготовить конспект по данной теме

Диаграмма.11. Графические функции. Написать программу, которая выводит на экран изображение идущих часов, имеющих секундную и минутную стрелки. 12. «Глобальные переменные». 13. Реализация динамических структур с помощью массивов.Файл на электронном носителе. Подготовить конспект. Подготовить конспект.

Контрольно-измерительные средства по дисциплине


История развития языка С++. Сравнительная характеристика языков С и С++.

1.Алфавит языка.

2.Идентификаторы. Комментарии. Ключевые слова. Константы.

.Унарные операции.

.Бинарные операции.

.Основные типы данных.

.Структура программы.

.Выражения

.Оператор ветвления.

.Оператор выбора.

.Операторы break и continue

.Цикл с предусловием.

.Цикл с постусловием.

.Цикл с параметром.

.Операторы передачи управления.

.Указатели.

.Одномерные массивы.

.Двумерные массивы.

.Строки.

.Переименование типов (typedef).

.Перечисления (enum).

.Структуры (struct).

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

.Объединения (union).

.Функции. Параметры функции.

.Возвращаемое значение функции. Оператор return.

.Рекурсивные функции.

.Перегрузка функций.

.Функции ввода-вывода.

.Ввод/вывод в поток

.Функция main().

.Шаблоны функций.

.Функции стандартной библиотеки.

.Математические функции

.Директива #include.

.Директива #define .

.Директивы условной компиляции.

.Директива #undef.

38.Графический режим.

39.Графические функции.

.Черчение. Заполнение.

41.Внешние объявления.

42.Поименованные области.

.Кодирование и документирование программы

.Проектирование и тестирование программы.

.Динамические структуры данных.

.Линейные списки.

.Стеки.

.Очереди.

.Бинарные деревья.


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


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

1.Павловская Т.А. С/С++. Программирование на языке высокого уровня. - СПб.: Питер, 2000.

2.Дэвис С. С++ для «чайников».- К.: Диалектика, 1996.

.Неформальное введение в С++ и Turbo Vision. - Галерея «Петрополь». 1992.

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

.Хортон А. Visual C++ 2010: полный курс. Диалектика г.Киев.2010. - 1216 c.

.Мошилев А.В., Пак Н.И. Хеннер Е.К. Практикум по информатике - М.: Академия, 2001. - 608 с.

.Павловская Т.А. С/С++. Программирование на языке высокого уровня. - Спб.: Питер, 2001. - 464 с.

.Пратта С. Язык программирования С++. Лекции и упражнения - М.: Диа-Софт, 2003. - 656 с.

.Семакин И.Г., Шестаков А.П. Основы программирования - М.: Мастерст-во, 2001. - 432 с.

.Страуструп Б. Дизайн и эволюция языка C++. Объектно-ориентированный язык программирования. - М.: ДМК-Пресс, 2000. - 448с.

.Шилд Г. С/С++. Справочник программиста - М.: Вильямс, 2000. - 448 с.

.Шмидский Я.К. Программирование на языке С/С++ - М.: Диалектика, 2003. - 352 с.

.Стефан Р. для `чайников`, 6-е издание Дэвис . C++. Вильямс г.Киев. 2010 . - 336 c.

.Шилдт Г. C++ для начинающих. Шаг за шагом. ЭКОМ г.Москва. 2010. - 640 c.

.Дэвид Р. Мюссер. C++ и STL: справочное руководство, 2-е изд. Вильямс г.Киев. 2010. - 432 c.

.Ишкова Э.А. C++. Начала программирования 3-е изд. стер. БИНОМ г.Москва. 2011. - 368 c.

13.Герберт Шилд. C++: базовый курс, 3-е изд. Вильямс г.Киев. 2010. - 624 c.


?.А.ЖОЛДАСБЕКОВ АТЫНДА?Ы ЭКОНОМИКА Ж?НЕ ???Ы? АКАДЕМИЯСЫ АКАДЕМИЯ ЭКОНОМИКИ И ПРАВА ИМЕНИУ.А. ДЖОЛДАСБЕКОВА Экономико-технический факультет

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ