CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2003 ГОД

Решить задачу раз плюнуть

Олег ДАНИЛЮК lezha@realtel.net.ua

(Продолжение, начало см. в МК № 3 (226)).
Итак прозвенел звонок. Все собрались? Так, так, так… А где Петров? Опять опаздывает? Ну ладно, начнем без него наш урок.

Обычно уроки начинаются с чего? Правильно — с проверки домашнего задания. Чего руку тянешь, Иванов? Опять не сделал домашнее задание? Садись — два. Все остальные сделали? Хорошо, давайте проверим. На дом я давал вот эту задачку:

Задача №4

Каждый элемент таблицы A размерностью 3х3 может иметь значения 7, 8 и 9. Составить программу подсчета количества каждого из этих чисел в таблице. Предполагается, что вначале идет блок заполнения данных по какому-либо закону.

Задача простенькая. Но заполнение двухмерного массива и вывод его на печать может оказаться большой проблемой для новичка. Кстати, в условии не сказано «создавать массив», и тем более «выводить его на экран». Но таблица — это тот же массив, только не линейный, как A[1..10], который состоит из десяти элементов A[1], A[2], … , A[10], а двухмерный, типа A[1..10, 1..10]. Это значит, что адрес каждой ячейки массива состоит из двух значений. Значит, то, что в линейном массиве представлено как A[1], в двумерном будет A[1,1], A[1,2], … , A[1,10].

Вообще, массив — это очень полезная вещь. Использовать, например, массив из десяти элементов намного удобнее, чем отдельно взятые десять переменных. Но что-то я отвлекся. Вот решение четвертой задачи:

У вас, наверное, сразу возник вопрос, зачем в первой строке я написал of 7..9. В условии сказано, что каждый элемент таблицы (читай — массива) может иметь значения 7, 8 и 9. Поэтому я и написал of 7..9 — это значит, что каждый элемент массива может принимать только значения от 7 до 9. Но тут есть один нюанс. Если написать вот такую программку:

то компилятор выдаст сообщение об ошибке. Кстати, компилятор — это программа, которая преобразует исходный код в машинные команды. Иными словами, делает из вашего .pas-(.bas-, .asm-, .c-) файла экзешник (.exe). Другой тип —интерпретатор, программа, которая построчно выполняет исходный код. У каждого из них есть свои недостатки и преимущества. Откомпилированная программа занимает больше места, но зато выполняется намного быстрее и не требует наличия интерпретатора. Кроме того, в этой программе нельзя изменить что-то, например имя разработчика :-), просто откорректировав пару строчек. Но если в программе обнаружится досадный глюк, то юзеру придется ждать, пока появится патч или новая версия данной проги с исправленной ошибкой.

Опять я отвлекся. Так вот, компилятор выдаст сообщение об ошибке. Это хорошо, так как нам не нужно писать ограничения типа if a > 4 then … Но если написать

то все пройдет как по маслу. Так что будьте осторожны.

Далее следует самая интересная часть программы —заполнение массива. Как видите, для этого используются два цикла: внешний и внутренний (вложенный). Этот алгоритм достаточно прост для понимания. Внешний цикл меняет строки массива, а внутренний — столбцы. То есть сначала перебираются все столбцы первой строки, потом второй… Например, из массива A[1..2,1..2] сначала считаются элементы A[1,1] и A[1,2], а потом A[2,1] и A[2,2].

В данном примере каждый элемент таблицы сразу после заполнения выводится на экран. Благодаря этому приему не нужно писать отдельный цикл (даже два: внешний и внутренний) для вывода таблицы на монитор. Но обязательно нужно поставить после вложенного цикла оператор writeln, иначе вы получите не таблицу, а строку. После заполнения всех столбцов строки writeln переводит курсор на следующую строку. Хух… Вроде разобрались. Поехали дальше:

Задача № 5

Составить программу нахождения суммы четных и суммы нечетных чисел из заданного интервала. Начальное и конечное значение принимать с клавиатуры. На экран выводятся числа из заданного интервала в строку и отдельно обе суммы.

Задачка несложная, но все же требует некоторых навыков:

Посмотрите, как просто определить, четное число или нет. Нужно просто поделить его на два. Если число четное, то остатка не будет (точнее, он будет равен нулю), если же нечетное, то остаток будет равен единице.

Задача № 6

Организовать линейный массив из 100 элементов. Заполнить его случайными числами из интервала от 1 до 999 и вывести на экран в упорядоченном виде (по возрастанию). Первоначально для контроля вывести исходный массив.

Во-первых, поясню, зачем я подключаю дополнительный модуль в программу. Подключая новый модуль (файл с расширением .tpu — для реального режима DOS, .tpp — для защищенного режима DOS или .tpw — для модулей Windows) в программу, мы можем пользоваться новыми константами, типами данных, переменными, процедурами и функциями, которые содержатся в данном модуле. В нашем случае это функция WhereX, которая возвращает Х-координату текущего положения курсора. Дело в том, что если не написать if wherex > 75 then writeln, то числа в конце строки будут переноситься на следующую строку. То есть часть числа будет напечатана в конце одной строчки, а другая часть — в начале следующей, что не есть хорошо. Экран состоит из 80 столбцов, поэтому я написал, что если курсор находится далее семьдесят пятого столбца, то переводим каретку (курсор) на следующую строку. Всегда обращайте внимание на подобные мелочи.

Кстати, есть еще один способ решить эту проблему. Он даже проще. Надо всего лишь написать write(mas[i]:4). Четверка означает, что элементу массива mas[i] (или любой другой переменной или символам, стоящим перед двоеточием) выделяется четыре столбца для печати. Соответственно, они ровненько вписываются в 80 столбцов экрана.

Теперь приступим к алгоритму сортировки. В принципе, я не рекомендовал бы вам его использовать, так как он требует больших (по сравнению с другими) вычислительных мощностей. Я привел его здесь, потому что этот алгоритм очень прост и для подобных задач вполне может сгодиться. Суть его состоит в том, что мы для каждого числа из данного интервала (от 1 до 999), начиная с меньшего, перебираем все элементы массива, и если они (число и элемент массива) одинаковы, выводим этот элемент на монитор. Кстати, если написать не write(mas[i], ' '), а write(i1, ' '), то есть отпечатать число из интервала, то результат не изменится, так как они равны.

Но вот и прозвенел звонок на перемену. Встретимся на следующем уроке, но не забудьте записать домашнее задание:

Задача №7

Составить программу, которая вычисляет период (в годах), за который первоначальный вклад в сберегательный банк удвоится. Первоначальный вклад и процент годовых начислений должен вводиться оператором READLN.

Задачка простая, но заставляет задуматься. Смотрите, не перемудрите, здесь даже не нужны массивы. Если не знаете, как решить, — пишите. Если знаете — все равно пишите :-).

(Продолжение следует)

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov