Поурочный план по дисциплине Основы объектно-ориентированного программирования

Для достижения поставленных для урока целей и повышения усвоения полученных учащимися знаний на уроке, педагогу необходимо составлять поурочный план занятия. Такой документ не является обязательным для составления, однако помогает в анализе своей деятельности и лучшей подготовки к занятиям.Поурочный план разработан на основе утверждённого методическим объединением календарно-тематического планирования.
Раздел Информатика
Класс -
Тип Конспекты
Автор
Дата
Формат doc
Изображения Есть
For-Teacher.ru - все для учителя
Поделитесь с коллегами:

Дисциплина «Основы объектно-ориентированного программирования»

Специальность 1304000 «Вычислительная техника и программное обеспечение»


Урок № 1

Тема урока:_ Введение в C++.

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

Учебно-воспитательные цели


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

2. воспитательная: Воспитывать дисциплинированность, усидчивость, умение слушать.

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

Методы обучения: Словесный, наглядный.

Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

  3. Объяснение нового материала:

Сравнительная характеристика Delphi и С++

1. C++ - это язык программирования, а вот Delphi - это среда программирования...

Ну, во-первых, почему именно Delphi и C++? Да потому, что на сегодняшний день это наиболее распространенные средства разработки высокопроизводительных Windows-приложений. Есть также Visual Basic, наряду с Visual C++ входящий в комплект пакета Visual Studio компании Microsoft, но его производительность значительно уступает возможностям обоих языков, да и использование ограничено созданием приложений для MS Office. И большинство программистов во всем мире все же отдают предпочтение одному из двух названных средств разработки приложений.

ДВА ПЛЮСА - ОДИН МИНУС: СЛОЖНОСТЬ

2. Итак, C++. Большинство современных операционных систем, а именно Unix, DOS, и, конечно же, Windows, написаны именно на этом языке (или на его разновидности). Программы, написанные на C++, уступают в скорости только созданным на языке Ассемблера. Да и сам C задумывался как некий Ассемблер высокого уровня, поэтому работающему в нем программисту открыты возможности, которых не найти в других языках. Прежде всего, это касается управления памятью, адресации и работы с низкоуровневыми функциями.

3. Поскольку C++ - системный язык Windows, программисту, владеющему этим языком, гораздо легче освоить программирование с помощью API Win32, а значит, получить доступ к огромным возможностям, предоставляемым интерфейсом прикладного программирования (API) Windows 95(98) и Windows NT. За время существования C++ написано огромное количество приложений и программных модулей, доступных к использованию в вашем приложении. На основе этого языка создан Java, а как известно, сетевое программирование относится к наиболее перспективным отраслям, специалисты которых всегда ценятся работодателями. Не столько работе с компьютером, сколько программированию. Соответственно учитесь программировать, а не просто изучайте C++...

Но все ли так лучезарно? Боюсь, что нет. C++ обладает серьезными недостатками, которые, как это часто бывает, являются продолжением его достоинств. Перечислим их.

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

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

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

Отладка программы, написанной на C++, занимает больше времени, надежность кода оставляет желать лучшего (особенно, если он написан начинающим). Да и профессионалы зачастую испытывают сложности с отладкой больших и сложных программ. Чего стоят одни проблемы, связанные с Windows 95! Так что, умерив восторги по поводу достоинств этого языка, следует четко уяснить, что легкой жизни от C++ ждать не приходится. Особенно это касается разработки приложений, имеющих графический интерфейс. Программирование окон с набором различных элементов управления весьма трудоемко и требует большого терпения и высокой квалификации.

ПРОСТО ЛУЧШИЙ ЯЗЫК?

Альтернативой C++ является Delphi. Созданный корпорацией Borland, он вобрал в себя все лучшее, что эта фирма, славящаяся своими средствами разработки, накопила на данный момент. Delphi разительно отличается от всех видов C++.

Во-первых, в его основу положен язык программирования Object Pascal. Да-да, тот самый добрый Паскаль, который мы изучали еще в школе. Кстати, по поводу его возможностей бытовало неправильное мнение. Некоторые считали, что по сравнению с C он недостаточно мощен и гибок. Может, на начальных этапах развития так и было, однако стараниями фирмы Borland Паскаль был серьезно усовершенствован, и уже в версии Турбо Паскаль 5.5 представлял собой весьма мощный инструмент для разработчика. С появлением Windows его позиции серьезно пошатнулись, однако Borland как основной поставщик компиляторов на основе Pascal не собирался мириться с подобной ситуацией. В обстановке глубокой секретности началась разработка нового продукта на основе Паскаля. Так появился Delphi.

Delphi - не просто язык. Это чрезвычайно мощная и удобная интегрированная среда (IDE), заслуживающая самых высоких похвал. Ни один компилятор C++, включая Visual C++, не предоставляет нам столь дружественной, интуитивно понятной, простой в использовании и вместе с тем столь многофункциональной оболочки как Delphi. Что бы не говорили ребята из Microsoft о том, что своим Visual Studio они предоставляют пользователю средства быстрой разработки приложений с графическим интерфейсом, ничего лучше Delphi в плане скорости и удобства, по-моему, просто не существует. Выполнение задания, над которым в C++ вы промучаетесь пару часов, в Delphi отнимет не более минуты. К тому же эффективность кода, сгенерированного компилятором Delphi, в большинстве случаев не хуже, чем у его конкурента C++. Исходя из этих соображений многие программисты отдают предпочтение Delphi.

Да, Delphi - не просто язык! Это своя система! Система в системе!

Object Pascal, лежащий в основе Delphi, обогащен множеством типов и классов, позволяющих полноценно использовать возможности программирования под Windows. Практически все, что можно создать с помощью C++, реализуемо и на Object Pascal, причем, благодаря простоте и лучшей структурированности Паскаля, программа получается более четкой, удобной для восприятия, и, что самое главное, более надежной, чем написанная на C++. Отдельно следует сказать о базах данных. В Delphi введены мощные средства поддержки работы с данными, позволяющие очень просто создавать приложения, связанные с базами данных. В этой области Delphi, пожалуй, вообще не имеет конкурентов. Учитывая то, что работа с базами данных является одной из основных задач программиста, последнее еще более укрепляет положение Delphi как превосходного средства разработки программного обеспечения.

Не столько обогащен, сколько отягощен! Насчет баз данных - это конечно да!

Поскольку Delphi является самым простым и удобным среди всех мощных пакетов, а также из-за того, что Паскаль значительно проще C++ и к тому же изучается в вузах и некоторых школах, я могу рекомендовать его обучения программирования под Windows. В дальнейшем вам будет гораздо легче "справиться" с C++ или каким-либо другим языком. Однако это вовсе не означает, что этот язык пригоден только для начинающих. Совсем наоборот! Даже освоив C++, вы по-прежнему будете использовать Delphi, где это возможно, - настолько он удобен и выгоден в применении. А там, где потребуется высокая надежность, - в приложениях для бизнеса и деловой сферы - Delphi просто незаменим.

То, что Delphi является самым простым - весьма спорно. А удобство - субъективное мнение каждого. И в дальнейшем вам будет никак ни легче, а гораздо тяжелее справиться с C++ (но это мое мнение)...

Но и этот не обошелся без недостатков, как обычно, являющихся продолжением достоинств. Использование удобного Паскаля затрудняет взаимодействие с операционной системой, так как системным языком является C++, а его синтаксис, и, я бы сказал, "философия", серьезно отличаются от аналогичных характеристик Паскаля. Это очень серьезный недостаток. Нельзя сказать, что работать с API невозможно, но все же такое программирование связано с определенными трудностями. Популярный пакет DirectX также не пойдет, так что мечтающим написать собственную компьютерную игру придется огорчиться.

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

В общем, языки имеют свои положительные и отрицательные стороны. Мне кажется, стоит изучить оба. Если вы знакомы с Паскалем - начинайте с Delphi, это поможет вам освоиться с нелегким делом создания Windows-приложений. Затем переходите к C++, который поможет освоить "внутренние" возможности Windows и подготовит вас к работе с сетевыми технологиями Java

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

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

  2. В чем сходство и отличие С++ и Delphi?

  3. Достоинства и недостатки С++?

Домашнее задание: повторить конспект лекции



Урок № 2


Тема урока: Общая характеристика языка.

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

Учебно-воспитательные цели


1. образовательная: Дать понятие о возникновении и развитии языка С++, его основных характеристиках

2. воспитательная: Воспитывать дисциплинированность, усидчивость, умение слушать.

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

Методы обучения: Словесный, наглядный, частично-поисковый.

Межпредметные связи: Операционные системы

Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

  3. Объяснение нового материала:

Истоки языка C++: немного истории

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

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

Наряду с ростом популярности языка С зарождалась и новая парадигма программирования: объектно-ориентированное программирование (ООП), которое было реализовано в таких языках, как SmallTalk и C++. Давайте рассмотрим взаимоотношения языка С и ООП более подробно.

Язык программирования С

В начале семидесятых годов прошлого столетия Деннис Ритчи (Dennis Ritchie), сотрудник компании Bell Laboratories, участвовал в проекте по разработке операционной системы Unix. (Операционная система (ОС) представляет собой набор программ, предназначенных для управления аппаратными ресурсами и обслуживания взаимодействий пользователя и компьютера. Так, например, именно ОС выводит на экран монитора системное приглашение в терминальном интерфейсе, управляет окнами и мышью в графическом интерфейсе и запускает программы на выполнение.) В своей работе Ритчи нуждался в языке программирования, который был бы лаконичным, с помощью которого можно было бы создавать компактные и быстро выполняющиеся программы, и посредством которого можно было бы эффективно управлять аппаратными средствами.

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

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

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

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

Домашнее задание: повторить конспект лекции

Урок № 3


Тема урока: Компиляторы для Windows

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

Учебно-воспитательные цели


1. образовательная: Сформировать понятие о требованиям к компиляторам С++, дать характеристику критериям компиляторов.

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

3. развивающая: Развивать умение выделять главную мысль, навык структурирования текста лекции, умение составлять план изложения материала.

Межпредметная связь: Технология разработки ПО

Методы обучения: Словесный (беседа), дедуктивный метод (от общего к частному)

Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Лекционный материал:

Компиляторы для Windows

Компиляторов для Windows так много, при этом их модификации появляются настолько часто, что нет смысла рассматривать их все по отдельности. В настоящее время самым популярным является Microsoft Visual C++ 2010, который доступен также в виде бесплатной версии Microsoft Visual C++ 2010 Express. В Wikipedia (http: // en.wikipedia.org/wiki/List_of_compilers) представлен исчерпывающий список компиляторов для множества платформ, включая Windows. Несмотря на разные проектные решения и цели, большинство компиляторов C++ для Windows обладают общими характеристиками.

Как правило, для программы требуется создать проект и добавить в него один или несколько файлов, составляющих программу. Каждый производитель предлагает IDE- среду с набором меню и, возможно, с программой автоматизированного помощника, которую удобно использовать в процессе создания проекта. Очень важно определиться с тем, к какому типу будет относиться создаваемая вами программа. Обычно компилятор предлагает несколько вариантов, среди которых приложение для Windows, приложение Windows MFC, динамически подключаемая библиотека, элемент управления ActiveX, программа, выполняемая в режиме DOS или в символьном режиме, статическая библиотека или консольное приложение. Некоторые из них могут быть доступны в форме 64- и 32-разрядных версий.

Поскольку программы в этой книге являются обобщенными, вы должны избегать вариантов, требующих кода для определенной платформы, например, приложение для Windows. Вместо этого нужно запускать программу в символьном режиме. Выбор режима зависит от компилятора. В общем случае необходимо искать такие варианты, как консольное, символьное или DOS-приложение, и пробовать их. Например, в среде Microsoft Visual C++ 2010 выберите опцию Win32 Console Application (Консольное приложение Win32), щелкните на Application Settings (Настройки приложения) и выберите вариант Empty Project (Пустой проект). В C++Builder XE выберите вариант Console Application (Консольное приложение) в разделе C++Builder Projects (Проекты C++Builder).

После того как проект настроен, вы должны скомпилировать и скомпоновать свою программу. В IDE-среде обычно предлагается несколько вариантов, такие как Compile (Компилировать), Build (Построить), Make (Построить), Build All (Построить все), Link (Скомпоновать), Execute (Выполнить), Run (Выполнить) и Debug (Отладить) (но не обязательно все варианты сразу).

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

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

• Build All обычно означает компиляцию всех файлов исходного кода с самого начала.

• Как уже было сказано ранее, Link означает объединение скомпилированного исходного кода с необходимым библиотечным кодом.

• Run или Execute означает запуск программы. Обычно если вы еще не завершили выполнение предыдущих этапов, команда Run выполнит их перед запуском программы.

Начало работы с C++

• Debug означает запуск программы с возможностью ее пошагового выполнения.

• Компилятор может поддерживать создание версий Debug (Отладочная) и Release (Выпуск). Версия Release содержит дополнительный код, который увеличивает размер программы и замедляет ее выполнение, но зато делает доступными средства отладки.

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

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

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

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

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

cin.getO; // добавьте этот оператор

cin.getO; //и, возможно, этот тоже

return 0;

}

Оператор cin. get () читает следующее нажатие клавиши, поэтому программа будет находиться в режиме ожидания до тех пор, пока вы не нажмете клавишу .

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

Домашнее задание: конспект лекции



Урок №4

Тема урока: Классификация типов данных

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

Учебно-воспитательные цели


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

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

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

Методы обучения: словесный (беседа), частично-поисковый.

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


Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Лекционный материал:

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

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

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

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

внутреннее представление данных в памяти компьютера;

объем памяти, выделяемый под данные;

множество (диапазон) значений, которые могут принимать величины этого типа;

операции и функции, которые можно применять к данным этого типа.

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

Классификация типов данных в С++

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

Объектно-ориентированные языки программирования позволяют определять типы класса.

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

Тип данных определяет размер памяти, выделяемой под переменную данного типа при ее создании. Язык программирования C++ поддерживает следующие типы данных (рис. 1.1).

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

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

Типы класса. Экземпляры этих типов называются объектами.

Поурочный план по дисциплине Основы объектно-ориентированного программирования

Домашнее задание: Прата С. Язык программирования С++. Лекции и упражнения.


Урок № 5

Тема урока: Операторы присваивания, ввода-вывода сin, cout.

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

Учебно-воспитательные цели


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

2. воспитательная: Воспитывать любовь к выбранной специальности, умение слушать

3. развивающая: Развивать логическое и абстрактное мышление, расширять общую информационную культуру.

Методы обучения: словесный (лекция).

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

Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Лекционный материал:

Cout - это объект выходного потока пространства имен std::. Это необъявленный идентификатор. Его не нужно объявлять. Его нужно только подключать к программе при помощи слова include: #include

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

#include

#include

