Данному образовательному сайту пришлось несколько раз менять свое имя. С 2022 года доступ к нему обеспечивается по URL
emc.orgfree.com

emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-2021) ==> emc.orgfree.com (2022-...)
Более подробно об истории сайта можно прочитать здесь.


Учебные модели компьютера



Модели (software):

"Е14" (parallel !!!)
"S9PU" (parallel)

Модели (hardware):






Награды сайта
Награды сайта 2005

Файл 8 ( 1000 )

Сталкиваемся с массивами. Пытаемся
поработать с ними на СМ "Малютке".
Знакомимся с задачами поиска минимума и
сортировки. Претендуем на звание
"Начинающий профессионал третьей
категории".

" Давным-давно выражалась надежда на некий качественно новый уровень изучения нашего учебника по сравнению с другими учебниками. В частности, предполагалось, что вопросы и задания не пропускаются, а хотя бы просматриваются. Приходится об этом напоминать, так как при работе с СМ "Малюткой" очень важно получить именно практические навыки. Собственно, далее мы только и будем заниматься решением задач. Оно и понятно: можно хоть всю жизнь теоретически учиться кататься на велосипеде, но пока не сядешь - не поедешь.

Впрочем, хватит образных сравнений и прибауток. Займемся лучше делом. Очень часто приходится обрабатывать большое количество однородной информации. Например, найти самого быстрого ученика в школе. Или составить список двадцати крупнейших городов мира, упорядочив их по численности населения.

В этой сфере возникают стандартные задачи программирования.

Одной из них - задачей поиска минимума - мы и займемся.

Итак, пусть в ячейках 41, ... 4A находятся целые числа. (Программисты сказали бы: "В ячейках 41-4A располагается одномерный массив чисел).

Задача. Найти минимальное число в этом массиве.

...

Предположим, нам надо найти самого быстрого ученика в школепо протоколам забегов на 60 метров. Как это сделать?

Видимо, одно из решений могло бы выглядеть так:

Решение:

         Программа {
             Взять листочек бумажки;
             Делать пока (есть непросмотренные протоколы)
               { Взять непросмотреный протокол;
                 Найти самого быстрого ученика и его время;
                 Сравнить с записанным раньше временем;
                 Если (новое время меньше записанного) то
                      {обновить запись: время и фамилию}
               }
           }
             Самая последняя запись и будет содержать фамилию
             самого быстрого ученика и его время.

Единственное, к чему бы стоило придраться - при просмотре самого первого протокола требуется просто выписать время и фамилию самого быстрого ученика, ни с чем не сравнивая его результат. Или просто выбрать поначалу первого попавшегося ученика, а то непонятно, что же мы собрались обновлять.

Ну а наш ... универсальный вычислитель может за один раз просматривать всего одно число, а не целый лист. Поэтому поиск минимального числа в массиве решается следующим алгоритмом;

     Решение:
     Программа
     Цел: MIN, N, I, R;
       {
       (* В ячейке с именем MIN будем хранить минимальное
          значение, а в ячейке, с именем N - номер ячейки,
          где находится это значение *)
          Заслать в MIN содержимое 41-й ячейки;
          Заслать в N число 41;
          Делать от I=2 до 10
           { Заслать в ячейку R содержимое 40+I-той ячейки;
             Если (R<MIN)  то {MIN=R; N=40+I}
           } (* конец цикла *)
          Выдать на табло MIN и N;
        }

Как обычно, начинаем с распределения памяти.

Нам требуется выделить ячейки ОП под переменные N, I, R, MIN, под константы 2, -11 (для проверки конца цикла), 40, 1. Быть может, и еще для чего-нибудь.

Распределение памяти:

011- вводится один раз;
022- вводится один раз;
03-11- вводится один раз (на экране - 80B);
0440- вводится один раз. На экране - так и есть.
05-- здесь будет значение I;
06-- здесь будет значение R;
07-- здесь будет значение N;
08-- здесь будет значение MIN;
09...- оставим на всякий случай, хотя место под числа можно выделить где угодно в ОП.

В ячейку 00 занесем константу 00A, указывающую, что программа начинается в ячейке 00А, и начнем потихоньку...

004Не запасли константу 41, а ее надо заслать в N,
0BA01поэтому вызываем константу 40 в сумматор,
0C107добавяем 1 и сохраняем в N.
0D041Содержимое 41 ячейки вызываем в сумматор ...
0E108и сохраняем в ячейке MIN.
0F002Вызываем начальное значение I, равное 2
10105и засылаем его в I.
11A03Проверяем, не пора ли кончать цикл.
12Е..Если да - выход из цикла. Пока неизвестно, куда.

Немного приостановимся. Теперь от нас требуется в ячейку R заслать содержимое ячейки с номером I+40. Ну, положим, к I мы сможем прибавить 40. А дальше что? Как обратиться к ячейке с переменным номером?

Вот здесь-то и воспользуемся способностью "Малютки" выполнять числа, как команды. Число 40+I, воспринятое, как команда, будет означать посылку в сумматор содержимого этой самой ячейки. Стало быть, надо вычислить 40+I и сохранить в ячейке, входящей в программу:

13004- Вызов константы 40 (шестнадцатеричной).
14А05- Добавляем к ней I и ...
15116- сохраняем в 16-той ячейке.
16===- Здесь можно ничего не писать!
17106- К этому времени, благодаря числу из 16-той ячейки, воспринятому, как команда, в сумматоре окажется содержимое 40+I-той ячейки, которое мы успешно и сохраняем в R.
18.....

Дальше - дело техники. Надеемся, для вас не составит труда дописать программу до конца. "


© А.И.Сенокосов, А.Г.Гейн, 1995
Цитируется по книге Сенокосов А.И., Гейн А.Г. "Информатика 8-9" с разрешения авторов
© Оформление Web-страницы Е.А.Еремин, 2001


Автор сайта - Евгений Александрович Еремин (Пермский государственный педагогический университет). e_eremin@yahoo.com


Free Web Hosting