30 часов Бейсика для начинающих 1993 г.

Урок 6 - случайные числа.


УРОК 6

б. 1 Случайные числа.

Функция, которая может выдавать случайные числа, лежит в
основе большинства
игровых программ и программ-имитаторов. Она
позволяет вносить эффект неожиданности в
игру и делает програм-
му развлекательной.

Со случайными числами вы встречаетесь очень часто. Это и
результата, выдавите на кубиках костей и результат бросания
нонета и даже ритуальная жеребьевка участников финала чемпиона-
та мира по футболу, все ны. конечно же, имеем интуитивное пред-
ставление о том. что такое случайные числа, но, как Оказалось,
очень
трудно с Формулировать эту концепцию настолько четко, что-
бы поручить их поиск компьютеру. Давайте рассмотрим некоторые
числовые последовательности. Перед вами результата трех мыслен-
ных экспериментов по бросанию шестигранного кубика 15 раз.

А: 5, 1, 2. 4. б. 3. 2. 1. б. 3. 5. 4. 3. 4. 2

В: б, 6. б. б. б. б. 6. б. 6.6. б. б. 6. б. б

с: 1.2.3.4.5.6.1.2.3.4.5.6.1,2.3

случайны ли эти последовательности?

Большинство из нас будут вполне удовлетворены последова-
тельностью А. Кажется, что числа в последовательности не обра-
зуют никаких повторяющихся комбинаций и. кажется, что все числа
в ней появляются с равной вероятностью.

напротив, последовательность в выглядит совсем нереальной,
нр никак не ожидаем, что в пятнадцати бросках кубика "шестерка*
выпадет пятнадцать раз
подряд, если такое случится, мы начнем
подозревать нечестную
игру и попробуем взвесить кость, чтобы
узнать, не смешен ли у нее центр тяхести. а мохет быть будем
искать под столон магнит.

Итак, интуитивно ны готовы поверить в то, что последова-
тельность А произошла случайно, но совсем не готовы признать то
хе за последовательбностью В.

ны еше знаем о случайных числах из хизненного опыта, что в
достаточно длинных последовательностях частоты повторения от-
дельных событий к^к бы сглахиваются. имеется в виду, что после
ста бросков мы долхны иметь около 16 единиц, около 16 двоек,
около
16 троек и т.д. Другими словами, мы рассчитываем, что в
длинных последовательностях начнут проявляться законы вероят-
ности. Если теперь мы рассмотрим последовательность "С" с этой
8 - 6613
точки зрения и как бы
продолжим ее на 100 бросков: ... 6.1, 2,3,
4, 5. б. 1.2... то она с этой точки зрения будет выглядеть вполне
благопристойно. Но, тем не менее, мы не можем
интуитивно при-
знать эту последовательность случайной,
поскольку мы не верим в
то. что комбинация 1. 2. 3,4. 5. б... может
повтряться раз за
разом.

Но интуиция это субъективный Фактор. V одного она такая, а
у
другого нет. Должны быть какие-то объективные математические
критерии для оценки того, можно ли считать данную последова-
тельность чисел случайной или нет. И такие методы в математи-
ческой статистике есть, хотя мы их рассматривать не будем.
поскольку они не относятся к теме нашей книги.

Компьютер - машина, требуюшая полной определенности. Поэ-
тому
мы сталкиваемся с парадоксом. Даже для того, чтобы выдать
нам .СЛУЧАЙНУЮ последовательность чисел, в него надо вложить
вполне ОПРЕДЕЛЕННУЮ программу. Для наших целей мы будем пола-
гать, что таблица случайных чисел уже имеется в памяти компью-
тера. Эта последовательность весьма длинная и пройдет немало
времени, прежде чем она начнет повторяться, чтобы
при разных
запусках
прогрэмны эта последовательность была различной, можно
менять начальную точку, с которой начинается считывание данных
из этой последовательности. Поскольку рано или поздно эта по-
следовательность начнет повторяться (как говорят математики -
вырождаться), то мы все же имеем дело не со случайной последо-
вательностью. а с псевдослучайной.

6. 2 функция RHD.

Если Вы запустите следующую програмну. то увидите резуль-
. ат работы
функции rhd.

10 REH ««Генерация днсяти случайных чисел»«
30 FOR 1 ТО 10
30 LET b=RHD
40 PRIHT b
50 NEXT К

