- •Задача 1. Конвертер
- •Задача 2. Фунты-килограммы
- •Задача 3. Сила тока.
- •Задача 4. Сопротивление
- •Задача 5. Кафе
- •Задача 6. Любимый напиток
- •Задача 7. Электроэнергия
- •Задание 8. Осаго
- •Задание 9.Просмотр иллюстраций
- •Задача 10. Калькулятор
- •Задача 11. Калькулятор-2
- •Задача 12.Секундомер
- •Задача 13. Угадай число
- •Задание 14.Угадай число-2
- •Задание 15.Запуск Internet Explorer
- •Задание 16.Конвертор
- •Задание 17.Конвертор 2
- •Задание 18.Погода
- •Задание 19.Средняя температура
- •Задание 20. Простая база данных
- •Задание 21. Редактор текста
- •Задание 22. Приветствие
- •Задача 23. Олимпийский флаг
- •Задание 24. Диаграмма
- •Задача 26. Круговая диаграмма.
- •Задача 27. Просмотр иллюстраций.
- •Задача 28 .Часы
- •Задача 29. Пинг понг.
- •Задача 30. Полет в облаках
- •Задача 31.Баннер
- •Задача 32. Фоновый рисунок
- •Задача 33. Wav
- •Задача 34. Mp3 Player
- •Задача 35.Воспроизведение midi
- •Задача 36.Compact Disk Player (версия 1)
- •Задача 37.Compact Disk Player (версия 2)
- •Задача 38.VideoPlayer
- •Задача 39. Анимация
- •Задача 40. Записная книжка
- •Задача 41 Магазин
- •Задача 42. Ежедневник
- •Задача 43. Сапер
- •Часть 1. Примеры и задачи
- •Часть 1. Примеры и задачи
- •Задача 44 Игра 15
- •Часть 1. Примеры и задачи
- •Задача 45. Игра "Собери картинку" (Puzzle)
- •Задача 46 Игра "Парные картинки"
- •Задача 47. Экзаменатор
- •Задача 48. Экзаменатор-2
- •Задача 49. Календарь
- •Задача 50. Будильник
- •Задача 51. Очистка диска
- •Задача 52.Печать
- •Задачи для самостоятельного решения Задача 1. Скидка
- •Задача 2.Доход по вкладу
- •Задача 3. Таблица умножения
- •Задача 4.Поездка на автомобиле
- •Задача 5.Стоимость разговора
- •Задача 6. Стеклопакет
- •Задача7. Калькулятор
- •Задача 8. Электроэнергия
- •Задача 9. Добрый день
- •Задача 10. Часы
- •Задача 11. Узоры
- •Задача 12. Курс доллара
- •Задача 13. Диаграмма
- •Задача 14. Домашние животные
- •Задача 15. Кораблик
- •Задача 16. Сапер
- •Задача 17 .Экзаменатор
- •Задача 18. База данных "Расходы"
Задача 17 .Экзаменатор
Усовершенствуйте программу Экзаменатор так, чтобы она запрашивала имя тестируемого и сохраняла результат тестирования в файле. Для ввода имени тестируемого используйте стандартное окно ввода, которое выводит функция inputBox. (Рис. 77, 78)
Рис 77
Рис 78
Вывод: В этом задании мы создали Экзаменатор так, чтобы он запрашивал имя тестируемого и сохраняла результат тестирования в файле.
Листинг
published: TLabel *Labell; // информационное сообщение, вопрос Tlmage *Image1; // иллюстрация к вопросу TButton *Buttonl; // кнопка OK / Дальше void fastcall FormActivate(TObject *Sender); void fastcall ButtonlClick(TObject * Sender),
private: // варианты ответа - радиокнопки выбора TRadioButton *RadioButton[4]; // щелчок на кнопке выбора ответа void fastcall RadioButtonClick(TObject *Sender); void fastcall ShowVopros(TVopros v); // выводит вопрос void fastcall EraseVopros(void); // удаляет вопрос
public: fastcall TForml(TComponent* Owner);
// *** модульформы *** #include <stdio.h> // длядоступакфункции sscanf iinclude <jpeg.hpp> // обеспечиваетработус // jpg-иллюстрациями
#pragma package(smart_init) #pragma resource "*.dfm"
Игры и другие полезные программы 223
TForml *Forml; // форма
int f; // дескриптор файла теста // имя файла теста берем из командной строки
int level[4]; // кол-во правильных ответов, необходимое // для достижения уровня AnsiString mes[4];// сообщение о достижении уровня
TVopros Vopros; // вопрос int otv; // номер выбранного ответа
int right =0; // кол-во правильных ответов i
// функции, обеспечивающие чтение вопроса из файла теста int Getlnt(int f); // читает целое int GetStringfint f, AnsiString *st); // читает строку
// конструктор fastcall TForml::TForml(ТСomponent* Owner) : TForm(Owner) { int i; int left = 10;
// создадимрадиокнопкидлявыбора // правильногоответа, носделаемихневидимыми tor (i = 0; i < 4; i++ ) { // создадимрадиокнопку RadioButton[i] = new TRadioButton(Forml); // установимзначениясвойств RadioButton[i]->Parent = Forml; RadioButton[i]->Left = left; RadioButton[i]->Width = Forml->
224 Часть 1. Примерыизадачи
ClientWidth - left - 20; RadioButton[i]->Visible = false; RadioButton[i]->Checked = false:
// зададимфункциюобработкисобытия Click RadioButton[i]->OnClick = RadioButtonClick;
void fastcall TForml::FormActivate(TObject *Sender)
{
AnsiString st;
// имяфайлатестадолжнобытьуказановкоманднойстроке int n = ParamCount(); if ( n < 1 ) { Labell->Font->Style = TFontStyles()« fsBold; Labell->Caption = "Вкоманднойстрокезапуска" "программынадозадатьимяфайлатеста"; Buttonl->Tag = 2; return; N
// открытьфайлтеста f = FileOpen(ParamStr(1), fmOpenRead); if ( f == -1 ) { Labell->Font->Style = TFontStyles()« fsBold; Labell->Caption = "Ошибкадоступакфайлутеста" + ParamStr(1); Buttonl->Tag = 2; return;
Игры и другие полезные программы 225
// вывести информацию о тесте GetString(f, &st); // прочитать название теста Forml->Caption = st;
GetString(f, &st); // прочитать вводную информацию Labell->Width = Forml->ClientWidth - Labell->Left -20; Labell->Caption = st; Labell->AutoSize = true,
// прочитать информацию об уровнях оценки for (int i=0; i<4; i
level[i] = Getlnt(f); GetString(f, &mes[i]);
// читает из файла очередной вопрос bool GetVopros(TVopros *v)
{
AnsiString st; int p; // если р=1, то к вопросу есть иллюстрация
if ( GetString(f, &(v->Vopr)) != 0 )
{
/* прочитать кол-во вариантов ответа, номер правильного ответа и признак наличия иллюстрации */ v->nOtv = Getlnt(f); v->rOtv = Getlnt(f); p = Getlnt(f);
if (p) //к вопросу есть иллюстрация GetString(f,&(v->Img) );
226 Часть 1. Примеры и задачи
else v->Img = "";
// читаемвариантыответа for (int i = 0; i < v->nOtv; i { GetStringff,&(v->0tv[i]) } return true;
} else return false;
// выводитвопрос void fastcall TForml::ShowVopros(TVopros v) { int top; int i;
// вопрос Labell->Width = ClientWidth - Labell->Le£t -20;
Labell->Caption = v.Vopr;
Labell->AutoSize = true;
if (v.Img != "") //квопросуестьиллюстрация I /* определимвысотуобласти, которуюможноиспользоватьдлявыводаиллюстрации */ int RegHeight = Buttonl->Top - (Labell->Top + Labell->Height +10) - (RadioButton[l]->Height + 10) * v.nOtv;
Imagel->Top = Labell->Top + Labell->Height + 10; // загрузим картинку и определим ее размер
Игры и другие полезные программы 227
Imagel->Visible = false; Imagel->AutoSize = true; Imagel->Picture->LoadFromFile(v.Img); if (Imagel->Height > RegHeight) // картинкане // помещается { Imagel->AutoSize = false; Imagel->Height = RegHeight; Imagel->Proportional = true; } Imagel->Visible = true; // положениеполейотсчитываемотиллюстрации top = Imagel->Top + Imagel->Height + 10;
} else // положение полей отсчитываем от вопроса top = Labell->Top + Labell->Height + 10;
// вариантыответа for (i = 0; i < v.nOtv; i++)
{
RadioButton[i]->Top = top; RadioButton[i]->Caption = v.0tv[i]; RadioButton[i]->Visible = true; RadioButton[i]->Checked = false; top += 20;
// щелчокнарадиокнопокевыбораответа void fastcall TForml::RadioButtonClick(TObject *Sender) { int i =0; while ( ! RadioButton[i]->Checked )
228 Часть 1. Примерыизадачи
otv = i+1; // ответвыбран, сделаемдоступнойкнопкуДальше Buttonl->Enabled = true;
// удаляетвопроссэкрана void fastoall TForml::EraseVopros(void)
{
Imagel->Visible = false,- // скрыть поле вывода иллюстрации // скрыть поля выбора ответа for (int i = 0; i <4; i
RadioButton[i]->Visible = falseRadioButton[i]->Checked = false;
} // сделать недоступной кнопку Дальше Buttonl->Enabled = false;
// щелчок на кнопке ОК/Дальше/ОК void fastcall TForml::ButtonlClick(TObject *Sender) { bool ok; // рез-т чтения из файла очередного вопроса
switch (Buttonl->Tag) {
case 0: // щелчок на кнопке ОК в начале работы
// программы
// прочитать и вывести первый вопрос
GetVopros(&Vopros);
ShowVopros(Vopros);
Buttonl->Caption - "Дальше";
Игры и другие полезные программы 229
Buttonl->Enabled = false,Buttonl->Tag = 1; break;
case 1: //^щелчокнакнопкеДальше if (otv == Vopros.rOtv) // выбранправильный // ответ right++; EraseVopros(); ok = GetVopros(&Vopros); if ( ok ) ShowVopros(Vopros); else
// вопросов больше нет { FileClose(f); // вывести результат AnsiString st; // сообщение int i; // номер достигнутого уровня
Forml->Caption = "Результат тестирования"; st.printf( "Правильных ответов: %i\n",right
// определим оценку i = 0; // предположим, что испытуемый // ответил на все // вопросы while (( right < level[i]) && (i < 3))
st = st + mes[i];
230 Часть 1. Примерыизадачи
Labell->Caption = st;
Buttonl->Caption = "OK"; Buttonl->Enabled = true; Buttonl->Tag = 2;
} break;
case 2: // щелчок на OK в конце работы программы Forml->Close(); // завершить работу программы
// Функция GetString читает строку из файла // значение функции - кол-во прочитанных символов int GetString(int f, AnsiString *st)
unsigned char buf[300]; // строка (буфер) unsigned char *p = buf; // указатель на строку
int n; // кол-во прочитанных байт (значение ф-и FlleRead) int len = 0; // длина строки
n = FileRead(f, р, 1); while ( п != 0 )
if ( *р == '\г')
n = FileReacHf, р, 1); // прочитать '\п' break;
len++;
Игры и другие полезные программы 231
n = FileRead(f, p, 1);
*р = '\0'; if ( len !=0) st->printf("%s", buf) return len;
// читаетизфайлацелоечисло int Getlnt(int f) { char buf[20]; // строка (буфер) char *p = buf; // указательнастроку
int n; // кол-во прочитанных байт (значение ф-и FileRead) int a; // число, прочитанное из файла
n = FileRead(f, p, 1) ; while ( (*р>= '0') && (*р<= '9') ScSc (n > 0) )
{
Р++; n = FileRead(f, p, 1) ;
if ( *р == Чг') n = FileReadff, р, 1); // прочитать '\п'
*р = ' \0 • ;
// преобразуем строку из буфера в целое sscanf(buf,"%i", &а); return a;
