
- •Основные понятия языка
- •Переменные и константы
- •Форматированный ввод данных
- •Лекция 3. Операторы языка
- •Операторы цикла
- •If (проверка_условия) оператор_1; else оператор_2;
- •Массивы
- •Структуры
- •Лекция 5. Функции. Рекурсивные функции. Файлы. Функции для работы с файлами.
- •Указатели на функции
- •Int Count; //Число фамилий в справочнике
Конспект лекций по дисциплине «Алгоритмический язык С++»
Лекция 1. Введение. Алгоритмический язык С, С++. Среда разработки Borland C++ Builder
Язык Си, созданный Денисом Ритчи в начале 70-х годов в Bell Laboratory американской корпорации AT&T, является одним из универсальных языков программирования. Язык Си считается языком системного программирования, хотя он удобен и для написания прикладных программ. Среди преимуществ языка Си следует отметить переносимость программ на компьютеры различной архитектуры и из одной операционной системы в другую, лаконичность записи алгоритмов, логическую стройность программ, а также возможность получить программный код, сравнимый по скорости выполнения с программами, написанными на языке ассемблера. Последнее связано с тем, что хотя Си является языком высокого уровня, имеющим полный набор конструкций структурного программирования, он также обладает набором низкоуровневых средств, обеспечивающих доступ к аппаратным средствам компьютера. С 1989 года язык Си регламентируется стандартом Американского института национальных стандартов ANSI С. В настоящее время, кроме стандарта ANSI C разработан международный стандарт ISO C (International Standard Organization C).
Основные понятия языка
Программа, написанная на языке Си, состоит из операторов. Каждый оператор вызывает выполнение некоторых действий на соответствующем шаге выполнения программы.
При написании операторов применяются латинские прописные и строчные буквы, цифры и специальные знаки. К таким знакам, например, относятся: точка (.), запятая (,), двоеточие (:), точка с запятой (;) и др. Совокупность символов, используемых в языке, называется алфавитом языка.
В персональном компьютере символы хранятся в виде кодов. Соответствие между каждым символом и его кодом задается специальной кодовой таблицей. На нее разработан стандарт ASCII, поэтому коды символов называют ASCII-кодами.
Различают видимые и управляющие символы. Первые могут быть отображены на экране дисплея либо отпечатаны на принтере. Вторые вызывают определенные действия в машине, например: звуковой сигнал - код 710, возврат курсора на один шаг - код 810, горизонтальная табуляция - код 910, перевод курсора на новую строку - код 1010, перемещение курсора в начало строки - код 1310 и т.д. Такие управляющие символы имеют десятичные номера 0 - 31, 127.
Для представления каждого символа в персональном компьютере используется один байт, поэтому общее число символов равно 28 = 256. Кодовая таблица, которая устанавливает соответствие между символом и его кодом, имеет 256 строк вида:
Важным понятием языка является идентификатор, который используется в качестве имени объекта (функции, переменной, константы и др.). Идентификаторы должны выбираться с учетом следующих правил:
Они должны начинаться с буквы латинского алфавита (а,...,z, А,...,Z) или с символа подчеркивания (_).
В них могут использоваться буквы латинского алфавита, символ подчеркивания и цифры (0,...,9). Использование других символов в идентификаторах запрещено.
В языке Си буквы нижнего регистра (а,...,z), применяемые в идентификаторах, отличаются от букв верхнего регистра (А,...,Z). Это означает, что следующие идентификаторы считаются разными: name, NaMe, NAME и т.д.
Идентификаторы могут иметь любую длину, но воспринимается и используется для различения объектов (функций, переменных, констант и т.д.) только часть символов. Их число меняется для разных систем программирования, но в соответствии со стандартом ANSI C не превышает 32 (в Си++ это ограничение снято). Если длина идентификатора установлена равной 5, то имена count и counter будут идентичны, поскольку у них совпадают первые пять символов.
Идентификаторы для новых объектов не должны совпадать с ключевыми словами языка и именами стандартных функций из библиотеки.
В программах на языке Си важная роль отводится комментариям. Они повышают наглядность и удобство чтения программ. Комментарии обрамляются символами /* и */. Их можно записывать в любом месте программы.
В языке Си++ введена еще одна форма записи комментариев. Все, что находится после знака // до конца текущей строки, будет также рассматриваться как комментарий. Отметим, что компилятор языка Си, встроенный в систему программирования Borland C++, позволяет использовать данный комментарий и в программах на Си.
Пробелы, символы табуляции и перехода на новую строку в программах на Си игнорируются. Это позволяет записывать различные выражения в хорошо читаемом виде. Кроме того, строки программы можно начинать с любой позиции, что дает возможность выделять в тексте группы операторов.
Знакомство со средой программирования Borland C++ Builder6. Компоненты: форма, поле вывода текста, образ, электронная кнопка и их свойства. Событие и функция обработки события. Компиляция проекта
После запуска C++ Builder в верхней части экрана вашего компьютера вы увидите главное окно, содержащее систему меню и палитру компонентов, состоящую из множества вкладок, каждая из которых включает в себя свой набор компонентов (объектов). В главном окне расположены так же некоторые часто используемые быстрые кнопки, которые дублируют основные команды системы меню. Как правило, в левой части экрана расположено окно Object TreeView (Окно списка объектов). Немного ниже находится окно Object Inspector (Окно свойств объектов). Это окно разбито на две вкладки Properties (Свойства) и Events (События). В центре экрана вы увидите окно стартовой формы с именем Form1, это и есть ваше будущее приложение для Windows! Это самый главный компонент – фундамент, на котором вы будете строить вашу программу, используя другие необходимые компоненты. Ну и, конечно же, в этом строительстве вы непременно будете заниматься написанием программного кода, который будет отвечать за логику программы. Строки вашей программы вы будете размещать в окне редактирования программного кода, которое можно вызвать, например, кликнув два раза мышью по форме Form1. Это окно имеет и более короткое название – редактор кода. При наборе текста программы редактор кода автоматически выделяет ключевые слова полужирным шрифтом, а комментарии курсивом. Так с первого взгляда будет выглядеть мощная среда программирования Borland C++ Builder. Запустить проект вашего будущего приложение для Windows можно прямо сейчас. Для этого достаточно нажать на функциональную клавишу F9 или кликнуть мышью на кнопку Run в виде зеленого треугольника, находящейся в главном окне. И третья возможность – воспользуйтесь системой меню. После запуска проекта приложения не забудьте завершить его работу стандартным для Windows-приложений образом.
Для начала познакомимся с некоторыми свойствами компонента форма. В окне Object Inspector найдите свойство Color (Цвет) компонента Form1. Установите для этого свойства значение clPurple (фиолетовый). Значение этого же свойства можно изменить во время работы приложения программным способом. Вызовите окно программного кода, кликнув на форму два раза. Затем в окне Object Inspector выберите вторую вкладку Events и кликните на событие OnClick (одиночный клик мышью). Рядом появится небольшое поле ввода. Кликните по этому полю два раза – в окне программного кода появится функция FormClick обработки события OnClick (одиночный клик мышью по форме). В данную процедуру прерывания внутри фигурных скобок впишите инструкцию:
Form1->Color = clRed;
Сначала записывается компонент, затем выбранное его свойство и, наконец, значение этого свойства. Формат такой последовательности записи необходимо запомнить. Название компонента и названия его свойств необходимо записывать с большой буквы. В окне редактирования программного кода это будет выглядеть так:
void __fastcall TForm1::FormClick(TObject *Sender)
{
Form1->Color = clRed; //красный цвет для формы
}
Среда быстрой разработки C++ Builder автоматически оформляет подобным образом и другие функции обработки событий, понимаемых операционной системой Windows. Здесь словосочетание fastcall буквально означает – быстрый вызов. В нашем примере это быстрый вызов функции FormClick обработки события OnClick. Любая функция обработки события начинается с открывающейся фигурной скобки и завершается закрывающейся фигурной скобкой. Внутри этих скобок вы будете записывать одну или несколько инструкций, которые компьютер должен выполнить при наступлении указанного события. Запись каждой инструкции должна обязательно заканчиваться точкой с запятой.
Проверьте проект приложения в работе. После запуска приложения кликните на форму, ее цвет при этом изменится на красный. Таким образом, вызывая то или иное событие, пользователь будет управлять работой вашего приложения для Windows.
Измените заголовок формы вашего приложения. В окне Object Inspector выберите свойство Caption (Надпись) и запишите в поле ввода новое значение, например, «Мое первое приложение для Windows».
Разместите на форме какой-либо текст. Для чего во вкладке Standard (Стандартные компоненты) панели управления выберите компонент Label (Поле вывода текста), кликнув на значок с изображением буквы «А» и поместите объект Label1 на форме. В окне Object Inspector для свойства Caption задайте новое произвольное значение, например, «Волшебная страна Borland C++ Builder». Увеличьте размер шрифта надписи. Воспользовавшись составным свойством Font (Шрифт), кликните на «плюс» и ниже выберите Size (Размер). Измените размер шрифта с «8» на «24». Выкрасите надпись в желтый цвет: выберите свойство Color и измените его значение на clYellow.
Теперь разместите на форме вашего приложения два изображения. Достигнуть поставленной цели можно, применив компонент Image (Образ). Достаньте этот компонент из панели управления, кликнув по вкладке Additional (Дополнительные компоненты), а затем на кнопку Image. Для установки указанного компонента на форме вашего приложения, кликните по форме в любой ее свободной области. На форме появится область, очерченная пунктирной линией. Новый объект автоматически получает имя – Image1. Теперь необходимо загрузить в этот компонент какое-либо небольшое по размерам изображение, имеющееся на вашем компьютере. В окне Object Inspector, во вкладке Properties, воспользовавшись полосой прокрутки, выберите одно из многочисленных свойств компонента Image – свойство Picture (Рисунок), кликнув по нему мышью. Рядом вы увидите значение этого компонента – None (Нет). Кликните по кнопке с изображением многоточия, и тут же появится окно для загрузки изображения Picture Editor. Нажмите на кнопку Load (Загрузка) и выберите нужный вам рисунок или фотографию, например, с расширением BMP. После того как картинка окажется на форме, размеры полезной области объекта Image1 можно откорректировать вручную. Еще проще это сделать, если у свойства AutoSize (Авторазмер) его значение false (ложь) изменить на новое значение true (истина), например, кликнув по надписи false два раза. Перетащите изображение, удерживая мышью, в нужную вам часть формы. Подобным образом разместите на форме еще одно изображение. Если появится необходимость, то измените размеры самой формы с помощью мыши до запуска проекта. Запустите проект приложения на выполнение, а затем закройте его.
Если выбранный вами рисунок имеет фон одного цвета, то этот фон при необходимости можно сделать прозрачным, то есть невидимым. Для этого установите свойству Transparent (Прозрачность) значение true.
Если вы хотите изменить размеры изображения, то свойству Stretch (Растяжение) придайте значение true. При этом для свойства AutoSize обязательно установите значение false. К сожалению изображения формата BMP при изменении размера теряют в качестве, а вот виндовские резиновые файлы изображения формата WMF таким недостатком не обладают.
Посмотрим, как можно смонтировать на форму электронную кнопку. Во вкладке Standard панели управления выберите компонент Button (электронная кнопка) и разместите ее на форме. Кликните по вновь созданной кнопке Button1 два раза, и вы окажетесь в функции обработки Button1Click (кликнуть на кнопку). В эту событийную процедуру прерывания впишите инструкцию:
Image1->Visible = false; //скрыть первый рисунок
Это значит, что для компонента Image1 его свойству Visible (Видимость) будет присвоено значение false, что приведет к исчезновению первого рисунка. Запустите проект и проверьте работоспособность электронной кнопки. Изготовьте еще одну кнопку, которая будет заставлять рисунок вновь появляться. Для второй кнопки понадобится инструкция:
Image1->Visible = true; //показать первый рисунок
Создайте еще две кнопки для второго рисунка, которые будут работать аналогично. На каждой кнопке поместите подходящие на ваш взгляд надписи, поясняющие действие кнопок. Для этого у компонента Button свойству Caption придайте значение – название электронной кнопки на русском. И в завершении установите на форме пятую кнопку, которая позволит пользователю закрывать приложение, для чего наберите инструкцию:
Close(); //завершение работы приложения
Проверьте работоспособность созданной кнопки и поместите на ней надпись «Выход», изменив значение свойства Caption.
Для того чтобы сохранить проект приложения, в меню «File» (Файл) выберите команду «Save Project As…» (Сохранить проект как…), выберите нужные вам диск и папку. Сохраните проект. Если вы захотите доработать проект или просмотреть его программный код, кликните по файлу проекта с расширением BPR.
Для создания исполняемого файла вашей программы с расширением EXE зайдите в меню «Project», выберите команду «Make Project1» (Изготовить проект) или с клавиатуры отработать клавишный аккорд Ctrl+F9. Такой процесс сборки файлов проекта в единый EXE-файл называется компиляцией. Исполняемый самостоятельный файл можно перенести на другой компьютер. В том случае, если ваше приложение является мультимедийным, то файлы музыки, звука, видео, например, MID, MP3, WAV, AVI нужно будет скопировать вместе с исполняемым файлом. А вот файлы изображений переносить не надо, так как они впитываются в исполняемый файл в процессе компиляции.
Если вы хотите избавиться от проблем с установкой вашей программы на другом компьютере, связанных с отсутствием на нем необходимых библиотек, то следует изменить некоторые свойства проекта. Для этого войдите в меню «Project», выберите команду «Options…» во вкладке «Linker» уберите галочку «Use dynamic RTL», а во вкладке «Packages» уберите галочку «Build with runtime packages». В первом случае в EXE-файл включается RTL-библиотека времени выполнения, а во втором – динамические библиотеки в которых находятся используемые компоненты и системные функции. При этом размер исполняемого файла существенно увеличится, зато теперь вы сможете перенести его на другой компьютер простым копированием. Файл останется работоспособным также после переустановки операционной системы Windows на вашем компьютере
Лекция 2. Алгоритмизация. Структура простой программы. Основные элементы языка. Правила описания данных
Типы данных
Программы оперируют с различными данными, которые могут быть простыми и структурированными. Простые данные - это целые и вещественные числа, символы и указатели (адреса объектов в памяти). Целые числа не имеют, а вещественные имеют дробную часть. Структурированные данные - это массивы и структуры; они будут рассмотрены ниже.
В языке различают понятия "тип данных" и "модификатор типа". Тип данных - это, например, целый, а модификатор - со знаком или без знака. Целое со знаком будет иметь как положительные, так и отрицательные значения, а целое без знака - только положительные значения. В языке Си можно выделить пять базовых типов, которые задаются следующими ключевыми словами:
char - символьный;
int - целый;
float - вещественный;
double - вещественный двойной точности;
void - не имеющий значения.
Дадим им краткую характеристику:
Переменная типа char имеет размер 1 байт, ее значениями являются различные символы из кодовой таблицы, например: 'ф', ':', 'j' (при записи в программе они заключаются в одинарные кавычки).
Размер переменной типа int в стандарте языка Си не определен. В большинстве систем программирования размер переменной типа int соответствует размеру целого машинного слова. Например, в компиляторах для 16-разрядных процессоров переменная типа int имеет размер 2 байта. В этом случае знаковые значения этой переменной могут лежать в диапазоне от -32768 до 32767.
Ключевое слово float позволяет определить переменные вещественного типа. Их значения имеют дробную часть, отделяемую точкой, например: -5.6, 31.28 и т.п. Вещественные числа могут быть записаны также в форме с плавающей точкой, например: -1.09e+4. Число перед символом "е" называется мантиссой, а после "е" - порядком. Переменная типа float занимает в памяти 32 бита. Она может принимать значения в диапазоне от 3.4е-38 до 3.4e+38.
Ключевое слово double позволяет определить вещественную переменную двойной точности. Она занимает в памяти в два раза больше места, чем переменная типа float (т.е. ее размер 64 бита). Переменная типа double может принимать значения в диапазоне от 1.7e-308 до 1.7e+308.
Ключевое слово void (не имеющий значения) используется для нейтрализации значения объекта, например, для объявления функции, не возвращающей никаких значений.
Объект некоторого базового типа может быть модифицирован. С этой целью используются специальные ключевые слова, называемые модификаторами. В стандарте ANSI языка Си имеются следующие модификаторы типа:
unsigned
signed
short
long
Модификаторы записываются перед спецификаторами типа, например: unsigned char. Если после модификатора опущен спецификатор, то компилятор предполагает, что этим спецификатором является int. Таким образом, следующие строки:
long а;
long int а;
являются идентичными и определяют объект а как длинный целый. Табл. 1 иллюстрирует возможные сочетания модификаторов (unsigned, signed, short, long) со спецификаторами (char, int, float и double), а также показывает размер и диапазон значений объекта (для 16-разрядных компиляторов).
Таблица 1
Тип |
Размер в байтах (битах) |
Интервал изменения |
char |
1 (8) |
от -128 до 127 |
unsigned char |
1 (8) |
от 0 до 255 |
signed char |
1 (8) |
от -128 до 127 |
int |
2 (16) |
от -32768 до 32767 |
unsigned int |
2 (16) |
от 0 до 65535 |
signed int |
2 (16) |
от -32768 до 32767 |
short int |
2 (16) |
от -32768 до 32767 |
unsigned short int |
2 (16) |
от 0 до 65535 |
signed short int |
2 (16) |
от -32768 до 32767 |
long int |
4 (32) |
от -2147483648 до 2147483647 |
unsigned long int |
4 (32) |
от 0 до 4294967295 |
signed long int |
4 (32) |
от -2147483648 до 2147483647 |
float |
4 (32) |
от 3.4Е-38 до 3.4Е+38 |
double |
8 (64) |
от 1.7Е-308 до 1.7Е+308 |
long double |
10 (80) |
от 3.4Е-4932 до 3.4Е+4932 |
|