void main () {

int x,y; //объявляем переменный целого типа

std::cout<<"X = "; //На экран выводится 'X = '

std::cin>>x; //вводим с клавиатуры число, например: 5

std::cout<<"Y = "; //На экран выводится 'Y = '

std::cin>>y; //вводим с клавиатуры число, например: 8

std::cout<<"x+y = "<<(x+y)<< std::endl:

C++ предоставляет входной поток cin, который программы могут использовать для чтения ввода с клавиатуры.

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

Чтобы направить ввод в переменную, следует использовать cin с оператором извлечения (>>).

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

  • Если пользователь вводит неверные данные, могут возникать ошибки переполнения или несоответствия типов, а значения, присвоенные входным потоком cin переменным вашей программы, будут неверны.

Точно так же как выходной поток cout позволяет вашим программам записать вывод на экран, входной поток cin позволяет программам читать ввод с клавиатуры. Когда программы используют cin для чтения ввода с клавиатуры, они должны указать переменную, в которую cin поместит данные. Следующая программа FIRSTCIN.CPP использует cin для чтения числа, введенного с клавиатуры. Программа присваивает введенное число переменной с именем number, а затем выводит значение переменной, используя выходной поток cout:

#include

void main(void)

{

int number; II Число, читаемое с клавиатуры

cout << "Введите ваше любимое число и нажмите Enter: ";

cin >> number;

cout << "Ваше любимое число равно " << number << endl;

}

Когда вы откомпилируете и запустите эту программу, на вашем экране появится сообщение, предлагающее вам ввести ваше любимое число. Если вы введете число и нажмете ENTER, программа присвоит ввод переменной number. Затем, используя cout, программа выведет сообщение, отображающее ваше любимое число.

Следующая программа TWONBRS.CPP запрашивает у вас два числа. Программа присваивает числа переменным first и second. Затем программа выводит числа, используя cout:

#include

void main(void)

{

int first, second; // Числа, введенные с клавиатуры

cout << "Введите два числа и нажмите Enter: ";

cin >> first >> second;

cout << "Были введены числа " << first << " и " << second << endl;

}

Обратите внимание на использование с cin двух операторов извлечения:

cin >> first >> second;

В этом случае cin присвоит первое введенное значение переменной first, a второе переменной second. Если для вашей программы требуется третье значение, вы можете использовать третий оператор извлечения, как показано ниже:

cin >> first >> second >> third;

Если вы применяете cin для чтения чисел с клавиатуры, cin использует левый пустой символ (пробел, табуляцию, возврат каретки), чтобы определить, где начинается одно значение, а где второе. Экспериментируйте с программой TWONBRS, разделяя числа табуляцией, пробелом и возвратом каретки.

Чтение ввода с клавиатуры с помощью cin

Для чтения ввода с клавиатуры программы могут использовать входной поток cin. При использовании cin вы должны указать переменную, в которую cin помещает данные. Затем используйте оператор извлечения (>>) для направления данных, как показано ниже:

cin >> some_variable;

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

Вопросы для закрепления:

  • Каково назначение оператора cout;

  • В чем особенность оператора Cin ;

  • Какие работы включает в себя этап рабочего проектирования?

Домашнее задание: Прата С. Язык программирования С++. Лекции и упражнения.


Урок № 6


Тема урока: Объявление переменных и констант.

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

Учебно-воспитательные цели


1. образовательная: Сформировать понятие о правилах объявления переменных и констант в С++.

2. воспитательная: Воспитывать бережное отношение к технике, коммуникативные качества, чувство взаимовыручки

3. развивающая: Развивать умение применять полученные знания на практике

Методы обучения: словесный, наглядно-практический

Межпредметные связи: математика

Содержание урока


  1. Организационный момент: приветствие, подключение компьютеров, загрузка программ, проверка готовности к уроку. (3-4мин)

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

Объявление переменных

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

Объявление переменной имеет следующий формат:

[модификаторы] спецификатор_типа идентификатор [, идентификатор] ...

Модификаторы - ключевые слова signed, unsigned, short, long.

Спецификатор типа - ключевое слово char или int, определяющее тип объявляемой переменной.

Идентификатор - имя переменной.

Пример:

char x;

int a, b, c;

unsigned long long y;

Таким образом, будут объявлены переменные x, a, b, c, y. В переменную x можно будет записывать значения от -128 до 127. В переменные a, b, c - от -32768 до +32767. В переменную y - от 0 до 18446744073709551615.

Инициализация значения переменной при объявлении

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

int x = 100;

Таким образом, в переменную x при объявлении сразу же будет записано число 100.

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

Константы

Переменная любого типа может быть объявлена как немодифицируемая. Это достигается добавлением ключевого слова const к спецификатору типа. Переменные с типом const представляют собой данные, используемые только для чтения, то есть этой переменной не может быть присвоено новое значение. Если после слова const отсутствует спецификатор типа, то константы рассматриваются как величины со знаком, и им присваивается тип int или long int в соответствии со значением константы: если константа меньше 32768, то ей присваивается тип int, в противном случае long int.

Пример:

const long int k = 25;

const m = -50; // подразумевается const int m=-50

const n = 100000; // подразумевается const long int n=100000

Присваивание

Для присваивания в Си служит знак "=". Выражение, стоящее справа от знака присваивания, вычисляется, и полученное значение присваивается переменной, стоящей слева от знака присваивания. При этом предыдущее значение, хранящееся в переменной, стирается и заменяется на новое.

Оператор "=" не следует понимать как равенство.

Например, выражение a = 5; следует читать как "присвоить переменной a значение 5".

Примеры:

x = 5 + 3; // сложить значения 5 и 3,

// результат присвоить переменной x (записать в переменную x)

b = a + 4; // прибавить 4 к значению, хранящемуся в переменной a,

// полученный результат присвоить переменной b (записать в переменную b)

b = b + 2; // прибавить 2 к значению, хранящемуся в переменной b,

// полученный результат присвоить переменной b (записать в переменную b)

В правой части значение переменной может использоваться несколько раз:

c = b * b + 3 * b;

Домашнее задание: отрабатывать и закреплять полученные умения и навыки.





Урок № 7

Тема урока: Выражения и преобразование типов с++

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

Учебно-воспитательные цели

1. образовательная: Дать понятие об особенностях использования математических выражений и синтаксисе преобразования типов данных в С++ .

2. воспитательная: Воспитывать самостоятельность, ответственность, дисциплинированность, усидчивость.

3. развивающая: Расширение общей информационной культуры, развитие логического мышления.

Методы обучения: словесный, наглядно-практический

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

Содержание урока

Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Лекционный материал:

Выражения представляют собой множество данных связанных между собой операциями - особыми операторами языка, возвращающих некоторое значение. Аргументы операций называют операндами. Большинство операций либо унарные (с одним операндом) или бинарные (с двумя операндами). Также операции характеризуются приоритетом (старшинством) выполнения в выражении. Например, результат выражения 4+5*2 будет 14, а не 18, так как операция умножения имеет больший приоритет, чем сложение. Операции одинакового приоритета выполняются последовательно слева направо.

унарные арифметические операции

++ - инкремент, увеличивает значение целочисленной переменной на 1;

-- - декремент, уменьшает значение целочисленной переменной на 1;

+ - оставляет знак числа;

- - изменяет знак числа.

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

Бинарные арифметические операции

+ - сложение чисел или строк;

- - вычитание чисел;

* - умножения чисел;

/ - деления чисел;

% - вычисление остатка от деления чисел.

операции отношения

> - больше;

>= - больше либо равно;

< - меньше;

<= - меньше либо равно;

== - равно;

!= - не равно.

логические операции

&& - логическая И;

|| - логическая ИЛИ;

! - логическое НЕ.

побитовые операции

Данные операции выполняются над целочисленными типами.

& - побитовая И;

| - побитовая ИЛИ;

^ - побитовая исключающая ИЛИ;

~ - побитовое инвертирование;

>> - битовый сдвиг вправо;

<< - битовый сдвиг влево.

операции с памятью

* - разъименование;

[] - индексация;

& - взятие адреса;

new - выделение памяти;

delete - освобождение памяти.

доступа к членам класса

. - доступ к члену класса;

-> - доступ к члену класса по указателю;

.* - доступ к указателю на член класса;

->* - доступк указателю на член класса по указателю.

преобразования типов

() - преобразование типов (старый стиль);

const_cast - изменяет атрибут const у объекта;

dynamic_cast - динамическое преобразование;

reinterpret_cast - преобразование типа указателя;

static_cast - обычное преобразование.

операции присвоения

= - присваивает левому операнду значение правого операнда;

op= - выполняет операцию op над операндами и сохраняет результат в левом операнде.

прочие операции

() - вызов функции;

, - запятая, позволяет вычислить последовательно несколько выражений (например, удобно использовать в цикле for);

:: - операция расширения видимости;

? : - условная операция;

sizeof - определяет размер операнда;

typeof - определяет тип операнда;

typeid - возвращает информацию о типе.

Основные функции преобразования строк

StrToFloat(St) - преобразует строку St в вещественное число;

StrToInt(St) - преобразует строку St в целое число.

FloatToStr (W) - преобразует вещественное число W в строку символов;

FloatToStrF (W, формат, n1, n2) - вещественное число W в строку символов под управлением формата:

ffFixed - фиксированное положение разделителя целой и дробной частей, n1 - общее количество цифр числа, n2 - количество цифр в дробной части, причем число округляется с учетом первой отбрасываемой цифры;

fFfExponent - n1 задает общее количество цифр мантиссы, n2 - количество цифр порядка XX (число округляется);

ffGeneral - универсальный формат, использующий наиболее удобную для чтения форму представления вещественного числа; соответствует формату ffFixed, если количество цифр в целой части  n1, а само число больше 0,00001, в противном случае соответствует формату ffExponent.

FormatFloat (формат, W) - преобразует вещественное число W в строку;

IntToStr (W) - преобразует целое число W в строку символов.

Для некоторых операций в stl определены буквенные эквиваленты:

and, bitand, compl, not_eq, or_eq, xor_eq, and_eq, bitor, not, or, xor.

Домашнее задание: конспект лекции


Урок № 8

Тема урока: Работа в консольном режиме BorlandC++ Builder.


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

Учебно-воспитательные цели


1. образовательная: Раскрыть особенности работы в консольном режиме BorlandC++ Builder.

2. воспитательная: Воспитывать дисциплинированность, усидчивость, умение работать самостоятельно.

3. развивающая: Развивать мышление, логику.

Методы обучения: словесный (лекция), частично-поисковый.

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

Содержание урока

  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Лекционный материал:

Всякий начинающий программист после изучения некоторых основ языка программирования, будь то C++, Pascal, Assembler, обязательно хочет написать свою первую программу. По устоявшейся традиции этой программой в большинстве случаев является приложение, выводящее на экране монитора надпись "Hello world!" Итак, приступим к написанию первой программы! Первым шагом в написании программы является запуск самой среды программирования C++ Builder (Исходный текст программы приведен для версии 6.0). Затем выберем FileNewOther... Вы попадете в окно выбора типа вашего проекта (Это может быть как приложение под платформы DOSWindows, либо DLL библиотеки или иные компоненты). Внешний вид открывшегося окна показан на рисунке ниже:

Поурочный план по дисциплине Основы объектно-ориентированного программирования

Все объекты объединены в следующие группы:

New - встроенные базовые объекты, используемые при разработке приложений.

ActiveX - объекты COM и OLE, элементы ActiveX, активные серверные страницы (ASP).

Multiter - объекты многопоточного приложения (CORBA и др.)

Project1 - формы создаваемого приложения.

Forms - формы.

Dialogs - диалоговые окна (открытие файла, диалог печати, сохранение и т.д.)

Projects - проекты одно- и многодокументных приложений.

Data Modules - модули данных.

Business - Мастера форм баз данных и Web-приложений.

Web Documents - Web-документы (HTML, XHTML, WML, XSL).

WebSnap - WebSnap-приложения и модули.

WebServices - приложение, модуль и интерфейс для SOAP.

IntraWeb - приложения и формы Web.

Corba - CORBA-приложения.

Взглянув на рисунок окна, сразу понимаешь, что среда имеет богатейшие возможности выбора для разработки приложений. Итак, для создания консольного приложения необходимо выбрать в открывшемся окне Console Wizard и даблкликнуть на нем. Появится окно:

Поурочный план по дисциплине Основы объектно-ориентированного программирования

В окне все необходимые галочки уже стоят, однако поясню их назначение: Source Typy обозначает язык, на котором вы собираетесь создавать приложение. Use VCLCLX позволяет установить тип библиотеки, которую используем. Жмем Ok и получаем код, автоматически сгенерированный системой:

Поурочный план по дисциплине Основы объектно-ориентированного программирования

Разберемся, что же автоматически сгенерировала нам среда:

#include - директива, с помощью которой выполняется включение текстовых файлов (*.h, *.cpp и т.д.) в текст программы.

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

int main() - функция которая должна присутствовать во всех консольных приложениях.

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

Поурочный план по дисциплине Основы объектно-ориентированного программирования

#include - директива, необходимая для работы команд ввода/вывода на экран.

cout<<"Hello world!"; - собственно сам вывод на экран строки Hello world!

при запуске программы на компиляцию (кнопка F9) вы увидите, что на экране только мигнуло какое-то окно и все, поэтому добавим еще строку Sleep(1000); между cout и return 0; Sleep - задержка выполнения программы, в скобках указано время в милисекундах.

Домашнее задание: Законспектировать содержание лекции.

Урок № 9

Тема урока: Лабораторная работа №1 Создание простых программ на линейный алгоритм.

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

Учебно-воспитательные цели

1. образовательная: Закрепить теоретические знания, полученные на лекциях, научить писать простейшие программы с использованием линейных алгоритмов

2. воспитательная: Воспитывать дисциплинированность, усидчивость, самостоятельность.

3. развивающая: Развивать умение выделять главное, самостоятельно работать с текстом.

Методы обучения: дедуктивный, поисковый.

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

Содержание урока

Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Лабораторная работа №1. Линейный вычислительный процесс

Цель работы: изучить правила составления текстов программ, научиться реализовывать линейные алгоритмы, а также составлять каркас простейшей программы в среде C++ Builder. Написать и отладить программу линейного алгоритма в консольном и(или) оконном приложении.

Cоставить программу вычисления арифметического выражения для заданных значений x, y, z :

Поурочный план по дисциплине Основы объектно-ориентированного программирования

В оконном режиме панель диалога программы создать в виде, представленном на рис. 1.2.

Поурочный план по дисциплине Основы объектно-ориентированного программирования

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

1. Запускаем С++ Builder. Создаем в разрешенной для Пользователя папке (d:\work\ или c:\work\) папку с номером группы (\610101\), открыв ее, сохраняем предлагаемые файлы Unit1.cpp и Project1.cpp (рекомендуем без изменения).

2. Оформляем окно формы, заменив заголовок Form1 на нужный текст. Помещаем на форму необходимые компоненты Label1, Label2, Label3, Label4 (вставляя в Caption соответствующие тексты), Edit1, Edit2, Edit3, Memo1 c полосами прокрутки (см. п. 1.3), Button1 (заменив в Caption текст).

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

3. Оформляем листинг программы (Unit1.cpp). Двойным щелчком кнопкой мыши по свободному месту формы создаем функцию FormCreate и заполняем ее (см. пример). Переходим на форму (F12), щелкаем дважды по кнопке «ВЫПОЛНИТЬ» и заполняем созданную функцию Button1Click (см. пример).

4. Перед запуском программы на обработку, сохраняем все.

5. Запускаем проект на выполнение, исправляем ошибки.

Текст программы может иметь следующий вид (наклонным мелким шрифтом выделен текст, редактировать который не рекомендуется):

//---------------------------------------------------------------------------

#include

#pragma hdrstop

#include "Unit1.h"

#include "math.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

^ TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Edit1->Text = "3,4";

Edit2->Text = "7,4e-2";

Edit3->Text = "1,943e2";

Memo1->Clear();

Memo1->Lines->Add("Лабораторная работа № 1");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

double x, y, z, a, b ,c, rez;

x = StrToFloat(Edit1->Text);

y = StrToFloat(Edit2->Text);

z = StrToFloat(Edit3->Text);

a = pow(tan(x+y),2);

b = exp(y-z);

c = sqrt(cos(x*x)+sin(z*z));

rez = a-b*c;

Memo1->Lines->Add("При х = "+FloatToStrF(x,ffFixed,7,3)

+ "; y = "+FloatToStrF(y,ffFixed,7,3)+"; z = "+FloatToStrF(z,ffFixed,7,3));

Memo1->Lines->Add("Результат = "+FloatToStr(rez));

}

Внимание! В строковых константах разделитель целой и дробной частей - запятая: Edit1->Text = "3,4"; в отличие от числовых констант в тексте программы.

В результате должно получиться рабочее окно (рис. 1.3). Если щелкнуть мышью по кнопке «ВЫПОЛНИТЬ», в окне Memo1 появится соответствующий текст (результат). Далее в окошках Edit* можно изменять исходные значения и, нажимая кнопку «ВЫПОЛНИТЬ», получать новые результаты.

Поурочный план по дисциплине Основы объектно-ориентированного программирования

Домашнее задание: Решить задачу с использованием линейного алгоритма






