Решения (задачи 165-188)
Задача 174
(Игра "Угадай число" } const N=3; { уровень сложности – количество цифр в числ igrok: array[1..N]of char; { комбинация игрока } comp: array[1..N]of char; { комбинация компьютера } a: – arrayfl..N] of boolean; { a[i]= TRUE, если i-я цифра компьютера совпала с одной из цифр игрока } ugad:integer;{ угадано чисел } mesto:integer;{ из них на своих местах } i/ji integer; { индексы массива }begin writeln('Компьютер задумал трехзначное число. ', 'Вы должны его отгадать.'); writeln('После ввода очередного числа, вам будет ', 'сообщено, сколько цифр'); writeln('угадано и сколько из них находятся ', 'на своих местах. '); writeln('После ввода числа нажимайте Enter.'); { компьютер "задумывает" свое число } randomize; for i: = l to N do compfi]: = chr(random(lO)+48); (48 – код символа '0' } write('Компьютер задумал: '); for i: = l to N do write(comp[i]); writeln; repeat write('Ваш вариант › '); {получить вариант игрока } for i: = l to N-l do read(igrok[i]); readln(igrok[N]);for i: = l to N do a[i]: = FALSE; (a[i] = TRUE, если i-я цифра числа компьютера совпала с одной из цифр числа игрока } { проверим, сколько цифр угадано } ugad: = 0; for i: = l to N do { проверим каждую цифру игрока } for j: =1 to N do begin if (igrok[i] = comp[j]) and not a[j] then begin ugad: = ugad+l; a[j]: = TRUE; { запретим сравнивать эту цифру компьютера с оставшимися, еще не проверенными цифрами игрока } end; end; { проверим, сколько на своих местах } mesto: = 0; for i: = l to N do if igrok[i] = comp[i] then mesto: = mesto+l; writeln('Угадано:',ugad,'. На своих местах:',mesto); until (ugad < N) and (mesto = N); writeln('***ВЫ УГАДАЛИ ЧИСЛО!***'); write('Нажмите Enter для завершения.'); readln; end.
Задача 175
{ Телеграф – передача сообщений при помощи азбуки Морзе. { Замечание: возможно надо увеличить величины задержек. } uses Crt; const morse: array[128..159] of string[4] =( I I _ / I 1 f I I I I _ f 1 I I I I . I >>___ I I / 1 1 / _ I I _ 1 1 f I 1 I. . 1 f. {А,Б,В,Г} {Д,Е,Ж,3} {И,Й,К,Л} {М,Н,О,П} {Р,С,Т,У} {Ф,Х,Ц,Ч} {Ш,Щ,Ъ,Ы} {Ь,Э,Ю,Я} {параметры передачи } TONE=100; { частота сигнала (гц) } L1=50; { длительность (мс) "точки") L2=100; (длительность (мс) "тире"} L3=50; { пауза (мс) между точками и тире одной буквы } L4=100; { пауза (мс) между буквами } L5=150; { пауза (мс) между словами } var rues: string; sim: string[4]; { сообщение } (символ в кодировке Морзе – последовательность точек и тире } { "передаваемый" знак – тире или точка { номер символа и знака } znak: string[l] i,j: integer; in ClrScr; writelnC*** Телеграф ***'); writeln('Введите сообщение, которое надо передать'); writeln('(используйте только большие русские буквы)'); write(' › '); readln(mes); for i: = l to Length(mes) do begin if (mes[i] >= 'A') and (mes[i] <='Я') then begin (определим код очередной буквы (ф-я Ord) сообщения и получим из таблицы кодировки соответствующий элемент массива – последовательность точек и тире sim: = morse[ord(mes[i])]; repeat if (sim[j] =. -.) or (sim[j] = begin write (sim[j]); sound(1000); case sim[j] of 1.': Delay(50); '-': Delay(lOO); end; NoSound; Delay(50); end; then until ((sim[j] = ' ') or (j>4)); Delay(100); { пауза между буквами } end else if mes[i] = ' ' then (пробел между словами } begin write(' '); { пробел между словами сообщения } Delay(150); end; end; writeln; writeln('Сообщение передано!'); writeln('Для завершения работы с программой нажмите, Enter'); readln; end.