Типичный результат ее работы таков:

О. 98448181
0. 8361^112
О. 71151733
О. 35412048
О. 30975342
О. 23228455
О. 42221069
О. 66645813

О. 98474121
О. 85560608

Эта последовательность определенно выглядит как последова-
тельность случайных чисел. Если Вы нажмете RUH. то почти навер-
няка получите
иную последовательность. На самом деле компьютер
способен выдать список из
65536 чисел. А Функция RHD "врезает-
ся" в этот список и читает столько чисел, сколько ван надо.

Тот Факт, что случайные числа выдаются в "жесткой" после-
довательности означает, что если мы захотим
повторить случайную
последовательность еше раз и точно в таком же виде, то это
можно сделать, на "Спектруме" для этого
служит оператор
RAHDOHIZE (сокращенно RAND). например, команда RAHDOHIZE 25
начнет читать случайную последовательность с 25-го числа. По-
пробуйте запустить следующую программу и убедитесь в том, что
RAHDOHIZE действительно Фиксирует начальную точку последова-
тельности.

10 REH ««Фиксированная случайная последовательность»»

20 RAHDOHIZE 7

30 REH »«Начало цикла»»

40 FOR К=1 ТО 10

50 LET b=RHD

60 PRIHT b

70 HEXT К

Запустите эту программу нсколько раз и сравните результаты:

О. 0091400146
О. 68663025
О. 49761963
О. 32203674
О. 15351868
О. 51486206
О. 61520386
О. 14071655
О. 55471802
О. 60435486

итак, проведенное нами исследование показало, что RHD дает
случайные числа в диапазоне О. . . 1 (причем О - включается, а 1 -
исключается), как нам расширить этот диапазон? Это делается
просто - RHD умножается на нужное нам число:

RHD дает случайное число в диапазоне О. . . 1
6»RHD дает случайное число в диапазоне О. . . 6
„ас 52«RND дает случайное число в диапазоне о... 52 и т. д.

Нижеследующая программа продемонстрирует Вам эту идею:

20 PRIHT " К"; TAB 8;~1«ИП>";ТЛВ20: "6»ИГО*

30 PRIHT " — ";ТЛВ 8;"------;ТАВ 20;"-----•

40 REH ««
50 FOR К=1 ТО 10
60 LET b=RHD
70 LET С = 6«Ь

80 PRIHT К; TAB 8; b; TAB 20; С
90 НЕХТ К
100 STOP

Результат:

RUH

К 1»RHD 6»RHD

1 0. 62315369 3. 7389221

2 0. 73695374 4.4217224

3 0.27182007 1.6309204

4 0. 3873291 2. 3239746

5 0.050369263 0.30221558

6 0. 77877808 4. 6726685

7 0.40859985 2.4515991

8 0. 6456604 3. 8739624

9 0. 42492676 2. 5495605
10 0.87016296 5.2209778

Изменим строку 70 и заголовок в строке 20:

20 PRIHT " К";TAB 8;"1*RHD"; ТАВ20; "52«RHD"
30 PRIHT "---": TAB 8;"-----"; TAB 20;"-----"

40 REH ««цикл генерации случайного числа««
50 FOR К=1 ТО 10
60 LET b=RHD
70 LET C=52»b

80 PRIHT 1; TAB 8; b; TAB 20; с
90 НЕХТ К
100 STOP

RUH

К 1»RHD 52»RHD

1 0. 65000916 33. 800476

2 0. 75108337 39. 056335

3 0.33152771 17.239441

4 0.86534119 44.997742

5

0. 90074158

46. 838562

6

0. 5557251

28. 897705

7

0. 67988586

35. 354065

8

0. 99180603

51. 573914

9

0. 38545227

20. 043518

10

0. 90962219

47. 300354

Нашшите программу для печати шести случайных чисел
в диапазоне О.. . 5, 999999.

Взглянем еше раз на результат работы 6«RHB:

3. 7389221
4.4217224

1. 6309204

2, 3239746
О. 30221558

4. 6726685

2. 4515991

3. 8739624
2. 5495605

5. 2209778

Посмотрим на целые части чисел в этой последовательности:
3.4,1.2,0.4,2,3.2.5. Все это случайные числа из набора (О. ..5).

Но ведь когда мы бросаем кость, то получаем числа из. набо-
ра (1.2,3.4,5.6). Итак, нан нухно добавить по единице ко всем
числам первого набора, чтобы получить
второй. Поэтому, когда мы
в играх бросаем кость (6 возможных исходов) или вытягиваен кар-
ту из колоды (52 возножных исхода), то используен:
6«RHD
* 1 или 52*RHD * 1

20 PRIHT ■ К'; TAB 8; "l'RHD"; ТАВ20; "6»RHD*1"

30 PRIHT "---TAB 8;*-----'. TAB 20;"-----"

40 RQi ««цикл генерации случайного числа*■
50 FOR к=1 ТО 10
60 LET
Ъ-SSD
70 LET С=6»Ь+1

80 RQI ««Обратите внимание на ♦ i»«
90 PRIHT
к; TAB 8; b; TAB 20; С
100 HEXT К
110 STOP

ВСК-6. 1

RUH

К 1«RHD 6«RHD+1

1 0. 78868103 5. 7320862

2 О 15130615 1.9078369

3 0.34892273 3.0935364

4 0.16993713 2.0196228

5 0. 74623108 5. 4773865

6 0. 96762085 6. 8057251

7 0.57159424 4.4295654

8 0. 87005615 6. 2203369

9 0. 25434875 2. 5260925
10 0.07699585 1.4619751

функция iht.

Вы видите колонку чисел от 1 до 6, но что нам делать с
тем, что содержится после десятичной точки? для того, чтобы
избавиться от этго "мусора" мы можем применить функцию IHT.
ГНТ(а) - дает целую часть числа х. Дробная часть отрезается и
отбрасывается (не округляется).

IHTI5. 6) = 5
1НТ(3. 9) = 3
1НТ(-3. 2) =-4
IHT12)=2

Ножно сказать, что IHT всегда выполняет "округление вниз".

Чему равны значения?
(а) INT(4. 5)
(С) 1НТ(-2. 5)
(е) INTU.01)

ВСК-6. 2

(Ь) IHT (9. 1)
(d) INT(-0. 99)

Теперь с помошью Функций INT мы можем генерировать после-
довательность целых чисел от 1 до 6 или от 1 до 52:

