Справочник от Автор24
Поделись лекцией за скидку на Автор24

Технологии программирования. Структурный подход к составлению программ

  • ⌛ 2016 год
  • 👀 1607 просмотров
  • 📌 1578 загрузок
  • 🏢️ Донской государственный технический университет
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Технологии программирования. Структурный подход к составлению программ» pdf
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ПОЛИТЕХНИЧЕСКИЙ ИНСТИТУТ (ФИЛИАЛ) ФЕДЕРАЛЬНОГО ГОСУДАРСТВЕННОГО БЮДЖЕТНОГО ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ ВЫСШЕГО ОБРАЗОВАНИЯ «ДОНСКОЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» В Г. ТАГАНРОГЕ РОСТОВСКОЙ ОБЛАСТИ ПИ (филиал) ДГТУ в г. Таганроге Автомобилестроение и сервис транспортных средств ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ Конспект лекций для студентов – заочников направления 09.03.02 «Информационные технологии» по курсу «Технологии программирования» (бакалавриат) 2016 г. Введение Изучение дисциплины позволит развить у студентов структурный подход к составлению программ, отработать основы математической логики, обучить студентов основным принципам и методам построения программ на языках программирования, необходимых при создании, исследовании и эксплуатации алгоритмов различной природы, ознакомить с семантикой языков программирования, объектно-ориентированными формальными языками спецификаций, спецификациями, с тенденциями программирования, методами проектирования программных комплексов, основанных на международных стандартах, структурным и объектно – ориентированным подходами к программированию. Интенсивное опирающееся на развитие широкое процесса внедрение информатизации достижений общества, информатики и вычислительной техники в различные сферы деятельности, ставит перед высшей школой задачу – подготовить студентов к использованию полученных знаний в последующей профессиональной деятельности. Лекция №1 Тема: Введение. Цели и задачи дисциплины План: 1. Технология 2. Программные средства ПК 3. Экспертная система Функциональная сложность объектов автоматизации на базе ЭВМ быстро увеличивается с расширением круга приложений информационной технологии. Неизбежным наблюдаемый в программирования следствием настоящее с время исторически этой тенденции сдвиг акцентов первых проблем оказывается в практике логического проектирования и кодирования программ, по точно заданным формальным спецификациям, к проблемам анализа так называемых слабоструктурированных задач, создания принципиально новой технологии программирования для областей приложений с трудноформализуемыми условиями. При этом программирование, как профессиональная деятельность, все дальше эволюционирует за пределы узкого круга точно поставленных задач, которые преобладали в первые десятилетия компьютерной эры и дали повод рассматривать эту область инженерной деятельности как строго формализуемую математическую дисциплину. Внедрение мини- и микро -ЭВМ в самую гущу сложных производственных отношений современных предприятий, учреждений, КБ и научных лабораторий ставит перед программированием принципиально новые, несопоставимо более сложные задачи и соответственно накладывает на эту до недавнего времени «точную» дисциплину отпечаток естественных, а в ряде случаев и гуманитарных наук. Еще 20 лет назад смысл последних достижений молекулярной генетики обычно поясняли с помощью простой аналогии: «код первичной структуры ДНК играет для функционирования генетического аппарата живого организма ту же роль, что код программы для функционирования ЭВМ». В 1981 г. журнал «Computer & People» опубликовал статью «Техника автоматизации процессов разработки программного обеспечения», автор которой, кроме прочего, разъяснил читателям популярного компьютерного журнала, что «программное обеспечение играет для машины ту же самую роль, которую ДНК играет для живого организма». Растущий интерес к естественнонаучным и гуманитарным аспектам процесса технологической эволюции вообще, а науки об ЭВМ в особенности неслучаен. Быстро убегающий барьер сложности изделий современной вычислительной техники уже не позволяет рассчитывать в ближайшем будущем на успех каких-либо практически интересных попыток описания их структуры и функций в категориях лишь традиционных «точных» наук. Чтобы на конкретных примерах проиллюстрировать существо сложившихся к настоящему времени различий в оценках взаимосвязи точных, естественнонаучных и гуманитарных аспектов науки о программах, мы попытаемся ниже сопоставлять некоторые из формулируемых по ходу изложения тезисов с альтернативной точкой зрения. Наука о программах, история развития На заре эры ЭВМ Дж. фон Нейман отмечал, что «многое из опыта нашей работы с искусственными автоматами может быть до некоторой степени1 перенесено на наше понимание естественных организмов». Попытки использовать математические результаты «опыта работы с искусственными автоматами» для разработки абстрактных схем интеллектуального «акта творения» (например, для формализации процесса создания простейших автоматов) восходят к работам Дж. Буля, Лейбница, Декарта и, видимо, далее в глубь веков к Архимеду и эпистемологическим учениям древних греков. Первая волна широкого общественного интереса к этому научному направлению совпала по времени с появлением ЭВМ и была инициирована, как принято считать, выходом в 1948 г. книги Н. Винера «Кибернетика или управление и связь в животном и машине». После того как с начала 60-х годов миражи «глобальной кибернетизации» начали постепенно рассеиваться, научные исследования двустороннего интеллектуального взаимодействия «человек - ЭВМ» на некоторое время оказались локализованными в небольшом числе разрозненно действующих исследовательских групп, связанных между собой в основном лишь претенциозным термином-лозунгом: «искусственный интеллект». Ренессанс искусственного интеллекта (ИИ) как одного из научных направлений в теории вычислительной техники начался за рубежом в 80-х годах вслед за внезапно пронесшимся над ИИ- лабораториями «золотым дождем» многомиллионных дотаций, вызванным обострением соперничества между США и Японией за первенство в компьютерной технологии 90-х годов (проект создания ЭВМ «пятого поколения»). К этому времени ряд ИИ- исследовательских коллективов начал эволюционировать в своей практической деятельности за пределы чисто абстрактных упражнений (по «естественно-языковой» тематике, машинному доказательству избранного типа теорем и другим умиротворяюще безысходным, хотя и весьма почтенным занятиям) к конструктивным исследованиям, направленным на создание конкретных проблемно- ориентированных «баз знаний». На этом направлении в конце 70-х годов были получены те первые практически полезные результаты, которые позволили начать в 80-х годах постепенно слой за слоем снимать сложившийся за два десятилетия непроницаемый налет схоластики с «искусственного интеллекта» как научного направления в теории ЭВМ. К настоящему времени в мире действует уже 2-3 десятка практически полезных «экспертных систем» (по некоторым разделам медицины, геологии, химии и другим «трудно формализуемым» областям знаний). Разрабатываются элементы промышленной технологии обработки данных с использованием машинно-экстрагируемых из профессионалов знаний (knowledge engineering). Именно вокруг этих прагматической ориентации научных коллективов и университетских лабораторий начали формироваться специализированные подразделения промышленных предприятий и независимые исследовательские фирмы, занятые поиском областей приложений и коммерческим внедрением компьютерных систем, реализующих принципы «технологии знаний». Программы ЭВМ - разумеется, не единственный и далеко не первый доступный для анализа Машиностроительные продукт чертежи, интеллектуального схемы акта творения. радиотехнических изделий, архитектурные проекты, музыкальные и литературные произведения, произведения изобразительного искусства уже долгие годы дают богатейший материал для такого рода анализа. Вместе с тем, следует отметить, что программы ЭВМ являются, видимо, одним из наиболее благодарных объектов для такого анализа. Анализ процесса создания программ может быть выполнен по самым различным научным методикам: психологическим, эстетическим, физиологическим, математическим, технологическим и т. д. Долгое время человечество волнует вопрос о том, к какому роду деятельности относится программирование. В 60-х – 70-х годах XX века данный вопрос активно обсуждался на научных конференциях. Существовало 2 популярных точки зрения: «программирование это искусство» и «программирование это наука». К единому мнению придти так и не удалось. В настоящий момент мы можем добавить к этим популярным трактовкам еще одну: «программирование это бизнес» Контрольные вопросы: 1. Цели и задачи дисциплины. 2. Роль вычислительной техники в информационных системах. 3. Примеры использования информационных систем в различных отраслях производства. Компьютеризация учебного процесса. 4. Методы автоматизации программирования. Алгоритмические языки. 5. Назначение алгоритмического языка и требования предъявляемые к нему. 6. Понятие о процедурно-ориентированных языках и ООП. 7. Понятие о программном обеспечении ПК. Диалоговые средства связи пользователей с ПК. Интегрированные системы программирования. Лекция №2. Тема: Введение. Программные средства ПК План: 1. Этапы и уровни разработки программ 2. Разработка структурных схем алгоритмов 3. Стиль программирования. Показатели качества программирования Прикладные программы предназначены для того, чтобы обеспечить применение вычислительной техники в различных сферах деятельности человека. Помимо создания новых программных продуктов разработчики прикладных программ большие усилия тратят на совершенствование и модернизацию популярных систем, создание их новых версий. Новые версии, как правило, поддерживают старые, сохраняя преемственность, и включают в себя базовый минимум (стандарт) возможностей. -Инструментальные программные средства общего назначения Несмотря на широкие возможности использования компьютеров для обработки самой разной информации, самыми популярными являются программы, предназначенные для работы с текстами - текстовые редакторы и издательские системы. Текстовыми редакторами называют программы для ввода, обработки, хранения и печатания текстовой информации в удобном для пользователя виде. Эксперты оценивают использование компьютера в качестве печатающей машинки в 80%. Большую популярность приобрели программы обработки графической информации. Компьютерная графика в настоящее время является одной из самых динамично развивающихся областей программного обеспечения. Она включает в себя ввод, обработку и вывод графической информации чертежей, рисунков, картин, текстов и т.д. - средствами компьютерной техники. Различные типы графических систем позволяют быстро строить изображения, вводить иллюстрации с помощью сканера или видеокамеры, создавать анимационные ролики. Графические редакторы позволяют пользоваться различным инструментарием художника, стандартными библиотеками изображений, наборами стандартных шрифтов, редактированием изображений, копированием и перемещением фрагментов по страницам экрана и др. Для выполнения расчетов и дальнейшей обработки числовой информации существуют специальные программы - электронные таблицы. В процессе деятельности любого специалиста часто требуется представить результаты работы в виде таблиц, где одна часть полей занята исходными данными, а другая -. результатами вычислений и графического анализа. Характерными для них является большой объем перерабатываемой информации, необходимость многократных расчетов при изменении исходных данных. Автоматизацией подобной рутинной работы и занимаются электронные таблицы. Одним из наиболее перспективных направлений развития вычислительной техники является создание специальных аппаратных средств для хранения гигантских массивов информационных данных, и последующей нечисловой обработки их -поиска и сортировки. Для компьютерной обработки подобных баз данных используют системы управления базами данных. СУБД - это набор средств программного обеспечения, необходимых для создания, обработки и вывода записей баз данных. Различают несколько типов СУБД: иерархические, сетевые, реляционные. При работе с СУБД выделяют несколько последовательных этапов: • проектирование базы данных; • создание структуры базы данных; • заполнение базы данных; • просмотр и редактирование базы данных; • сортировку базы данных; • поиск необходимой записи; • выборку информации; • создание отчетов. Как правило, большинство популярных систем управления базами данных поддерживают эти этапы и предоставляют удобный инструментарий для их реализации. Универсальные интегрированные системы разрабатывались по принципу единой системы, содержащей в качестве элементов текстовые и графические редакторы, электронные таблицы и систему управления базами данных. Примеры: Framework, Works, Мастер. Современная концепция интеграции программных средств - кооперация отдельных прикладных программных систем по типу широко известного пакета MicroSoft Office. Сами системы, входящие в пакет, являются независимыми, более того, они сами представляют локально интегрированный пакет, поскольку помимо основной своей задачи поддерживают функции других систем. Например, текстовый редактор Word обладает возможностью манипулировать с электронными таблицами и базами данных, а в электронной таблице Excel встроен мощный текстовый редактор. Для сопряжения информационных данных из различных программных систем в них предусматривают импорт- экспортную систему обмена с перекодировкой форматов представления данных. -Инструментальные программные средства специального назначения Разработчики создают специальные программные системы целевого назначения для специалистов в некоторой предметной области. Такие программы называют авторскими инструментальными системами. Авторская система представляет интегрированную среду с заданной интерфейсной оболочкой, которую пользователь может наполнить информационным содержанием своей предметной области. Экспертная система - это программа, которая ведет себя подобно эксперту в некоторой узкой прикладной области. Экспертные системы призваны решать задачи с неопределенностью и неполными исходными данными, требующие для своего решения экспертных знаний. Кроме того, эти системы должны уметь объяснять свое поведение и свое решение. Принципиальным отличием экспертных систем от других программ является их адаптивность, т.е. изменчивость в процессе самообучения. Принято выделять в экспертных системах три основных модуля: • модуль базы знаний; • модуль логического вывода; • интерфейс с пользователем. В последнее время широкую популярность получили программы обработки гипертекстовой информации. Гипертекст – это форма организации текстового материала не в линейной последовательности, а в форме указании возможных переходов (ссылок), связей между отдельными его фрагментами. В обычном тексте используется обычный линейный принцип размещения информации и доступ к нему осуществляется последовательно. В гипертекстовых системах информация напоминает текст энциклопедии, и доступ к любому выделенному фрагменту текста осуществляется произвольно по ссылке. Организация информации в гипертекстовой форме используется при создании справочных пособий, словарей, контекстной помощи (Help) в прикладных программах. Расширение концепции гипертекста на графическую и звуковую информацию приводит к понятию гипермедиа. Идеи гипермедиа получили распространение технологиях. в сетевых Технология технологиях, WWW (World в частности Wide в Web) Интернетпозволила структурировать громадные мировые информационные ресурсы посредством гипертекстовых ссылок. Появились программные средства, позволяющие создавать подобные Web-странички. Стали развиваться механизмы поиска нужной информации в лабиринте информационных потоков. Популярными поисковыми средствами в Интернет являются Yahoo, AltaVista, Magellan, Rambler и др. Мультимедиа (multimedia) - это взаимодействие визуальных и аудиоэффектов под управлением интерактивного программного обеспечения Контрольные вопросы: 1. Методы автоматизации программирования. Алгоритмические языки. 2. Назначение алгоритмического языка и требования предъявляемые к нему. Лекция №3 Тема: Методология программирования План: 1. Директивы препроцессора. 2. Состав системы программирования, элементы языка 3. Определение макросов Технологии программирования – путь к успеху в разработке ПО. Технология – совокупность производственных процессов в определенной отрасли производства, а также научное описание способов производства. Создание любой программной системы выполняется по некоторой схеме. Данная схема представляет собой последовательность стандартных этапов : анализ, проектирование, разработка, тестирование, модификация. Анализ: Определение требований к программе. Что является исходными данными, что - конечными результатами? Как должна вести себя программа, если конечный результат по каким-то причинам не может быть получен? Вам предстоит ответить на эти и, возможно, на некоторые другие аналогичные вопросы. Проектирование: Составление / выбор алгоритма решения поставленной задачи. Примечание: Алгоритм - это последовательность действий, необходимая для достижения какого-либо результата. Разработка: Написание команд программы (исходного кода, исходника) на каком-либо языке программирования высокого уровня - ЯВУ. Примечание: высокоуровневый язык программирования означает высокую долю абстрагирования от языка машин. То есть чем более высокий уровень языка программирования, тем он ближе к человеческому языку, тем он более абстрагирован от сугубо компьютерных понятий. Например, Delphi высокоуровневый язык программирования, а вот машинные коды низкоуровневый язык программирования (так как ближе к компьютеру, а нормальному человеку обычно непонятен). Модификация: Отладка программы. Это процесс поиска и устранения ошибок в программе. Ошибки могут быть: синтаксические (неверно использовали конструкции языка программирования), алгоритмические (программист что-то упустил), ошибки времени исполнения (возникают из-за неверных данных). Тестирование: Основная цель тестирования - исключить из программы максимальное число возможных ошибок. Это можно сделать, проверив работоспособность проекта на максимально большом числе входных данных. Этап важный, неясно почему им пренебрегли авторы Готики 3 или Delphi 2005. Именно на этих этапах и возникают существенные финансовые затраты. Для их оптимизации необходимо было понять, что программирование есть обычный технологический процесс, по характеру возникающих проблем мало чем отличающийся от, скажем, строительства дома или корабля. Для сокращения затрат необходимо было конкретизировать схему, упорядочить действия, выполняемые на каждом этапе, разработать методы решения возникающих на разных этапах проблем. В довершении ко всему, схема подразумевает возвраты назад (циклы), в тех случаях, когда обнаруживается ошибка предыдущего этапа. В результате кропотливой работы большого количества специалистов на каждом этапе и подэтапе возникли и продолжают появляться и совершенствоваться специальные технологии, позволяющие решать задачи в заданные сроки с заданным качеством. Итак, технология программирования – совокупность методов, приемов и средств для сокращения стоимости и повышения качества разработки программных систем. В любой программного серьезной обеспечения, компании, на каждом занимающейся этапе процесса применяется большое количество разных технологий. Контрольные вопросы: 1. Этапы и уровни разработки программ 2. Разработка структурных схем алгоритмов 3. Стиль программирования. Показатели качества разработкой разработки Лекция №4 Тема: Основы технологии программирования План: 1. Методы проектирования программного обеспечения. 2. Выбор языка программирования. 3. Структурное программирование. Модульное программирование. 4. Программирование с защитой иот ошибок. Этап отладки и испытания программ. Документирование программ. Вид программной документации, установленной ГОСТом. Единая система программной документации (ЕСПД). Проектирование алгоритмов и программ - наиболее ответственный этап жизненного цикла программных продуктов, определяющий, насколько создаваемая программа соответствует спецификациям и требованиям со стороны конечных пользователей. Затраты на создание, сопровождение и эксплуатацию программных продуктов, научно-технический уровень разработки, время морального устаревания и многое другое- все это также зависит от проектных решений. Методы проектирования алгоритмов и программ очень разнообразны, их можно классифицировать по различным признакам, важнейшими из которых являются: -степень автоматизации проектных работ; -принятая методология процесса разработки. По степени автоматизации проектирования алгоритмов и программ можно выделить: -методы традиционного (неавтоматизированного) проектирования; -методы автоматизированного проектирования (CASE-технология и ее элементы). Проектирование алгоритмов и программ может основываться на различных подходах, среди которых наиболее распространены: -структурное проектирование программных продуктов; -информационное моделирование предметной области и связанных с ней приложений; -объектно-ориентированное проектирование программных продуктов. В основе структурного проектирования лежит последовательная декомпозиция, целенаправленное структурирование на отдельные составляющие. Начало развития структурного проектирования алгоритмов и программ падает на 60-е гг. Методы структурного проектирования представляют собой комплекс технических и организационных принципов системного проектирования. Типичными методами структурного проектирования являются: -нисходящее проектирование, кодирование и тестирование программ; -модульное программирование; -структурное проектирование (программирование) и др. Для функционально-ориентированных методов в первую очередь учитываются заданные функции обработки данных, в соответствии с которыми определяется состав и логика работы (алгоритмы) отдельных компонентов программного продукта. С изменением содержания функций обработки, их состава, соответствующего им информационного входа и выхода требуется перепроектирование программного продукта. Основной упор в структурном подходе делается на моделирование процессов обработки данных. Для методов структурирования данных осуществляется анализ, структурирование и создание моделей данных, применительно к которым устанавливается необходимый состав функций и процедур обработки. Программные продукты тесно связаны со структурой обрабатываемых данных, изменение которой отражается на логике обработки (алгоритмах) и обязательно требует перепроектирования программного продукта. Объектно-ориентированный подход к проектированию программных продуктов основан на: -выделении классов объектов; -установлении характерных свойств объектов и методов их обработки; -создании иерархии классов, наследовании свойств объектов и методов их обработки. Каждый объект объединяет как данные, так и программу обработки этих данных и относится к определенному классу. С помощью класса один и тот же программный код можно использовать для относящихся к нему различных объектов. Объектный подход при разработке алгоритмов и программ предполагает: -объектно-ориентированный анализ предметной области; -объектно-ориентированное проектирование. Для проектирования программных продуктов разработаны объектноориентированные технологии, которые включают в себя специализированные языки программирования и инструментальные средства разработки пользовательского интерфейса. Традиционные подходы к разработке программных продуктов всегда подчеркивали различия между данными и процессами их обработки. Так, технологии, ориентированные на информационное моделирование, сначала специфицируют данные, а затем описывают процессы, использующие эти данные. Технологии структурного подхода ориентированы, в первую очередь, на процессы обработки данных с последующим установлением необходимых для этого данных и организации информационных потоков между связанными процессами. Объектно-ориентированная технология разработки программных продуктов объединяет данные и процессы в логические сущности - объекты, которые имеют способность наследовать характеристики (методы и данные) одного или более объектов, обеспечивая тем самым повторное использование программного кода. Это приводит к значительному уменьшению затрат на создание программных продуктов, повышает эффективность жизненного цикла программных продуктов (сокращается длительность фазы разработки).При выполнении программы объекту посылается сообщение, которое инициирует обработку данных объекта. Парадигма -набор теорий, стандартов и методов, которые совместно представляют собой способ организации научного знания, иными словами, способ видения мира. По аналогии с этим принято считать, что парадигма в программировании -способ концептуализации, который определяет, как следует проводить вычисления, и как работа, выполняемая компьютером, должна быть структурирована и организована. Известно несколько основных парадигм программирования, важнейшими из которых на данный момент времени являются парадигмы директивного, объектно-ориентированного и функционально-логического программирования. Для поддержки программирования в соответствии с той или иной парадигмой разработаны специальные алгоритмические языки. C и Pascal являются примерами языков, предназначенных для директивного программирования (directive programming), когда разработчик программы использует процессно-ориентированная модель, то есть пытается создать код, должным образом воздействующий на данные. Активным началом при этом подходе считается программа (код), которая должна выполнить все необходимые для достижения нужного результата действия над пассивными данными. Этот подход представляется вполне естественным для человека, который только начинает изучать программирование, и исторически возник одним из первых, однако он практически неприменим для создания больших программ. Первые две главы книги посвящены именно директивному программированию, так как подобный стиль оптимален для программирования в малом, а навыки, которые он позволяет приобрести, необходимы и при использовании других подходов. Сейчас весьма распространенным стал объектно-ориентированный (object oriented) подход, реализуемый, например, языками C++ и Java. При этом, наоборот, первичными считаются объекты (данные), которые могут активно взаимодействовать друг с другом с помощью механизма передачи сообщений (называемого также и механизмом вызова методов). Функция программиста в этом случае подобна роли бога при сотворении Вселенной -он должен придумать и реализовать такие объекты, взаимодействие которых после старта программы приведет к достижению необходимого конечного результата. Функциональное и логическое программирование использует языки типа Lisp, Haskell и Prolog. Эта парадигма базируется на принципиально иной трактовке понятия программы. Здесь главным является точная формулировка задачи, а выбор и применение необходимого для ее алгоритма решения -проблема исполняющей системы, но не программиста. Принцип, на котором зиждется технология структурного программирования – фундаментальная научная и техническая идея о выделении множества базисных элементов, с помощью которых можно выразить (из которых можно собрать) любой объект из некоторого широкого набора. Итак, основной принцип технологии структурного программирования гласит: для любой простой программы можно построить функционально эквивалентную ей структурную программу, т.е. программу, сформированную на основе фиксированного базисного множества, включающего структуру последовательного действия, структуру выбора одного из двух действий и структуру цикла, то есть многократного повторения некоторого действия с проверкой условия остановки повторения. Нисходящее и восходящее проектирование Одна из основных идей, положенных в большинство известных технологий программирования - нисходящее проектирование. Существуют также другие названия: совершенствованием'', ``программирование ``систематическое с пошаговым программирование'', ``иерархическое программирование''. Принцип его - сначала определяются основные функции, которые должны быть обеспечены изготавливаемой программой, а затем доопределяются дополнительные функции, вытекающие из основных. Вот некоторые принципы нисходящего проектирования: -Подробное формальное и строгое описание проектировщиком входов, функций и выходов всех модулей программ или системы. -Как только Вы убедитесь, что некоторая часть задачи может быть реализована в виде отдельного модуля, Постарайтесь больше не думать об этом. -На каждом уровне проекта пытайтесь записать реализацию модуля в виде символических кодов или блок схемы (размер описания в идеале не должен превосходить одного листа, чтобы при последующем анализе перед глазами находилась наиболее полная картина). -Проектированию структуры данных и их движения следует не меньше времени, чем программе. Методы проектирования алгоритмов: Методы проектирования алгоритмов включают: нисходящее проектирование, модульность, структурное программирование. Нисходящее проектирование предполагает последовательное разбиение исходной задачи на подзадачи до такой конкретизации, когда подзадача сможет быть реализована одним оператором выбранного для программирования языка. По ходу нисходящего проектирования та или иная подзадача может сформировать самостоятельный модуль. Контрольные вопросы: 1. Нисходящее и восходящее проектирование программ и их сочетание. 2. Стиль программирования. программирования. 3. Читаемость программ, комментарии. Показатели качества Лекция №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. Объявления. Выражения и присваивания. 3. Операции языка Си. Простые типы в С++ делятся на целочисленные типы и типы с плавающей точкой. Для описания стандартных типов определены следующие ключевые слова:  int (целый);  char (символьный);  bool (логический);  float (вещественный);  double (вещественный с двойной точностью). Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений стандартных типов:  short (короткий);  long (длинный);  signed (со знаком);  unsigned (без знака). Таблица 1.3. Диапазоны значений простых типов данных для IBM PC Тип Bool signed char Unsigned char signed short int Unsigned short int signed long int Unsigned long int Float Double long double Диапазон значений true и false -128 … 127 Размер (байт) 1 1 0 … 255 1 -32 768 … 32 767 2 0 … 65 535 2 -2 147 483 648 … 2 147 483 647 4 0 … 4 294 967 295 4 3.4e-38 … 3.4e+38 1.7e-308 … 1.7e+308 3.4e-4932 … 4 8 3.4e+4932 10 Для вещественных типов в таблице приведены абсолютные величины минимальных и максимальных значений. Все переменные должны быть объявлены раньше, чем будут использоваться, при этом некоторые объявления могут быть получены неявно - из контекста. Объявление специфицирует тип и содержит список из одной или нескольких переменных этого типа, как, например, в int lower, upper, step; char с, line[1000]; Переменные можно распределять по объявлениям произвольным образом, так что указанные выше списки можно записать и в следующем виде: int lower; int upper; int step; char c; char line[1000]; Последняя форма записи занимает больше места, тем не менее она лучше, поскольку позволяет добавлять к каждому объявлению комментарий. Кроме того, она более удобна для последующих модификаций. В своем объявлении переменная может быть инициализирована, как, например: char esc = '\\'; int i = 0; int limit = MAXLINE+1; float eps = 1.0e-5; Инициализация неавтоматической переменной осуществляется только один раз - перед тем, как программа начнет выполняться, при этом начальное значение должно быть константным выражением. Явно инициализируемая автоматическая переменная получает начальное значение каждый раз при входе в функцию или блок, ее начальным значением может быть любое выражение. Внешние и статические переменные по умолчанию получают нулевые значения. Автоматические переменные, явным образом не инициализированные, содержат неопределенные значения ("мусор”). К любой переменной в объявлении может быть применен квалификатор const для указания того, что ее значение далее не будет изменяться. const double е = 2.71828182845905; const char msg[] = "предупреждение: "; Применительно к массиву квалификатор const указывает на то, что ни один из его элементов не будет меняться. Указание const можно также применять к аргументу- массиву, чтобы сообщить, что функция не изменяет этот массив: int strlen(const char[]); Реакция на попытку изменить переменную, квалификатором const зависит от реализации компилятора. помеченную Таблица 1.5 Основные операции языка С++ О О п п е е р а Краткое описание р Краткое а описание ц ц и и я Унарные операции я + + s увеличение на 1 О Краткое описание Бинарные операции поразрядная * умножение | дизъюнкция (ИЛИ) уменьшение на 1 / размер % деление & логическое И | логическое ИЛИ i z e остаток от деления o f ~ ! - поразрядное отрицание логическое отрицание арифметическое отрицание (унарный минус) + унарный плюс & взятие адреса * разадресация n выделение памяти e условная + сложение ? операция (тернарная) - вычитание = сдвиг влево * сдвиг вправо / < меньше % < меньше или = > равно больше < < > > + - присваивание умножение с присваиванием деление с присваиванием остаток отделения с присваиванием сложение с присваиванием вычитание с присваиванием w d e l освобождение > больше или e памяти = равно y преобразование = p типа = < сдвиг влево с присваиванием t e ( t равно > не равно & сдвиг вправо с присваиванием e ) ! = & поразрядная конъюнкция (И) | поразрядное И с присваиванием поразрядное ИЛИ с присваиванием Контрольные вопросы: 1. Какие спецификаторы типов вы знаете? 2. Перечислите простые типы данных в С#. 3. Как осуществляется инициализация переменной ? Лекция №7 Тема: Операторы языка Си План: 1. Условный оператор 2. Оператор выбора 3. Операторы goto, break, continue Оператор "выражение" Любое выражение, завершающееся точкой с запятой, рассматривается как оператор, выполнение которого заключается в вычислении выражения. Частным случаем выражения является пустой оператор ; (он используется, когда по синтаксису оператор требуется, а по смыслу - нет). Примеры: i++;//выполняется операция инкремента a* = b + c;//выполняется умножение с присваиванием fund (k). // выполняется вызов функции Операторы ветвления. Инструкция if-else используется для принятия решения. Формально ее синтаксисом является: if (выражение) инструкция1 else инструкция2 причем else-часть может и отсутствовать. Сначала вычисляется выражение, и, если оно истинно (т. е. отлично от нуля), выполняется инструкция1. Если выражение ложно (т. е. его значение равно нулю) и существует else-часть, то выполняется инструкция2. Пример: if (а > b) z = а; else z = b; Оператор switch Инструкция switch используется для выбора одного из многих путей. Она проверяет, совпадает ли значение выражения с одним из значений, входящих в некоторое множество целых констант, соответствующую этому значению ветвь программы: switch (выражение) { case конст-выр: инструкции и выполняет case конст-выр: инструкции default: инструкции } Каждая ветвь case помечена одной или несколькими целочисленными константами или же константными выражениями. Вычисления начинаются с той ветви case, в которой константа совпадает со значением выражения . Константы всех ветвей case должны отличаться друг от друга. Если выяснилось, что ни одна из констант не подходит, то выполняется ветвь, помеченная словом default, если таковая имеется, в противном случае ничего не делается. Инструкции break и continue Иногда бывает удобно выйти из цикла не по результату проверки, осуществляемой в начале или в конце цикла, а каким-то другим способом. Такую возможность для циклов for, while и do-while, а также для переключателя switch предоставляет инструкция break. Эта инструкция вызывает немедленный выход из самого внутреннего из объемлющих ее циклов или переключателей. Инструкция continue в чем-то похожа на break, но применяется гораздо реже. Она вынуждает ближайший объемлющий ее цикл (for, while или dowhile) начать следующий шаг итерации. Контрольные вопросы: 1. Расскажите про Оператор switch 2. Перечислите операторы цикла. 3. Расскажите об операторах goto, break, continue. Лекция №8 Тема: Операторы цикла План: 1. Цикл while 2. Цикл do-while 3. Инструкция for Цикл while В цикле while (выражение) инструкция вычисляется выражение. Если его значение отлично от нуля, то выполняется инструкция, и вычисление выражения повторяется. Этот цикл продолжается до тех пор, пока выражение не станет равным нулю, после чего вычисления продолжатся с точки, расположенной сразу за инструкцией. Цикл do-while В Си имеется еще один вид цикла, do-while, в котором эта проверка делается внизу после каждого прохождения тела цикла, т. е. после того, как тело выполнится хотя бы один раз. Цикл do-while имеет следующий синтаксис: do инструкция while (выражение); Сначала выполняется инструкция, затем вычисляется выражение. Если оно истинно, то инструкция выполняется снова и т. д. Когда выражение становится ложным, цикл заканчивает работу. Цикл do-while эквивалентен циклу repeat-until в Паскале с той лишь разницей, что в первом случае указывается условие продолжения цикла, а во втором — условие его окончания. Инструкция for for (выр1; выр2; выр3) инструкция(тело цикла) Например, начало цикла, обрабатывающего первые n элементов массива, имеет следующий вид: for (i = 0; i < n; i++) ... Внутри скобок имеются три выражения, разделяемые точкой с запятой. Первое выражение – инициализация i=0 выполняется один раз перед тем, как войти в цикл. Второе - проверка условия продолжения цикла i символ ' \п'. Приведем примеры решения задач на строки: Задача 165 // Приветствие #include #include void main() { char name[15]; // имя char fam[20]; // фамилия printfC'KaK Вас зовут?\п"); printf("Введите свое имя и фамилию,"); printf("затем нажмите ") ; printf("-> "); scanf("%s", &name); scanf("%s", sfam); // функция scanf читает из буфера клавиатуры символы //до разделителя - пробела printf("Здравствуйте, Is %s!\n", name, f am) ; printf("\пДля завершения нажмите "); getch() Задача 166 // Приветствие (посимвольный ввод строки) #include #include void main() char name[40]; // имя и отчество пользователя char ch; int i; printfC'KaK Вас зовут?\п"); printf("(введите свое имя, отчество и нажмите "); printf("-> "); i = 0; while ((ch=getch()) != 13 && i < 40) // пока не нажата /¦/ клавиша 142 h); name[i++] - ch; } namefi] = '\0'; printf("ХпЗдравствуйте, %s!\n", name); И И printf("\пДля завершения нажмите "); I getch О; И Задача 167 II // Вычисляет длину строки HI #include #include void main() III { char st[80]; // введенная строка int i = 0; // длина строки IB 1 II HI puts("ХпВведите строку и нажмите "); Н printf("->"); 111 gets(st); while( st[i++]) III ¦ HI printf("Длина введенной строки: %i\n", i) ; printf("Для завершения работы нажмите "); 8^o, Контрольные вопросы: 1. Какое число соответствует каждому символу? 2. Как выполняется обработка строк? Лекция №14 Тема: Файлы План: 1. Описание структуры файлов 2. Организация работы с файлами Обычная СИ-программа представляет собой определение функции main, которая для выполнения необходимых действий вызывает другие функции. Приведенные выше примеры программ представляли собой один исходный файл, содержащий все необходимые для выполнения программы функции. Связь между функциями осуществлялась по данным посредством передачи параметров и возврата значений функций. Но компилятор языка СИ позволяет также разбить программу на несколько отдельных частей (исходных файлов), оттранслировать каждую часть отдельно, и затем объединить все части в один выполняемый файл при помощи редактора связей. При такой структуре исходной программы функции, находящиеся в разных исходных файлах могут использовать глобальные внешние переменные. Все функции в языке Си по определению внешние и всегда доступны из любых файлов. Например, если программа состоит из двух исходных файлов, как показано на рис.2., то функция main может вызывать любую из трех функций fun1, fun2, fun3, а каждая из этих функций может вызывать любую другую. main () { ... } fun1() { ... } { ... . fun2() } fun3() { ... } file1.c file2.c Для того, чтобы определяемая функция могла выполнять какие либо действия, она должна использовать переменные. В языке СИ все переменные должны быть объявлены до их использования. Объявления устанавливают соответствие имени и атрибутов переменной, функции или типа. Определение переменной вызывает выделение памяти для хранения ее значения. Класс выделяемой памяти определяется спецификатором класса памяти, и определяет время жизни и область видимости переменной, связанные с понятием блока программы. В языке СИ блоком считается последовательность объявлений, определений и операторов, заключенная в фигурные скобки. Существуют два вида блоков - составной оператор и определение функции, состоящее из составного оператора, являющегося телом функции, и предшествующего телу заголовка функции (в который входят имя функции, типы возвращаемого значения и формальных параметров). Блоки могут включать в себя составные операторы, но не определения функций. Внутренний блок называется вложенным, а внешний блок - объемлющим. Время жизни - это интервал времени выполнения программы, в течение которого программный объект (переменная или функция) существует. Время жизни переменной может быть локальным или глобальным. Переменная с глобальным временем жизни имеет распределенную для нее память и определенное значение на протяжении всего времени выполнения программы, начиная с момента выполнения объявления этой переменной. Переменная с локальным временем жизни имеет распределенную для него память и определенное значение только во время выполнения блока, в котором эта переменная определена или объявлена. При каждом входе в блок для локальной переменной распределяется новая память, которая освобождается при выходе из блока. Все функции в СИ имеют глобальное время жизни и существуют в течение всего времени выполнения программы. Область видимости - это часть текста программы, в которой может быть использован данный объект. Объект считается видимым в блоке или в исходном файле, если в этом блоке или файле известны имя и тип объекта. Объект может быть видимым в пределах блока, исходного файла или во всех исходных файлах, образующих программу. Это зависит от того, на каком уровне объявлен объект: на внутреннем, т.е. внутри некоторого блока, или на внешнем, т.е. вне всех блоков. Если объект объявлен внутри блока, то он видим в этом блоке, и во всех внутренних блоках. Если объект объявлен на внешнем уровне, то он видим от точки его объявления до конца данного исходного файла. Объект может быть сделан глобально видимым с помощью соответствующих объявлений во всех исходных файлах, образующих программу. Контрольные вопросы: 1. 2. 3. Что представляет собой обычная СИ-программа? Дайте определение термину «время жизни». Перечислите графические функции библиотеки Turbo C++. Лекция №15 Тема: Работа с окнами. Графика План: 1. Графические функции 2. Черчение 3. Заполнение Turbo C++ поставляется с полной библиотекой графических функций, позволяющих создание экранных графиков и диаграмм. Рабочий режим экрана определяется, когда ваша программа вызывает одну из функций определения режима (textmode, Initgraph или setgraphmode). - В графическом режиме экран компьютера делится на пиксели; каждый пиксель представляет собой отображение на экране одной точки. Число пикселей на экране (т.е. его разрешающая способность) зависит от типа подключенного к вашей системе видео адаптера и режима, в который установлен этот адаптер. Для получения на экране графических изображений Turbo C++ предоставляет библиотеку графических функций: вы можете создавать на экране линии и формы, заполненные шаблонами замкнутые области, а также управлять цветом каждого пикселя. В текстовом режиме позиция верхнего левого угла экрана определяется координатами (1,1),где x-координата растет слева -направо, а y-координата растет сверху-вниз. В графическом режиме позиция верхнего левого угла определяется координатами (0,0), с теми же направления возрастания координат. В графическом режиме вы также можете определить некоторую прямоугольнуюобласть экрана PC; эта область называется графическим окном. Когда ваша графическаяпрограмма выполняет вывод рисунков и т.д., графическое окно действует каквиртуальный экран. Остальная часть экрана (вне графического окна) остается без изменений. За исключением функций определения текстовых играфических окон,все остальныефункции, как текстового, так и графического режимов, даются в локальных координатах активного текстовогоили графческого окна, а не в абсолютных экранных координатах. При этом верхний левый угол текстового окна будет являться началом координат (1,1); в графическомрежиме начало координат графического окна будет равно (0,0). Turbo 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. getaspectratio Возвращает коэффициент сжатия для текуще го графического режима. getlinesettings Возвращает текущий стиль линии, шаблон линии и толщину линии. line Чертит линию из (x0,y0) в (x1,y1). linerel Чертит линию в точку, задаваемую относитель ным расстоянием от текущей позиции (CP). lineto Чертит линию из текущей позиции (CP) в (x,y). moveto Перемещает текущую позицию (CP) в (x,y). moverel Перемещает текущую позицию (CP) на относитель ное расстояние. rectangle Рисует прямоугольник. setaspectratio Изменяет коэффициент сжатия по умолчанию. setlinestyle Устанавливает ширину и стиль текущей линии. Заполнение: bar Чертит и заполняет столбик. bar3d fillellipse fillpoly Чертит и заполняет трехмерный столбик. Чертит и заполняет эллипс. Чертит и заполняет многоугольник. getfillpattern Возвращает определяемый пользователем шаблон заполнения. getfillsettings Возвращает информацию о текущкм шаблоне и цвете заполнения. pieslice Чертит и заполняет сектор окружности. sector Чертит и заполняет эллиптический сектор. setfillpattern Выбирает шаблон заполнения, определяемый пользвателем. setfillstyle Устанавливает шаблон и цвет заполнения. При помощи функций черчения и раскрашивания Turbo C++ вы можете вычерчивать цветные линии, дуги, окружности, эллипсы, прямоугольники, секторы, дву- и трехмерные столбики, многоугольники, а такжеразличные правильные или неправильные формы, являющиеся комбинациями перечисленныхграфических примитивов. Ограниченную форму изнутри или снаружи можно заполнить одним из 11 предопределенных шаблонов, либо шаблоном, определенным пользователем. Можнотакже управлять толщиной и стилем линии вычерчивания, а также местоположением текущей позиции. Контрольные вопросы: 1. Каким образом можно включить и выключить графический режим? 2. Какие координаты имеют углы экрана? Лекция №16 Тема: Особенности программирования на С++ План: 1. Основы программирования на языке С++ 2. Операторы while, for. программирование файл оператор Си - универсальный язык программирования. Он тесно связан с системой UNIX, так как был разработан в этой системе, которая как и большинство программ, работающих в ней, написаны на Си. Однако язык не привязан жестко к какой-то одной операционной системе или машине. Хотя он и назван "языком системного программирования", поскольку удобен для написания компиляторов и операционных систем, оказалось, что на нем столь же хорошо писать большие программы другого профиля. Многие важные идеи Си взяты из языка BCPL, автором которого является Мартин Ричардс. Влияние BCPL на Си было косвенным - через язык B, разработанный Кеном Томпсоном в 1970 г. для первой системы UNIX, реализованной на PDP-7. BCPL и B - "бестиповые" языки. В отличие от них Си обеспечивает разнообразие типов данных. Базовыми типами являются символы, а также целые и числа с плавающей точкой различных размеров. Кроме того, имеется возможность получать целую иерархию производных типов данных из указателей, массивов, структур и объединений. Выражения формируются из операторов и операндов. Любое выражение, включая присваивание и вызов функции, может быть инструкцией. Указатели обеспечивают машиннонезависимую адресную арифметику. В Си имеются основные управляющие конструкции, используемые в хорошо структурированных программах: составная инструкция ({. . .}), ветвление по условию (if-else), выбор одной альтернативы из многих (switch), циклы с проверкой наверху (while, for) и с проверкой внизу (do), а также средство прерывания цикла (break). В Си нет прямых операций над составными объектами, такими как строки символов, множества, списки и массивы. В нем нет операций, которые бы манипулировали с целыми массивами или строками символов, хотя структуры разрешается копировать целиком как единые объекты. В языке нет каких-либо средств распределения памяти, помимо возможности определения статических переменных и стекового механизма при выделении места для локальных переменных внутри функций. Наконец, в самом Си нет средств ввода-вывода, инструкций READ (читать) и WRITE (писать) и какихлибо методов доступа к файлам. Все это - механизмы высокого уровня, которые в Си обеспечиваются исключительно с помощью явно вызываемых функций. Большинство реализованных Си-систем содержат в себе разумный стандартный набор этих функций. В продолжение сказанного следует отметить, что Си предоставляет средства лишь последовательного управления ходом вычислений: механизм ветвления по условиям, циклы, составные инструкции. Компактность языка имеет реальные выгоды. Поскольку Си относительно мал, то и описание его кратко, и овладеть им можно быстро. Программист может реально рассчитывать на то, что он будет знать, понимать и на практике регулярно пользоваться всеми возможностями языка. Си не является "строго типизированным" языком, но в процессе его развития контроль за типами был усилен. Однако основной философией Си остается то, что программисты сами знают, что делают; язык лишь требует явного указания об их намерениях. Си, как и любой другой язык программирования, не свободен от недостатков. Уровень старшинства некоторых операторов не является общепринятым, некоторые синтаксические конструкции могли бы быть лучше. Тем не менее, как оказалось, Си - чрезвычайно эффективный и выразительный язык, пригодный для широкого класса задач. В целом, С++ является над-множеством языка С. Это означает, что, вообще говоря, можно компилировать программы С в среде С++, однако компилировать программы С++ в среде С при наличии в них каких-либо специфических для С++ конструкций нельзя. Некоторые ситуации требуют специального внимания. Одна и та же функция func, дважды объявленная в С с различными значениями аргументов, вызовет ошибку повторения имен. Однако, в С++ func интерпретируется как перегруженная функция - а то, допустимо это или нет, зависит от других обстоятельств. Контрольные вопросы: 1. 2. Дайте определение языку программирования Си. Перечислите все бестиповые языки Рекомендуемая литература  1. Основная литература Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб.: Питер, 2000. 2. Дэвис С. С++ для «чайников».- К.: Диалектика, 1996. 3. Неформальное введение в С++ и Turbo Vision. – Галерея «Петрополь». 1992.  1. Дополнительная литература Хортон А. Visual C++ 2010: полный курс. Диалектика г.Киев.2010. - 1216 c. 2. Мошилев А.В., Пак Н.И. Хеннер Е.К. Практикум по информатике - М.: Академия, 2001. - 608 с. 3. Павловская Т.А. С/С++. Программирование на языке высокого уровня. Спб.: Питер, 2001. - 464 с. 4. Пратта С. Язык программирования С++. Лекции и упражнения - М.: Диа-Софт, 2003. - 656 с. 5. Семакин И.Г., Шестаков А.П. Основы программирования - М.: Мастерст-во, 2001. - 432 с. 6. Страуструп Б. Дизайн и эволюция языка C++. Объектноориентированный язык программирования. - М.: ДМК-Пресс, 2000. - 448с. 7. Шилд Г. С/С++. Справочник программиста - М.: Вильямс, 2000. - 448 с. 8. Шмидский Я.К. Программирование на языке С/С++ - М.: Диалектика, 2003. - 352 с. 9. Стефан Р. для `чайников`, 6-е издание Дэвис . C++. Вильямс г.Киев. 2010 . – 336 c. 10. Шилдт Г. C++ для начинающих. Шаг за шагом. ЭКОМ г.Москва. 2010. – 640 c. 11. Дэвид Р. Мюссер. C++ и STL: справочное руководство, 2-е изд. Вильямс г.Киев. 2010. – 432 c.Размещено на Allbest.ru
«Технологии программирования. Структурный подход к составлению программ» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ
Получи помощь с рефератом от ИИ-шки
ИИ ответит за 2 минуты

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot