Меню сайта

Урок 12
Уважаемые друзья! Как я и ожидал, было множество вопросов по массивам — не все их полностью поняли и не справились с домашним заданием. Это довольно естественно — массивы довольно специфический тип, не похожий на другие и требующий глубокого понимания. Собственно, по этому я и решил посвятить этот выпуск решению ДЗ, заданного в прошлом уроке. Одновременно вы познакомитесь с новыми алгоритмами решения поставленных задач, так что этот урок будет довольно полезным. —
Как вы помните, прошлое задание включало в себя пять задач. Сейчас я хочу подробно разобрать их все по порядку, что, надеюсь, поможет вам лучше разобраться в массивах. —
Итак, задания. Я буду расказывать только о алгоритмах решения без исходных текстов. Если они вам понадобятся вы сможете их найти на моем сайте. —
Задача №1 —
Напомню условие: —
Напишите программу, читающую массив из 10 чисел и печатающий его в обратном порядке. —
1. Давайте разберемся, чтожу нам нужно для решения этой задачи. Естественно, сам массив. Далее — переменная, которая будет использоваться в цикле и изменять индекс массива. Все это мы заводим в разделе var. —
2. Теперь само решение. Здесь все очень просто: вспомните, что такое массивы? Это последовательность отдельных переменных, упорядоченная по порядку. К каждой переменной (элементу массива) можно обратиться по его индексу или порядковому номеру. Мы этим воспользуется и прочитаем массив с клавиатуры след. образом: —
Циклом будем изменять простую численную переменную от 1 до 10- —
По индексу, равному этой переменной (мы просто подставляем вместо номера элемента массива подставляем переменную-счетчик) мы читаем значение с клавиатуры- —
Таким образом, мы прочитаем весь массив. Собственно, это и все с процедурой чтения (заполнения массива), в дальнейшем я уже не буду обращаться к этим объяснениям, а буду просто говорить «прочитать массив» и т.д. —
Итак, мы заполнили массив с клавиатуры. Теперь нужно его распечатать в обратном порядке. Для этого мы воспользуется известной нам возможностью цикла For — служебным словом downto, уменьшая переменную счетчик от 10 до 1. Соответственно, будем печатать элементы массива, указываемые в цикле этой переменной. —
Вот и все! Думаю, без наглядного примера не очень понятно, но при наличии последного вы без труда разберетесь. —
Задача №2 —
Задание: —
Дан массив из 100 чисел. Заполнить его случаными значениями и распечатать его по 10 чисел в строке. —
Эта задача вызвала очень много вопросов. В частности, не сама задача, а алгоритм вывода массива из 100 чисел по 10 чисел в строке. Ну чтож, думаю на заполнении массива случайными числами я останавливаться не буду (см. пред. выпуск — N12), а вот об алгоритме вывода массива строками по 10 чисел расскажу подробнее. —
Хочу также сказать, что для дальнейшего понимания задачи необходимо иметь исходный текст. Где его взять — см. выше. —
Итак, у нас есть массив из 100 чисел. Давайте теперь подумаем, как же нам поступить, чтобы через каждые 10 чисел переводить строку. Решений этой задачи довольно много, предлагаю остановиться на одном, очень простом решении. —
Как всегда, организовываем цикл для прохода по всему массиву. Цикл будет, ясное дело от 1 до 100. —
Ну а теперь давайте вспомним такую операцию, как получение остатка от деления. Вспомнили? Она называется mod. (См. пред. выпуски) Вот ею мы как раз и воспользуемся. Задумайтесь: распечатка 100 чисел по 10 чисел в строке — это не что иное, как печать десяти чисел, после чего перевод строки. Так ведь? Для проверки этого условия будем проверять переменную-счетчик на остаток от деления на 10. Если остатка нет (делится на 10 нацело) — значит печать очередной порции чисел закончена и нужно перевести строку. —
Организуется это просто: —
Выводим число- —
Далее получаем остаток от деления переменной-счетчика на 10- —
Если остаток равен нулю, то переводим строку. —
Вот и все! Пример реализации такой задачи смотрите на сайте.
Задача №3 —
Задание: —
Дан массив из 50 чисел. Заполните его случайными числами. Определить, сколько в нем элементов, отличных от последнего элемента. Вывести их количество. —
Это совсем не сложная задача. Заполнен
ие случайными числами уже не должно вызввать вопросов, а вот о способе проверки на соответсвие последнему элементу расскажу подробнее. —
Как всегда, организуем цикл, количество повторений которого будет равно 49 (максимальный элемент массива минс 1). Зачем уменьшать на единицу? Все просто. Мы будем циклом сравнивать все элементы массива с последним, исключая его самого. Ведь нам нет смысла сравнивать элемент с самим собой? —
В ходе этой проверки будем смотреть: если текущий элемент массива не равен последнему, то увеличиваем некую переменную-счетчик, которая в конце концов и будет содержать количество элементов, не равных последнему. —
Все! —
Задача №4 —
Задание: —
Дан массив из 50 чисел. Заполните его случайными числами. Вывести на экран сначала все положительные его элементы, а затем все отрицательные. —
Эта задача довольно простая, хотя и по ней были вопросы. С выводом сначала положительных, потом отрицательных элементов проблем, думаю, не возникает — проверяйте на больше/меньше нуля. А вот заполнение массива случайными, отрицательными числами — это вопрос. Ведь известно, что функция Random возвращает случайные числа от 1 до указанного диапазона. Как видите, отрицательных чисел здесь нет. —
Однако нужно было придумать, как в функции Random получить отрицательные числа. Для этого есть очень простой алгоритм, а точнее даже и не алгоритм, а прием. Выглядит это примерно так: —
A := Random(101)-50- {Числа от -50 до 50} —
B := Random(101)-200- {от -100 до 100}
Хочу поблагодарить Андрея за предоставленный способ. Как вы видите, для получения диапазона чисел вида -N….N мы отнимаем от функции Random число, вдвое большее ее диапазона. Задумайтесь, как это работает. Очень просто! —
Пример реализации такого алгоритма см. на сайте. —
Задача №5 —
Условие: —
Дан массив из 10 чисел. Введите его с клавиатуры, после чего измените у всех чисел знак на противоположный. Вывести получившийся массив на экран. —
Как вводить массив с клавиатуры уже не проблема (я так думаю), ну а вот как изменить знак у всего массива на противоположный догадались не все. Все очень просто, друзья! Для изменения знака числа на противоположный (инвертирование) нужно умножить число на -1. При этом если число положтельное, оно станет отрицательным и наоборот. —
Вот и поступите так: умножте весь массив на -1. Задача решена! —
Вот такие вот задания. Я думаю, из этих примеров вы смогли познакомиться с новыми и интересными алгоритмами, а главное — полезными. Собственно, на сегодня все — скачайте с сайта исходные тексты, посмотрите, как реализуются те или иные примемы. Ну и для дополнительной практики, приведу еще несколько задач, которые вам предстоит решить. —
Итак, новые задания: —
Номер Задание —
1 Есть массив на 11 чисел. Переписать его в обратном порядке, то есть чтобы элементы в нем располагались наоборот — первый стал последним, второй — предпоследним и т.д. —
2 Есть массив чисел (любой, заполните его любыми извест. способами). Распечатать этот массив по возрастанию — т.е. сначала минимальный элемент, и т.д. по возрастанию. —
3 Массив из строк. Найти самую длинную строку в массиве. —
4 Найти все элементы некоторого массива, у которых остаток от деления на 10 не равен последнему элементу. —
Это были просто упражнения. А теперь хочу задать более сложные задания, которые, надеюсь, заставят задуматься и будут интересными. Итак, расширенное задание: —
Номер Задание —
1 Заведите массив из десяти элементов символьного типа — Char. Введите его с клавиатуры. Далее — прочитайте строку и проверьте, возможно ли из символов, введенных в массив составить заданную строку. —
Пример: —
Массив: А,Р,У,П,Q,К,W,Ф,О,S. —
Строка: УРОК —
Ответ: возможно. (В веденном массиве существуют сиволы «У», «Р», «О», «К»).
2 Существует два массива по 30 эелементов каждый. Один массив — типа Integer, другой — итпа String. Эти массивы — данные о студентах одной группы. Массив из чисел — средняя оценка успеваемости каждого студента. Массив из строк — фамилии студентов. Элементы массивов соответсвуют друг другу, т.е. в первом элементе массива из строк — фамилия студента, в первом элементе численного массива — оценка для этого студента и т.д. —
Задание: Напечатат
ь успеваемость по убыванию. (Фамилии и оценки введите с клавиатуры, после чего распечатайте результаты).
Категория: Уроки по Pascal | Дата: 02.05.13

Меню раздела
Блок