IHT (6«RHD+1> или IHT (52«RHD*1)

Нижеприведенная программа продемонстрирует этот эффект:

ю REM »«Функция INT»«

20 PRIHT " К"; TAB 5; "1«RHD";TAB12; "1НТ(б«---"; TAB 22;

"IHT(52«---"

30 PRINT TAB 12; "---RHD*1)"; TAB 22; "---RND*1)"

40 PRINT "---"; TAB 5; "-----"; TAB 12;"---------"; TAB 22;

50 PRINT

70 FOR K=1 TO 10

80 LET b=RND

90 LET C-INT (6»b*l)

100

LET i

d=IHT (52»b+1)

no

PRIHT K: TAB 4;b;TAB

18: c:tab

25; d

120

hext

к

130

STOP

RUH

к

rnd«1 IHT(6»---

IHT(52

---

rhd+1)

---RHD

1

0. 48942566

3

26

2

0. 70750427

5

37

3

0. 063140869

1

4

4

0. 7366333

5

39

5

0. 24778748

2

13

6

0. 58491516

4

31

7

0. 86911011

6

46

8

0. 18339539

2

10

9

0. 75558472

5

40

10

0. 66912842

5

35

6. 3 Postscriptum на тему RKD.

следующая программа инитирует бросание игровой кости юо

раз.

10 REM »»юо бросков кости»»

20 rem ««цикл по J образует серию из 10 бросков»»
30 rem ««цикл по К создает 10 серий»»
40
for К=1 то 10
50
for J=1 то 10
60
let x=iht <6»rhd+1>
70 priht x; "
80 HEXT J
90 priht
100 priht
110 НЕХТ К
120
stop

ruh

А теперь, чтобы убедиться, что Вы хорошо повяли работу
♦ункшш IHT. ответьте на следующую пару вопросов:

ВСК-б. 3 Программа:

20 FOR Х=-3. 8 ТО -1.8 STEP .2
30 LET 7-IHT X
40 PRIHT
x, у
50 НЕХТ X
60 STOP

распечатает 10 пар чисел. Что это за числа?

Программа:

20 FOR Х= 1. 6 ТО 3. 4 STEP . 2
30 LET У= IHT X
40 PRIHT X. У

50 НЕХТ X

60 STOP

распечатает девять пар чисел, что это за числа?

Решение

вск-б. 4

6. 4 Два примера.

В этом разделе мы рассмотрели два довольно обширных приме-
ра. Они даны с решениями, но было бы все же лучше, если бы Вы
рассматривали эти примеры, как упржнения и попробовали бы ре-
шить их самостоятельно, а результаты решения сравнить.

ПРИНЕР-6. 1 Напишите программу, которая бы имитировала броса-
ние монеты 100 раз. Подсчитайте и распечатайте,
сколько всего раз монета легла "орлом", и сколько "решкой".

В основе решения лежит генератор случайных чисел 1 и
2. пусть "1" представляет "орел", а "2" - "решку".

Тогда алгоритм в описательном виде выглядит так:

1. начало.

2. Установить счетчики "орлов" и "решек" в О.

3. Инициализация учетчика цикла.

4. Генерация случайного числа 1 или 2.

5. Если получено число 2. то переход на 8, иначе - на 6.

6. Добавим 1 к счетчику "орлов".

7. Переход на 9.

8. Добавим 1 к счетчику "решек".

9. Прирашение счетчика цикла.

10. Если счетчик цикла <=100, то переход на п. 4. иначе -
на 11.

11. Печать счетчиков "орлов" и "решек".

12. STOP

И, наконец, сана программа:

20 PRIHT "Результаты 100 бросаний монеты"
30 PRIHT
40 LET h=0

50 REH ««счетчик "орлов"««
60 LET t=0

70 REH ««счетчик "решек"««
80 LET К=1

100 LET у-IHT (2«RHD*1)
110 IF
у=2 THEN GO TO 160
130 LET t=t+l

140 REM ««если не "орел", значит "решка"««
150 GO ТО 180

160 REM ««увеличиваем счетчик "орлов"»»

по этому алгоритму подготовим блок-схему:

170 LET h=h+l

180 REH ««увеличиваем счетчик бросаний»«
190 LET K=K+1

200 REH ««повторяем процесс 100 раз««

210 IF К<=100 THEH GO ТО 90

220 PRIHT "ОРЛЫ";"РЕШКИ"

230 PRIHT h.t

240 STOP

Теперь мы организуем счетчики:
t2 - для двоек (орлов);
ml - для четверок (решки);
Ь2 - тройки (смешанный исход).

Исход

Результат

00

ОР или РО
РР

1 + 1 = 2

1+2 =2+1=3
2+2 = 4

Написать программу, имитирующую 100 бросаний двух
монет. Подсчитать и распечатать результаты выпаде-
ния комбинаций "00", "РР" и
"ОР" или "То".

ПРИНЕР-6. 2

применим ту *е счетную систему. "1° - "орел", "2" -
"решка". Но теперь у нас две монеты. Результат первой
сохраним в
cl, а результат второй - в с2. Суммарный результат S
может быть равен 2. 3 или 4.

Решение

20 PRIHT "Результаты 100 бросаний 2-х монет:"

30 PRIHT

40 LET h2=0

50 REH ««счетчик 00 ««

60 LET t2=0

70 REH ««счетчик PP««

80 LET ml=0

90 REH ««счетчик op или p0««

95 REH ««Начало главного цикла»»

100 FOR К=1 ТО 100

110 LET c1=IHT (2«RHD+1)

120 REH ««первая монета»«

130 LET ?2=IHT (2«RHD+1)

140 reh ««вторая нонета»»

150 LET S=C1+C1

160 REH ««суммарный итог»»

170 IF S=4 THEH GO TO 280

180 REH ««6P0C0K PP««

190 IF 3=2 THEH GO TO 240

200 REH ««6P0C0K 00««

210 LET mi=mi*i

220 REH »»6P0C0K OP/PO*«
230 GO TO 300

240 REH ««прирашение счетчика 00««
250 LET h2=h2+l
270 GO TO 300

280 REH ««прирашение счетчика РР«»
290 LET t2=t2+l
300 REH »«конец цикла««
310 HEXT К

320 REH »»печать результата»»
330 PRIHT "00".TAB iO;"PO";TAB 20; "PP"
340 PRIHT h2; TAB 10; ml; TAB 20; t2
350 STOP

6. 6 Слияние стрингов.

Затратив массу сил в Уроке 5 на разделение стрингов, мы
теперь уделим немного времени
вопросу их слияния. Программа
покажет вам. как это происходит:
10 REM ««слияние»»
20 IHPUT "Первый стринг"; at
30 PRIHT а*

40 ihput "Второй стринг"; ь*
50
priht ь*
60 priht а*+Ь«
70
stop

RUH

микро

компьютер

микрокомпьютер

В английском языке для того, чтбы из существительного
единствиного числа образовать множественное, в боль-
шинстве случаев достаточно добавить к нему окончание -з.
program - programs
byte - bytes
computer - computers

Напишите программу, которая будет принимать от пользовате-
ля существительное в единственном числе, а выдавать его - во
множественном (на английском языке).

Следушая программа демонстрирует возможность слияния стри-
нгов для создания стрингов из символов. Ны накапливаем
стринг в
переменной а*, а в цикле 70... 100 добавляем на каждом проходе к
нему
новую букву.

Программа б. 1

20 REM ««создание директория»«
30 LET a*="abcdefghiJ"
40 REH ««м»»»»*»"»»»»»»*»*»**»
50 LET
с*:""

60 REH »«с* - пустой стринг»«
70 FOR J=1 ТО 10
80 LET
c*=c*+a*(J)
90 PRIHT
j. с»
100 HEXT J
110 STOP

BCK-6. 5

б. 7 Функция str*

эта Функция имеет действие, противопложное функции VAL.
Если VAL дает нан числовое содержание стринга, то Функция STR*
наоборот, трансформирует число в набор символов. Кажется, что
Функция str* п дает нам само число п. но это не совсем так. Во
втором случае это
стринг.

10 reh ««функция str*»»
20 ihput
"Введите число";п
30 priht п

40 priht "012345678901234567890"
50 priht п. str* п
60 stop

ruh

17

012345678901234567890
17 17

ruh
-17

012345678901234567890
-17 -17

ruh

99. 34

012345678901234567890
99. 34 99. 34

ruh

-99. 34

012345678901234567890
-99. 34 -99. 34

в следующей программе мы используем тот Факт, что STR* 8
это стринг "8", а не число 8. Благодаря этому мы сможем "при-
крепить" его к символьной последовательности, чего нельзя было
сделать с числом.

20 let с»=""

зо rem ««с*- пустой стринг»«
40 for j = 1 to 10
50 let c*-c*+srt* j
60 priht j. c*
70 next j
80 stop

УПРАЖНЕНИЕ-6. 1 Напишите программу, которая примет с клавиату-
ры слово, перекодирует каждую букву в число
(по
порядковому номеру буквы в алфавите), а затем выдаст это
слово в закодированном виде.

ПРИМЕЧАНИЕ: воспользуйтесь программой 6. 1 (но для всего
алфавита), чтобы поставить каждой букве в соответствие число в
едином списке. Не забудьте про оператор
DIM. По одной просмо-
трите все буквы введенного слова и сравните их со списком. Ког-
да буква в списке найдена, возьмите ее индекс (номер позиции),
переведите его в
стринговую Форму и "подшейте" к результату.

УПРАЖНЕНИЕ-6.2 Напишите программу, которая сгенерирует 20
случайных трехбуквенных слов. Интересно посмо-
треть, сколько раз придется запустить эту програнну, прежде,
чем она создаст реально существующее слово.

Задание на самостоятельную проработку.

1. Напишите фрагмент игровой программы. Ван сдаются неско-
лько (сколько - выберите сани) карт из колоды. Что у Вас на
руке после сдачи?

Примечание:

1) Воспользуйтесь английской нотацией для обозначения мас-
тей:

S - Spades - "пики"
С - clubs - "трефы"
В - Diamonds- "бубны"
Н - Hearts - "черви"

2) Воспользуйтесь английской нотацией для обозначения
достоинства карт:

