Рассмотрим программу анализа 20 000 анкет, заполненных студентами некоторого колледжа. Часть выводимых результатов представлена в виде табл. 3.1.
Для каждой этнической группы сумма количества мужчин и женщин оказывается чуть меньше целого, поскольку некоторые респонденты ответили не на все вопросы. На самом деле выводимый текст был более сложным. Я привел все семь строк, которые были в оригинале, но некоторые столбцы оригинальной таблицы исключил. На самом деле их было 25, а таблиц таких было три (по одной на каждый из двух студенческих городков п одна общая). Кроме того, нужно было вывести еще несколько похожих таблиц, например, количество студентов, не ответивших на каждый конкретный вопрос. Каждая анкета представлялась в виде записи, в которой поле 0 содержало этническую группу, представленную целым от 0 до 7 (7 возможных категорий + «отказался отвечать»), поле 1 содержало номер студенческого городка (целое между 0 и 2), поле 2 содержало информацию о гражданстве и так далее до поля 8.
Программист подошел к написанию программы как системный аналитик высокого уровня. Проработав с ней два месяца и выдав на-гора тысячу строк кода, он решил, что работа наполовину сделана. Я понял, чем вызваны его затруднения, взглянув на программу. Она содержала 350 отдельных переменных: 25 столбцов х 7 строк х 2 таблицы. За объявлением переменных следовала запутанная логическая система, в которой определялось, какую из переменных следует увеличивать в соответствии со значением обрабатываемого поля. Подумайте над тем, как бы вы стали писать подобную программу.
Первое предположение заключается в том, что числа следует хранить в массиве. Следующий выбор сделать сложнее: должна ли структура массива соответствовать выводимым данным (три измерения: городок, этническая группа, 25 столбцов) или входным (четыре измерения: городок, этническая группа, категория и значение в этой категории)? Если пс учитывать деление па студенческие городки, графически эти варианты можно изобразить следующим образом (рис. 3.1).