
- •1.1. Что такое программа и как она выглядит?
- •1.2. Комментарии
- •1.3. Зарезервированные слова и типы данных
- •1.4. Объявление переменных
- •1.5. Операции и выражения
- •1.6. Ввод и вывод
- •1.7. Переменные и константы
- •1.8 Логические операторы
- •1.9. Управляющие операторы
- •1.10. Операторы циклов
- •1.11. Операторы перехода
- •2. Функции
- •2.1. Передача параметров
- •2.2. Библиотечные функции
- •2.3. Локальные и глобальные переменные
- •Объявления функций
- •Время жизни и область видимости программных объектов
- •Int local_var; /* по умолчанию auto */
- •2.4. Перегрузка
- •3. Массивы
- •4. Структуры
- •Int numberPeriod; //число переодов начисления процентов
- •Int page; //Количество страниц
- •Void print(); /*Внимание, записывается только прототип функции */
- •Int yearBorn; //год рождения
- •Int yearBorn; //год рождения
- •4.1. Демонстрационные программы
- •Int done;/*переменная, которая информирует о конце списка файлов */
- •6. Объединения
- •Info;//Обявление переменной типа объединение
- •Info;//Обявление переменной типа объединение
- •7. Объектно-ориентированное программирование
- •7.1. Классы и объекты
- •Демонстрационные программы
- •Результат работы программы
- •7.2. Конструкторы и деструкторы
- •Конструктор копирования
- •7.5. Наследование
- •7.3. Создание объектов и обращение к членам объекта
- •8. Абстрактные типы данных
- •9. Пространство имен
- •Void greeting();/*это пространство имен содержит функцию с тем же именем*/
- •Void big_greeting(); /*эта функция не попадает ни в одно из созданных подпространств,т.Е. Принадлежит пространству имен std */
- •//Определение функций
- •Void big_greeting() /* определение данной функции не принадлежит ни одному из созданных пространств имен, следовательно дальнейший код помещается в глобальное пространство имен */
- •10. Строки
- •4.3 Демонстрационные программы
- •4.10. Класс string
- •Класс AnsiString
- •Класс AnsiString
- •Класс Set
- •4.9. Перегрузка операторов
- •Использование "умных" указателей
- •4.8. Полиморфизм
- •Главное меню — компонент MainMenu
- •Диалоги
- •Файлы и потоки
- •Ввод-вывод в файл
- •Ifstream inStream; //Объявление входного потока
- •InStream.Open("character.Dat"); /*присоединение файла к входному потоку */
- •InStream.Close(); //закрытие входного потока
- •If(!out){ //при неудачной попытке
- •If(in.Fail()){ //поток не создан, то сообщение и выход
- •Управление потоком ввода-вывода
- •5.2. Ввод имен файлов
- •5.3. Манипуляторы
- •5. Указатели
- •5.1.Типы указателей и операции с указателями
- •Адресная арифметика
- •Сравнение указателей
- •Преобразование типа указателя
- •Указатель void
- •5.2. Динамические массивы
- •Int array[10]; //объявляется массив с именем array
- •Int a[10]; //объявляется массив с именем a
- •Int *array1; //указатель типа int с именем array1
- •Int *array[5];/*массив с именем array, его элементы указатели*/
- •Int (*point)[4][5]; /*объявление указателя на двумерный массив без имени */
- •Использование указателей в функциях и указатели на функции
- •Указатель классов
- •Шаблоны
- •Шаблоны функций
- •Void Swap (t& X, t& y) /* к моменту обращения тип т будет известен и заменен, например, на int */
- •Void sort(t array[], int maxIndex){ /*передали массив и его размер */
- •6.2. Шаблоны классов
- •6.3 Демонстрационные программы
- •7.1 Обработка исключений
- •Исключения и их стандартная обработка
- •Базовый класс исключений vcl Exception
- •Упражнения
- •Обработка исключительных ситуаций, возбуждаемых оператором new
- •Исходные файлы и объявление переменных
- •Связаные списки
- •Void newHead( //прототип функции создающей узел
- •Void newHead(//прототип функции создания узла
- •Поиск в связанных списках
- •Void newHead(PtrNode& head, //адрес головного узла
- •Директивы препроцессора.
- •Структура файла проекта
- •Структура make-файла
- •Структура модуля
- •Структура h-файла
- •Файл формы
- •Особенности программирования под Windows.
- •Функция WinMain
- •Создание проекта Win32Application.
- •Библиотека mfc.
- •Создаем код
- •Шпаргалка
- •Структура файла проекта
- •Структура make-файла
- •Структура модуля
- •Структура h-файла
- •Файл формы
- •Файл проекта
- •Введение
- •Свойства компонентов
- •События
- •Менеджер проектов
- •Пример: создание простейшего приложения
- •Графика Внедрение картинок
- •Редактор изображений
- •Классы для хранения графических объектов.
- •If (SelectDirectory( //Компонент библиотеки
- •Методы создания собственной графики. Рисование по пикселам
- •Int px, py; //координаты пикселей
- •Рисование с помощью пера
- •Int px, py; //координаты пикселей
- •Рисование кистью
- •Мультимедиа и анимация Общие сведения о звуковых и видеофайлах
- •Способы воспроизведения звуков
- •Создание мультфильма
- •Воспроизведение немых видео клипов — компонент Animate
- •Проигрыватель MediaPlayer
- •Процессы, потоки, распределенные приложения
- •If include "uOverlayl.H" // включение головного файла приложения
- •Функция CreateProcess
- •490 _ Глава 7
- •7.8.4 Элементы ActiveX
- •492 Глава 7
- •494 Глава 7
- •7.9 Компоненты-серверы сом
- •496 Глава 7
- •7.9.2 Свойства и методы сервера Word
- •500 Глава 7
- •Заключение
- •Что такое ansi?
- •Почему вместо русских букв в консольном приложении выводится мусор? Автор: Алексей Кирюшкин Версия текста: 1.0
- •Раздел I.2Выход 1
- •Раздел I.3Выход 2
- •Раздел I.4Выход 3
- •Раздел I.5Выход 4
- •(A)Потоки
- •(C)Ввод-вывод файлов
- •Выбор компонентов для групповых операций
- •Установка разделяемых свойств компонентов
- •Изменение размера компонентов
- •Выравнивание компонентов
- •Пример: Создание текстового редактора Проектирование формы приложения
- •Создание обработчиков событий
- •Создание меню
Раздел I.4Выход 3
Заменяем
родную переключалку раскладки клавиатуры
Windows на
RusLat
от Сергея Быкова,
а для редактора Visual Studio изменям шрифт
(Tools->Options->Format->Source Windows->Font) на любой
шрифт для досовских окошек, например
Terminal.
Переключаем клавиатуру на раскладку
DOS-CP866 (есть в RusLat'е и такая, наряду с KOI-8
и Russian Translit) и можно работать с текстом
нашей досовской программы в редакторе
Visual Studio. Русские буквы в досовской
кодировке правильно читаются, т.к.
установлен соответствующий шрифт и их
можно редактировать, т.к. для клавиатуры
установлена досовская раскладка.
Нужно пожалуй упомянуть и еще
Раздел I.5Выход 4
Впрочем, это и не выход даже, а так, тупичок. Работает он только, если соблюдены 3 условия:
Ваша программа будет работать только под Windows NT
Для окна вашей программы будет всегда установлен шрифт Lucida Console
Ваша программа никогда не будет работать в полноэкранном режиме - только в окне.
Если все эти 3 условия соблюдены, достаточно вставить вначале программы вызов функции SetConsoleOutputCP, задав в качестве параметра нужную нам кодовую страницу:
#include "stdafx.h" #include "windows.h"
int main(int argc, char* argv[]) { if (!SetConsoleOutputCP(1251)) { // попытка установить нужную страницу закончилась неудачно // выводим причину ошибки char msg[300]; FormatMessage(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), 0, msg, sizeof(msg) - 1, 0); // если версия Windows локализованная то ошибка будет // на русском языке, поэтому CharToOem(msg, msg); printf("SetConsoleOutputCP Error: %s\n", msg); return 1; }
// дальше весь вывод пойдет в установленной кодовой странице printf("Привет всем!\n"); printf("И еще раз привет всем!\n"); return 0; } |
Компонент Chart Рассмотрим пример построения графика и опций компонента Chart, которые определяют внешний вид графика или диаграммы. 1. Запустите Delphi. 2. Сохраните файл модуля под именем MyChart_.pas, а файл проекта под именем MyChart. dpr. 3. Построим график функции, определяющей зависимость между величинами X и Y. Функциональная зависимость между ними выражается уравнением Y = X2. 4. Поместите на форму четыре компонента Edit, кнопку Button и компонент Chart. Произведите двойной щелчок по компоненту Chart, откроется редактор Editing chart1, в окне которого на вкладке Chart\Series, используя кнопку Add, поместите график Line. 5. Используя свойство Text для компонентов Edit, введите значения, соответствующие четырем точкам X=1, 2, 3, 4. Т.е. Y для этих точек равен 2, 4, 9, 16. 6. Запишите программный код для отклика на щелчок по кнопке: procedure TForm1.Button1Click (Sender: TObject); var A,B,C,D:Integer; begin A:=StrtoInt(Edit1.Text); B:=StrtoInt(Edit2.Text); C:=StrToInt(Edit3.Text); D:=StrtoInt(Edit4.Text); Series1.Clear; Series1.Add(A,'1',clTeeColor ); Series1.Add(B,'2',clTeeColor ); Series1.Add(C,'3',clTeeColor ); Series1.Add(D,'4',clTeeColor ); end; end. После запуска приложения на компиляцию получите график функции. Теперь перейдем к исследованию опций компонента Chart. Перейдите к форме, сделайте двойной щелчок по компоненту Chart для перехода к редактору. Откройте страницу General. Опции этой страницы позволяют изменять поля, отводимые графику. Свойство Margins (%) изменяет значения верхнего, нижнего, левого и правого полей. Причем, чем меньше значение свойства, тем больше поле. Свойство Allow Scroll определяет направление прокрутки графика. Если вы установите значение Vertical, то после запуска приложения на компиляцию вы можете просматривать график, перемещая его по вертикали внутри отведенной области. Для просмотра необходимо нажать правую клавишу на компоненте и перемещать мышь в заданном направлении. Свойство Zoom (Allow Zoom, Animated Zoom) определяет число шагов анимированной последовательности изменения масштаба изображения. Большое число шагов может задерживать изменение размера окна. AnimatedZoom свойство должно быть True. По умолчанию значение Steps установлено равное 8. Можно установить значение программно, например: Chart1.AnimatedZoom := True ; Chart1.AnimatedZoomSteps := 4 ; Кнопка Print Preview позволяет осуществлять предварительный просмотр диаграммы или графика перед выводом на печать. Здесь можно увидеть снова опцию Margins (%). Кнопка Reset Margins позволяет сбросить значения, установленные вами, чтобы установить значения, принятые по умолчанию. Опция Detail позволяет увеличивать график для детального просмотра при помощи ползунка More - Normal. Опция View Margins позволяет убирать или показывать поля, ограничивающие график. Опция Paper Orientation имеет два свойства Portrait (портрет) и Landscape (ландшафт). Необходимо заметить, что вы можете изменять размеры графика, заключенного между полями, для этого необходимо подвести курсор к полям, ограничивающим график. Когда курсор превратится в двунаправленную стрелку, вы можете производить изменения. Опция Proportional производит сброс проведенных вами изменений. Кнопка Print Setup позволяет произвести настройку принтера, выбрать размер и ориентацию бумаги и т.д. Кнопка Print запускает документ на печать. Кнопка Export на вкладке General позволяет определить формат файла и экспорт его в буфер обмена. Имеется возможность запоминания графика в виде отдельного файла. Страница Axis. Эта страница (вложенная страница Scale) позволяет определять шкалу деления вертикальной и горизонтальной оси. Можно убрать оси графика, определить логарифмическую шкалу осей, определить их положение, произвести инверсию. Вложенная страница Title позволяет производить надписи осей, их ориентацию относительно осей, выбирать тип шрифта надписи. Вложенная страница Labels. С помощью этой страницы вы можете определять отображение минимальных и максимальных меток оси, выбирать тип шрифта для них. Эти значения можно задавать программно: Chart1.LeftAxis.SetMinMax(0, 1001); Chart1.LeftAxis.LabelsOnAxis:= False; Свойство property ValueFormat : String; производит форматирование строкового спецификатора, а именно меток осей. Например Chart1.LeftAxis.AxisValuesFormat:= '###0.0###'; Свойство property RoundFirstLabel : Boolean позволяет автоматически округлять значения меток осей. Chart1.LeftAxis.RoundFirstLabel := True ; Chart1.LeftAxis.RoundFirstLabel := False ; Свойство property LabelsMultiline : Boolean; позволяет изменять метки оси. Например Series1.Add( 1234, 'Hello'+#13+ 'World', clGreen ); Если используется временной формат оси Series1.AddXY(EncodeDate(1998, 2,28), 100, '', clTeeColor); Series1.AddXY(EncodeDate(1998, 3,1), 200, '', clTeeColor); Series1.AddXY(EncodeDate( 1998,3,2 ), 150,'', clTeeColor); Series1.XValues.DateTime := True; Chart1.BottomAxis.DateTimeFormat := 'mm/dd hh:mm'; Если установлено значение Chart1.BottomAxis.LabelsMultiLine:=True; то производится разбиение подписи меток на две строки. 'Mm/dd' для первой строки 'Hh:mm' для второй строки. Свойство property LabelsSeparation : Integer; определяет процент минимального расстояния между метками оси. По умолчанию установлено значение равное 10. Свойство property LabelStyle: TAxisLabelStyle; определяет стиль отображения меток. TAxisLabelStyle = (talAuto,talNone,talValue,talMark,talText);. TalAuto выбор стиля производится автоматически. TalNone пустые строки. TalValue маркирование оси основано на минимуме оси и максимуме. TalMark каждая точка ряда будет иметь метку, используя SeriesMarks стиль. TalText каждый пункт ряда будет иметь метку, используя XLabels строки. Вложенная страница Titles. Свойство Title определяет заголовок и подпись в нижней части диаграммы Foot. Здесь можно задать свойства форматирования, которые будут введены в верхней и нижней части диаграммы. Вы можете установить шрифт Title и Foot, их выравнивание, задать структуру рамки, цвет области позади надписи и стиль закрашивания этой области. В свойстве property Title : TChartTitle; TCHARTTITLE-компонент используется, чтобы отобразить строки текста Title и Foot в верхней и нижней части диаграммы соответственно. Текстовое свойство содержит текст, который будет отображен. Это свойство имеет тип TStrings, что означает ряд строк в списке. Всякий раз, когда изменяете текстовое свойство, вы должны переустановить компонент диаграммы вручную. Например with Chart1.Title.Text do begin Clear; Add('ACME Monthly Sales'); Add('Year: 2002'); end; Chart1.Repaint; end; Вложенная страница Legend. Данная страница позволяет изменять положение, шрифт, цвет, положение относительно графика легенды или пояснений графика. Как правило, это числовые значения. Свойство LegendStyle дает возможность выводить легенду автоматически, выводить название графика или одно значение, первое. TLegendStyle = (lsAuto,lsSeries, lsValues,lsLastValues);. Свойство property TextStyle : TLegendTextStyle; TLegendTextStyle= (ltsPlain, lts-LeftValue, ltsRightValue, lts-LeftPercent, ltsRight-Percent, ltsXValue); Например (свойство - вид надписи): LtsPlain Лето. LtsLeftValue 1234 Лето LtsRightValue Лето 1234 (смещение вправо) LtsLeftPercent Лето 5.1% LtsRightPercent Лето 5.1% (смещение вправо) LtsXValue 4321 применяется только к ряду со значениями X. Свойство Position определяет размещение легенды относительно графика (слева, справа, вверху, внизу). Свойство Margin определяет расстояние размещения легенды относительно графика. Щелчок по кнопке Frame открывает окно, позволяющее определять вид обрамления легенды. Свойство Shadow определяет вид тени для легенды, размеры которой можно изменить параметром Size. Свойство ResizeChart указывает, уменьшит ли легенда прямоугольник диаграммы. Чтобы предотвратить перекрытие между прямоугольниками диаграммы и легендой, необходимо установить галочку в чекбокс ResizeChart. Свойство Inverted инвертирует значения легенды. Свойство property DividingLines: TChartHiddenPen read FDividingLines write SetDividingLines; определяет внешний вид обрамления отдельных элементов легенды. Вложенная страница Panel. Опции этой страницы позволяют задавать значения панели, или, другими словами, области построения графика, придавая графику красивый вид. Можно задавать цвет области построения диаграммы или графика, производить комбинацию цветовой гаммы, изменять вид кромки внутренней и внешней части, имеется возможность внедрения различных изображений. Свойство property BevelInner : Integer; устанавливает размер скоса, который формирует внутреннюю сторону панели диаграммы. Свойство property BevelOuter : Integer; устанавливает размер скоса, который формирует внешнюю сторону панели диаграммы. Свойство property BackImageMode : TTeeBackImageMode; определяет, как будет отображаться точечный рисунок фонового режима. TTeeBackImageMode = (pbmStretch, pbmTile, pbmCenter); PbmStretch: рисунок будет изменен, чтобы приспособиться под размер диаграммы. PbmTile: рисунок будет размножен в виде плиточной укладки. PbmCenter: рисунок не будет изменен, но размещен по центру. Свойство property Visible : Boolean; Разрешает или запрещает закрашивать тыльную часть диаграммы, или, другими словами, устанавливать градиент. Например Chart1.Gradient.Visible := True ; Chart1.Gradient.StartColor := clYellow ; Chart1.Gradient.EndColor := clBlue ; Chart1.Gradient.Direction := gdLeftRight ;. Свойство property Direction : TGradientDirection; определяет направление закрашивания тыльной части диаграммы. TGradientDirection = (gdTopBottom, gdBottomTop, gdLeftRight, gdRightLeft);. Свойства property StartColor : TColor; и property EndColor : TColor; определяют создание градиента, представляющего собой совокупность двух цветов, например красного и белого. Вложенная страница Paging. На этой странице имеется возможность задавать для каждого пункта графика его размеры. Возможно перемещение от одного пункта графика к другому, т.е. поперек графика. Можно применять масштабирование к пунктам графика или не применять его (в этом случае элементы графика размещаются плотно друг к другу). Вложенная страница Walls. На этой странице имеется возможность определения размера стенок графика (боковой стенки, тыльной стенки и нижней стенки). Возможен выбор цвета, типа кисти и пера, чтобы заполнить цветовую гамму стенок графика. Вложенная страница 3D. Опции этой страницы придают трехмерность графику или диаграмме. Свойство property Zoom : Integer; значение по умолчанию = 100%. Свойство View3DOptions изменяет размер окна, изменяет масштаб изображения диаграммы. Значение выражается в процентах. Увеличение производится при помощи ползунка Zoom. Диаграмма может быть расширена по размеру больше, чем панель. Свойство property Rotation : Integer; определяет вращение диаграммы или графика. Увеличение значения приведет к вращению диаграммы вокруг вертикальной оси. Опция Ortogonal отключает режим трехмерного изображения и переключает в двухмерный режим. Свойство property Elevation : Integer; определяет вращение графика или диаграммы вокруг горизонтальной оси. Свойство property HorizOffset : Integer; перемещает прямоугольник диаграммы в горизонтальном направлении поперек панели диаграммы. Положительные значения перемещают диаграмму вправо, отрицательные - влево. Свойство property VertOffset : Integer; перемещает прямоугольник диаграммы в вертикальном направлении поперек панели диаграммы. Положительные значения перемещают диаграмму вниз, отрицательные значения - вверх. Свойство property Perspective : Integer; позволяет просматривать значения диаграммы или графика в перспективе, значения можно изменять с помощью ползунка. Свойство property ZoomText : Boolean; дает возможность отключать изменение масштаба текста при изменении масштаба изображения. Раздел Series. Вложенная страница Format. Эта страница позволяет изменять тип ряда диаграммы или графика. Свойство property BarStyle : TBarStyle; по умолчанию установлено значение bsRectangle. TBarStyle = (bsRectangle, bsRectGradient, sPyramid, bsInvPyramid, bsCilinder, bsEllipse, bsArrow); Значение типа ряда можно определить программно: BarSeries1.BarStyle := bsPyramid ;. Свойство property ColorEachPoint : Boolean; позволяет устанавливать цвет для элементов ряда. Вы можете сами установить цвет или дать возможность сделать это Delphi. Свойство property MultiBar : TMultiBar позволяет расположить диаграммы или графики относительно друг друга, если их внедрено несколько в компонент Chart. TMultiBar = (mbNone, mbSide, mbStacked, mbStacked100);. Щелчок по кнопке Border открывает диалоговое окно, позволяющее изменять форму окантовки элементов ряда, размер и ее цвет. Вложенная страница General. Свойство property ShowInLegend : Boolean разрешает или запрещает отображение легенды. Свойство property Cursor : TCursor; определяет, какой вид принимает курсор при перемещении по отдельным пунктам диаграммы или графика. Например: LineSeries1.Cursor:=crTeeHand ;. Свойство property HorizAxis : THorizAxis; определяет расположение горизонтальной оси масштаба относительно графика или диаграммы. THorizAxis=(aTopAxis,aBottomAxis); LineSeries1.HorizAxis := aTopAxis ;. Свойство property DateTime : Boolean; позволяет задавать значения времени для горизонтальной оси. Вложенная страница Marks. Опции этой страницы позволяют отображать значения надписи над элементами графика и задавать для них цвет, окантовку и шрифт. Раздел Arrows позволяет определить расстояние надписи от элемента диаграммы или графика, а также вид линии, соединяющей надпись и элемент диаграммы или графика. Свойство property Style : TSeriesMarksStyle; определяет стиль надписи. Вложенная страница Data Source. Страница источника данных позволяет определить данные для надписей над элементами диаграммы или графика.
Потоки
Обмен данными между программой и внешними устройствами осуществляется с помощью операций ввода-вывода. Типичным внешним устройством является терминал. На терминале можно напечатать информацию. Можно ввести информацию с терминала, напечатав ее на клавиатуре. Другим типичным устройством является жесткий или гибкий диск, на котором расположены файлы. Программа может создавать файлы, в которых хранится информация. Другая (или эта же) программа может читать информацию из файла.
В языке Си++ нет особых операторов для ввода или вывода данных. Вместо этого имеется набор классов, стандартно поставляемых вместе с компилятором, которые и реализуют основные операции ввода-вывода.
Причиной является как слишком большое разнообразие операций ввода и вывода в разных операционных системах, особенно графических, так и возможность определения новых типов данных в языке Си++. Вывод даже простой строки текста в MS DOS, MS Windows и в X Window настолько различен, что пытаться придумать общие для всех них операторы было бы слишком негибко и на самом деле затруднило бы работу. Что же говорить о классах, определенных программистом, у которых могут быть совершенно специфические требования к их вводу-выводу.
Библиотека классов для ввода-вывода решает две задачи. Во-первых, она обеспечивает эффективный ввод-вывод всех встроенных типов и простое, но тем не менее гибкое, определение операций ввода-вывода для новых типов, разрабатываемых программистом. Во-вторых, сама библиотека позволяет при необходимости развивать её и модифицировать.
В нашу задачу не входит описание программирования в графических системах типа MS Windows. Мы будем рассматривать операции ввода-вывода файлов и алфавитно-цифровой вывод на терминал, который будет работать на консольном окне MS Windows, MS DOS или Unix.