Урок № 10

Тема урока: Условный оператор if.

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

Учебно-воспитательные цели


1. образовательная: Научить использовать условный оператор if для решения задач. Закрепить полученные теоретические знания на практике.

2. воспитательная: Воспитывать самостоятельность, усидчивость, умение работать в группе.

3. развивающая: Развивать логическое мышление, память, умение применять полученные знания на практике

Методы обучения: наглядно-практический, системно-структурный.

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

Содержание урока


  1. Организационный момент: приветствие, подготовка компьютеров к работе, загрузка программ, проверка готовности к уроку. (3-4мин)

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

Условный оператор реализует структуру выбора. Он имеет такой вид:

if (условие) оператор1[ else оператор 2]

Если условие оценивается как истинное (ненулевое), выполняется onepaтop1, если как ложное (нулевое), выполняется onepaтop2. Простейший пример:

if (а > b)

max_ab = a;

else

max_ab = b;

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

if (условие)

{операторы_блока_if}

else

{операторы_блока_еlsе}

В случае, когда при ложности условия не нужно выполнять никаких действий, а требуется только пропустить операторы блока if, ключевое слово else и соответствующий ему оператор (блок) могут отсутствовать, как в следующем примере:

if (а > b)

{

temp = а;

а = b;

b = temp;

}

//...Продолжение программы...

В этом фрагменте программы, если а > b, то значения a и b меняются местами, в противном случае блок не выполняется и все остаётся, как есть.

В соответствии с правилом суперпозиции можно строить вложенные структуры if...else, например:

if (a > b)

if (a > с)

max_abc = а;

else

max abc = с;

else

if (b > с)

max_abc = b;

else

max_abc = с ;

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

max_abc = с;

if (a > b)

if (a > c)

max_abc = = a;

else

if (b > c) max_abc = b;

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

max_abc = с;

if (а > b)

{

if (а > с)

max_abc = а;

}

else

if (b > с)

max abc = b;

Об условиях в операторе if

Условие оператора if может быть сколь угодно сложным выражением. Можно было бы сказать, что это выражение должно быть "логическим", но в языке С (не в С++, а в С) нет логического типа данных, поэтому условие для большей общности сделали целого типа. Как уже говорилось, выражение считается ложным (false), если его значением является нуль, и истинным (true), если значение ненулевое. В С++ введен логический тип данных bool. Но переменные логического типа конвертируются к целому типу true (равно 1) или false (равно 0), если они используются в условии.

Вот несколько примеров условий оператора if:

if (x) DoSomething();

//Если х не равно нулю, то выполняется функция DoSomething().

if (!x) DoAnotherThing();

//Если х равно нулю, то выполняется функция DoAnotherThing().

if (b = = с) DoAnotherThing();

/*Если b равно с (логическое сравнение), то выполняется функция DoA-notherThing().*/

if (b != с) DoSomething();

//Если b не равно с, то выполняется функция DoSomething().

if ((key = getch()) = = 'q') DoQuit();

/*Сохранить код клавиши в key и,если он равен ' q ' , выполнить функцию DoQuit().*/

if (a >= b && a <= c) DoSomething();

//Если а лежит между b и с, выполнить функцию DoSomething().

При записи условия используются логические операции (записаны в порядке убывания приоритета):

! - логическое НЕ (инверсия);

< - меньше;

<= - меньше или равно;

> - больше;

>= - больше или равно;

= = - равно;

!= - логическое И;

&& - логическое И;

|| - логическое ИЛИ.

! - логическое НЕ (инверсия, отрицание), дает в результате false (0), если операнд true(≠ 0 ) или 1 если операнд false (0). Операнды в этой операции могут иметь тип bool, int, вещественный.

Пример:

bool x,y;

y=true;

x=!y;

В результате: х будет присвоено значение false (0).

Операции отношения (<, <=, >, > , = =. ! =) сравнивают первый операнд со вторым. Операнды могут быть арифметического типа ( int, float, double ) или указателями. Результатом операции является значение true или false (любое значение, не равное нулю, интерпретируется как true). Операции сравнения на равенство и неравенство имеют меньший приоритет, чем остальные операции сравнения.

ПРИМЕЧАНИЕ: обратите внимание на разницу между операцией проверки на равенство (==) и операцией присваивания (=), результатом которой является значение, присвоенное левому операнду.

Пример:

a= =0;

логическое значение этого выражения true, если а равно 0, иначе false.

a=0;

логическое значение этого выражения всегда false.

Логические операции && (И) и || (ИЛИ). Операнды логических операций И (&&) и ИЛИ ( || ) могут иметь арифметический тип или быть указателями, при этом операнды в каждой операции могут быть различных типов. Преобразования типов не производятся, каждый операнд оценивается с точки зрения его эквивалентности нулю (операнд, равный нулю, рассматривается как false, не равный нулю - как true). Результатом логической операции является true или false. Результат операции логическое И имеет значение true только если оба операнда имеют значение true. Результат операции логическое ИЛИ имеет значение true, если хотя бы один из операндов имеет значение true. Логические операции выполняются слева направо. Если значения первого операнда достаточно, чтобы определить результат операции, второй операнд не вычисляется.

Примеры:

a>b && c

если одновременно а больше b и с меньше d, то выражение равно true, иначе false.

a>b || c

если а больше b или с меньше d, то выражение равно true, иначе false.