А - Асе - Туз

К - Kine - Король
q - Queen - дама

J - JacK - Валет

T - Ten - десятка

9. . . 2 - 9. . . 2

Таким образом, обозначение любой карты складывается из
двух символов, например.

AD - ТУЗ бубновый
тн - десятка червей
JS - валет пик.

3) Не забудьте, что каждая карта не может быть сдана дваж-
ды.

Подсказка:

1) Сначала создайте список-колоду. Это нужно сделать так
же, как в упражнениях 1 и 2 мы это делали с алфавитом.

2) "Сдавайте" карты из колоды, используя генератор случай-
ный чисел от 1 до
52. Считая, что случайное число - это номер
карты в колоде, выберите эту карту из подготовленного списка.

3) Карт в колоде - 52, но символов в Вашем списке должно
быть
104, т. к. каждая карта обозначается двумя символами.

4) Перед выборон карты из колоды следует случайное число
умножить на 2, т. к. на каждую карту ушло две позиции в списке.

5) выбрав карту из колоды (списка), на ее место нужно по-
ставить метку (например, "«»"), чтобы не пришлось
второй раз
выбрать эту же карту.

ОБЗОР УРОКА

закончив урок, проверьте свои знания и навыки по следующим
вопросам:

- использование RKD для генерации случайных чисел от О до 1;

