Как сделать тест в лазарусе с выбором ответа

Обновлено: 03.07.2024

Оператор case сложный и состоит из нескольких зарезервированных слов.

Вот конструкция оператора:

Оператор работает так: сначала вычисляется или считывается значение выражения, а потом в списке предложенных вариантов значений ищется совпадение и выполняется соответствующий оператор. Если такое значение не найдено, то выполняется оператор после слова else.

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

Так как всего символов получается много. То можно их перечислять через запятую для одного оператора. Вот так:

‘ 1 ’ , ’ 2 ’ , ’ 3 ’ , ’ 4 ’ , ’ 5 ’ , ’ 6 ’ , ’ 7 ’ , ’ 8 ’ , ’ 9 ’ , ’ 0 ’ : Label1 . Caption : =’Это числа’ ;

Но такая конструкция неудобная для букв, так как их много больше.

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

Так же для букв:

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

Осталось добавить на форму нужные элементы и в обработчик событий вставить этот код.



Рис. 10.1 Полученная программа.

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

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



Рис. 10.2 Интерфейс программы.

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

Будем считать что у ученика день рождения1 сентября, то есть его возраст в течении учебного года не меняется.

· обработка события OnClick - нажатие кнопки.

Работа № 3

· использование строки ввода Edit (вкладка палитры компонентов Standard),

· обработка события OnKeyPress- нажатия клавиши.

Работа № 4

· использование компоненты ListBox (список) (вкладка палитры компонентов Standard),

· использование встроенного редактора для ввода информации,

· алгоритм выбора (оператор Case).

Работа № 5

· использование комбинированного списка ComboBox (представляющие собой объединение строки ввода и компонента ListBox),

· компонента - выключатель CheckBox,

· функции MessageDlg.

Работа № 6

· использование типов переменных - целочисленного и действительного (integer и real);

· преобразование строковых данных в числовые и числовые в строковые с помощью функций StrToInt; StrToFloat, IntToStr FloatToStr ; Format();

· обработка исключительных ситуаций с помощью оператора
Try – except – end;

Работа № 7

· полос прокрутки ScrollBar для ввода данных,

· компонента Panel,

· функций преобразования значений цветовых составляющих – TColorRef.

Работа № 8

· взаимодействие двух списков ListBox на основе свойств Items и ItemIndex,

· создание многострочных надписей в компоненте Label.

Работа № 9

· группа переключателей RadioGroup на странице палитры компонентов Standard,

Работа № 10

· использование в проекте нескольких форм и организация вызова этих форм,

· использование шаблона формы Tabbed pages из окна New Items вкладки Forms,

· компонента MainMenu (главное меню формы),

· компонента Memo (многострочный текстовый редактор),

· компонента Image (графический объект) со страницы палитры компонентов Additional,

· компонента PageControl (набор панелей с закладками).

Практическая работа №2

Разработка ПЕРВОГО ПРОЕКТА

Постановка задачи, №2

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

Новым в этой работе является: · использование компонент Label и Button на странице палитры компонентов Standard, · обработка события OnClick - нажатие кнопки.

Задание для самостоятельного выполнения

Практическая работа №3

Разработка проекта ДИАЛОГ

Постановка задачи

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

Создать программу, выполняющую следующие действия. После запуска программы пользователь вводит свое имя, например, Александр, в прямоугольник с мигающим текстовым курсором и нажимает клавишу Enter. Появляется вопрос: "Александр, ты любишь читать?". Если пользователь нажмет на клавишу Да, то должна появиться реплика: "Молодец!", если он нажмет на клавишу Нет, то появится реплика: "Почему же? Надо читать".

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

Новым в этой программе является: · использование строки ввода Edit (вкладка палитры компонентов Standard), · обработка события OnKeyPress- нажатия клавиши.

Задание для самостоятельного выполнения, №3

Задание Подсказка
Сделать кнопки Да и Нет доступными только после ввода имени и нажатия клавиши Enter. Значение свойства Enabled кнопок Да и Нет установить равными False, а в процедуру Edit1KeyPressed включить, код: Button1.Enabled:=true; Button2.Enabled := true;
Удалить текст компонентов Edit1, Label2, Label3 для обеспечения возможности повторить диалог. Разместить на форме еще одну кнопку BitBtn. Установить значение bkRetry свойства Kind, и значение &Повторить свойства Caption. Ввести программно по нажатию кнопки Повторить пустые строки вместо надписей и имен кнопок: Label2.Caption:=''; Label3.Caption:=''; Edit1.Text := '';
Сделать так, чтобы при повторении диалога строка ввода была бы снова активной. Ввести команду: Form1.ActiveControl := Edit1

