методичка с++. Лабораторные работы по программированию в среде С Builder 0
Скачать 1.64 Mb.
|
Заполнение массива с помощью датчика случайных чисел и вывод результата в компонент StringGrid. 1. Открыть проект InpTable из папки InpTableCol. 2. Удалить с формы кнопку «Что ввели?». 3. Добавить на форму компонент GroupBox. Заголовок (подпись) – «Прин- цип заполнения таблицы». 4. В компонент GroupBox добавить два компонента RadioButton и один ком- понент Panel. Подпись для первого RadioButton – «ручной ввод», для второго – «генератор случайных чисел». В компоненте Panel очистить подпись. Име- на: rbtnManual и rbtnRand соответственно. Радиокнопка rbtnManual при за- пуске приложения должна быть выбрана. 5. В компонент Panel добавить три RadioButton, подписи: «целые от 0 до N», целые от –N до N», «действительные от 0 до N». Имена – rbtn1, rbtn2, rbtn3. При запуске приложения должна быть выбрана радиокнопка rbtn1. 6. В компонент Panel добавить компонент Label и компонент SpinEdit. Под- пись для Label – «N=», имя – lblN, имя для SpinEdit – spe. Расположение ком- понент – см. рис. 14. 7. Для компонента Panel установить значения свойств BevelInner и BevelOuter в bvNone. 8. Перейти в обработчик события ОnClick для компонента rbtnManual и ука- зать код, представленный на рис. 15: 9. Скопировать в буфер обмена только что набранный код; перейти в обра- ботчик события OnClick для компонента rbtnRand и вставить текст, храня- Рис. 14. Расположение компонентов на панели rbtn1->Enabled=False; rbtn2->Enabled=False; rbtn3->Enabled=False; lblN->Enabled=False; sspe->Enabled=False; Рис. 15. Новый код 69 щийся в буфере. Выделить вставленный текст, выполнить Search -> Replace; в поле «TextToFind» указать False, в поле «Replace with» указать True; снять флажок «Prompt on Replace»; в панеле «Scopе» выбрать вариант «SelectedText» и нажать кнопку «Replace All». 10. Запусить проект, убедиться в его работоспособности и проверить пра- вильность работы функций rbtnManualClick и rbtnRandClick. 11. Перейти в обработчик события OnClick для кнопки «Заполнить таблицу». В обработчике написать код, согласно следующему алгоритму (аналогичные действия уже были выполнены в лабораторной работе №5): 12. По возможности оптимизировать код. 13. Запустить программу и убедиться в ее работоспособности. 14. Получить индивидуальное задание по одномерным массивам. Упражнение 4. Заполнение двумерного массива с помощью датчика слу- чайных чисел и вывод результата в компонент StringGrid. 1. Открыть проект проект InpTable из папки InpTableCol и сохранить его в папке InpTable2 с именем prTable2, файл модуля формы с именем frmTable2. 2. Добавить компоненты Label и SpinEdit для регулировки количества строк в таблице. Подписи и свойства настроить самостоятельно. 3. Заменить код события OnClick кнопки «Заполнить таблицу» для ситуации, когда выбран вариант «Ручной ввод» на следующий: unsigned char ColCount; unsigned char RowCount; ColCount = speCount->Value+1; RowCount = ….;// написать самостоятельно StrGr->ColCount= ColCount; StrGr->RowCount= ….;//написать самостоятельно StrGr ->Cells[0][0]="Строка/Столбец"; for (int i=1;i for (int i=1;i for (int i=1;i { for (int j=1;j { StrGr ->Cells[i][0]=i*j; } } StrGr ->Visible = True; 70 4. Запустить программу, убедиться в ее верной работоспобности для изме- ненного варианта. Если программа работает не верно, самостоятельно испра- вить ошибку. 4. Самостоятельно изменить код для всех остальных ситуаций. 5. Добавить кнопку «Обнулить строку» и компонент SpinEdit, который будет задавать номер обнуляемой в таблице строки. Перейти в обработчик события OnClick для кнопки «Обнулить строку» и самостоятельно написать соответ- ствующий программный код. Содержание отчета: 1. Титульный лист 2. Цель работы 3. Краткие теоретические сведения (список используемых операторов, их цель, синтаксис, формат и проч.) 4. Коды модулей С++ 5. Копии форм и сведения о свойствах компонентов. 6. Копии экрана с примерами работы программ 7. Схемы алгоритмов программ. 8. Выводы по работе. Контрольные вопросы 1. Для каких целей используется компонент CheckBox? 2. Перечислите свойства компонента CheckBox. 3. В каких случаях рекомендуется использовать компонент RadioButton? 4. Перечислите свойства компонента RadioButton. 5. Какое событие является важнейшим для компонентов CheckBox и RadioButton? 6. Почему в операторе ветвления п. 6 упражнения 1 в условии нет логиче- ского выражения? 7. Перечислите цель и свойства компонента Panel. 8. В чем отличие компонента GroupBox от компонента Panel? 9. Для каких целей используется компонент RadioGroup? Перечислите и по- ясните его свойства. 10. Расскажите о цели, свойствах и событиях компонента StringGrid. 71 Приложение 1. Библиотечные математические функции С++ Требуют подключения заголовочного файла math.h (см п. 7 их упражнения «Работа с компонентом Memo»). Все функции, принимающие или возвращающие угол, работают с радианами. Список некоторых математических функций модуля приведен в таблице 5. Таблица 5. Функция Описание работы функции acos Вычисление арккосинуса asin Вычисление арксинуса atan Вычисление арктангенса сbrt Вычисление кубического корня сeil Округление до ближайшего большего целого числа copysign возвращает величину, абсолютное значение которой равно x, но знак которой соответствует зна- ку y cos Вычисление косинуса exp Вычисление экспоненты exp2 Вычисление 2 х fabs Вычисление модуля floor Округление до ближайшего меньшего целого числа fmax наибольшее значение среди x и y fmin наименьшее значение среди x и y fmod вычисление остатка от деления нацело (аналог – оператор «%») frexp разбивает число с плавающей точкой на мантиссу и показатель степени. hypot Вычисление гипотенузы (sqrt(x² + y²)) llround округление до ближайшего целого в направлении от нуля log Вычисление натурального логарифма log10 Вычисление десятичного логарифма Log2 Вычисление логарифма по основанию 2 lrint округление до ближайшего целого lround округление до ближайшего целого в направлении от нуля modf извлекает целую и дробную части (с учетом знака) из числа с плавающей точкой nearbyint округление аргумента до целого значения в формате числа с плавающей точкой pow Возводит число, принимаемое в качестве аргумента х, в степень, принимаемую в качестве аргу- мента y. round округление до целого sin Вычисление синуса sqrt Вычисление квадратного корня tan Вычисление тангенса trunc Округление до ближайшего целого числа в направлении к нулю 2. Дополнительные свойства для компонентов Название свой- ства Смысл свойства BiDiMode определяет направление ввода текста, действует в Windows с поддержкой языков с поряд- ком ввода. Возможные значения 72 bdLefttoRight слева на право bdRighttoLeft справо на лево Tag Cистемой не используется. Пользователь может определить и использовать его по своему усмотрению, помещая в него необходимую информацию. Например, можно в процессе проектирования или программно в процессе выполнения задать некоторое значение Tag группе компонентов и затем оперировать с этой группой. Action Значение свойства выбирается во время проектирования из выпадающего списка преду- смотренных действий в Object Inspector. Этот список формируется в процессе проектиро- вания размещением на форме компонента TActionList (вкладка Standart) и заданием его свойств. Align определяет, остается ли компонент неизменным при изменении размеров содержащей его формы, панели, другого компонента, или он изменяется, занимая всю доступную пло- щадь, ее верхнюю, нижнюю, левую или правую часть. Возможные значения : alNone Компонент остается там, где он размещен во время проектирования. Разме- ры его не изменяются. alTop Компонент занимает всю верхнюю часть контейнера и во время выполнения приложения его ширина изменяется при изменении ширины контейнера. Высота компонента остается неизменной. alBottom Компонент занимает всю нижнюю часть контейнера и во время выполнения приложения его ширина изменяется при изменении ширины контейнера. Высота компонента остается неизменной. alLeft Компонент занимает всю левую часть контейнера и во время выполнения приложения его высота изменяется при изменении высоты контейнера. Ши- рина компонента остается неизменной. alRight Компонент занимает всю правую часть контейнера и во время выполнения приложения его высота изменяется при изменении высоты контейнера. Ши- рина компонента остается неизменной. alClient Компонент занимает всю клиентскую область контейнера и во время вы- полнения приложения его размеры изменяются при изменении размеров контейнера. Если в контейнере часть клиентской области уже занята, ком- понент занимает всю ее оставшуюся часть. Anchors Определяет привязку данного компонента к родительскому при изменении размеров по- следнего. Свойство представляет собой множество, которое может содержать следующие элементы: akTop Компонент привязан к верхнему краю родительского akLeft Компонент привязан к левому краю родительского akRight Компонент привязан к правому краю родительского akBottom Компонент привязан к нижнему краю родительского BoundsRect Свойство позволяет получить одновременно координаты пикселей всех четырех углов компонента, используя тип TRect. Иной способ получить те же координаты - использо- вать свойства компонента Left, Top, Width, Height и соответствующие вычисления. Constraints Определяет ограничения, налагаемые на размер компонента. Тип TSizeConstraints. Возможные значения MaxHeight максимальная высота MinHeight минимальная высота MaxWidth максимальная ширина MinWidth минимальная ширина DragCursor отвечает за изображение курсора при перемещении его в области компонента в процессе 73 перетаскивания. DragKind определяет, будет ли компонент перетаскиваться обычным образом (по технологии Drag&Drop ), или он будет перетаскиваться для встраивания (по технологии Drag& Doc). DragMode определяет поведение компонента в процессе его перетаскивания. Возможные значения: dmAutomatic От программиста не требуется обработка каких-либо событий. Компо- нент готов к перетаскиванию. Пользователю достаточно щелкнуть на его изображении и начать перетаскивать. DmManual Компонент не может быть перетащен, пока приложение не вызовет ме- тод BeginDrag Parent определяет родительский компонент, т.е. компонет-контейнер, содержащий данный ком- понент. Контейнерами являются оконные компоненты, такие, как формы, панели и неко- торые другие. Расположенные на них дочерние компоненты могут наследовать часть свойств содержащего их контейнера Изменение свойства во время выполнения заставля- ет компонент перемещаться на экране в клиентскую область нового родителя. ParentColor определяет, наследует ли компонент цвет содержащего его компонента-контейнера. ParentFont определяет, будет ли для данного компонента использоваться шрифт (свойство Font) ро- дительского компонента-контейнера. При изменении свойства Font в каком-то компоненте, его свойство ParentFont автомати- чески сбрасывается в False. ParentShowHint используется, чтобы иметь возможность одновременно всем компонентам некоторого контейнера или формы разрешать или запрещать отображение всплывающей подсказки. Если свойство ParentShowHint установлено в True, то разрешение или запрет отображения ярлычков определяется свойством ShowHint родительского компонента. Если же свойство ParentShowHint установлено в False, то отображение окон подсказки определяется свойст- вом ShowHint самого компонента. При задании в компоненте значения ShowHint, равного True, его свойство ParentShowHint автоматически сбрасывается в False. PopupMenu обеспечивает появление всплывающего меню компонента Объект меню имеет тип TPopupMenu. Если в этом объекте свойство AutoPopup установ- лено в true, то меню будет появляться автоматически. В противном случае надо отобра- жать меню с помощью метода Popup класса TPopupMenu. Компонент Button (кнопка) На- звание Смысл Canc el Если имеет значение True, событие Click кнопки возникает при нажатии клавиши Esc Moda lResult В модальных диалоговых окнах значение этого свойства, не равное mrNone, при нажа- тии на кнопку закроет окно и запишет свое значение в свойство ModalResult формы. 4. Дополнительные сведения о событиях Имя события Возникает Примечание OnStartDrag Когда пользователь начинает перетаскивать компо- нент, т. е. нажал над компонентом левую кнопку мы- ши, и, не отпуская ее, начал смещать указатель мыши OnDragDrop когда пользователь отпускает перетаскиваемый ком- понент над другим компонентом. 74 onDragOver когда перетаскиваемый компонент пересекает границу данного компонента и оказывается над ним. OnEndDrag при любом окончании процесса переноса, как успеш- ного, так и неудачного (когда компонент отпущен над формой или компонентом, не способном его принять). может применяться для реакции приложения на перетаскивание (например, "выполнено успешно" или "неудача"). OnMouseDown Когда над компонентом была нажата кнопка мыши OnMouseMove – Когда указатель мыши перемещается над компонен- том OnMouseUp Когда пользователь отпустил нажатую кнопку мыши над компонентом OnMouseLeave Когда указатель мыши выходит за пределы элемента управления. onKeypress при нажатии пользователем символьной клавиши. Данное событие имеет параметр Key, который содер- жит символ нажатой клавиши и имеет тип char. При этом различаются символы верхнего и нижнего реги- стров, а также раскладка клавиатуры. Не позволяет отследить нажатие функциональных клавиш и кла- виш-комбинаций OnKeyUp при отпускании пользователем любой ранее нажатой клавиши позволяет обрабатывать нажатия всех клавиш OnKeyDown при нажатии пользователем на какую-либо клавишу onMouseDown при нажатии пользователем любой кнопки мыши в тот момент, когда указатель мыши находится над компо- нентом. onMouseUp Когда пользователь отпускает кнопку мыши над ком- понентом onMouseMove наступает при перемещении указателя мыши над ком- понентом. При нажатой левой кнопке мыши данное событие не возникает. onPaint когда приложение получает сообщение Windows о необходимости перерисовки испорченного изображе- ния. Изображение может испортиться от перекрытия окон одного или нескольких приложений. 75 СПИСОК ЛИТЕРАТУРЫ 1. Вальпа О. Д. Borland C++ Builder. Экспресс-курс. – СПб.: БХВ-Петербург, 2006. – 224 с.: ил. 2. Культин Н. Б. С++ Builder. – 2-е изд., перераб. и доп. – СПб.: БХВ- Петербург, 2008. – 464 с.: ил. + CD-ROM – (Самоучитель) 3. Пахомов Б. И. С/С++ и Borland C++ Builder для студента. – СПб.: БХВ- Петербург, 2006 – 448 с.: ил. 4. Павловская Т. А. C/C++. Процедурное и объектно-ориентированное программирование: Учебник для вузов. Стандарт 3-го поколения. — СПб.: Питер, 2015. — 496 с. 5. Мещеряков П. С. Прикладная информатика : учебное пособие. / П. С. Мещеряков. — Томск : Эль Контент, 2012. — 132 с 6. https://code-live.ru/tag/cpp-manual/ 7. http://www.cyberforum.ru/cpp-beginners/ 8. http://www.cyberforum.ru/cpp-builder/ 9. Липпман, С. Язык программирования С++. Полное руководство. [Электронный ресурс] / С. Липпман, Ж. Лажойе. – Электрон. дан. — М. : ДМК Пресс, 2006. – 1105 с. – Режим доступа: http://e.lanbook.com/book/1216 – Загл. с экрана. 10. 76 ОГЛАВЛЕНИЕ Введение. .................................................................................................................. 3 ЛАБОРАТОРНАЯ РАБОТА №1 ......................................................................... 4 ЛАБОРАТОРНАЯ РАБОТА №2 ....................................................................... 13 ЛАБОРАТОРНАЯ РАБОТА №3 ....................................................................... 19 ЛАБОРАТОРНАЯ РАБОТА №4 ........................................................................ 24 ЛАБОРАТОРНАЯ РАБОТА №5 ....................................................................... 28 ЛАБОРАТОРНАЯ РАБОТА №6 ....................................................................... 34 ЛАБОРАТОРНАЯ РАБОТА №7 ....................................................................... 56 Приложение ........................................................................................................... 71 Список литератуы ................................................................................................. 75 77 Учебно-методическое пособие Андреева Ольга Марковна, Григорьев Евгений Борисович, Маркелов Олег Александрович, Хачатурян Алена Борисовна Лабораторные работы по программированию в среде С++ Builder 6.0 Издание публикуется в авторской редакции СПбГЭТУ «ЛЭТИ» 197376, Санкт-Петербург, ул. Проф. Попова, 5 |