Навчальна контролююча програма Призма
Вступ
Перші мови програмування у порівнянянні з сучасними були дуже примітивні, в тому сенсі, що характеризувалися своєю складністю та незрозумілістю. Програміст для того щоб написати деяку програму обов’язково повинен був бути професійно ознайомлений з апаратною частиною комп'ютера (HardWare), адже при написанні використовувався безпосередньо машинний код. Таке програмування називається машинно-орієнтованим. Основоположником можна вважати мову Asembler.
Наприкінці 60-их років, а якщо бути точнішим— в 1968 – 1971рр. колективом програмістів під керівництвом Н.Віртана базі мови Алгол-60 була розроблена мова програмування Pascal, в якій вперше було відображеноконцепції структурного програмування. Pascal завоював загальне визнання лише після появи Turbo Pascal – діалекту мови, створеною Американською фірмою Borland IntCorp. Успіх фірмі забезпечило поєднання досить швидкого компілятора з текстовим редактором і значне розширення можливостей стандартного Pascal. На даний час фірмою Borland розроблено декілька версій даної системи програмування. Одна з них Turbo Pascal 7.0. Крім того, в даний час розроблено і інші системи програмування: Borland Pascal, Free Pascal, Delphi, основою яких є моваPascalабо Object Pascal. Варто зауважити, що мова Pascal є мовою процедурного програмування, а Object Pascal – мовою об'єктно-орієнтованого.
Зараз моваPascalшироко використовується як засіб для початкового вивчення програмування.
У своїй курсовій роботі я могла б розповісти безліч цікавої інформації, та викласти цілу низку історичних подій зародження мов програмування, їхній розвиток, удосконалення, але в поставленій мені задачі цього немає. Отож приділимо більше уваги для написання програми.
Так як дана програма не є дуже важкою за своїм змістом, я намагатимусь звернути максимальну увагу, щоб як найкраще її оформити, і максимально розширити її функціональність.
Під час перегляду коду програми можна побачити що при написанні програми був використаний метод процедурно-орієнтованого програмування.
Якщо уважно переглянути код програми то можна побачити що саме тіло програми складається з декількох рядків:
BEGIN
TMus(Welcome);
RePaintForm: NormVideo;
PaintBackGround(7);
MainChoise:NormVideo;
Main(False,True,True);
Analizer(Return);
if Return=false then goto RePaintForm
else Goto MainChoise;
END.
Деякі програми під час роботи викликають певні процедуриабо ф-ції ( — підпрограми) тим самим передаючи управління програмних задач на них.
Будь-які задачі можна реалізувати з допомогою створення процедур, таким чином можна досягти того, що тіло самої програми взагалі буде займати лише один рядок, а один і той же код не доведеться писати двічі, якщо в програмі десь знадобиться виконати схожі операції.
Приклад найпростішої процедури, яка нічого не буде робити:
Procedure MyProcedure;
Begin
End;
Виклики процедури здійснюється шляхом оголошення їїімені в ході програми, якщо процедура має які-небудь параметри – то потрібно їх проініціалізувати (вказати, задати їм деяке значення відповідно до типу змінної).
В даному випадку моя програма являє собою сукупність процедур які тісно пов’язаніміж собою.
Мета роботи:створити програму-тест, яка б могла протестувати рівень знань користувача по заданій темі. Після чого, вивести результат – кількість правильних, неправильнихвідповідей та поставити загальну оцінку.
Особисто для себе я поставила мету більш детальніше розглянути особливості створення процедур,розширити свої знання в галузі програмування, та створити таку високо функціональнупрограму з якою було б приємно працювати мені та будь-якому користувачу. А для збереження результатів, після виведення їх на екран будемо вести лог-файл, який міститиме у собі усі результати пройдених тестів (таким чином, якщо хтось не пройде тест з першого разу — то у файлі буде показано, коли (в який час) і скільки спроб зробив користувач).
Початок розробки:
Ось перелік запитань, які я вибрала для створення тесту (див далі або файл data\test.txt). Для програми я була змушена змінити кодову сторінку набраного тексту з Кирилиці (1251)на DOS (866), так як у Pascal дуже часто виникають проблеми з використанням кодової сторінки 1251 (1250). Так, якщо потрібно відкрити файл будемо враховувати що стандартний текстовий редактор notepad.exe його нормально не зчитає. (У папці + - знаходиться програма Pad.exeдопомогою можна прочитати і редагувати текст будь-якої кодової сторінки).
Дані запитання що, зберігаються у TXT файлі з адресою data\test.txt, — виглядають дещо не так, як виглядають на екрані. Дана особливість полягає у тому, що програма зчитує перших три символи з рядка і сприймає їх як певну інформацію — спеціальний символ - код. Проводить їх аналіз та відповідно змінює свою поведінку у ході виконання. Так наприклад перший символ:
' – '(дефіс)— дає зрозуміти програмі, що йде мова про вивід на екран тестового запитання. Програма відразу починає виводити зчитаний з файлу текст з певними особливостями, та форматуванням (червоний колір, + з абзацу);
if Str[1]='-'then
begin
RichWindow(68,3,78,7, 2,'', 14, Green, True);
TextBackGround(Green);
TextColor(14);
Write (Str[2],Str[3],' z 15');
GoToXY(wX,WY);
NormVideo;
TextColor(Red);
end;
'#' — вертикальна табуляція — створена для того щоб відділити текст запитання від тексту варіанту відповіді (позн. див. далі);
if Str[1]='#'then
begin
GotoXY(WhereX,WhereY+5);
end;
' + '(плюс) — програма відразу розуміє, що наступний текст який буде виводитися на екран — є один з варіантів відповіді (форматування тексту здійснюється наданням йому зеленого кольору). Тут саме і відбувається одна маленька хитрість, на яку йде програма щоб визначити правильність варіанту відповіді (змінна Ch) — з відповідністю натисненою клавіші (зі змінною Ansv). (для цього відбувається передача управління аналізу самій процедурі procedure Test; де після аналізу наявності символу '&' (кінець запитання = true) відбувається аналіз відповідності натисненої клавіші та правильної відповіді );
if Str[1]='+'then
begin
TextColor(Green);
GotoXY(WhereX+15,WhereY);
end;
{частинаprocedure TestFiltr}
' & '(і) — наявність даного символу в рядку, дає розуміти програмі що запитання та відповіді вже були виведені на екран і саме тут потрібно проаналізувати — правильність відповіді.
if Str[Length(Str)]='+' then
begin
ch:=Str[4];
Str[Length(Str)]:=' '
end;