Есть программа, назовём ее “Загадки”. Программа работает следующим образом, на экран выводится некая загадка и нужно ввести на нее ответ с клавиатуры, если ответ введен не верно то программа выводит сообщения об ошибки, и просит ввести ответ еще раз, если ответ введен верно, то программа перейдет к следующий загадки. В программе ведется общий подсчет допущенных ошибок, например если человек ошибается на одной загадки три раза, а на другой два раза то, это будет считаться 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;
А если количество загадок будет как вопросов в тесте ГИБДД, программа будет удлиняться и удлиняться?
Если ответишь "нет" и поймёшь как это сделать - получишь половину ответа на свой вопрос.
Нет, там будет ограниченное количество загадок, приблизительно 100 шт. Только я не понял, как это сделать? Дело в том что, я самоучка, и многого еще не знаю, что и как можно сделать.
Ну раз 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;
Это очень ущербный набросок - нет проверки ошибок чтения файла и, наверняка, что-то пропущено.