- использование 1ST и RHD для генерации случайных целых чисел
от о до п;

- имитация бросания монеты;

- имитация бросания двух монет;

- имитация бросания кости;

- митапия бросания двух костей;

- слияние стрингов;

- использование функции STR»(x).

ОТВЕТЫ НА ВОПРОСЫ ДЛЯ САМОКОНТРОЛЯ

10 FOR К=1 ТО б
20 LET n=6«RHD
30 PRIHT П
40 НЕХТ К
50 STOP

ЕЕЭ

|вск-б. г|

1ВСЖ-6. 31

ВСК-6. 4

(а) 4 (b) 9 (С) -3

(d) -1 (е) 1

RUH

-3. 8 -4

-3. 6 -4

-3. 4 -4

-3. 2 -4

-3. -3

-г. в -з

-г. б -з

-2.4 -з

-г. г -з

-г. -г

RUH

1. б 1

1. 8 1

г. г

г. г г

г. 4 г

г. б г

г. 8 г

з. з

з. г з

|ВСК-6. 5|

20 LET a»="s"

30 IHPUT "введите слово'; Ь*
40 PRIHT b*
50 PRIHT М+а*
60 STOP

RUH

tree

trees

RUH

house

houses

ОТВЕТЫ К УПРАЖНЕНИЯМ

УПРАЖНЕНИЕ-6. 1

10 REH »»Простейшая кодирующая программа»»
20 PRIHT "Генератор кода"
30 LET
С*-"
40 DIH а* (32)

50 LET а«="абвгдежзийклннопрстуфхцчшпшьэъюя"
60 REM »«Создали директорий»»
70 IHPUT "Введите слово" ;w»
80 PRIHT
Vt
90 LET K=LEH W»

100 REH ««Просмотр директория»«
110 FOR J=1 TO К
120 LET f=l

125 REH »»пикл сравнения»»

130 IF W»(J)=a»(f) THEH GO TO 160

140 REH »«Выход, когда пара найдена»»

150 LET К=К+1

155 GO ТО 125

160 REH ««Номер найденного символа становится кодом»»

170 LET c*=c»+STR* К

180 HEXT j

190 PRIHT

200 PRIHT С*

210 STOP

УПРАЯНЕНИЕ-6. 2

10 reh ««случайные слова»«

20 priht "Програнна генерации случайных слов"

30 reh »«директорий»«

40 let а»="абвгдежзийклмнопрстуфхцчтшыьэыоя"
50 ihput "Еше список? у/п?";г*
60 if г»<>"у" theh go то 210
70 reh ««20
слов»»
80 for к=1 то 20

90 reh ««Начинаем с пустого стринга»»
100 let w»=""

110 reh ««Генерация слова»»
120 for j--1 то 3
130 let x=iht <32»rhdm)
140 let
w*=w*+a»(x)
150 hext J

160 reh »«Печать слова»»
170 priht w*

9 - 6613

180 REH ««Возврат за новт словом»»
190 НЕХТ К
200 GO ТО 50
210 STOP




  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
SUPA-ГАМZ - Здeсь я (a mожeт и нe токa я) буду рaскaзывaть про игры, кторыe mнe (a mожeт и нe токa mнe) когдa-то попaлись и кторыe очeнь mнe понрaвились.
Письмо №279
Взгляд - О работе SOFT'а на waitовских компьютерах на примере игры LAST HERO.
Юмор - правила использования дискет.
Реклама - Пpодам, куплю ,обменяю пpогpаммы для ZX Spectrum.

В этот день...   29 апреля