Назад | Начало урока | Вперед
Содержание

Глава 6

"Массивы и таблицы"

Задачи из главы 6

6.1 Увеличивающиеся массивы. Массивы имеют фиксированную длину, но мы можем заменить существующий массив большим, если его размер окажется недостаточным. Предположим объявлен массив A, имеющий определенную длину. После попытки добавить в него очередное значение возникла исключительная ситуация arrayOutOfBoundsException. Мы сможем вызвать метод grow, который создаст новый массив на 50% большим, скопирует все значения и вернет ссылку на новый массив. Напишите такой метод и протестируйте его в небольшой программе.

6.2 Таблица расстояний. В атласе часто публикуются таблицы рассотояний между важнейшими городами, названия которых служат заголовками столбцов и колонок. В Java мы не можем создать такую табоицу в виде двумерного массива, поскольку ряды и колонки в ней являются строками, а не целыми числами. Решение заключается в применении хеш-таблицы, где ключами являются названия городов, а значениями - числа, которые послужат индексами для двумерной матрицы расстояний между городами (то есть каждому городу будет присвоен номер, а по двум номерам-индексам можно будет обращаться к двумерному массиву). Напишите программу, которая:

- охватывает до 20 городов и случайным образом генерирует значения рассояний от 50 до 1000 километров.
- использует интерфейс класса Display для задания расстояний между любыми двумя городами.

6.3 Кто в какой группе? Модернизируйте программу 4.8 ( в которой определялся средний возраст) так, чтобы в объект вводились такие значения как имена детей, их возраст и название группы (буквы от А до Г), а сами объекты хранились в массиве. Отсортируйте элементы массива по значениям возраста и задайте вывод информации о детях. Сможете ли вы отсортировать элементы массива по именам и по обозначениям групп?

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

Голос

живой и разнообразный
достаточно живой
удовлетворительный
скорее скучный
монотонный

Объем подаваемого

удовлетворительный
чрезмерный
хотелось бы больше
слишком много
недостаточный

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

Р.Н. Смит
6 ноября 2000 г
COS101 Принципы программирования
80 студентов
Голос 16 35 20 9 0
Материал 37 20 11 10 2

Возможный вариант вывода:

Р.Н. Смит
6 ноября 2000 г
COS101 Принципы программирования
Голос

А живой и разнообразный 20% ************
Б довольно живой 44% **********************
В удовлетворительный 25% ***************
Г скорее скучный 11% ******
Д монотонный 0%

Требуется разработать программу, позволяющуй подобным образом оценить преподавателей.

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

6.5 Главы книг. Расширьте класс, разработка которого была начата в задачах 2.10 и 3.19, чтобы он включал больше информации о каждой главе, например список из семи параграфов, количество задач, десять букв, которые являются ответами на вопросы для самоконтроля и тд. Разработайте интерактивную программу, в которой была бы предусмотрена возможность ввода новых данных о главах по мере написания книги и вывода сведений о ее текущем состоянии. Обратите внимание на то, что в первоначальных версиях программы уже имеются три массива: массив глав, массив параграфов (которые являются объектами своего собственного класса, в котором есть названия строк и целые числа - номера страниц) и массив ответов на вопросы для самоконтроля, элементы которого имеют тип char.

6.6 Всенародные праздники. Используя хеш-таблицу, создайте программу, позволяющую вводить и сохранять даты всенародных праздников вашей страны для текущего года. С помощью класса Display реализуйте следующую функцию: пользователь вводит название праздника и получает взамен дату.

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

6.7 Средняя величина напряжения. Для определения среднего напряжения в электросети показания вольтметра фиксируются каждый час в течение 72 часов. На основе этих данных и вычисляется искомая величина. Напишите программу, в которой предусмотрен ввод 72 показаний вольтметра, и определите

- среднее напряжение в сети - часы, когда отклонение вольтажа от среднего значения превысило 10% - любые смежные часы, когда разница между показаниями вольтметра превысила 15% от средней величины напряжения

Программа должна выводить на экран график вольтажа за 72 часа. Используйте для этого класс Graph.

6.8 Полезные методы. Напишите класс, методы которого принимали бы в качестве одного из параметров массив целых чисел и могли бы выполнить следующее:

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

В этот класс мы хотели бы так же добавить методы, позволяющие:

- найти максимальный элемент, и если таких элементов несколько, зафиксировать их позиции - определить диапазон значений массива

Подумайте, почему труднее создать эти два метода и какой вариант взаимодействия между массивом и классом подойдет для реализации поставленной задачи?

6.9 Максимальный "непроходной" балл. Ученый совет университета Саванны принял решение, согласно которому, по крайней мере 75% студентов каждого курса должны переводиться на следующий курс. Это означает, что сумма баллов, позволяющая студенту перейти на следующий курс, будет специфической для каждого курса. Напишите программу, которая считывает из файла оценки студентов и определяет такой максимальный "непроходной" балл, который не нарушал бы директиву сената.

6.10 Из какой страны судья? В примере 6.2 вместо номеров судей мы хотели бы выводить названия стран, из которых они прибыли. Используйте массив для создания перечня стран, представители которых занимаются судейством, и модифицируйте программу так, чтобы ее вывод был более информативным. Подумайте что лучше - иметь в классе Dive массив названий стран вместе с массивом выставленных баллов, или создать другой класс, включающий названия стран и баллы?

6.11 Рост населения. С 1980 года статистические данные о численности населения Саванны хранятся в файле, где в каждой строке указан год рождения и количество жителей Саванны за текущий год. Напишите программу, которая считывает эти данные из файла и находит два идущих подряд года, когда процент увеличения населения был наивысшим. Возможно данные придется отсортировать.

6.12 Календарь на двух языках. Разработайте программу, которая выводит на экран календарь, где названия месяцев размещаются одно под другим. Используя хеш-таблицу создайте версию, в которой все названия месяцев и дней недели указаны на иностранном языке (например французском или немецком). Предоставьте пользователю возможность выбирать на каком языке должен быть выведен календарь.

6.13 Множество лампочек. Модифицируйте Программу 6.4 так, чтбы она могла считывать некоторое количество значений из файла и использовала класс Display. Затем расширьте ее так, чтобы можно было ввести данные, полученные от 10 различных производителей лампочек, и вычислить для каждого из них среднее значение и стандартное отклонение. Начертите соответствующие гистограммы. При желании используйте генератор случайных чисел.

6.14 Сравнение показателей. Большинство преподавателей хотели бы сравнить свой показатели с результатами коллег. Соответствующий алгоритм мог бы выглядеть так: создается файл для хранения текущих средних баллов по каждому вопросу, после проведения нового опроса относительно преподавателя считывается текущее среднее значение и с учетом количества преподавателей, прошедших аттестацию, определяется новое среднее значение, которое заносится в файл. Реализуйте такое расширение программы. Если у преподавателя будет возможность выбрать вопрос, окажет ли это влияние на выбор структуры для хранения средних баллов (массива или хеш-таблицы)?.

6.15 График дней рождения. Воспользуйтесь классом Graph для создания графика дней рождения (см. задачу 3.14).

6.16 Сумма квадратов. Напишите типизированный метод, который принимает в качестве параметров целые числа и возвращает сумму квадратов целых чисел, находящихся на числовой прямой между ними, включая граничные значения. Как вызвать метод для вывода значений суммы квадратов целых чисел из диапазона от 1 до 10? Каким образом должна измениться программа, если данные сначала нужно ввести в массив?

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


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz