ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Тест програмних програм
         

     

    Інформатика, програмування

    Тест програмних програм

    Передмова.

    Як відомо, в даний час найбільш поширеними алгоритмічними мовами є Паскаль і Сі. Саме ці мови використовуються практично на всіх діючих обчислювальних системах-от супер-ЕОМ до персональних комп'ютерів. Що стосується ПЕОМ, то лідером сімейства мов Паскаль для них, без сумніву, є Турбо Паскаль 7.0, розроблений фірмою Borland. Ця остання версія дозволила об'єднати в рамках єдиної системи потужний алгоритмічний потенціал мови, методи об'єктно-орієнтованого програмування, сучасну графіку, зручні засоби тестування й налагодження програм, а також забезпечити дружній інтерфейс з користувачами. [1] Тому я вибрав цю мову програмування як основу для створення тестового редактора.

    Я вирішив створити тестовий редактор, тому що саме тести останнім часом завойовують все більшу популярність. Вони дозволяють швидко і досить точно перевірити рівень знань з того чи іншого предмету, дізнатися ту чи іншу інформацію про тестується. Звичайно, тест без зусиль можна скласти вручну, але буде потрібно багато часу, щоб його розмножити. Крім того, можна в будь-який момент протестуватися і миттєво дізнатися результати.

    Розробляючи програму крок за кроком, я виділив основні функції, які присутні в будь-якому редакторі і, звичайно, в моєму, а саме:

    1. створення нового файлу тесту

    2. відкриття тесту і тестування

    3. редагування тесту

    4. перегляд результатів

    5. друк файлу

    6. вихід з програми.

    У процесі створення редактора я виділив основні етапи моєї роботи, що виникають у зв'язку з цим задачі та їх вирішення. Сподіваюся, прочитавши мою роботу, ви врахуєте мій досвід і продовжите розпочаті дослідження в області редакторів. Програма може бути використана навчальними закладами як посібник для створення тестів.

    Почнемо дослідження зі статті про конструювання програм.

    Конструювання програм.

    Конструювання програм - одна з найважливіших розділів сучасної інформатики. Бурхливий розвиток програмно-апаратних засобів, поява нових стилів і технологій програмування, як не парадоксально, не знижують, а підвищують рівень вимог до масової алгоритмічної культури. Практично всі діалогові системи є програмованими. Методика конструювання програм легко переноситься на інші процедурні мови програмування, у тому числі й об'єктно-орієнтовані. [2]

    Відповідно до технології конструювання програм побудована програма тестового редактора. Я розділив її на етапи:

    1. Створення структурної програми, багато в чому незручною у використанні через відсутність діалогу, упорядкованого введення та виведення інформації і багато чого іншого. Вихідна програма мала лише основні функції. Вона була «ядром», яка здійснювала всі процеси і функції редактора. У наступному розділі в точності наведено текст структурної програми.

    2. Розбиття суцільного тексту програми на процедури. Таким чином, текст став займати не так багато місця, зник оператор варіанту, багато мітки, посилання і т. п. Треба сказати, багато програмісти віддають перевагу вводити процедури в програму. Це значно спрощує її.

    3. Введення віконної системи за допомогою доступних можливостей мови (оператор Window ). Це дозволило значно спростити роботу, створити діалог користувача з програмою, зменшити кількість інформації, що надходить до користувача і кількість її «потоків».

    4. Введення об'єкта-панелі управління. Ви можете бачити її внизу екрану. Вона взяла на себе управління функціями редактора. Причому введення об'єкта значно спростило програму. Методи роботи з об'єктами ви можете прочитати у розділі «Об'єктне програмування ».

    5. Оформлення роботи

    Структурне програмування.

    Структурне програмування-це програмування, технологія якого припускає використання суперпозиції трьох базових алгоритмічних структур: лінійної, розгалуженої та циклічної. Але для створення складних програм використовуються більш складні принципи. Принцип Суперпозиції-поєднання структур з взаємним вкладенням (складанням). Передбачає взаємне включення структур.

    Турбо Паскаль сприяє впровадженню сучасної технології програмування, заснованої на принципах структурного програмування і покроковому методі проектування програм. Основні оператори мови є хорошою ілюстрацією базових керуючих конструкцій структурного програмування. Їх використання дозволяє записувати складні алгоритми обробки даних в компактній формі. [3]

    Хоча Бейсік не є повністю структурним мовою, в ньому відображені основні концепції структурного програмування. розглянемо їх докладніше.

    Бейсік-мова програмування ПЕОМ.

    Бейсік - інтерактивна мова високого рівня, орієнтований на користувачів ПЕОМ, непрофесіоналів в області обчислювальної техніки. Бейсік - переважно інтерпретує програма, що дозволяє виробляти порядково налагодження текстів програм. Даний спосіб набагато зручніше для початківців програмістів, ніж компіляція (компілятор виробляє налагодження тільки цілої програми, а не по частинах), і широко використовується в Паскалі. Відмінною рисою структурних мов є короткі однозначні оператори (на відміну від довжелезних команд об'єктного програмування )*.

    У деяких версіях Бейсіка є вбудований редактор програм, що дозволяє працювати з текстом програми з командного вікна. Робота з програмою здійснюється в трьох різних режимах:

    Безпосереднє спілкування

    Введення програм

    Обчислення по введеної в ОЗУ програмі

    В основному, Паскаль виконує ті ж функції що і Бейсік. Однак Паскаль має більший потенціал в областях програмімірованія, роботи з «комп'ютерним залізом», створення власних модулів і систем.

    Структурна програма.

    Першим етапом розробки програми стало написання тексту структурної програми. Структурна програма - послідовність простих команд, операторів, що реалізує ядро, тобто дія програми. Уже на цьому етапі програма працює з текстовими файлами. Для здійснення зв'язків між окремими частинами програми, що реалізують функції редактора, я використовував оператор безумовного переходу GoTo .

    Нижче наведена схема структурної програми тестового редактора, що пояснює відповідний підхід до програмування. Основний список операторів вирізано і замінено на <набір операторів>. Кінцевий вигляд програми буде приведений у розділі "Об'єктне програмування" об'єктів.

    Program redactor;

    uses crt, printer; ( підключення модулів )

    label l1, l2, l3, l4; (мітки)

    Var a, f, f1, a2: string; (розділ описів)

    b, k: char;

    c, u, y, a1, b1: text;

    d, e, i, j, p, z: integer;

    c1: boolean;

    Procedure oform; (процедура оформлення початку програми)

    Begin

    <набір операторів>

    End;

    Begin

    oform; (оформлення початку програми)

    <набір операторів>

    Writeln ( 'Новий файл (New), Відкрити файл (Open), Редагування (Redact ),'); (висновок

    альтернативних функцій)

    Writeln ( 'Перегляд результатів (Search), Вихід (Any key )');

    b: = readkey; (вибір потрібної функції)

    case b of (оператор варіанту)

    При натисканні відповідної клавіші відбувається вибір функції.

    'n', 'в': Begin

    l1: <набір операторів> (виконання функції)

    End;

    'o', 'й': Begin

    l2: <набір операторів> (виконання функції)

    End;

    'r', 'Є': Begin

    l3: <набір операторів> (виконання функції)

    End;

    's', 'и': Begin

    l4: <набір операторів> (виконання функції)

    End;

    End;

    <набір опреаторов>

    Writeln ( 'Новий файл (New),) Відкрити файл (Open), Редагувати (Redact)'); (запит про вибір перед

    виходом)

    Writeln ( 'Перегляд результатів (Search), Вихід (Any key )');

    b: = readkey; (вибір варіанту)

    <набір операторів>

    case b of (оператор варіанту)

    'n', 'т': GoTo l1; (посилання на мітку)

    'o', 'щ': GoTo l2;

    'r', 'до': GoTo l3;

    's', 'и': GoTo l4;

    End;

    Набір операторів безумовного переходу для повернення до тієї чи іншої функції.

    <набір операторів>

    End.

    На екран виводиться список можливих функцій програми. Для вибору певної функції необхідно натиснути відповідну клавішу (вказана в дужках великою літерою). Потім оператор варіанту запускає потрібну функцію. Як видно, врахований випадок непереключенного алфавіту (букви вводяться як латинські, так і російські).

    Перед виходом знову виводиться цей запит (так як цикл недоречний) і у випадку вибору певної функції відбувається посилання на функцію.

      

    Інтерфейс структурної програми

    Доопрацювання програми.

    Після налагодження початкової програми треба було ввести додаткові функції. Крім стандартної функції створення та відкриття готового тіста, з'явилися такі як редагування тестів, підрахунок результатів і виставлення оцінки, таймер, складання звіту, захист тестів від перегляду. Але найголовніше-це вдосконалення інтерфейсу, введення віконної діалогової системи.

    Розглянемо перераховані функції. Функція підрахунку результату записана так:

    z: = p * 100 div z; (розрахунок кількості правильних відповідей)

    Writeln ( 'кількість правильних відповідей:', p);

    Write ( 'оцінка'); (виставлення оцінки)

    If z> = 90 Then Begin

    Writeln ('5 ')

    Writeln (b1, '5');

    End;

    else If z> = 70 Then Begin

    Writeln ('4 ')

    Writeln (b1, '4');

    End;

    else If z> = 40 Then Begin

    Writeln ('3 ')

    Writeln (b1, '3');

    End;

    else Begin

    Writeln ('2 ')

    Writeln (b1, '2');

    End;

    Readln;

    Write ( 'Прізвище:'); (вписування прізвища)

    Readln (a);

    d: = length (a); (виставлення прогалин)

    Write (b1, a); (запис у файл)

    For i: = 1 to 14-d do Write (b1, '');

    Write ( 'Ім'я:'); (вписування імені, процедура повторюється)

    Readln (a);

    Write (b1, a);

    d: = length (a);

    For i: = 1 to 11-d do Write (b1, '');

    Write ( 'Отчесчтво:'); (вписування по батькові, процедура повторюється)

    Readln (a);

    Write (b1, a);

    d: = length (a);

    For i: = 1 to 17-d do Write (b1, '');

    Write (b1, f);

    d: = length (f);

    For i: = 1 to 8 do Write (b1, '');

    GetDate (g1, g2, g3, g4); (проставлення дати)

    Writeln (b1, g3 ,'.', g2 ,'.', g1);

    close (b1);

    Window (15,10,50,19);

    TextBackGround (black);

    clrscr;

    Програма розраховує кількість правильних відповідей за формулою, відповідно до цього виставляє оцінку, запитує ваші ПІБ, записує їх у файл, проставляє назва тесту і дату його проходження. При цьому використовується метод роботи з рядками: конкатенація (злиття) строк. Проблемою стало коректне вписування в файл рядки, тому що кількість букв може бути різним, тому програма проставляє прогалини в файл між даними, використовуючи дані про довжину рядків прізвища, імені, по батькові і віднімаючи їх з постійного числа

    Таймер, системний час.

    Таймер був розроблений для відліку часу на тест, час вводиться попередньо укладачем тесту. Крім того, паралельно з висновком часу на тест виводиться поточний системний час. Дія таймера засноване на змінній-лічильнику, яка через певні проміжки часу зменшує своє значення на 1 (секунду). Системний час виводиться завдяки процедурі GetTime.

    Repeat (цикл лічильника часу)

    Window (60,20,70,21); (вікно виведення часу)

    TextBackGround (black);

    clrscr;

    z2: = z2-1; (зворотний відлік секунд)

    If z2 <0 Then Begin (обнулення лічильника)

    z1: = z1-1;

    z2: = 60;

    End;

    If (z1 = 0) and (z2 = 0) Then GoTo l1; (перевірка результату часу)

    GetTime (g1, g2, g3, g4); (висновок таймера і поточного часу)

    Writeln (z1 ,':', z2); (висновок часу на екран)

    Write (g1 ,':', g2, '', g3);

    Delay (1000);

    until keypressed;

    Оголошується змінна, з якої кожну секунду віднімається 1. Так здійснюється зворотний відлік. З результатом часу програма автоматично переходить до виставлення оцінки.

    Віконна система діалогу.

    Оскільки минула моя робота була присвячена діалоговим системам, я врахував той досвід, але в цій програмі зробив нововведення, наблизило програму до сучасного «віконного» увазі.

    Над оформленням вікна довелося посидіти не одну годину, так як звичайне вікно у вигляді квадрата на екрані зовсім не привабливо. Я вивчив будову вікон в середовищі MS-DOS і спробував відтворити дизайн вікна у своїй програмі. Якщо ви коли-небудь бачили схему вікна в MS-DOS , то помітили, що вікно оточеного подвійною рамкою, нагорі якої знаходиться назва вікна. Тут мені допомогло хитре рішення. Я заглянув в таблицю символів ASCII і знайшов символ подвійної рамки! Далі все просто: відкривається вікно, закрашується, по краях за допомогою циклів малюється рамка і виводиться назва вікна. Але це ще не все. Всередині вікна відкривається інше вікно того ж кольору, щоб було непомітно. Тепер під час введення або виведення даних рамка не буде рухатися разом з текстом, розриватися і т. д. Ми отримуємо повноцінне вікно.

    Я зробив оформлення вікна у вигляді процедури, необхідно лише ввести координати вікна і його назва. Нижче наведений код оформлення вікна:

    Procedure windows (x, y, x1, y1: integer; b: string);

    Var a, t: integer;

    Begin

    Window (x +1, y +1, x1 1, y1 +1); ( малювання тіні від вікна )

    TextBackGround (black);

    clrscr;

    Window (x, y, x1, y1); (малювання вікна)

    TextBackGround (blue);

    clrscr;

    TextColor (darkgray); (колір тексту)

    Write ( '');

    Write (chr (201)); (малювання куточка)

    For a: = 1 to 4 do Write (chr (205)); (малювання смуги)

    Write ( '');

    TextColor (green); (колір тексту)

    Write (b); (висновок назви вікна)

    Write ( '');

    TextColor (darkgray); (колір тексту)

    For a: = 1 to (x1-x-9-length (b)) do Write (chr (205)); (малювання лінії)

    Writeln (chr (187)); (малювання куточка)

    For a: = 1 to (y1-y-1) do Begin (малювання ліній з боків)

    Write ( '');

    Write (chr (186 ));

    For t: = 1 to (x1-x-3) do Write ( '');

    Writeln (chr (186 ));

    End;

    Write ( '');

    Write (chr (200)); (малювання куточка)

    For a: = 1 to (x1-x-3) do Write (chr (205)); (малювання лінії)

    Write (chr (188)); (малювання куточка)

    Window (x 2, y 1, x1-2, y1-1); (відкриття вікна введення всередині вікна)

    TextColor (black);

    End;

    Тут все досить просто: вікно відкривається оператором Window із зазначенням координат. Після закінчення поточного сеансу вікно закривається (закрашується) тією ж командою. У даній програмі вікна закриваються і відкриваються багато разів, запитуючи кожне свої дані, що виглядає набагато простіше, ніж безліч рядків на екрані, чи не так?

    Ось як це виглядає в програмі:

    Window (10,22,69,22); (вказується вікно з координатами)

    TextBackGround (green); (задається колір фону)

    clrscr; (вікно закрашується)

    Введення процедур. Основні функції редактора.

    Як видно у структурній програмі, функції визначені в операторі варіанту case . Для зручності звернення до них і для встановлення більш ефективних зв'язків між ними я вирішив винести функції в окремі процедури. Це створило додаткові труднощі: потрібно змінити структуру змінних, ввести локальні змінні. У результаті?? бщій вигляд програми змінився, збільшилася її швидкодію.

    Я до сих пір говорив про основні функції редактора, але не показував їх програмного коду. Почнемо з функції створення тесту . Вона створює файл тесту і файл відповідей, послідовно записує питання і відповіді із наступним закриттям файл.

    Procedure NewF;

    Var h1: string; ( оголошення локальних змінних )

    Begin

    Window (10,10,53,15);

    TextBackGround (black);

    clrscr;

    Window (20,10,66,15); (початкове вікно)

    TextBackGround (blue);

    clrscr;

    TextColor (black);

    Write ( 'зберегти файл як');

    Readln (a); (введення шляху створюваного файлу без розширення)

    a: = a + '. ts'; (дописування розширення)

    h1: = a;

    Assign (c, a); (зв'язок змінної з файлом питань)

    a: = a + 'o'; (зміна розширення)

    Assign (u, a); (зв'язок змінної з файлом відповідей)

    Rewrite (c);

    Rewrite (u);

    Window (20,10,66,15); (закриття вікна)

    TextBackGround (black);

    clrscr;

    Window (30,5,50,10); (відкриття вікна характеристик)

    TextBackGround (yellow);

    clrscr;

    GoToXY (30,6);

    Write ( 'к-ть питань');

    Readln (d); (введення кількості питань)

    Writeln (c, '', d);

    GoToXY (30,8);

    Writeln ( 'назва тесту'); (ввести назву тесту)

    Readln (f);

    Writeln (c, f);

    Writeln ( 'пароль на захист');

    Readln (f); (введення пароля)

    Writeln (u, f);

    Window (30,5,50,10);

    TextBackGround (black);

    clrscr;

    For i: = 1 to d do Begin

    Writeln (c);

    Window (10,10,53,20); (вікно питання)

    TextBackGround (lightgray);

    clrscr;

    Writeln (i, '-е питання:');

    Readln (a); (введення питання)

    Str (i, f);

    f: = f +')';< b> (запис питання в файл)

    Writeln (c, f);

    Writeln (c, a);

    Window (55,10,80,15); (вікно кількості відповідей)

    TextBackGround (cyan);

    clrscr;

    Write ( 'кількість відповідей на', i, '-й питання');

    Readln (e); (введення кількості відповідей)

    Window (10,10,53,20); (вікно відповідей)

    TextBackGround (lightgray);

    clrscr;

    For j: = 1 to e do Begin

    Write ( '', j ,')');

    Readln (a); (введення відповідей)

    Str (j, f);

    a: = '' + f +')'+ a;

    Write (c, a);

    End;

    Write (c ,'&');< b> (запис у файл кінця введення)

    Window (55,10,80,15);

    TextBackGround (cyan); (вікно правильної відповіді)

    clrscr;

    Write ( 'Правильна відповідь:');

    Readln (b); (введення правильної відповіді)

    Writeln (u, b);

    End;

    close (u); (закриття файлів і вікон)

    Reset (u);

    Readln (u);

    close (c);

    Window (55,10,80,15);

    TextBackGround (black);

    clrscr;

    End;

    У цій, як і в інших функціях, які працюють з файлами, я зіткнувся з проблемою запису тестів у файлах. По-перше, я вирішив розділити сам тест і відповіді на нього. Тест знаходиться у файлі з розширенням qs , а відповіді на нього-у файлі з розширенням qso . Другою проблемою стала зупинка читання питання, адже питання повинні виводитися не підряд, а по черзі. У зв'язку з цим я використав символ «&» в кінці кожного питання і вказав програмі читати до цього символу, але сам символ не виводити. Можна було використовувати лічильник рядків, який зупиняє програму після прочитання двох рядків (питання і варіанти відповідей), але у випадку збою тест приходить в непридатність. Далі було потрібно розмістити дані про назву тесту, кількості питань, паролі і т. п. Я розмістив їх по цих двох файлів. Досвідчені програмісти помітять: навіщо було використовувати текстові файли, адже можна було застосувати роботу з типом «запис» та зберігати дані у нетипізований файлах, і шіфровщік б не було потрібно. Дійсно, але використання типу «запис» не дозволяє створювати тести з динамічним числом відповідей на запитання. Це можливо лише шляхом використання в записі динамічного масиву. Але це зробить роботу з файлом дуже складною а сам файл буде займати багато місця на диску в порівнянні зі звичайним текстовим.

    Природно, що при пошуку файлу програма може його не знайти, в цьому випадку видається помилка пошуку. Потрібно було її обійти, видаючи власне повідомлення програми. Це здійснюється таким чином: задається директива компілятором на його відключення $ I-, перевіряється нульовий результат IORESULT = 0, видається повідомлення і компілятором включається знову $ I + . Я використав цю функцію компілятором там, де необхідно здійснити пошук файлу. Така функція обходу компілятора називається обробкою повідомлень і є складовою об'єктного програмімірованія.

    Функція відкриття тесту виглядає складніше. Вона відкриває вказаний файл, зчитує спочатку пароль входу і запитує його, а потім приступає до виконання тесту. На екран виводиться питання і очікується введення цифри правильної відповіді. Причому включається таймер і по завершення роботи з тістом або після закінчення часу програма виходить з даної функції і передає управління підпрограмі підрахунку результатів та реєстрації:

    Procedure OpenF;

    label l1;

    Var f1: string; (оголошення локальних змінних)

    Begin

    p: = 0;

    Window (10,10,53,15);

    TextBackGround (black);

    TextColor (black);

    clrscr;

    Window (20,10,66,15); (початкове вікно)

    TextBackGround (blue);

    clrscr;

    Writeln ( 'який файл відкрити');

    Readln (a); (введення шляху до файлу без розширення)

    a: = a + '. ts'; (додаток розширення)

    Assign (c, a); (зв'язок змінної з файлом питань)

    f1: = a;

    a: = a + 'o'; (зміна розширення)

    Assign (u, a); (зв'язок змінної з файлом відповідей)

    delete (a, length (a), 1);

    Assign (b1, 'c: pascalregistr.dat'); (зв'язок змінної з файлом звіту)

    Append (b1); (відкриття файлу звіту для дозапису)

    Reset (c); (відкриття файлу питань для читання)

    Window (20,10,66,15); (закриття початкового вікна)

    TextBackGround (black);

    clrscr;

    Reset (u);

    Read (c, b); (зчитування пароля)

    Readln (c, b);

    z: = ord (b)-ord ('0 '); (вибрати час)

    z1: = z;

    Window (10,10,40,12); (вікно пароля)

    TextBackGround (magenta);

    clrscr;

    Readln (u, a);

    If length (a)> 2 Then Begin (перевірка наявності у файлі пароля)

    Write ( 'введіть пароль');

    Readln (f); (введення пароля)

    If a <> f Then Begin

    Write ( 'пароль невірний');

    GoTo l1; (вихід з процедури)

    End;

    End

    else Begin

    close (u);

    Reset (u);

    End;

    Readln (c, f);

    Writeln ( 'тест за темою "', f ,'"');< b> (висновок теми тесту)

    z2: = 60;

    repeat

    Window (60,20,70,21); (закриття вікна пароля)

    TextBackGround (black);

    clrscr;

    TextColor (yellow);

    z2: = z2-1; (включення таймера)

    If z2 <0 Then Begin

    z1: = z1-1;

    z2: = 60;

    End;

    If (z1 = 0) and (z2 = 0) Then GoTo l1;

    Writeln (z1 ,':', z2);

    GetTime (g1, g2, g3, g4); (висновок поточного часу)

    Write (g1 ,':', g2, '', g3);

    Delay (1000);

    TextColor (black);

    Window (10,10,53,15); (висновок питання, очікування введення відповіді)

    TextBackGround (cyan);

    clrscr;

    while not Eoln (c) or (b <>'&') do Begin

    Read (c, b);

    If b <>'&' Then Write (b);

    End;

    Writeln;

    Window (55,10,80,15); (виведення повідомлення про введення відповіді)

    TextBackGround (blue);

    clrscr;

    Write ( 'ваша відповідь');

    TextColor (yellow);

    repeat (таймер)

    Window (60,20,70,21);

    TextBackGround (black);

    clrscr;

    z2: = z2-1;

    If z2 <0 Then Begin

    z1: = z1-1;

    z2: = 60;

    End;

    If (z1 = 0) and (z2 = 0) Then GoTo l1;

    GetTime (g1, g2, g3, g4);

    Writeln (z1 ,':', z2);

    Write (g1 ,':', g2, '', g3);

    Delay (1000);

    until keypressed;

    Window (55,10,80,15);

    TextBackGround (blue);

    clrscr;

    TextColor (yellow);

    b: = readkey; (зчитування цифри відповіді)

    Write (b); (зчитування правильної відповіді з файлу)

    Readln (u, k);

    Readln (c);

    If k = b Then p: = p +1; (порівняння відповідей, нарахування балів)

    Window (60,20,70,21);

    TextBackGround (black); (закриття вікна отверов)

    clrscr;

    TextColor (black);

    z2: = z2-1; (таймер)

    If z2 <0 Then Begin

    z1: = z1-1;

    z2: = 60;

    End;

    If (z1 = 0) and (z2 = 0) Then GoTo l1;

    GoToXY (70,15);

    GetTime (g1, g2, g3, g4); (висновок поточного часу)

    Writeln (z1 ,':', z2);

    Write (g1 ,':', g2, '', g3);

    Delay (1000);

    until Eof (c);

    l1: f1: = f1 + 'o';

    close (c); (закриття всіх файлів)

    close (u);

    Window (55,10,80,15); (закриття вікон)

    TextBackGround (black);

    clrscr;

    Window (10,10,53,15);

    TextBackGround (black);

    clrscr;

    Window (15,10,50,19);

    TextBackGround (blue);

    clrscr;

    < підрахунок результату >

    End;

    Єдиною проблемою тут стало неправильне читання програмою вихідних даних. Природно, розробляючи складні системи, з першого разу компілляція не вдається ніколи, але після коригування програми вона стала працювати як треба.

    ! Не забувайте закривати файли після використання і перезавантажувати їх після прочитання до кінця за потребою, інакше виникне помилка Disk Read Error !!!

    Ця помилка може коштувати вам всього файлу. Дуже часто після збою при читанні файлу цей файл заново прочитати вам не вдасться.

    Функція редагування тесту. Чи є допоміжною функцією. Вона редагує питання зазначеного тесту. Спочатку вводиться шлях до файлу тесту, потім він проглядається, вибирається питання для редагування, вводиться номер редагованого питання. Потім зазначене питання стирається, а на його місце вписується новий. Весь процес супроводжується роботою з файлами, які спочатку створюються, відкриваються, потім копіюються, коректуються. Старі варіанти файлів видаляються, а нові записуються під їх ім'ям:

    Procedure RedactF;

    Begin

    Window (10,10,53,15);

    TextBackGround (black);

    TextColor (black);

    clrscr;

    Window (20,10,66,15); ( відкриття початкового вікна )

    TextBackGround (blue);

    clrscr;

    Writeln ( 'Який файл редагувати');

    Readln (a); (введення шляху до редагований файл)

    a2: = a;

    Window (20,10,66,15); (закриття початкового вікна)

    TextBackGround (black);

    clrscr;

    Assign (c, a); (зв'язок змінної з файлом питань)

    a: = a + 'o'; (зміна розширення)

    Assign (u, a); (зв'язок змінної з файлом відповідей)

    delete (a, length (a), 1);

    a: = a + '1 '; (зміна розширення)

    Assign (y, a); (створення нового файлу питань)

    delete (a, length (a), 1);

    a: = a + '2 '; (зміна розширення)

    Assign (a1, a); (створення нового файлу відповідей)

    Reset (c); (установка та завантаження файлів)

    Reset (u);

    Rewrite (y);

    Rewrite (a1);

    Window (5,5,50,20); (вікно перегляду файла)

    TextBackGround (lightgray);

    clrscr;

    Writeln ( 'Висновок питань через Enter :');

    repeat

    while not Eoln (c) or (b <>'&') do Begin (перегляд питань через Enter)

    Read (c, b);

    If b <>'&' Then Write (b);

    End;

    Readln (c);

    Readln;

    until EOF (c);

    close (c); (перезапуск файлу питань)

    Reset (c);

    Window (5,5,50,20); (закриття вікна перегляду файла)

    TextBackGround (black);

    clrscr;

    Window (30,5,58,10); (вікно кімнати редагованого питання)

    TextBackGround (yellow);

    clrscr;

    Read (c, b); (зчитування кількості питань)

    Readln (c, b);

    d: = ord (b)-ord ('0');

    Write ( '№ редагованого питання:');

    repeat

    Readln (z); (введення № питання)

    If z> d Then Writeln ( 'номер перевищує число питань'); (перевірка існування номера)

    until z <= d;

    Window (30,5,58,10); (закриття вікна номера редагованого питання)

    TextBackGround (black);

    clrscr;

    Window (10,10,53,20); (вікно питань)

    TextBackGround (lightgray);

    clrscr;

    close (c); (перезапуск файлу питань)

    Reset (c);

    p: = 0;

    repeat

    while not EOLN (c) do Begin (копіювання значень в інший файл)

    Read (c, b);

    Write (y, b);

    End;

    Readln (c);

    Writeln (y);

    p: = p +1;

    until p = z * 3; (установка кількості копійованих рядків)

    p: = 0;

    while not (p = z-1) do Begin ( стирання непотрібного питання )

    p: = p +1;

    Readln (u, b);

    Writeln (a1, b);

    End;

    while not EOLN (c) do Begin (можна було застосувати і цикл з параметром від 0 до 2)

    Read (c, b);

    Write (b);

    End;

    Readln (c);

    Writeln;

    while not EOLN (c) do Begin (висновок редагованого питання на екран)

    Read (c, b);

    Write (b);

    End;

    Readln (c);

    Writeln;

    while not EOLN (c) do Begin

    Read (c, b);

    Write (b);

    End;

    Readln (c);

    Writeln;

    Writeln ( 'Замінити на :');

    Writeln (z ,')'); (введення нового запитання)

    Writeln (y, z ,')');

    Readln (f);

    Writeln (y, f);

    Window (55,10,80,15); (вікно відповідей)

    TextBackGround (cyan);

    clrscr;

    Write ( 'кількість відповідей на', z, '-й питання');

    Readln (e); (введення кількості відповідей)

    Window (10,10,53,20); (вікно питань)

    TextBackGround (lightgray);

    clrscr;

    For j: = 1 to e do Begin (введення відповідей на запитання)

    Write ( '', j ,')');

    Readln (a);

    Str (j, f);

    a: = '' + f +')'+ a;

    Write (y, a);

    End;

    Writeln (y ,'&');

    Window (55,10,80,15); (вікно відповідей)

    TextBackGround (cyan);

    clrscr;

    Write ( 'Правильна відповідь:');

    Readln (b); (введення правильної відповіді)

    Window (55,10,80,15); (закриття вікна відповідей)

    TextBackGround (black);

    clrscr;

    Writeln (a1, b);

    repeat

    while not EOLN (c) do Begin (дозапісь значень)

    Read (c, b);

    Write (y, b);

    End;

    Readln (c);

    Writeln (y);

    until EOF (c);

    Readln (u);

    while not EOF (u) do Begin (дозапісь значень в копійований файл)

    Readln (u, b);

    Writeln (a1, b);

    End;

    Window (10,10,53,20); (закриття вікна питань)

    TextBackGround (black);

    clrscr;

    close (c); (закриття файлів)

    Erase (c); (стирання старого файлу питань)

    close (u);

    Erase (u); (стирання старого файлу відповідей)

    close (y);

    Rename (y, a2); (перейменування файлу питань)

    a2: = a2 + 'o';

    close (a1);

    Rename (a1, a2); (перейменування файлу відповідей)

    End;

    Для коректної роботи процедури потрібно реалізувати читання потрібного питання, тут і стала в нагоді Порядкове читання, про які?? му розповідалося в попередньому розділі. Крім того, було потрібно скопіювати дані з одного файлу, виключаючи потрібного питання з подальшим додаванням нового запитання. Я реалізував це в циклах, що ви можете бачити в програмному коді.

    Функція перегляду результатів. Організовує перегляд результатів тестування. Просить ввести ваше прізвище. Якщо вона є в списку, виводить повну інформацію про тест, про оцінку, про дату і т.д. Програма використовує файл registr.dat для внесення туди ваших результатів. При бажанні файл також може бути роздрукувати.

    Procedure SearchF;

    Begin

    Assign (b1, 'c: pascalregistr.dat'); (зв'язок змінної з файлом звіту)

    Reset (b1); (відкриття файлу для читання)

    Window (10,10,53,15); (закриття всіх вікон)

    TextBackGround (black);

    TextColor (black);

    clrscr;

    Window (5,10,70,13); (вікно пошуку)

    TextBackGround (green);

    clrscr;

    Write ( 'Ваша Прізвище');

    Readln (a); (введення прізвища)

    while not EOF (b1) do Begin (пошук прізвища)

    Readln (b1, f); (зчитування рядка)

    For i: = 1 to length (a) do f1: = f1 + f [i]; (виділення прізвища)

    If a = f1 Then Begin (перевірка збігу)

    Writeln (f); (вивід на екран)

    c1: = true; (підтвердження запиту)

    End;

    f1 :=''; (обнулення рядка)

    End;

    If c1 = false Then Write ( 'Запит не знайдено. Пройдіть тест.');

    (в разі відсутності прізвища в списку)

    Readln;

    close (b1); (закриття файла)

    Window (5,10,70,13); (закриття вікна)

    TextBackGround (Black);

    clrscr;

    End;

    Завдання: виділення прізвища з рядка шляхом пошуку пропуску, пошук відповідності прізвищ і виведення результатів пошуку на екран.

    Проблеми: ніяких

    Функція друку даних. У Turbo Pascal є засоби для роботи з принтером. Це ключове слово Lst , що вказують в операторі виведення Writeln . Дотримуючись цієї інструкції, компілятор посилає повідомлення не на екран, а на принтер. Цей спосіб має істотний недолік: дані передаються дуже повільно. Також у мові немає певної команди для окочанія роботи принтера, тому папір залишається всередині і доводиться використовувати зовнішні керуючі кнопки принтера. Програма просить вказати шлях до файлу, а потім роздруковує його.

    Я знайшов інший алгоритм роботи з принтером, швидший, але він вимагає знань мови Assembler, вбудованого в Turbo Pascal:

    Procedure PrintF;

    Begin

    TextColor (black);

    Window (10,10,53,15); ( початкове вікно )

    TextBackGround (cyan);

    clrscr;

    Writeln ( 'Який файл роздрукувати ?');< b> (висновок запиту)

    Window

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status