Можно было бы записать (a>b)&&(c и < выше чем && и ||.

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

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

Домашнее задание: закончить оформление работы.




Урок № 11

Тема урока: Операторы switch и break.

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

Учебно-воспитательные цели


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

2. воспитательная: Воспитывать бережное отношение к технике, дисциплинированность, усидчивость, любовь к специальности.

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

Методы обучения: наглядно-практический, системно-структурный.

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

Содержание урока


  1. Организационный момент: приветствие, подготовка компьютеров к работе, загрузка программ, проверка готовности к уроку. (3-4мин)

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

Оператор switch дает возможность сопоставления значения с множеством констант. Проверки в предыдущем примере можно представить в следующем виде:

switch (ch) {

case 'i':

in = x;

cm = x*fac;

break;

case 'c':

in = x-fac;

cm = x;

break;

default:

in = cm = 0;

break; }

Операторы break используются для выхода из оператора switch. Константы в вариантах case могут иметь различные значения, и если проверяемое значение не совпадает ни с одной из констант, принимается вариант default. Программист не обязательно должен предусматривать default. Покажем копирование строки, когда заданы указатель p на ее первый символ и указатель q на целевую строку. По соглашению строка заканчивается символом с целым значением 0.

while (p != 0) {

*q = *p; -- скопировать символ

q = q+1; p = p+1; }

*q = 0; -- завершающий символ 0 скопирован не был.

После while любое условие должно находиться в круглых скобках. Условие вычисляется, и, если оно не нулевое, выполняется непосредственно следующий за ним оператор. Это происходит до тех пор, пока вычисление условия не даст ноль. Можно применять операцию ++ для непосредственного указания увеличения, и проверка будет значительно проще: while (*p) *q++ = *p++; *q = 0; где конструкция *p++ значит: «взять символ, на который задает p, затем увеличить p».

Домашнее задание: Оформить заачу согласно ГОСТу,


Урок № 12

Тема урока: Операторы цикла while, do...while, for.

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

Учебно-воспитательные цели


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

2. воспитательная: Воспитывать дисциплинированность, усидчивость, умение слушать

3. развивающая: Развивать способность к обобщению материала, развивать и углублять представления о программировании.

Межпредметные связи: Основы алгоритмизации и программирования.

Содержание урока


Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Лекционный материал:

Поурочный план по дисциплине Основы объектно-ориентированного программированияДомашнее задание: Прата С. Язык программирования С++. Лекции и упражнения.





Урок № 13

Тема урока: Управляющие операторы в циклах (break, continue).

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

Учебно-воспитательные цели


1. образовательная: Научиться на практике применять методы защищающего программирования и находить разные типы ошибок.

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

3. развивающая: Развивать способность к обобщению материала, развивать и углублять представления о надежном программировании, развивать умение применять полученные знания на практике.

Межпредметные связи: Основы алгоритмизации и программирования.

Содержание урока


  1. Организационный момент приветствие, подготовка компьютеров к работе, загрузка программ, проверка готовности к уроку. (3-4мин)

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

Новый материал:

Операторы break и continue Часто при возникновении некоторого события удобно иметь возможность досрочно завершить цикл. Используемый для этой цели оператор break (разрыв) вызывает немедленный выход из циклов, организуемых с помощью операторов for, while, do-while, а также прекращение оператора switch. Приведенная ниже программа обеспечивает поиск в заданном иассиве элемента, равного g (пример 4.9). В случае обнаружения такого элемента оператор break прекращает дальнейшее выполнение цикла. Так как параметр i сохраняет значение после выхода из цикла, то дальнейший анализ его значения (if(i==n)) позволяет судить об удачном (i<=n) илинеудачном (i==n) поиске. В случае вложенных циклов оператор break немедленно прекращает выполнение самого внутреннего из объемлющих его циклов.

Пример 4.9/*линейный поиск*/

#include

int a[]={1,2,3,33,5,6,0,8};

int n=8;

main()

{

int i,g=33;

for(i=0;i

if(a[i]==g)

break;

if(i==n)

printf("%d не найден\n",g);

else

printf("%d на %d месте \n"g,i);

}

На примере 5.0 приведена программа, которая ведет подсчет числа различных элементов в массиве. Каждый очередной элемент a[i] сравнивается с последующими элементами массива. Если он не совпадает ни с одним из этих элементов, в счетчик k добавляется еденица. В противном случае внутренний цикл прерывается оператором break и начинается новая итерация внешнего цикла.

Пример 5.0/*число разных элементов*/

#include

main()

{

static a[]={7,3,7,4,3,6};

int i,j,m,k=1;m=6;

for(i=0;i

{

for(j=i+1;j

if(a[i]==a[j])

break;

if(j==m)

k++;

}

printf("%d разных элем. \n", k);

}

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

Пример 5.1#include

main()

{

static int a[]={1,2,-3,4,-5,6};

int i,n,s;

n=6; s=0;

for(i=0; i

{

if(a[i]<=0)

continue; /*пропуск 0*/

s+=a[i];

}

printf("сумма = %d \n",s);

}

Домашнее задание: Прата С. Язык программирования С++. Лекции и упражнения


Урок № 14

Тема урока: Лабораторная работа №2 Программирование разветвлений, множественного выбора.

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

Учебно-воспитательные цели

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

2.воспитательная: Воспитывать дисциплинированность, усидчивость, самомтоятельность, смелость в принятии решения.

3. развивающая: Развивать логическое и абстрактное мышление, навык самостоятельного исследования, интуиции, логических выводов

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

Содержание урока

Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

1. Написать программу с условным оператором: if/elise.

2. Написать программу с переключателем switch.

Ввести первую букву названия страны. Вывести количество городов этой страны.

Заранее большое спасибо!!!

Код C++

#include

#include

int main()

{

double x, y;

std::cout<<"Input x:\n> ";

std::cin>>x;

if (x == 2)

y = pow((pow(x, 2.0) + 5), 3.0)

else if (x > 2)

y = pow(x, 2.0);

else

y = pow(x, 3.0);

std::cout<<"Result:\ny = "<

return 0;

}

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

Цель работы:

Научиться разрабатывать и реализовывать программы на основе разветвляющихся алгоритмов, с использованием флажков и переключателей, а также операторов if и switch. Получить практические навыки работы по использованию различных элементов графического интерфейса и операторов языка VC++.

1. Решить задачу: В гараже имеется 4 различных автомобиля (ВАЗ, Газель, ГАЗ-66, Мерседес), каждый автомобиль имеет свой расход топлива на 100 км пути, а также свою стоимость топлива. Программа должна вычислять стоимость поездки для заданной машины. Реализовать, используя флажки и переключатели, операторы if и switch

Размещаем на форме четыре переключателя (Radio Button): ВАЗ, Газель, ГАЗ-66 и Мерседес. Для каждого из этих переключателей нам нужно определить событие - в нашем случае это будет щелчок левой кнопкой мыши. Определить событие можно, например, так:

Щелкнуть правой кнопкой по переключателю ВАЗ.

Выбрать пункт Events.

В поле Class or object to handle выбрать IDC_RADIO1.

В поле New Windows Massages/Events выбрать BN_CLICED.

Щелкнуть по кнопке Add and Edit.

В поле Member function name вписать имя события (в нашем случае пусть будет OnVAZ).

Щелкнуть кнопку ОК.

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

В редакторе исходного кода впишем следующее:

void CLab_03Dlg::OnVAZ()

{

m_edLitres = 6.5; //Расход топлива

m_edPrice = 17.5; //Цена одного литра

UpdateData(0); //Вывести данные в редакторы

}

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

Расчет поездки выполняется так же, как и в предыдущей лабораторной работе.

Да простит меня преподаватель, но я не увидел надобности использовать в данной программе операторы if и switch. Разве что для тренировки…

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

Здесь попытаемся сделать все "по взрослому". Размещаем на форме четыре переключателя: ВАЗ, Газель, ГАЗ-66, Мерседес. Чтобы подровнять переключатели, щелкаем на одном из них, а затем, нажав и удерживая клавишу Ctrl, щелкаем по очереди на остальных. Выбираем в главном меню пункт Layout -> Align -> Left. Таким образом выравниваем элементы по левому краю. Далее выбираем Layout -> Space Evenly -> Down, устанавливая таким образом одинаковый интервал между элементами.

Далее щелкаем правой кнопкой по первому переключателю (ВАЗ) и выбираем пункт Properties. Устанавливаем флажок Group. Такая установка означает, что переключатель ВАЗ является первым элементом группы переключателей.

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

void CLab_03Dlg::OnVAZ()

{

m_edLitres = 6.5; //Расход топлива

m_edPrice = 17.5; //Цена одного литра

m_radio = 0; //Включить первый переключатель

UpdateData(0); //Вывести данные в редакторы

}

Добавляем событие для кнопки РЕЗУЛЬТАТ и пишем код:

void CLab_03_2Dlg::OnResult()

{

UpdateData(1); //Получить данные из редакторов

m_edResult = (m_edWay/100)*m_edLitres*m_edPrice*m_edNum;

UpdateData(0); //Вывести данные в редакторы

}

Если я правильно понял условие задачи, то можно считать, что она решена: в редакторы можно ввести любые данные и нажать кнопку РЕЗУЛЬТАТ.

3. Усовершенствовать полученную программу: добавить грузоподъемность автомобилей и возможность указывать вес перевозимого груза. Программа должна рассчитать оптимальный вариант по стоимости перевозки груза

Добавляем еще два редактора для ввода данных: Грузоподъемность (m_edTonnage) и Вес груза (m_edWeight). Эти величины будем измерять в килограммах.

Поскольку пользоваться массивами и структурами мы научимся только в лабораторной работе № 4, то поступим следующим образом: чтобы иметь возможность сравнить результаты, создадим четыре редактора и расположим их соответствующим образом напротив наименований автомобилей. А переменные назовем так: m_ResultVAZ, m_ResultGazel, m_ResultGAZ66 и m_ResultMers. Тогда в обработчик события нажатия кнопки РЕЗУЛЬТАТ (с учетом условия задачи) нужно будет вписать такой код:

void CLab_03_3Dlg::OnResult()

{

float x; //Объявить переменную

UpdateData(1); //Получить данные из редакторов

if (m_edTonnage != 0) //Если грузоподъемность больше нуля

{

//---Вычислить кол-во поездок-----------------------------------

m_edNum = int(m_edWeight / m_edTonnage);

x = float(m_edWeight) / float(m_edTonnage);

if (m_edNum < x) m_edNum = m_edNum++;

//---Вычислить стоимость поездок--------------------------------

switch (m_radio)

{

case 0: m_ResultVAZ = (m_edWay/100)*m_edLitres*m_edPrice*m_edNum;

break;

case 1: m_ResultGazel = (m_edWay/100)*m_edLitres*m_edPrice*m_edNum;

break;

case 2: m_ResultGAZ66 = (m_edWay/100)*m_edLitres*m_edPrice*m_edNum;

break;

case 3: m_ResultMers = (m_edWay/100)*m_edLitres*m_edPrice*m_edNum;

break;

}

}

UpdateData(0); //Вывести данные в редакторы

}

Здесь m_radio - переменная, связанная с группой переключателей.

О трудностях: не сразу додумался, что строку

x = float(m_edWeight) / float(m_edTonnage)

нужно писать именно в таком виде. Сначала сделал вариант

x = float(m_edWeight / m_edTonnage)

Поурочный план по дисциплине Основы объектно-ориентированного программирования

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

Домашнее задание: Прата С. Язык программирования С++. Лекции и упражнения


Урок № 15

Тема урока: Лабораторная работа №3 Программирование циклов while, for, do...while

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

Учебно-воспитательные цели


1. образовательная: Научить выбирать способ решения задачи в зависимости от поставленной цели, закрепить умение решать циклы.

2. воспитательная: Воспитывать коммуникативные качества, самостоятельность, любовь к выбранной специальности.

3. развивающая: Развивать способность к обобщению материала, умение сравнивать и группировать.

Межпредметные связи: Основы алгоритмизации и программирования, Численные методы.

Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Практическое задание: Цикл while

while

{

команды

}

Этот цикл выполняется до тех пор, пока условие в скобках истинно. Например, пока мышка живет, она встает в 8 утра, есть, ложится спать, опять просыпается, есть, смотрит кино, ложится спать. Или пока нам вводят числа с клавиатуры, мы выводим их квадрат.

Цикл for

for (int i=0;i

{

команды

}

Этот цикл выполняется, пока вторая часть, где условие i

В первой части мы объявляем счетчик, а в 3-ей мы как-то его изменяем. Цикл while является частным случаем цикла for.

for (;условие;) <==>while (условие)

Шагом цикла называется набор команд, заключенных в { и }

Специальные функции для циклов:

В любом цикле вы можете использовать 2 специальные функции для работы с циклом:

continue - перейти к следующему шагу цикла

break - прекратить цикл

Теперь немного примеров:

// Пример 1

int a=0;

while (a<10)

{

a=(a+1)*2;

}

// Пример 2

int numbers[100];

for (int i=0;i<100;i++)

numbers[i]=i;

// Пример 3

int nums2[1000];

int j=0;

for (int i=999;i>-1;i--)

{

nums2[i]=j;

j++;

}

// Пример 4

int c;

c=1;

while (c!=0)

{

cin>>c;

if (c==2)

continue;

if (c<0)

break

cout<<"OK, Good Number;)"<

}

Ну а теперь задача для практики. Вам вводят с клавиатуры 20 чисел, ваша задача отсортировать их в порядке возрастания и в порядке убывания.

Домашнее задание: закрепить полученные умения.



Урок № 16

Тема урока: Массивы.

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

Учебно-воспитательные цели


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

2. воспитательная: Воспитывать терпение, дисциплинированность, усидчивость, самостоятельность.

3. развивающая: Развивать логическое и абстрактное мышление, навыки самостоятельного исследования, интуиции, логических выводов

Межпредметные связи: Основы объектно-ориентированного программирования, основы алгоритмизации и программирования

Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Лекционный материал:

Цель урока: разобраться с понятием массива и решить первую задачу на эту тему.

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

Язык С имеет базовые или встроенные типы данных, которые позволяют строить другие типы и структуры данных. Это, как известно: char (символьные), int (целые), float (с плавающей точкой), double (с плавающей точкой двойной длины), void (пустой, не имеющий значения). На основе этих пяти типов строятся дальнейшие типы данных.

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

3. Объявление массива.

В каждой программе, использующей массив, он обязательно объявляется. Делается это следующим образом. Пусть массив имеет размерность N. Что это такое? N - это максимальное количество элементов в массиве. Иначе - размерность массива. Итак, основная форма объявления массива следующая:

тип<имя массива>[размер1][размер2]...[размер N];

Чаще всего используются одномерные массивы. Их форма описания такова:

тип<имя массива>[размер1];

Поясним, что такое тип. Тип - это базовый, то есть основной тип элементов массива.

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

тип<имя массива>[размер1][размер2];

Это будет массив массива. То есть массив размера [размер2], элементами которого являются одномерные массивы: <имя массива>[размер1]. Размер массива в языке С задается константой или контантным выражением. Нельзя задавать массив переменного размера. Для этого существует отдельный механизм, называемый динамическим выделением памяти. Вопрос о динамическом выделении памяти и о переменных массивах будет изучаться нами попозже. Но первоначально уделим больше внимания одномерным массивам.

4. Важные сведения о массивах.

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

int a[100];

Это означает, что массив содержит следующие элементы: a[0], a[1], a[2],..., и так далее, a[99]. Легко подсчитать, сколько байт памти потребуется под одномерный массив.

Количество байт = <размер базового типа> * <количество элементов в массиве>

Следует знать, что в языке С под массив всегда выделяется непрерывное место в оперативной памяти. Выход массива за cвои опеределенные командой пределы в С не проверяется. Это следует помнить. То есть, например, если массив имеет 100 элементов и описан как a[100], то при обращении к элементу a[200] язык С не дает программе средств для контроля того факта, что имеется выхода за пределы памяти, отведенной под массив. Программа на языке С не выдаст сообщение об ошибке. Такие возможности разработчиками не предусмотрены. Возможно потому, что в те времена особенно дефицитным ресурсом была память и ее экономили на сам транслятор и потому не уделяли такого внимания анализу ошибок программиста. Отметим, что можно определять массивы любого ранее рассмотренного типа:

unsighed arr[40], long double al[1000], char ch[80].

Домашнее задание конспект лекции.



Урок № 17

Тема урока: Адреса.

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

Учебно-воспитательные цели


1. образовательная: Научить оформлять программы в соответствии с требованиями структуризации.

2. воспитательная: Воспитывать бережное отношение к компьютерной технике, интерес к выбранной специальности.

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

Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Из урока 10 вы узнали, как изменять параметры внутри функции с помощью указателей. Для использования указателей вы должны предварять имена переменных-указателей звездочкой. Использование указателей досталось в "наследство" от языка С. Чтобы упростить процесс изменения параметров, С++ вводит такое понятие как ссылка. Как вы узнаете из этого урока, ссылка представляет собой псевдоним (или второе имя), который ваши программы могут использовать для обращения к переменной. К концу данного урока вы освоите следующие основные концепции:

• Для объявления и инициализации ссылки внутри программы объявите переменную, размещая амперсанд (&) сразу же после типа переменной, и затем используйте оператор присваивания для назначения псевдонима, например int& alias_name = variable',.

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

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

Как вы узнаете, использование указателей очень упрощает изменение значений параметров внутри функции.

ССЫЛКА ЯВЛЯЕТСЯ ПСЕВДОНИМОМ

Ссылка C++ позволяет создать псевдоним (или второе имя) для переменных в вашей программе. Для объявления ссылки внутри программы укажите знак амперсанда (&) непосредственно после типа параметра. Объявляя ссылку, вы должны сразу же присвоить ей переменную, для которой эта ссылка будет псевдонимом, как показано ниже:

int& alias_name = variable; //---> Объявление ссылки

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

alias_name = 1001;

variable = 1001;

Следующая программа SHOW_REF.CPP создает ссылку с именем alias_name и присваивает псевдониму переменную number. Далее программа использует как ссылку, так и переменную:

#include

void main(void)

{

int number = 501;

int& alias_name = number; // Создать ссылку

cout << "Переменная number содержит " << number << endl;

cout << "Псевдоним для number содержит " << alias_name << endl;

alias_name = alias_name + 500;

cout << "Переменная number содержит " << number << endl;

cout << "Псевдоним для number содержит " << alias_name << endl;

}

Как видите, программа прибавляет 500 к ссылке alias_name. В итоге программа прибавляет 500 также и к соответствующей переменной number, для которой ссылка служит псевдонимом или вторым именем. Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод:

С:\> SHOW_REF

Переменная number содержит 501

Псевдоним для number содержит 501

Переменная number содержит 1001

Псевдоним для number содержит 1001

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

Объявление ссылки

Ссылка C++ представляет собой псевдоним (второе имя), которое ваши программы могут использовать для обращения к переменной. Для объявления ссылки поставьте амперсанд (&) сразу же после типа переменной, а затем укажите имя ссылки, за которым следует знак равенства и имя переменной, для которой ссылка является псевдонимом:

float& salary_alias = salary;

ИСПОЛЬЗОВАНИЕ ССЫЛОК В КАЧЕСТВЕ ПАРАМЕТРОВ

Основное назначение ссылки заключается в упрощении процесса изменения параметров внутри функции. Следующая программа REFERENC.CPP присваивает ссылку с именем number_alias переменной number. Программа передает ссылку на переменную в функцию change_value, которая присваивает переменной значение 1001:

#include

void change_value(int &alias)

{

alias = 1001;

}

void main(void)

{

int number;

int& number_alias = number;

change_value(number_alias);

out << "Переменная number содержит " << number << endl;

}

Как вы видите, программа передает ссылку в функцию change_value. Если вы рассмотрите объявление функции, вы обнаружите, что change_value объявляет параметр alias как ссылку на значение типа int.

void change_value(int& alias)

Внутри функции change_value можете изменять значение параметра без помощи указателя. В результате звездочка (*) не используется и операция внутри функции становится легче для понимания.

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

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

Рассмотрим второй пример

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

void swap_values(float *a, float *b)

{

float temp;

temp = *a;

*a = *b;

*b = temp;

}

Как видите, функция комбинирует переменные-указатели с переменными-неуказателями. Следующая программа SWAP_REF.CPP использует ссылки на значения с плавающей точкой для упрощения функции:

#include

void swap_values(float& a, float& b)

{ float temp;

temp = a;

a = b;

b = temp;

}

void main(void)

{ float big = 10000.0;

float small = 0.00001;

float& big_alias = big;

float& small_alias = small;

swap_values(big_alias, small_alias);

cout << "Big содержит " << big << endl;

cout << "Small содержит " << small << endl;

}

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

ПРАВИЛА РАБОТЫ СО ССЫЛКАМИ

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

• Вы не можете получить адрес ссылки, используя оператор адреса C++.

• Вы не можете присвоить ссылке указатель.

• Вы не можете сравнить значения ссылок, используя операторы сравнения C++.

• Вы не можете выполнить арифметические операции над ссылкой, например добавить смещение.

•Вы не можете изменить ссылку.

По мере использования объектно-ориентированного программирования на C++ вы вернетесь к ссылкам.

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

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

Ссылки C++ упрощают процесс изменения параметров функции, избавляя от операторов, которые смешивают переменные-указатели и переменные-неуказатели.

ЧТ0 ВАМ НЕОБХОДИМО ЗНАТЬ

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

Ссылка C++ является псевдонимом (или вторым именем) переменной.

Для объявления ссылки поместите знак амперсанда (&) непосредственно после типа переменной, а затем укажите имя ссылки, за которым следует знак равенства и имя переменной, для которой ссылка является псевдонимом.

Если вы однажды присвоили ссылке значение, вы не можете его изменить.

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

Чрезмерное использование ссылок может привести к слишком трудному для понимания программному коду.

.

Домашнее задание: отработать задание на домашнем компьютере.







Урок № 18

Тема урока: Указатели. Динамические массивы.

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

Учебно-воспитательные цели


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

2. воспитательная: Воспитывать умение слушать и высказывать свое мнение.

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

Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

  3. Лекционный материал:

1. ЦЕЛЬ РАБОТЫ: приобретение практических навыков создания и обработки одномерных и многомерных динамических массивов.

2. ОСНОВНЫЕ ПОНЯТИЯ

При определении статического массива: тип имя_массива [количество_элементов] , имя_массива становится указателем на область памяти, выделяемой для размещения элементов массива. Количество элементов должно быть константой. Таким образом, размеры памяти, выделяемой под массив, заданы в определении массива. Но иногда нужно, чтобы размеры памяти были не фиксированными, а выделялись в ходе выполнения программы при решении конкретной задачи.

Формирование массивов с переменными размерами можно организовать с помощью указателей и средств для динамического выделения памяти. Эти средства описаны в файле . Функции malloc() и calloc() динамически выделяют память в соответствии со значениями их параметров и возвращают адрес начала выделенного участка памяти. Тип возвращаемого значения указателя void *. Его можно преобразовать к указателю любого типа с помощью явного приведения типа. Функция free(void *) освобождает память, выделенную с помощью malloc() или calloc().

int *p;

p=(int *)malloc(size); //Указателю на целое p присваивается адрес начала выделенной области памяти размером size байт.

p=(int *)calloc(n, size); //Указателю на целое p присваивается адрес начала выделенной области памяти размером n*size байт.

free(p); //Освобождает выделенную по адресу p память. Преобразование указателя любого типа к типу void * осуществляется автоматически, так что в качестве фактического параметра можно подставить указатель любого типа без явного приведения типов.

Пример формирования одномерного динамического массива

//lab11_1

#include

#include

#include

main()

{ float *p,d;

int i,n;

printf("\n input n:");

scanf("%d",&n);

p=(float *)malloc(n*sizeof(float));

for (i=0;i

{printf("x[%d]=",i);

scanf("%f",&d);

p[i]=d;

}

for (i=0;i

{ if (i%4==0) printf("\n");

printf("\t x[%d]=%6.2f",i,p[i]);

}

free(p);

getch();

}

Доступ к участкам выделенной памяти выполняется с помощью операции индексирования: p[i].

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

Определяем указатель на массив указателей , задающий адреса начала строк матрицы: тип **uk.

Вводим размеры матрицы n,m.

Создаём динамический массив указателей на указатели начала строк : uk=(тип **)malloc(n*sizeof(тип *));

В цикле выделяем память под n массивов - строк по m элементов в каждом: for (i=0;i

Обработка массива (работа с индексированными элементами uk[i][j]).

В цикле освобождаем память, занятую под n массивов - строк : for (i=0;i

Освобождаем память, занятую под массив указателей : free(uk).

Пример обработки двумерного динамического массива

Составить программу, создающую динамическую матрицу размером n*n, заполнить матрицу случайными числами. Вычислить сумму каждой строки и поместить суммы строк в одномерный динамический массив.

//lab11_2

#include

#include

#include

#include

void main()

{ int n,j,i;

float ** matr; float * mass; // Объявляем matr - указатель на массив указателей и //mass - указатель на одномерный массив

clrscr();

printf("Введите размер квадратной матрицы n: "); scanf("%d",&n);

mass=(float *)malloc(n*sizeof(float )); // Выделяем память под одномерный массив

if (mass==NULL)

{ puts("не создан динамический массив!");

return;}

matr=(float **)malloc(sizeof(float *)*n); //Выделяем память под массив указателей

if (matr==NULL)

{ puts("не создан динамический массив!");

return;}

randomize();

for (i=0;i

{ matr[i]=(float *)malloc(sizeof(float)*n); // Выделяем память под i-ю строку

if (matr[i]==NULL)

{ puts("не создан динамический массив!");

return;}

for (j=0;j

}

for (i=0;i

{ mass[i]=0;

for (j=0;j

mass[i]+=matr[i][j];

}

for (i=0;i

{ for (j=0;j

printf("\t%6.2f",matr[i][j]);

printf("\n");

}

for (i=0;i

printf("\n сумма %d строки %8.2f",i,mass[i]);

for (i=0;i

free(matr[i]); //Освобождаем память i - й строки

free(matr); // Освобождаем память массива указателей

free(mass); // Освобождаем память массива сумм

getch();

}

3. ВЫПОЛНЕНИЕ РАБОТЫ

3.1. Проанализировать приведенные программы.

3.2. Создать двумерный динамический массив и выполнить задание по своему варианту.

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

1.Даны матрица A размером m*n и вектор В размером m. Записать на главную диагональ элементы вектора, а в вектор - элементы главной диагонали.

2. Выбрать максимальный элемент матрицы С (размер m*n), элементы четных строк разделить на максимальный элемент, а к элементам нечетных прибавить максимальный элемент.

3. Найти минимальный элемент матрицы С (размер m*n), и поменять его местами с первым элементом.

4. Дана матрица Е размером m*n. Вычислить суммы элементов каждого столбца. Определить наибольшее значение этих сумм и номер соответствующего столбца.

5. В матрице К размером m*n найти в каждом столбце произведение отрицательных элементов и количество нулевых элементов в матрице .

6. Даны две матрицы А и В одинаковой размерности m*n. Получить матрицу

C = max (a i j, b i j ), и матрицу D = min (a i j, b i j).

7. Дана матрица Р размером m*n . Найти сумму минимальных элементов каждого столбца матрицы.

8. Даны матрицы: А размером m*k и В размером k*n.Получить матрицу С=A*В.

9. Дана матрица К размером m*n. Вычислить сумму минимальных элементов каждого столбца.

10. Дана матрица С размером m*n. Упорядочить эту матрицу по возрастанию элементов в каждом столбце.

11. Дан одномерный массив A из m элементов. Вводится число k (k

12. В матрице Т размером m*k переставить элементы в строках так, чтобы по диагонали они были упорядочены по возрастанию.

4. КОНТРОЛЬНЫЕ ВОПРОСЫ

4.1. Отличия динамического массива от статического.

4.2. Как создать одномерный динамический массив?

4.3. Как создать динамическую матрицу?

4.4. Как освобождается память, занятая под динамические структуры?

Домашнее задание: конспект лекции.




Урок № 19

Тема урока: Лабораторная работа №4 Составление программ с использованием одномерных и многомерных массивов.

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

Учебно-воспитательные цели

1. образовательная: изучить описание, ввод и вывод статических массивов на языке С++;

2) освоить обработку массивов с использованием вложенных циклов.

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

3. развивающая: Развивать логическое и абстрактное мышление, навык самостоятельного исследования, интуиции, логических выводов

Методы обучения: словесный (рассказ), частично-поисковый.

Содержание урока

Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Практическое задание:

Массив - это множество однотипных переменных, занимающих смежные ячейки памяти и обозначенных одним именем.

1. С++ позволяет изменять размер массива. Т.е добавлять элемент.

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

3. Необходимо использовать для массивов только предопределенные типы.

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

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

Синтаксис для объявления одномерного массива:

тип_элемента_массива имя_массива [число_элементов];

Пример 1. Объявление одномерных массивов

int MyArr [10];

char Literal [31];

double x_arr [100];

При объявлении одномерных массивов в языке С++ необходимо соблюдение правил:

1) в объявлении массива указывается количество элементов;

2) индекс первого элемента массива равен 0. Это значение нельзя изменить или переопределить;

3) индекс последнего элемента определяется как количество элементов минус 1.

Доступ к элементам массива осуществляется через имя массива и индекс элемента, указываемый в квадратных скобках: a[1], b[25].

При работе с массивами рекомендуется проверять допустимость значения индекса массива. Допустимыми являются значения индексов в диапазоне от 0 до число_элементов - 1.

Ввод массива осуществляется с использованием цикла:

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

Точное число начальных значений можно не указывать, так как язык С++ позволяет задавать размер массива автоматически, используя количество элементов в соответствующем списке начальных значений. Следовательно, число в квадратных скобках при описании массива может отсутствовать. В этом случае размер массива определит компилятор, например, double x[ ]= {1,2,3};

Многомерные массивы

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

Общий синтаксис для объявления двумерных и трехмерных массивов:

тип_элемента имя_массива [размер_1] [размер_2];

тип_элемента имя_массива [размер_1 ] [размер_2] [размер_3];

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

Пример 5. Объявление многомерных массивов

double matrix A [100][10];

char table [41][22][3];

int index [7][12];

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

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

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

При обработке матриц чаще всего встречаются следующие типы задач:

работа с матрицей в целом;

работа со строкой (столбцом) матрицы;

работа с диагональными элементами.

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

5. допустимы объявления:

int hats [3]= {10,20,30};

int caps [ ] = {5,7,9},компилятор автоматически вычислит размер массива и создаст массив из 10 элементов.

Домашнее задание: отработать задание на домашнем компьютере.







Урок № 20-21

Тема урока: Программы - шпионы, вирусы. Методы зашиты информации

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

Учебно-воспитательные цели


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

2. воспитательная: Воспитывать дисциплинированность, усидчивость, умение работать самостоятельно.

3. развивающая: Развивать умение самостоятельно работать, применять полученные знания на практике

Методы обучения: словесный, наглядно-практический

Межпредметные связи: Операционные системы (Компьютерные вирусы и борьба с ними)

Содержание урока


  1. Организационный момент: приветствие, загрузка программы (3-4мин)

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

  3. Лекционный материал:

    1. Компьютерные вирусы - программы, целью которых является скрытое распространение с параллельным повреждением программ и файлов.

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

    3. Этапы защиты от вирусов:

  • Контроль новых программных средств;

  • Сегментация информации на винчестере;

  • Архивирование;

  • Систематическое использование программ - ревизоров, проверяющих целостность информации.

    • Типы вирусов.

Вопросы для закрепления:

  1. Что такое «компьютерные вирусы»?

  2. Какие бывают компьютерные вирусы?

  3. Методы борьбы с компьютерными вирусами?

Домашнее задание: : Бурмистрова Т.А. «Технология разработки ПО» стр 76-78, конспект лекции.


Урок № 22

Тема урока Организация функций с переменным числом параметров.

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

Учебно-воспитательные цели


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

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

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

Методы обучения: словесный, наглядно-практический

Межпредметные связи: Операционные системы (Работа с антивирусными программами)

Содержание урока


      1. Организационный момент: приветствие, загрузка программы. (3-4мин)

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

Практическое задание

    1. Освоить простейшие приемы защиты программ;

    2. Научиться использовать пароль;

    3. Контроль уровня доступа;

    4. Контроль за правильностью ввода данных

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

Домашнее задание: Закрепить знания, полученные на уроке, создав программу с защитой на домашнем компьютере



Урок № 23

Тема урока: Глобальные, локальные переменные.

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

Учебно-воспитательные цели


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

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

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

Методы обучения: поисковый, практический.

Межпредметные связи: Операционные системы

Содержание урока


      1. Организационный момент: приветствие, загрузка программы. (3-4мин)

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

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

• Вы объявляете локальные переменные внутри функции точно так же, как и внутри main: указывая тип и имя переменной.

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

• Область видимости переменной определяет участок программы, где переменная известна и доступна.

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

• Оператор глобальной области видимости C++ (::) позволяет вам управлять областью видимости переменной.

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

ОБЪЯВЛЕНИЕ ЛОКАЛЬНЫХ ПЕРЕМЕННЫХ

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

void some_function(void)

{

int count;

float result;

}

Следующая программа USEBEEPS.CPP использует функцию so und_speaker, которая заставляет играть встроенный компьютерный динамик столько раз, сколько указано параметром beeps. Внутри функции so und_speaker локальная переменная counter хранит количество звуков, издаваемых динамиком:

#include

void sound_beeps(int beeps)

{

for (int counter = 1; counter <= beeps; counter++) cout << '\a';

}

void main(void)

{

sound_beeps(2);

sound_beeps(3);

}

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

О конфликте имен

При объявлении локальных переменных внутри функции очень вероятно, что имя локальной переменной, объявляемой вами в одной функции, будет таким же , как и имя переменной, используемой в другой функции. Как уже упоминалось, локальные переменные известны только в текущей функции. Таким образом, если две функции используют одно и то же имя для своих локальных переменных, это не приводит к конфликту. C++ трактует имя каждой переменной как локальное по отношению к соответствующей функции. Следующая программа LCLNAME.CPP использует функцию add_values для сложения двух целочисленных значений. Эта функция присваивает свой результат локальной переменной value. Однако в main один из параметров, передаваемых в функцию, также носит имя value. Тем не менее, поскольку C++ трактует обе переменные как локальные для соответствующих функций, их имена не конфликтуют:

#include

int add_values(int a, int b)

{

int value;

value =a + b;

return(value);

}

void main (void)

{

int value = 1001;

int other value = 2002;

cout << value << " + " << other_value << " = " << add_values(value, other_value) << endl;

}

О локальных переменных

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

ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ

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

int some_global_variable; ---> Объявление глобальной переменной

void main(void)

{

// Здесь должны быть операторы программы

}

Следующая программа GLOBAL. CPP использует глобальную переменную именем number. Каждая функция в программе может использовать (или изменять) значение глобальной переменной. В данном случае каждая функция выводит текущее значение этой переменной, а затем увеличивает это значение на единицу:

#include

int number = 1001;

void first_change(void)

(

cout << "значение number в first_cbange " << number << endl;

number++;

}

void second_change(void)

{

cout << "значение number в second_change " << number << endl;

number++;

}

void main(void)

{

cout << "значение number в main " << number << endl;

number++;

first_change () ;

second_change();

}

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

Если имена глобальных и локальных переменных конфликтуют

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

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

number = 1001; // обращение к локальной переменной

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

::number = 2002; // Обращение к глобальной переменной

Следующая программа GLOBLOCA.CPP использует глобальную переменную number. В дополнение к этому функция show_numbers использует локальную переменную с именем number. Эта функция использует оператор глобального разрешения для обращения к глобальной переменной:

#include int number = 1001; // Глобальная переменная

void show_numbers(int number)

{

cout << "Локальная переменная number" << " содержит " << number << endl;

cout << "Глобальная переменная number" << " содержит " << ::number << endl;

}

void main(void)

{

int some_value = 2002;

show_numbers(some_value) ;

}

Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод:

С:\> GLOBLOCA

Локальная переменная number содержит 2002

Глобальная переменная number содержит 1001

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

О глобальных переменных

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

Представление об области видимости переменных

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

ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ

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

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

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

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

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

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

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

Домашнее задание: Закрепить знания, полученные на уроке, доработав задание на домашнем компьютере


Урок № 24

Тема урока: Стандартные библиотечные функции

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

Учебно-воспитательные цели


1. образовательная: Дать понятие о стандартных библиотечных функциях, их назначение, способы применения.

2. воспитательная: Воспитывать стремление к получению новых знаний

3. развивающая: Развивать интерес к выбранной специальности, умение слушать и конспектировать работать, применять полученные знания на практике

Методы обучения: словесный, наглядно-практический

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

Содержание урока


  1. Организационный момент: приветствие, загрузка программы. (3-4мин)

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

  3. Лекционный материал:

Любая программа на С++ содержит обращения к стандартной библиотеке, в которой находятся определения типов, констант, макросов, функций и классов.

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

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

Ниже приведен краткий обзор основных функций.

Функции ввода/вывода

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

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

Открытие потока

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

FILE* fopen(const char* filename, const char* mode);

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

"r" - файл открывается для чтения;

"w" - открывается пустой файл для записи (если файл существует, он стирается);

"a" - файл открывается для добавления информации в его конец;

"r+" - файл открывается для чтения и записи (файл должен существовать);

"w+" - открывается пустой файл для чтения и записи (если файл существует, он стирается);

"a" - файл открывается для чтения и добавления информации в его конец.

Режим открытия может также содержать символы t (текстовый режим) или b (двоичный режим), отличающиеся обработкой символов перехода на новую строку. По умолчанию файл открывается в текстовом режиме, при котором комбинация символов "возврат каретки" и "перевод строки" (0x13 0x10) при вводе преобразуются в одиночный символ перевода строки (при выводе выполняется обратное преобразование). В двоичном режиме преобразования не выполняются.

Пример:

FILE *f = fopen("d:\\cpp\\data.txt", "rb+");

Указатель f используется в дальнейших операциях с потоком. Его передают функциям ввода/вывода в качестве параметра.

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

Существует пять предопределенных потоков, которые открываются в начале работы программы: стандартный ввод stdin, стандартный вывод stdout, стандартный вывод сообщений об ошибках stderr, стандартный дополнительный поток stdaux и стандартная печать stdprn.

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

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

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

Ниже перечислены основные функции ввода/вывода потока.

Чтение и запись потока байтов выполняют функции fread и fwrite.

Чтение символа из потока - getc, fgetc, из стандартного потока stdin - getchar.

Запись символа в поток - putc, fputc, в стандартный поток stdout - putchar.

Чтение строки из потока - fgets, из стандартного потока stdin - gets.

Запись строки в поток - fputs, в стандартный поток stdout - puts.

Форматированный ввод из потока - fscanf, из стандартного потока stdin - scanf, из строки - sscanf.

Форматированный вывод в поток - fprintf, в стандартный поток stdout - printf, в строку - sprintf.

Закрытие потока

Поток закрывается либо при завершении программы, либо явным образом с помощью функции fclose:

int fclose(FILE*);

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

Вопросы для закрепления:

Дать характеристику основным терминам.

Расшифруйте формат: FILE* fopen(const char* filename, const char* mode);

Перечислите функции ввода/вывода потока?

Домашнее задание: конспект лекции.


Урок № 25-26

Лабораторная работа №6-7 Составление программ с использованием функций

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

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

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

Методы обучения: словесный, наглядно-практический

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

Содержание урока

Организационный момент: приветствие, загрузка программы. (3-4мин)

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

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

1. Ознакомиться с теоретическими положениями, приведенными в данных методических указаниях (МУ), а также с конспектом лекций по данной теме.

2. Проверить работу примеров, приведенных в тексте МУ.

3. Разработать программы, использующие 1) функции; 2) функции с параметрами, заданными по умолчанию; 3) перегруженные функции (см. задания 1-3). Можно разрабатывать как консольные приложения, так и приложения с графическим интерфейсом пользователя.

Задание 1. Разработка программы, использующей функции. Разработайте программу по вариантам из таблицы 1.

Таблица 1. Программы с использование функций

Вар.

Задание

1

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

2

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

3

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

4

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

5

С клавиатуры вводятся три целых положительных числа. Требуется определить наибольший общий делитель трех величин: a, b, с. (НОД(a, b, с)). Определить и использовать функцию для вычисления наибольшего общего делителя двух чисел. В основной программе использовать математический факт: если x,y,z - три натуральных числа, то НОД(x,y,z)= НОД (НОД (x,y),z).

6

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

7

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

7

Объявить функцию S(n), которая определяет сумму всех чисел до заданного натурального числа n. Так, например, S(4)=10. Разработать программу, использующую составленную функцию; в программе для введенных с клавиатуры чисел А и В найти и вывести S(А) + S(В).

8

Объявить функцию S(n), которая определяет произведение всех натуральных чисел до заданного числа n. Так, например, S(4)=24. Разработать программу, использующую составленную функцию; в программе для введенных с клавиатуры чисел А и В найти и вывести S(А) + S(В).

9

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

10

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

11

Объявить функцию Р(n), которая определяет произведение всех чисел до заданного натурального числа n. Так, например, Р(4)=24. Разработать программу, использующую составленную функцию; в программе для введенных с клавиатуры чисел А и В найти и вывести Р(А) + Р(В).

12

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

13

Объявить функцию F для вычисления площади треугольника по длинам трех его сторон (по формуле Герона). Составить программу для нахождения площади четырехугольника по длинам своих сторон a, b, c, d и одной диагонали e. Использовать объявленную функцию F.

14

Разработать программу нахождения углов треугольника по длинам его сторон a, b, c с использованием функции для нахождения угла.


Урок № 27

Тема урока:_ Строки как массив типа char.

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

Учебно-воспитательные цели


1. образовательная: сформировать понятие о строках как о части массива.

2. воспитательная: Воспитывать дисциплинированность, усидчивость, умение слушать.

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

Методы обучения: Словесный, наглядный.

Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

  3. Объяснение нового материала:

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

Чтобы объявить символьную строку, вы должны объявить массив типа char,

Чтобы присвоить символы символьной строке, ваши программы просто присваивают символы элементам массива символьных строк.

Программы C++ используют символ NULL (ASCII 0), чтобы отметить последний символ строки.

C++ позволяет вашим программам инициализировать символьные строки при их объявлении.

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

Большинство библиотек этапа выполнения C++ обеспечивают набор функций, которые управляют символьными строками.

Программы на C++ хранят символьные строки как массив типа char. Большинство программ широко используют символьные строки. Экспериментируйте с каждой программой, представленной в этом уроке, чтобы освоиться с символьными строками. Вы обнаружите, что работа с символьными строками подобна работе с массивами, описанной в уроке 16.

ОБЪЯВЛЕНИЕ СИМВОЛЬНЫХ СТРОК В ПРОГРАММАХ

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

Для объявления символьной строки внутри программы просто объявите массив типа char с количеством элементов, достаточным для хранения требуемых символов. Например, следующее объявление создает переменную символьной строки с именем filename, способную хранить 64 символа (не забывайте, что символ NULL является одним из этих 64 символов):

char filename[64];

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

Что такое ПО?

Какой процесс относится к технологическим?

Почему разработка программ относится к технологическим процессам?

Домашнее задание: повторить конспект лекции



Урок № 28

Тема урока: Строки как параметры функции

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

Учебно-воспитательные цели


1. образовательная: Дать понятие классификации современного программного обеспечения, ознакомить с функциями современного ПО.

2. воспитательная: Воспитывать дисциплинированность, усидчивость, умение слушать.

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

Методы обучения: Словесный, наглядный, частично-поисковый.

Межпредметные связи: Операционные системы

Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

  3. Объяснение нового материала:

Передача символьной строки в функцию подобна передаче любого массива в качестве параметра. Внутри функции вам нужно просто указать тип массива (char) и левую и правую скобки массива. Вам не надо указывать размер строки. Например, следующая программа SHOW_STR.CPP использует функцию show_ string для вывода символьной строки на экран:

#include

void show_string(char string[])

{

cout << string << endl;

}

void main(void)

{

show_string("Привет, C++!");

show_string("Учусь программировать на C++");

}

Как видите, функция show_string трактует параметр символьной строки как массив:

void show_string(char string[])

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

Как вы уже знаете, функции C++ часто используют символ NULL для определения конца строки. Следующая программа STR_LEN.CPP создает функцию с именем string_length, которая ищет символ NULL в строке для определения количества символов, содержащихся в строке. Далее функция использует оператор return для возврата длины строки вызвавшей функции. Программа передает несколько различных символьных строк в функцию, отображая длину каждой из них на экране:

#include

int string_length(char string[])

{

int i;

for (i = 0; string[] != '\0'; i++); // Ничего не делать, но перейти к

// следующему символу return(i); Длина строки

}

void main(void)

{

char title[] = "Учимся программировать на языке C++";

char lesson[] = "Символьные строки";

cout << "Строка " << title << " содержит " << string_length(title) << " символов" << endl;

cout << "Строка " << lesson << " содержит " << string_length(lesson) << " символов" << endl;

}

Как видите, функция запускается с первого символа строки (элемент 0) и затем исследует каждый элемент до тех пор, пока не встретит NULL. Рассматривая программы на C++, вы встретите целый ряд функций, которые подобным образом просматривают символьные строки в поисках символа NULL.

ПРЕИМУЩЕСТВА ТОГО, ЧТО NULL ПРЕДСТАВЛЯЕТ СОБОЙ ASCII 0

Как вы уже знаете, символ NULL представляет собой символ ASCII 0. В уроке 7 вы изучали, что C++ использует значение 0, чтобы представлять ложь. Таким образом, поскольку символ NULL равен 0, ваши программы могут упростить многие операции цикла. Например, многие функции просматривают символьные строки символ за символом в поиске NULL. Следующий цикл for иллюстрирует, как программа может искать NULL в строке:

for (index = 0; string[index] != NULL; index++)

Поскольку символ NULL равен 0, многие программы упрощают циклы, которые ищут NULL, как показано ниже:

for (index = 0; string[index]; index++);

В данном случае пока символ, содержащийся в string[index] не NULL (0 или ложь), цикл продолжается.

Из урока 11 вы узнали, что большинство компиляторов C++ обеспечивает обширный набор функций, называемых библиотекой этапа выполнения. Рассматривая библиотеку этапа выполнения, вы обнаружите, что она содержат много разных функций, манипулирующих строками. Например, функция strupr преобразует символьную строку в строку верхнего регистра. Подобно этому, функция strlen возвращает количество символов в строке. Большинство библиотек этапа выполнения обеспечивают даже функции, которые позволяют вам просматривать строки в поисках определенного символа. Например, следующая программа STRUPR.CPP иллюстрирует использование функций strupr и strlwr библиотеки этапа выполнения:

#include

#include // Содержит прототипы

// функций strupr и strlwr

void main(void)

{

char title[] = "Учимся программировать на языке C++";

char lesson[] = "Символьные строки";

cout << "Верхний регистр: " << strupr(title) << endl;

cout << "Нижний регистр: " << strlwr(lesson) << endl;

}

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

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

1. Назначение функции show_string ?

Что такое « Общее программное обеспечение»?

Что такое «Операционная система»?

Дайте понятие ППП?

Какие виды ОС бывают?

Домашнее задание: повторить конспект лекции


Урок № 29


Тема урока: Передача одномерного массива в функцию


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

Учебно-воспитательные цели


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

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

3. развивающая: Развивать умение выделять главную мысль, навык структурирования текста лекции, умение составлять план изложения материала.

Межпредметная связь: Основы экономики,

Методы обучения: Словесный (беседа), дедуктивный метод (от общего к частному)

Содержание урока


      1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Лекционный материал:

В языке С нельзя передать весь массив как аргумент функции. Однако можно передать указатель на массив, т.е. имя массива без индекса. Например, в представленной программе в func1() передается указатель на массив i:

int main(void)

{

int i[10];

func1(i);

/* ... */

}

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

void func1(int *x) /* указатель */

{

/* ... */

}

или как

void func1(int x[10]) /* массив определенного размера */

{

/* ... */

}

и наконец как

void func1(int x[]) /* массив без определенного размера */

{

/* ... */

}

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

void func1(int x[32])

{

/* ... */

}

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

  • »?

Домашнее задание: конспект лекции.



Урок №30

Тема урока: Работа со строками.

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

Учебно-воспитательные цели

1. образовательная: Сформировать понятие о жизненном цикле программы, раскрыть суть каждого этапа.

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

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

Методы обучения: словесный (беседа), частично-поисковый.

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

Содержание урока

Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

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

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

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

Выполните приведенные ниже задания.

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

Дана строка, в которой слова разделены одним пробелом. Подсчитайте, сколько букв 'w' встречается в каждом слове.

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

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

Указания к выполнению работы.

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

Следует реализовать каждое задание в соответствии с приведенными этапами:

изучить словесную постановку задачи, выделив при этом все виды данных;

сформулировать математическую постановку задачи;

выбрать метод решения задачи, если это необходимо;

разработать графическую схему алгоритма;

записать разработанный алгоритм на языке С++;

разработать контрольный тест к программе;

отладить программу;

представить отчет по работе.

Требования к отчету.

Отчет по лабораторной работе должен соответствовать следующей структуре.

Титульный лист.

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

Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела - представить решаемую задачу в математической формулировке.

Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).

Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.

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

Выводы по лабораторной работе.

Ответы на контрольные вопросы.

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

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

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

Почему при сравнении строк важен регистр символов?

Как сравниваются строки разной длины?

Какие возможны последствия при обращении к неинициализированной строке?

Почему функция изменения регистра символов строки может некорректно работать с кириллицей?



Урок № 31

Тема урока: Использование препроцессора

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

Учебно-воспитательные цели


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

2. воспитательная: Воспитывать любовь к выбранной специальности, умение слушать

3. развивающая: Развивать логическое и абстрактное мышление, расширять общую информационную культуру.

Методы обучения: словесный (лекция).

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

Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Лекционный материал:

Лекция № 23 Использование препроцессора

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

Препроцессор языка С выполняет макроподстановку, условную компиляцию и включение именованных файлов. Строки, начинающиеся со знака # (перед которыми разрешены символы пустого пространства), задают препроцессору инструкции-директивы. Их синтаксис не зависит от остальной части языка; они могут фигурировать где угодно и оказывать влияние (независимо от области действия) вплоть до конца единицы трансляции. Границы строк принимаются во внимание: каждая строка анализируется отдельно (но есть возможность и сцеплять строки). Лексемами для препроцессора являются все лексемы языка и последовательность символов, задающие имена файлов. Кроме того, любой символ, не определенный каким-либо другим способом, также воспринимается как лексема [19.2]. Влияние символов пустого пространства, отличающихся от пробелов и горизонтальных табуляций, внутри строк препроцессора не определено.

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

Имеются следующие директивы препроцессора:

#define #endif #ifdef #line

#elif #error #ifndef #pragma

#else #if #include #undef

Каждая директива препроцессора должна занимать отдельную строку. Например, строка

#include #include

рассматривается как недопустимая [19.3].

Директива #define

Директива #define определяет идентификатор и последовательность символов, которая будет подставляться вместо идентификатора каждый раз, когда он встретится в исходном файле. Идентификатор называется именем макроса, а сам процесс замены - макрозаменой (макрорасширением, макрогенерацией, макроподстановкой) [19.3]. В общем виде директива #define выглядит следующим образом (должно быть задано буквами латинского алфавита):

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

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

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

У директивы #define имя макроса может определяться с формальными параметрами. Тогда каждый раз, когда в программе встречается имя макроса, то используемые в его определении формальные параметры заменяются теми аргументами, которые встретились в программе. Такого рода макросы называются макросами с формальными параметрами (макроопределениями с параметрами и макросами, напоминающими функции ) [19.3]. Ключевым элементом макроса с параметрами являются круглые скобки, внутри которых находятся собственно формальные параметры. Рассмотрим пример макроса с тремя параметрами для определения следующего условия: будет ли остаток от деления случайной функции на правую границу интервала больше, чем половина этого интервала.

Программный код решения примера

#include

#include

#include

#include

#define MAX(a,b,c) ((1+rand()%(b)) > ((a)+(b))/2 ) ? (c):(b)

int main (void) {

int a, b, c;

srand((unsigned) time(NULL));

printf("\n Enter a, b, c: ");

scanf_s("%d%d%d", &a, &b, &c);

printf("\n MAX(a,b,c): %d\n", MAX(a,b,c));

printf("\n\n ... Press any key: ");

_getch();

return 0;

}

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

Использование вместо настоящих функций макросов с формальными параметрами (т. е. a, b, с ) дает следующее преимущество: увеличивается скорость выполнения кода, потому что в таких случаях не надо тратить ресурсы на вызов функций. Кроме того, макрос не чувствителен к типу данных, т. е. в нем отсутствует проверка типов аргументов. Однако если у макроса с формальными параметрами очень большие размеры, то тогда из-за дублирования кода увеличение скорости достигается за счет увеличения размеров программы [19.3]. И еще, в конструировании макроса следует быть очень внимательным. Как правило, макросы используются для небольших пользовательских функций [19.4].

Директива #error

Директива #error заставляет компилятор прекратить компиляцию [19.3]. Эта директива используется в основном для отладки. В общем виде директива #error выглядит следующим образом:

#error сообщение - об - ошибке

Заданное сообщение об ошибке ( сообщение - об - ошибке ) в двойные кавычки не заключается. Когда встречается данная директива, то выводится сообщение об ошибке - возможно, вместе с другой информацией, определяемой компилятором [19.3].

Директива #include

Директива #include дает указание компилятору читать еще один исходный файл - в дополнение к тому файлу, в котором находится сама эта директива [19.3]. Имя исходного файла (подключаемого файла) должно быть заключено в двойные кавычки или в угловые скобки. Обычно имена стандартных заголовочных файлов заключают в угловые скобки. А использование кавычек обычно приберегается для имен специальных файлов, относящихся к конкретной программе. Способ поиска файла зависит от того, заключено ли его имя в двойные кавычки или же в угловые скобки. Если имя заключено в угловые скобки, то поиск файла проводится тем способом, который определен в компиляторе. Часто это означает поиск определенного каталога, специально предназначенного для хранения таких файлов. Если имя заключено в кавычки, то поиск файла проводится другим способом. Во многих компиляторах это означает поиск файла в текущем рабочем каталоге. Если же файл не найден, то поиск повторяется уже так, как будто имя фа йла закл ючено в угловые скобки [19.3].

Файлы, имена которых находятся в директивах #include, могут в свою очередь содержать другие директивы #include. Они называются вложенными директивами #include. Количество допустимых уровней вложенности у разных компиляторов может быть разным. Однако в стандарте С89 предусмотрено, что компиляторы должны допускать не менее 8 таких уровней [19.3].

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

Директивы условной компиляции (будут рассмотрены ниже) дают возможность выборочно компилировать части исходного кода программы. Этот процесс называется условной компиляцией [19.3].

Директива условной компиляции #if выглядит следующим образом:

#if константное_выражение

последовательность операторов программного кода

#endif

Если находящееся за директивой #if константное выражение истинно, то компилируется код, который находится между этим выражением и #endif, которая обозначает конец блока #if. Константное выражение может быть задано через директиву #define. При этом, если, например, задано число, не равное нулю, то такое константное выражение будет истинно. Если же заданное число есть нуль, то константное выражение будет ложным. В частности константное выражение может быть задано макросом с формальными параметрами, которые должны быть в свою очередь также константными параметрами.

Директива условной компиляции #else используется практически также как в обычном условном операторе языка С: if - else. То есть логика действия позволяет перенаправить выполнение программы. Дополнительная директива условной компиляции #else в общем случае имеет вид

#if константное_выражение

последовательность операторов программного кода

#else

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

#endif

Аналогично используются директивы #elif (else if), которые в общем случае имеют следующий вид:

#if константное_выражение

последовательность операторов программного кода

#elif 2_ константное_выражение

2_ я_последовательность операторов программного кода

#elif 3_ константное_выражение

3_ я_последовательность операторов программного кода

.

.

.

#elif N_ константное_выражение

N_ я_последовательность операторов программного кода

#else

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

#endif

Если константное выражение в директиве #elif истинно (не нулевое, например), то будет компилироваться соответствующая последовательность операторов программного кода. При этом другие выражения в директивах #elif проверяться уже не будут, в том числе и директива #else.

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

В соответствии со стандартом С89 у директив #if и #elif может быть не менее 8 уровней вложенности. При вложенности каждая директива #endif, #else или #elif относится к ближайшей директиве #if или #elif [19.3].

Каждая директива #if сопровождается директивой #endif.

Директива условной компиляции #ifdef в общем виде выглядит следующим образом:

#ifdef имя_макроса

последовательность операторов

#endif

Директива условной компиляции #ifdef означает "if defined" (если определено) [19.3]. Последовательность операторов будет компилироваться, если имя макроса было определено ранее с помощью директивы #define.

Директива условной компиляции #ifndef означает "if not defined" (если не определено) в общем виде выглядит следующим образом:

#ifndef имя_макроса

последовательность операторов

#endif

Последовательность операторов будет компилироваться, если имя макроса еще не определено директивой #define. В директивах #ifdef и #ifndef можно использовать #else или #elif.

Согласно стандарту С89 допускается не менее 8 уровней #ifdef и #ifndef.

Директива #undef удаляет заданное определение имени макроса, то есть "аннулирует" его определение; само имя макроса должно находиться после директивы [19.3].

В общем случае директива #undef выглядит следующим образом:

#undef имя_макроса

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

Для того чтобы узнать определено ли имя макроса, можно использовать директиву #if в сочетании с оператором времени компиляции defined [19.3].

Оператор defined выглядит следующим образом:

defined имя_макроса

Если имя_макроса определено, то выражение считается истинным; в противном случае - ложным.

Единственная причина, по которой используется оператор defined, состоит в том, что с его помощью в #elif можно узнать, определено ли имя макроса [19.3].

Директива #line

Директива #line изменяет содержимое __LINE__ и __FILE__, которые являются зарезервированными идентификаторами (макросами) в компиляторе. В первом из них содержится номер компилируемой в данный момент строки программного кода программы [19.3]. А второй идентификатор - это строка, содержащая имя компилируемого исходного файла.

Директива #line выглядит следующим образом:

#line номер "имя_файла"

В определении директивы #line обязательным является номер строки, относительно которой будет выполняться подсчет следующих строк. Второй параметр "имя_файла" является не обязательным. Если его не будет, то идентификатор __FILE__ будет содержать путь и имя программы. Если указать в качестве параметра новое имя файла - "имя_файла", то __FILE__ будет содержать это новое имя файла.

Директива #line в основном используется для отладки и специальных применений [19.3].

Операторы препроцессора # и ##

Операторы # и ## применяются в сочетании с директивой #define [19.3]. Оператор #, который обычно называют оператором превращения в строку (stringize), превращает аргумент, перед которым стоит, в строку, заключенную в кавычки. Оператор # должен использоваться в макросах с аргументами, поскольку операнд после # ссылается на аргумент макроса [19.5].

Оператор ##, который называют оператором склеивания (pasting), или конкатенации конкатенирует две лексемы. Операция ## должна иметь два операнда [19.5].

Операторы # и ## предусмотрены для работы препроцессора в некоторых особых случаях [19.3,19.5].

Директива #pragma

Директива #pragma - это определяемая реализацией директива, которая позволяет передавать компилятору различные инструкции [19.3]. Она позволяет помещать инструкции компилятору в исходный код [19.4]. Возможности этой директивы следует изучать по документации по компилятору.

Предопределенные символические константы

В языке С определены пять встроенных, предопределенных имен макрокоманд [19.2-19.3-19.4-19.5], которые представлены в табл. 19.1.

Таблица 19.1. Предопределенные символические константы

Символическая константа Объяснение

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

__FILE__ По умолчанию возвращает в виде строки символов имя компилируемого исходного файла

__DATE__ Возвращает в виде строки символов дату (мм дд гг) начала компиляции текущего исходного файла

__TIME__ Возвращает в виде строки символов время (чч:мм:сс) начала компиляции текущего исходного файла

__STDC__ Возвращает целую константу 1, которая указывает на то, что данная реализация совместима со стандартом ANSI

Урок № 32


Тема урока: Определение и обработка макросов.

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

Учебно-воспитательные цели


1. образовательная: Сформировать понятие об определении и обработке макросов с С++.

2. воспитательная: Воспитывать бережное отношение к технике, коммуникативные качества, чувство взаимовыручки

3. развивающая: Развивать умение применять полученные знания на практике

Методы обучения: словесный, наглядно-практический

Межпредметные связи: математика

Содержание урока


  1. Организационный момент: приветствие, подключение компьютеров, загрузка программ, проверка готовности к уроку. (3-4мин)

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

Макросы - это препроцессорные "функции" , т.е. лексемы, созданные с помощью директивы #define, которые принимают параметры подобно функциям. После директивы #define указывается имя макроса, за которым в скобках (без пробелов) параметры, отделенные запятыми и определение макроса, отделенное пробелом.

Например:

#define ADD(x,y) x = x + y

если после этого написать:

int a=2;

int b=3;

ADD(a,b);

cout

то получим:

a=5 b=3

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

#define MACRO1(x) x * x

#define MACRO2(x) ( x ) * ( x )

int a =2;

int b=3;

cout

результат:

macro 1- 11

macro 2- 25

В первом случае получили 2+3*2+3, то есть 2+6+3=11, а во втором (2+3)*(2+3), т.е. 5*5=25.

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

#define PRINT(x) cout

то

PRINT( a string ); равносильно cout

Оператор ## используется для контактенации строк, то есть "склеивания" нескольких строк в одну. Например, у вас есть несколько функций с именами MyFirstFunction(), MySecondFunction(), MyThirdFunction() и т.д. Для их вызова можно определить макрос:

#define CALLFUNC(x) My##x##Function()

и вызывать функции MyFirstFunction(), MySecondFunction() ,MyThirdFunction() и т.д. макросом CALLFUNC

CALLFUNC(First);

CALLFUNC(Second);

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

cout

Результат:

compiled on Sep 52001 23:49:55

Домашнее задание: отрабатывать и закреплять полученные умения и навыки.






Урок № 33

Тема урока: Включение файлов. Условная компиляция.

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

Учебно-воспитательные цели


1. образовательная: Сформировать понятие о строке управления компилятором, условной компиляциуй.

2. воспитательная: Воспитывать самостоятельность, ответственность, дисциплинированность, усидчивость.

3. развивающая: Расширение общей информационной культуры, развитие логического мышления.

Методы обучения: словесный, наглядно-практический

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

Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Лекционный материал:

Включение файлов

Строка управления компилятором вида

#include "filename"

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

#include

ищет файл только в стандартных местах и не просматривает справочник исходного файла.

Строки #include могут быть вложенными.

. Условная компиляция.

Строка управления компилятором вида

#if константное выражение

проверяет, отлично ли от нуля значение константного выражения (см. п. 24). Управляющая строка вида

#ifdef идентификатор

проверяет, определен ли этот идентификатор в настоящий момент в препроцессоре, т.е. определен ли этот идентификатор с помощью управляющей строки #define. Управляющая строка вида

#ifndef идентификатор

проверяет, является ли этот идентификатор в данный момент не определенным для препроцессора.

За каждым из трех перечисленных видов строк может следовать произвольное число строк, возможно содержащих управляющую строку

#else

и затем управляющая строка

#endif

Если проверяемое условие истинно, то любые строки между #else и #endif игнорируются. Если проверяемое условие ложно, то любые строки между проверяемой строкой и #else или, при отсутствии #else, #endif игнорируются.

Эти конструкции могут быть вложенными.

Управляющая строка - line.

Для других препроцессоров, генерирующих "C"-программы, используется строка вида

#line константа идентификатор

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

Домашнее задание:, конспект лекции.


Урок № 34

Тема урока: Процедурно-ориентированное программирование

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

Учебно-воспитательные цели


1. образовательная: Сформировать понятие об основных понятиях ООП.

2. воспитательная: Воспитывать дисциплинированность, усидчивость, умение работать самостоятельно.

3. развивающая: Развивать мышление, логику, умение работать с текстом.

Методы обучения: словесный (лекция), частично-поисковый.

Межпредметные связи: Делопроизводство на государственном языке

Содержание урока

      1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Лекционный материал:

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

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

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

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

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

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

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

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

Домашнее задание: Законспектировать содержание общей части программной документации.


Урок № 35

Тема урока: Объекты и классы.

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

Учебно-воспитательные цели


1. образовательная: Сформировать представление о видах объектов и классов, их назначении и особенностях оформления.

2. воспитательная: Воспитывать дисциплинированность, усидчивость, самостоятельность.

3. развивающая: Развивать умение выделять главное, самостоятельно работать с текстом.

Методы обучения: дедуктивный, поисковый.

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

Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Класс представляет собой главное инструментальное средство C++ для объектно-ориентированного программирования. Как вы узнаете из данного урока, класс очень похож на структуру, в которой сгруппированы элементы, соответствующие данным о некотором объекте, и оперирующие этими данными функции (называемые методами). Вы узнаете, что объект представляет собой некоторую сущность, например телефон. Класс C++ позволяет вашим программам определять все атрибуты объекта. В случае, когда объектом является телефон, класс может содержать такие элементы данных, как номер и тип телефона (кнопочный или дисковый) и функции, работающие с телефоном, например dial, answer, и hang_up. Группируя данные об объекте и кодируя их в одной переменной, вы упрощаете процесс программирования и увеличиваете возможность повторного использования своего кода. Этот урок знакомит вас с классами C++ . К концу урока вы освоите следующие основные концепции:

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

Определение класса обеспечивает шаблон, с помощью которого ваши программы могут создать объекты типа этого класса, подобно тому, как программы создают переменные типа int, char и т. д.

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

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

ПРЕДСТАВЛЕНИЕ ОБ ОБЪЕКТАХ И ОБЪЕКТНО-ОРИЕНТИРОВАННОМ ПРОГРАММИРОВАНИИ

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

Класс позволяет вашим программам группировать данные и функции которые выполняют операции над этими данными. Большинство книг и статей об объектно-ориентированном программировании называют функции класса методами. Подобно структуре, класс C++ должен иметь уникальное имя, за которым следует открывающая фигурная скобка, один или несколько элементов и закрывающая фигурная скобка:

class class_name

{

int data_member; // Элемент данных

void show_member(int); // Функция-элемент

};

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

class_name object_one, object_two, object_three;

Следующее определение создает класс employee, который содержит определения данных и метода:

class employee

{

public:

char name[64] ;

long employee_id;

float salary;

void show_employee(void)

{

cout << "Имя: " << name << endl;

cout << "Номер служащего: " << employee_id << endl;

cout << "Оклад: " << salary << endl;

};

};

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

--------------------- Имя класса

employee worker, boss, secretary ; //--------->Переменные класса (объекты)

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

#include

#include

class employee

{

public:

char name [64];

long employee_id;

float salary;

void show_employee(void)

{

cout << "Имя: " << name << endl;

cout << "Номер служащего: " << employee_id << endl;

cout << "Оклад: " << salary << endl;

};

};

void main(void)

{

employee worker, boss;

strcpy(worker.name, "John Doe");

worker.employee_id = 12345;

worker.salary = 25000;

strcpy(boss.name, "Happy Jamsa");

boss.employee_id = 101;

boss.salary = 101101.00;

worker.show_employee();

boss.show_employee();

}

Как видите, программа объявляет два объекта типа employee - worker и boss, а. затем использует оператор точку для присваивания значений элементам и вызова функции show_employee.

Представление об объектах

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

ОПРЕДЕЛЕНИЕ МЕТОДОВ КЛАССА ВНЕ КЛАССА

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

class employee

{

public:

char name[64];

long employee_id;

float salary;

void show_employee(void); |--------> Прототип функции

};

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

void employee:: show_employee (void) //-------------->Имя класса

{

сout << "Имя: " << name << endl; Имя элемента cout << "Номер служащего: " << employee_id << endl;

cout << "Оклад: " << salary << endl;

};

Как видите, приведенный код предваряется определением функции с именем класса (employee) и оператором глобального разрешения (::). Следующая программа CLASSFUN.CPP помещает определение функции show_employee вне класса, используя оператор глобального разрешения для указания имени класса:

#include

#include

class employee

{

public:

char name [64];

long employee_id;

float salary;

void show_employee(void);

};

void employee::show_employee(void)

{

cout << "Имя: " << name << endl;

cout << "Номер служащего: " << employee_id << endl;

cout << "Оклад: " << salary << endl;

};

void main(void)

{

employee worker, boss;

strcpy(worker.name, "John Doe");

worker.employee_id = 12345;

worker.salary = 25000;

strcpy(boss.name, "Happy Jamsa");

boss.employee_id = 101;

boss.salary = 101101.00;

worker.show_employee();

boss.show_employee();

}

Методы класса

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

Для определения функции вне определения класса ваша программа должна предварять определение функции именем класса и оператором глобального разрешения, как показано ниже:

return_type class_name::function_name(parameters)

{ // Операторы }

ВТОРОЙ ПРИМЕР

Следующая программа PEDIGREE.CPP создает класс dog, который содержит несколько полей данных и функцию show_breed. Программа определяет функцию класса вне определения самого класса. Затем программа создает два объекта типа dog и выводит информацию о каждой собаке:

#include

#include

class dogs

{

public:

char breed[64];

int average_weight;

int average_height;

void show_dog(void) ;

};

void dogs::show_breed(void)

{

cout << "Порода: " << breed << endl;

cout << "Средний вес: " << average_weight << endl;

cout << "Средняя высота: " << average_height << endl;

}

void main(void)

{

dogs happy, matt;

strcpy(happy.breed, "Долматин") ;

happy.average_weight = 58;

happy.average_height = 24;

strcpy(matt.breed, "Колли");

matt.average_weight =22;

matt.average_height = 15;

happy.show_breed() ;

matt.show_breed();

}

ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ

Программы на C++ широко используют классы. Говоря кратко, классы позволяют вашим программам группировать для определенного объекта его данные и методы (функции), которые оперируют этими данными, в одной переменной. Как видите, классы очень похожи на структуры, которые вы рассматривали в уроке 18. Классы C++ являются основой объектно-ориентированного программирования. Следующие уроки расширяют возможности предоставляемые классами. Упоминавшаяся в этом уроке метка public, по являющаяся в определении класса, делает элементы класса доступными для всей программы. Из урока 22 вы больше узнаете о частных и общих элементах класса. До изучения урока 22 убедитесь, что освоили следующие основные концепции:

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

Программы на C++ представляют объекты посредством классов.

Класс, подобно структуре, содержит элементы. Элементы класса могут хранить информацию (данные) или быть функциями (методами), которые оперируют этими данными.

Каждый класс имеет уникальное имя.

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

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

Программы могут определять функцию класса внутри или вне определения класса. Если вы определяете функцию вне определения класса, вам следует указать имя класса и использовать оператор глобального разрешения, например class:: function.

Домашнее задание: Привести пример применения основных принципов ООП






Урок № 36

Тема урока: Инкапсуляция, наследование, полиморфизм

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

Учебно-воспитательные цели


1. образовательная: Раскрыть основные понятия базовых принципов ООП.

2. воспитательная: Воспитывать самостоятельность, усидчивость, умение работать в группе.

3. развивающая: Развивать логическое мышление, память, умение применять полученные знания на практике

Методы обучения: наглядно-практический, системно-структурный.

Межпредметные связи: Делопроизводство на государственном языке.

Содержание урока


  1. Организационный момент: приветствие, подготовка компьютеров к работе, загрузка программ, проверка готовности к уроку. (3-4мин)

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

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

Инкапсуляция

Класс представляет собой единство трех сущностей - полей, методов и свойств. Объединение этих сущностей в единое целое и называется инкапсуляцией. Инкапсуляция позволяет во многом изолировать класс от остальных частей программы, сделать его «самодостаточным» для решения конкретных задач. В результате класс всегда несет в себя некоторую функциональность. Например, класс TForm содержит (инкапсулирует в себе) все необходимое для создания окна Windows-программы, класс Tmemo представляет собой полнофункциональный многострочный текстовый редактор, класс TTimer обеспечивает работу программы с таймером и т.д.

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

Наследование

Любой класс может быть порожден от другого класса. Для этого при его объявлении указывается имя класса родителя: TChildClass = class (TParentClass)

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

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

TaClass = class (TObject)

TaClass = class

Принцип наследования приводит к созданию ветвящегося дерева классов, постепенно разрастающегося при перемещение от класса Tobject к его потомкам. Каждый потомок дополняет возможности своего родителя новыми и передает их своим потомкам.

Полиморфизм

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

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

Домашнее задание: закончить оформление работы.

Урок № 37

Тема урока: Создание и уничтожение объектов

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

Учебно-воспитательные цели


1. образовательная: Пр

2. воспитательная: Воспитывать бережное отношение к технике, дисциплинированность, усидчивость, любовь к специальности.

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

Методы обучения: наглядно-практический, системно-структурный.

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

Содержание урока


  1. Организационный момент: приветствие, подготовка компьютеров к работе, загрузка программ, проверка готовности к уроку. (3-4мин)

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

Конструктор представляет собой метод класса, который имеет такое же имя, как и класс. Например, если вы используете класс с именем employee, конструктор также будет иметь имя employee. Подобно этому, для класса с именем dogs конструктор будет иметь имя dogs. Если ваша программа определяет конструктор, C++ будет автоматически вызывать его каждый раз, когда вы создаете объект. Следующая программа CONSTRUC.CPP создает класс с именем employee. Программа также определяет конструктор с именем employee который присваивает начальные значения объекту. Однако конструктор не возвращает никакого значения, несмотря на то, что он не объявляется как void. Вместо этого вы просто не указываете тип возвращаемого значения:

class employee

{

public:

employee(char *, long, float); //Конструктор

void show_employee(void);

int change_salary(float);

long get_id(void);

private:

char name [64];

long employee_id;

float salary;

};

В вашей программе вы просто определяете конструктор так же, как любой другой метод класса:

employee::employee(char *name, long employee_id, float salary)

{

strcpy(employee::name, name) ;

employee::employee_id = employee_id;

if (salary < 50000.0)

employee::salary = salary;

else // Недопустимый оклад

employee::salary = 0.0;

}

Как видите, конструктор не возвращает значение вызвавшей функции. Для него также не используется тип void. В данном случае конструктор использует оператор глобального разрешения и имя класса перед именем каждого элемента, как уже обсуждалось в уроке 23. Ниже приведена реализация программы CONSTRUC.CPP:

#include

#include

class employee

{

public:

employee(char *, long, float);

void show_employee(void);

int change_salary(float) ;

long get_id(void);

private:

char name [64] ;

long employee_id;

float salary;

};

employee::employee(char *name, long employee_id, float salary)

{

strcpy(employee::name, name) ;

employee::employee_id = employee_id;

if (salary < 50000.0)

employee::salary = salary;

else // Недопустимый оклад

employee::salary = 0.0;

}

void employee::show_employee(void)

{

cout << "Служащий: " << name << endl;

cout << "Номер служащего: " << employee_id << endl;

cout << "Оклад: " << salary << endl;

}

void main(void)

{

employee worker("Happy Jamsa", 101, 10101.0);

worker.show_employee();

}

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

employee worker("Happy Jamsa", 101, 10101.0);

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

employee worker("Happy Jamsa", 101, 10101.0);

employee secretary("John Doe", 57, 20000.0);

employee manager("Jane Doe", 1022, 30000.0);

Представление о конструкторе

Конструктор представляет собой специальную функцию, которую C++ автоматически вызывает каждый раз при создании объекта. Обычное назначение конструктора заключается в инициализации элементов данных объекта. Конструктор имеет такое же имя, как и класс. Например, класс с именем file использует конструктор с именем file. Вы определяете конструктор внутри своей программы так же, как и любой метод класса. Единственное различие заключается в том, что конструктор не имеет возвращаемого значения. Когда вы позже объявляете объект, вы можете передавать параметры конструктору, как показано ниже:

class_name object(valuel, value2, value3)

Конструкторы и параметры по умолчанию

Как вы уже знаете из урока 15, C++ позволяет указывать значения по умолчанию для параметров функции. Если пользователь не указывает каких-либо параметров, функция будет использовать значения по умолчанию. Конструктор не является исключением; ваша программа может указать для него значения по умолчанию так же, как и для любой другой функции. Например, следующий конструктор employee использует по умолчанию значение оклада равным 10000.0, если программа не указывает оклад при создании объекта. Однако программа должна указать имя служащего и его номер:

employee::employee(char *name, long employee_id, float salary = 10000.00)

{

strcpy(employee::name, name);

employee::employee_id = employee_id;

if (salary < 50000.0)

employee::salary = salary;

else // Недопустимый оклад

employee::salary = 0.0;

}

Домашнее задание: Написать программу, демонстрирующую работу конструкторов и деструкторов


Урок № 38

Тема урока: Описание класса

Тип урока:

  1. урок объяснения нового материала: Урок - лекция, урок - беседа, урок теоретических или практических самостоятельных работ (исследовательского типа), урок смешанный .

  2. Урок совершенствования знаний, умений и навыков

  • Урок самостоятельных работ

  • Урок - лабораторная работа

  • Урок практических работ

  • Семинар

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

  2. Комбинированный урок

Учебно-воспитательные цели

1. образовательная: Раскрыть синтаксис объявления классов в языке программирования С++. Раскрыть значение основных терминов и понятий, применяемых в этой области.

2. воспитательная: Воспитывать дисциплинированность, усидчивость, умение слушать.

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

Методы обучения: Словесный (лекция).

Межпредметные связи: Информатика (Понятие о базах данных)

Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

  3. Объяснение нового материала:

Класс в языке С++ задается с помощью ключевого слова class, за которым следует его имя и в фигурных скобках {} дается его описание. После определения класса ставится точка с запятой. Ниже приведен пример описания класса для хранения координат графических примитивов:

class CPos

{

int sp_x, sp_y; //координата начала

int ep_x, ep_y; //координата конца

};

Каждый класс имеет специальные функции, которые называются конструктор и деструктор. Конструктор класса вызывается всякий раз, когда объект создается в памяти ЭВМ и служит обычно для инициализации данных класса. Конструктор имеет то же имя, что и имя класса. Деструктор вызывается при удалении класса из памяти и используется, как правило, для освобождения ранее выделенной памяти под какие-либо данные этого класса. Имя деструктора совпадает с именем класса, но перед ним ставится символ '~'. Рассмотрим пример реализации конструктора и деструктора для класса CPos.

class CPos

{

public:

CPos() {printf("Вызов конструктора.\n");}

~CPos() {printf("Вызов деструктора.\n");}

int sp_x, sp_y; //координата начала

int ep_x, ep_y; //координата конца

};

Здесь ключевое слово public используется для обеспечения общего доступа к функциям и переменным класса.

Для создания нового экземпляра класса в памяти ЭВМ используется оператор new языка С++, а для удаления - оператор delete. Использование данных операторов для создания экземпляра класса CPos и его удаления выглядит следующим образом:

CPos *pos_ptr = new CPos(); //создание объекта

delete pos_ptr; //удаление объекта

В результате выполнения этих двух строк программы на экране появятся сообщения:

Вызов конструктора.

Вызов деструктора.

Экземпляр класса также можно создать подобно обычным переменным без использования указателей, как показано ниже

CPos pos;

В этом случае переменная pos называется представителем класса, у которого также вызывается конструктор при его создании и деструктор при его удалении из памяти.

Домашнее задание: повторить конспект лекции



Урок № 39

Тема урока: Создание и использование объектов.

Тип урока:

  1. урок объяснения нового материала: Урок - лекция, урок - беседа, урок теоретических или практических самостоятельных работ (исследовательского типа), урок смешанный .

  2. Урок совершенствования знаний, умений и навыков

  • Урок самостоятельных работ

  • Урок - лабораторная работа

  • Урок практических работ

  • Семинар

  1. Урок контрольный

  • Устная форма проверки (фронтальный, индивидуальный и групповой опрос), письменная проверка, зачет, зачетные практические и лабораторные работы, контрольная (самостоятельная) работа, смешанный урок( сочетание трех первых видов)

  1. Комбинированный урок

Учебно-воспитательные цели


1. образовательная: Раскрыть роль объектов при создании программ с использованием ООП, их свойства и методы.

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

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

Методы обучения: Словесный (беседа), практический (упражнение), частично-поисковый.

Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

  3. Вопросы для повторения:

  1. Что такое класс в объектно-ориентированном программировании?

  2. Синтаксис объявления класса в С+;

  3. Как объявляются конструкторы и деструкторы в С++?


  1. Объяснение нового материала:

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

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

Домашнее задание: повторить конспект лекции


Урок № 40

Тема урока: Конструкторы и деструкторы.

Тип урока:

  1. урок объяснения нового материала: Урок - лекция, урок - беседа, урок теоретических или практических самостоятельных работ (исследовательского типа), урок смешанный .

  2. Урок совершенствования знаний, умений и навыков

  • Урок самостоятельных работ

  • Урок - лабораторная работа

  • Урок практических работ

  • Семинар

  1. Урок контрольный: Устная форма проверки (фронтальный, индивидуальный и групповой опрос); письменная проверка, зачет, зачетные практические и лабораторные работы; контрольная (самостоятельная) работа, смешанный урок (сочетание трех первых видов)

  2. Комбинированный урок

Учебно-воспитательные цели


1. образовательная: Сформировать основные понятия о функциональных возможностях и особенностях синтаксиса конструкторов и деструкторов в языке С++

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

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

Методы обучения: Практический (анализ и описание образцов), дедуктивный метод (от общего к частному)

Содержание урока


      1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Объяснение нового материала:

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

Конструктор имеет такое же имя, как и класс.

Конструктор не имеет возвращаемого значения.

Каждый раз, когда ваша программа создает переменную класса, C++ вызывает конструктор класса, если конструктор существует.

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

Деструктор имеет такое же имя, как и класс, за исключением того, что вы должны предварять его имя символом тильды (~).

Деструктор не имеет возвращаемого значения.

СОЗДАНИЕ ПРОСТОГО КОНСТРУКТОРА

Конструктор представляет собой метод класса, который имеет такое же имя, как и класс. Например, если вы используете класс с именем employee, конструктор также будет иметь имя employee. Подобно этому, для класса с именем dogs конструктор будет иметь имя dogs. Если ваша программа определяет конструктор, C++ будет автоматически вызывать его каждый раз, когда вы создаете объект. Следующая программа CONSTRUC.CPP создает класс с именем employee. Программа также определяет конструктор с именем employee который присваивает начальные значения объекту. Однако конструктор не возвращает никакого значения, несмотря на то, что он не объявляется как void. Вместо этого вы просто не указываете тип возвращаемого значения:

class employee

{

public:

employee(char *, long, float); //Конструктор

void show_employee(void);

int change_salary(float);

long get_id(void);

private:

char name [64];

long employee_id;

float salary;

};

В вашей программе вы просто определяете конструктор так же, как любой другой метод класса:

employee::employee(char *name, long employee_id, float salary)

{

strcpy(employee::name, name) ;

employee::employee_id = employee_id;

if (salary < 50000.0)

employee::salary = salary;

else // Недопустимый оклад

employee::salary = 0.0;

}

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

Деструкторы

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

Урок № 41

Тема урока: Внешнее описание методов класса.

Тип урока:

  1. урок объяснения нового материала: Урок - лекция, урок - беседа, урок теоретических или практических самостоятельных работ (исследовательского типа), урок смешанный .

  2. Урок совершенствования знаний, умений и навыков

  • Урок самостоятельных работ

  • Урок - лабораторная работа

  • Урок практических работ

  • Семинар

  1. Урок контрольный: Устная форма проверки (фронтальный, индивидуальный и групповой опрос); письменная проверка, зачет, зачетные практические и лабораторные работы; контрольная (самостоятельная) работа, смешанный урок (сочетание трех первых видов)

  2. Комбинированный урок

Учебно-воспитательные цели


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

2. воспитательная: стремиться воспитать чувство ответственности за порученное дело, исполнительности, аккуратности, добросовестности, чувства долга;

3. развивающая: Развивать умение обобщать и систематизировать, строить аналогии, способствовать развитию логического мышления;

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

Методы обучения: Практический (анализ и описание образцов), дедуктивный метод (от общего к частному)

Содержание урока


      1. Организационный момент: приветствие, подготовка компьютеров, запуск программы, проверка готовности к уроку. (3-4мин)

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

Объяснение нового материала:

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

Для определения функции вне определения класса ваша программа должна предварять определение функции именем класса и оператором глобального разрешения, как показано ниже:

return_type class_name::function_name(parameters)

{ // Операторы }


Урок №42

Тема урока: Проектирование собственных БД

Тип урока:

  1. урок объяснения нового материала: Урок - лекция, урок - беседа, урок теоретических или практических самостоятельных работ(исследовательского типа), урок смешанный .

  2. Урок совершенствования знаний, умений и навыков

  • Урок самостоятельных работ

  • Урок - лабораторная работа

  • Урок практических работ

  • Семинар

  1. Урок контрольный

  • Устная форма проверки (фронтальный, индивидуальный и групповой опрос), письменная проверка, зачет, зачетные практические и лабораторные работы, контрольная (самостоятельная) работа, смешанный урок( сочетание трех первых видов)

  1. Комбинированный урок

Учебно-воспитательные цели


1. образовательная: Способствовать овладению техникой работы в программе MS Access, закрепить полученные теоретические знания на практике.

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

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

Межпредметная связь: Информатика (Создание учебной БД),

Методы обучения: Практический (анализ и описание образцов), дедуктивный метод (от общего к частному)


Содержание урока


  1. Организационный момент: приветствие, подготовка компьютеров, загрузка программ, проверка готовности к уроку. (3-4мин)

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

Практическое задание:

Создать собственную базу данных по заданным условиям.

Домашнее задание: Закончить работу (заполнить таблицы) на домашнем компьютере.


Урок № 43

Тема урока: Основные понятия о таблицах

Тип урока:

  1. урок объяснения нового материала: Урок-лекция, урок-беседа, урок теоретических или практических самостоятельных работ (исследовательского типа), урок смешанный.

  2. Урок совершенствования знаний, умений и навыков

  • Урок самостоятельных работ

  • Урок - лабораторная работа

  • Урок практических работ

  • Семинар

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

  2. Комбинированный урок.

Учебно-воспитательные цели


1. образовательная: Сформировать понятие о назначении и структуре таблиц, ознакомить со способами создания таблиц.

2. воспитательная: Воспитывать любовь к выбранной специальности, умение слушать

3. развивающая: Развивать логическое и абстрактное мышление, расширять общую информационную культуру.

Методы обучения: словесный (беседа).

Межпредметные связи: Информатика (структура, создание таблиц баз данных)

Содержание урока


  1. Организационный момент: приветствие, проверка готовности к уроку. (3-4мин)

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

Лекционный материал:

  • Назначение таблиц;

  • Структура таблиц;

  • Свойства полей в таблицах;

  • Создание таблиц в Microsoft Access:

можно делать 3-мя способами: создание таблиц в режиме конструктора, с помощью мастера, путем ввода данных. Для начала вводятся имена полей, затем полям присваивается определенный тип и, конечно же если этого требует условие, накладывается условие на значение, маска ввода, размер поля и т. д. Затем указываются ключевые поля. После того, как все таблицы созданы устанавливается связь между ними(тут же редактируется). Если же схема данных и все таблицы готовы на этом этапе, они заполняются данными в режиме таблицы. Манипулирование данными в таблицах, другими словами редактирование (удаление, изменение, добавление) в Microsoft Access производится в режиме таблицы, либо в разделе формы.

Домашнее задание: Повторить конспект лекции.

Урок № 44


Тема урока: Построение таблицы с помощью конструктора. Редактирование таблиц.

Тип урока:

  1. урок объяснения нового материала: Урок-лекция, урок-беседа, урок теоретических или практических самостоятельных работ (исследовательского типа), урок смешанный.

  2. Урок совершенствования знаний, умений и навыков

  • Урок самостоятельных работ

  • Урок - лабораторная работа

  • Урок практических работ

  • Семинар

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

  2. Комбинированный урок.

Учебно-воспитательные цели


1. образовательная: Закрепить понятие о значении таблиц, научить применять на практике полученные теоретические знания.

2. воспитательная: Воспитывать бережное отношение к технике, коммуникативные качества, чувство взаимовыручки

3. развивающая: Развивать умение применять полученные знания на практике

Методы обучения: наглядно-практический, частично-поисковый.

Межпредметные связи: Информатика (структура, создание таблиц баз данных)

Содержание урока


  1. Организационный момент: приветствие, подключение компьютеров, загрузка программ, проверка готовности к уроку. (3-4мин)

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

  3. Подготовка к выполнению практического задания:

Определение таблиц, которые должна содержать база данных

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

При проектировании таблиц вовсе не обязательно использовать Microsoft Access. Сначала лучше разработать структуру на бумаге. При проектировке таблиц, рекомендуется руководствоваться следующими основными принципами:

  • Информация в таблице не должна дублироваться. Не должно быть повторений и между таблицами.

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

  • Каждая таблица должна содержать информацию только на одну тему;

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

Определение необходимых в таблице полей

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

  1. Каждое поле должно быть связано с темой таблицы;

б) Не рекомендуется включать в таблицу данные, которые являются результатом выражения;

в) в таблице должна присутствовать вся необходимая информация;

г) Информацию следует разбивать на наименьшие логические единицы (Например, поля «Имя» и «Фамилия», а не общее поле «Имя»).

Задание индивидуального значения каждому полю

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

Практическое задание: Построить таблицы с помощью конструктора. Отредактировать содержание и структуру таблиц.

Домашнее задание: отрабатывать и закреплять полученные умения и навыки.



© 2010-2022