Практическая работа №4

Постановка задачи

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

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

Новыми в этой работе являются: · использование компоненты ListBox (список) (вкладка палитры компонентов Standard), · использование встроенного редактора для ввода информации, · алгоритм выбора (оператор Case).

Задание для самостоятельного выполнения, №4

Практическая работа №5

Разработка проекта СЛОВАРЬ

Постановка задачи

Разработать программу для составления словаря новых терминов.

Должна иметься возможность внесения в словарь изменений, дополнений или сокращения его. При выборе термина на контрольной панели должны появляться его номер и общее количество слов в словаре.

Новыми в этой работе является: · использование комбинированного списка ComboBox (представляющие собой объединение строки ввода и компонента ListBox), · компонента - выключатель CheckBox, · функции MessageDlg. Все эти компоненты находятся на вкладке палитры компонентов Standard.

Задание для самостоятельного выполнения, №5

Практическая работа №6

Разработка проекта ВАШ ВЕС

Постановка задачи

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

Задание для самостоятельного выполнения, №6

Задание Подсказка
Для форматирования и преобразования действительных чисел вместо функции FloatToStr() применить функцию Format(‘ %f ’,[пeременная]). Например, Format(‘%f ‘, [Delta])
Для форматирования и преобразования применить эту же функцию в таком виде Format(‘Строка %f’,[пeременная]). Например, Format(‘Вам надо похудеть %f',[Delta]) .
Усовершенствовать проект: сделать к программе заголовок; сделать шрифт выводимой реплики отличным от стандартного по виду, цвету и размеру; вставить кнопку выхода из программы; предусмотреть возможность повторного запуска программы (см. проект Диалог).
Сделайте так, чтобы в начале программы или после повторного запуска объекты Label2 и Edit2 были не видны и появлялись бы на экране только после того, как будет введен вес. Свойству Visible нужно присвоить False.

5. В случае преобразования строкового типа в числовой тип может возникнуть ситуация появления ошибки, если введены недопустимые символы. Если функции StrToInt или StrToFloat обнаружат ошибку в записи числа, они инициируют так называемую исключительную ситуацию (исключений), которая обычно приводит к аварийному завершению работы программы.

Обработчик исключений строится в виде таких конструкций:

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

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

try
FactW:=StrToInt(Edit1.Text);
except
ShowMessage('Ошибочная запись числа: ' + Edit1.Text);
Edit1.SetFocus;
Exit;
end;

В результате выполнения

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

Примечание
При работе в среде Lazarus эксперименты с исключениями плохо прослеживаются, так как при каждом исключении среда перехватывает управление программой. Для отмены этого необходимо в команде Tools/Debugger Options/Language Exceptions убрать флаг у опции Stop on Lazarus Exceptions.

6. Измените алгоритм расчета с учетом Индекса массы тела.

Вес – X,
Рост – Y.
Индекс массы тела – A, где A = X / Y2 (кг/м2)

Результат определяется по таблице:


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


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


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

29.09.2015, 19:13

Вместо того, что слева, вопросы пиши на лайбе радиоколонки. А вообще хрень это, контролы надо генерировать рандомно в рантайме, а еще лучше генерировать html

30.09.2015, 09:17

Очень хочется себе в подпись поставить, эпик фраза, честно.
Даже себе представил такой диалог:

A: Мне нужен ГУЙ
B: Чувак генерируй контролы рандомно и в рантайме! Ваще изи!

Это универсальнейший ответ по интерфейсам!

То есть в программе есть верные и не верные ответы и как это прописать и то чтобы в конце было выведено число я не знаю - помогите!

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

09.12.2015, 22:10

Пользователь сказал cпасибо:

12.12.2015, 03:04

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

Тестирование и отладка программы

Чем больше опыта имеет программист, тем меньше ошибок в коде он совершает. Но, хотите верьте, хотите нет, даже самый опытный программист всё же допускает ошибки. И любая современная среда разработки программ должна иметь собственные инструменты для отладки приложений, а также для своевременного обнаружения и исправления возможных ошибок. Программные ошибки на программистском сленге называют багами (англ. bug - жук), а программы отладки кода - дебаггерами (англ. debugger - отладчик). Lazarus, как современная среда разработки приложений, имеет собственный встроенный отладчик, работу с которым мы разберем на этой лекции.

Ошибки, которые может допустить программист, условно делятся на три группы:

  1. Синтаксические
  2. Времени выполнения (run-time errors)
  3. Алгоритмические

Синтаксические ошибки

Найденная компилятором синтаксическая ошибка - нет объявления переменной i

Подобные ошибки могут возникнуть при неправильном написании директивы или имени функции (процедуры); при попытке обратиться к переменной или константе, которую не объявляли ( рис. 27.1); при попытке вызвать функцию (процедуру, переменную, константу) из модуля, который не был подключен в разделе uses ; при других аналогичных недосмотрах программиста.

Ошибки времени выполнения

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

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

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

Итак, во избежание ошибок времени выполнения программист должен не забывать делать проверку на правильность ввода пользователем допустимых значений, заключать опасный код в блоки try…finally…end или try…except…end , делать проверку на существование открываемого файла функцией FileExists и вообще соблюдать предусмотрительность во всех слабых местах программы. Не полагайтесь на пользователя, ведь недаром говорят, что если в программе можно допустить ошибку, пользователь эту возможность непременно найдет.

Алгоритмические ошибки

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

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

Если программа работает правильно с одними наборами исходных данных, и неправильно с другими, то это свидетельствует о наличии алгоритмической ошибки. Алгоритмические ошибки иногда называют логическими, обычно они связаны с неверной реализацией алгоритма программы: вместо "+" ошибочно поставили "-", вместо "/" - "*", вместо деления значения на 0,01 разделили на 0,001 и т.п. Такие ошибки обычно не обнаруживаются во время компиляции , программа нормально запускается, работает, а при анализе выводимого результата выясняется, что он неверный. При этом компилятор не укажет программисту на ошибку - чтобы найти и устранить её, приходится анализировать код, пошагово "прокручивать" его выполнение, следя за результатом. Такой процесс называется отладкой.

Работа с отладчиком

Давайте от теории перейдем к практике. Загрузите Lazarus с новым проектом, установите на форму простую кнопку и сохраните проект в папку 27-01. Имена проекта, формы, модуля и кнопки изменять не нужно, оставьте имена, данные по умолчанию.

Далее, сгенерируйте событие OnClick для кнопки, в котором напишите следующий код:

Что мы тут делаем? Целочисленную переменную i используем в качестве счетчика для цикла for . Цикл производим от -3 до 3, то есть, 7 раз, включая ноль. В теле цикла мы делим 10 на значение i , результат оформляем в виде строки и добавляем к списку строк st . Выше говорилось, что подобные действия нужно заключать в блок обработки исключительных ситуаций try-finally-end , что мы и сделали.

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

Ну что, ничего криминального тут нет, почему же произошла ошибка? Код верный и должен был нормально выполняться… Когда вы заходите в подобный тупик , помочь вам может здравый смысл и встроенный отладчик. Здравый смысл говорит, что ошибка произошла где-то в теле цикла for . А чтобы воспользоваться отладчиком, нужно приостановить выполнение программы на этом цикле, чтобы потом построчно его продолжить. Для остановки работы программы служат так называемые точки останова (англ. breakpoints).

Точки останова - это строки, перед выполнением которых отладчик приостанавливает выполнение программы, и ждет ваших дальнейших действий.

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

Установить точку останова можно разными способами:

  • Командой главного меню "Запуск -> Добавить точку останова -> Точка останова в исходном коде". В открывшемся окне "Параметры точки останова" нажать "ОК".
  • Щелкнуть по строке правой кнопкой, и в всплывающем меню выбрать "Отладка -> Переключить точку останова".
  • Нажать "горячую клавишу" .
  • Щелкнуть по нужной строке в левой части Редактора кода, где указаны номера строк.

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

Строка с точкой останова

Снять точку останова удобней также последними двумя способами. Точка останова у нас есть, снова нажимаем кнопку "Запустить". Программа начинает свою работу, нажимаем кнопку "Button1".

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

Строка, которая будет выполнена далее

Тут очень важно понимать, что программа была остановлена ДО выполнения этой строки, а не ПОСЛЕ неё. То есть, в настоящий момент переменной i еще не присвоено значение -3. Далее, мы можем выполнять с отладчиком различные действия, которые собраны в разделе главного меню "Запуск". Обычно требуется пошаговое выполнение программы. Для этого можно использовать команду "Запуск -> Шаг в обход" (или ), "Запуск -> Шаг с входом" (или ) или "Запуск -> Шаг с выходом" (или ). "Шаг в обход" означает, что если в коде будет встречен вызов какой-нибудь функции или процедуры, отладчик выполнит их и остановится на следующей после вызова строке. При выборе "Шаг со входом", отладчик также пошагово будет выполнять и вызываемые функции-процедуры. "Шаг с выходом" подразумевает, что если в строке нет вызовов функций, то остановки происходят, как при "Шаг в обход". Если в строке есть выражение , то остановка происходит вначале перед строкой, затем перед вычислением каждой функции, чтобы мы имели возможность просмотреть значения параметров, передаваемых в функцию.

У нас вызовов функций нет, поэтому мы можем воспользоваться как , так и (чаще всего используют - Шаг в обход).

Итак, нажмем , и отладчик выполнит строку с точкой останова, и выделит серым следующую строку. Снова нажмем , и снова будет выделена эта строка - был выполнен шаг цикла . Нажав несколько раз , мы добьемся появления на экране всё той же ошибки, которая заблокирует дальнейшее выполнение программы. Становится понятно, что цикл нормально выполняется несколько проходов, после чего всё же возникает ошибка. Включаем логику: внутри цикла у нас изменяется только переменная i, значит, ошибка как-то связана с ней. А как узнать, как именно?

Здесь нам на помощь приходит еще один полезный инструмент отладчика - наблюдение за значениями переменных. Сбросьте программу командой "Запуск -> Сбросить отладчик". Теперь снова нажмите кнопку "Запустить", а потом снова кнопку "Button1". Отладчик снова приостановил выполнение программы на строчке с циклом, однако не спешите нажимать . Для начала, добавим наблюдение над переменной i. Делается это командой "Запуск -> Добавить наблюдение", которая была недоступна, пока программа не начала выполняться. В строке "Выражение" укажите переменную i, и нажмите "ОК":

Установка наблюдения за переменной

Теперь отладчик наблюдает за значениями переменной i , но нам от этого не легче - мы то не видим этих значений! Чтобы их увидеть, нужно вывести на экран окно Списка наблюдений. Делается это командой "Вид -> Окна отладки -> Окно наблюдений" или "горячими клавишами" .

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

Окно Списка наблюдений

Поскольку переменной i еще не было присвоено значения -3, то в колонке значений вы, скорее всего, увидите 1, которым по умолчанию была проинициализирована наша переменная . Соответственное значение будет и у выражения. Теперь мы готовы двигаться дальше. Нажимаем . В Списке наблюдений сразу же изменилась картина - i теперь равно -3, а выражение -3,3333…

Нажимаем ещё раз. Снова значения изменились, теперь i = -2 , а выражение = -5. Мы понимаем, что цикл работает, и два его шага были сделаны. Нажимаем еще два раза. Сейчас переменная содержит ноль, а значение выражения указывает " inf ". Однако строка с вычислением еще не была выполнена, не забываем об этом. Снова нажимаем , и снова получаем ошибку. А в значениях переменной и выражения видим слово " evaluating ", что переводится, как "оценка". Теперь мы наглядно видим, что в строке

возникает ошибка, когда переменная i равна нулю. И тут уже несложно догадаться, почему эта ошибка возникает - потому что происходит попытка деления 10 на 0.

Как видите, вычисление , где i равна нулю, было пропущено.

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

Нажмите, чтобы узнать подробности

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

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

Оборудование: компьютер

Выполнение работы:

Разместите на форме четыре метки Label , для вывода поясняющих надписей, четыре текстовых поля Edit и одну командную кнопку Button 1.




procedure TForm1.Button1Click(Sender: TObject);

A, B, C, max: integer;

A:=StrToInt(Edit1.Text);

B:=StrToInt(Edit2.Text);

C:=StrToInt(Edit3.Text);

if A=B then max:=A else max:=B;

if Cmax then max:=C;

Edit4.Text :=IntToStr(max);

Сохраните проект в папке на Рабочем столе. Запустите проект на исполнение.






procedure TForm1.Button1Click(Sender: TObject);

Код для Вопроса 2, Вопроса 4, Вопроса 5 напишите самостоятельно.

Сохраните проект в папке на Рабочем столе. Запустите проект на исполнение.






Ввод данных из диалогового окна в среде Lazarus.

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

имя:=InputBox (заголовок_окна ,подсказка ,значение ) ;

заголовок_окна—строка, определяющая название окна;

значение—строка, которая будет находиться в поле ввода при появлении окна на экране;

имя—переменная строкового типа, которой будет присвоено значение из поля ввода.

После выполнения фрагмента программы

var S : string ;

S:=InputBox ( ’ ЗАГОЛОВОК ␣ ОКНА ’ ,

’Подсказка : ␣введите␣исходные␣данные ’ , ’Данное␣значение ’ ) ;


Общий вид функции:

• справка—номер окна справочной системы, которое будет выведено на экран, если нажать F1; параметр равен нулю, если использование справки не предусмотрено.

Читайте также: