Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Практика продвинутого программирования на Pascal _ Счетчик и вывод ошибок

Автор: Женя 1.05.2012 20:25

Есть программа, назовём ее “Загадки”. Программа работает следующим образом, на экран выводится некая загадка и нужно ввести на нее ответ с клавиатуры, если ответ введен не верно то программа выводит сообщения об ошибки, и просит ввести ответ еще раз, если ответ введен верно, то программа перейдет к следующий загадки. В программе ведется общий подсчет допущенных ошибок, например если человек ошибается на одной загадки три раза, а на другой два раза то, это будет считаться 5 ошибок.

ВНИМАНИЕ ВОПРОС.
Можно ли сделать так, что бы в конце выводились те загадки, на которых были допущены ошибки, и информация о том сколько раз на каждой из них человек допустил ошибку???


Writeln (' Не ездок, а со шпорами, Не будильник, а всех будит.');
readln (s);
while (s<>'петух') do
begin
writeln ('Слово введено неверно или вообще не введено!!! Будьте внимательны при вводе.');
readln (s);
end;

begin
writeln('Верно!');
ot:=ot+1;
end;


Writeln (' Она красива и мила, А имя ей от слова "зола".');
readln (s);
while (s<>'золушка') do
begin
writeln ('Слово введено неверно или вообще не введено!!! Будьте внимательны при вводе.');
o:=o+1;
readln (s);
end;



Автор: Федосеев Павел 1.05.2012 22:07

А если количество загадок будет как вопросов в тесте ГИБДД, программа будет удлиняться и удлиняться?

Если ответишь "нет" и поймёшь как это сделать - получишь половину ответа на свой вопрос.

Автор: Женя 1.05.2012 23:00

Цитата(Федосеев Павел @ 1.05.2012 19:07) *

А если количество загадок будет как вопросов в тесте ГИБДД, программа будет удлиняться и удлиняться?

Если ответишь "нет" и поймёшь как это сделать - получишь половину ответа на свой вопрос.


Нет, там будет ограниченное количество загадок, приблизительно 100 шт.
Только я не понял, как это сделать? Дело в том что, я самоучка, и многого еще не знаю, что и как можно сделать.

Автор: Федосеев Павел 2.05.2012 4:00

Ну раз 100 штук, тогда точно не по-индийски.
Спасёт тебя:
1. Текстовый файл. В нём на каждую загадку будет отводиться по 2 строки - загадка и отгадка. Итого 200 строк.
2. Каждой загадке в программе будет отводиться структура record со следующими полями
i) строка загадки
ii) строка отгадки
iii) логическая переменная - угадано или нет
iv) целочисленная переменая - количество попыток
v) другие поля - на усмотрение разработчика
3. Массив (или динамический список, или массив указателей на записи - как пожелаешь) записей.
Итак, в начале программы или по мере выполнения (=диалога с пользователем) заполняется массив. В нём и хранятся результаты "тестирования загадками" - статистика.
По завершении "тестирования" с этой статистикой можно делать что угодно.

Текст программы без описания типов должен уместиться в 10-15 строк.

Раз самоучка - почитай про записи (record). массивы (array), файлы, в частности текстовые (text), циклы while и for. А также ознакомься с указателями и динамическими структурами (списками) - чуть дальше пригодится (каждая строка это 256 байт, на загадку 2 строки, на 100 загадок 50 кбайт - если программируешь в DOS может не хватить памяти на сегмент данных).


type
RRiddle = record
Question, {загадка}
Estimate : string; {отгадка}
Solve : boolean; {true - угадана}
TryCount : integer; {количество попыток}
end;
TRiddlesList = array [1..100] of REnigma;
........
var
Riddles : TRiddlesList;
t : Text;
................
RiddlesCount:=0; {количество загадок, введённых из файла}
while not eof(t) do
begin
чтение из файла
inc(RiddlesCount);
Readln(t, Riddles[RiddlesCount].Question);
Readln(t, Riddles[RiddlesCount].Estimate);
Riddles[RiddlesCount].Solve:=false;
Riddles[RiddlesCount].TryCount:=0;
.................
попытки пользователя отгадать
............
end;

вывод статистики
for i:=1 to RiddlesCount do
begin
if not Riddles[i].Solve then
begin
WriteLn(Riddles[i].Question);
WriteLn(Riddles[i].Estimate);
.......................................
end;
end;

Это очень ущербный набросок - нет проверки ошибок чтения файла и, наверняка, что-то пропущено.