Саша 18 10 1980
Для решения этой задачи для других данных необходимо внести изменения в оператор данных data и вновь запустить программу на выполнение. Пример изменения данных:
дано: Оля, 1, 12, 1974 data «Оля», 1, 12, 1974
В традиционных версиях языка Бейсик с нумерацией строк операторы data выделяются в отдельные группы и нумеруются обычно с числа 1000. Это позволяет четко отделить в программах описание данных от операторов их обработки:
алг «дни рождения» 10 ' дни рождения нач 20 cls вывод («день рождения:») 30 print «день рождения:» чтение nт$, dn, ms, gd 40 read nm$, dn, ms, gd вывод nm$; dn; ms; gd 50 print nm$; dn; ms; gd кон 60 end дано: Иванов, Саша, 18, 10, 1980 1000 data «Саша», 18, 10, 1980
При размещении нескольких таблиц или других групп данных в программах на Бейсике полезным средством являются операторы restore (операторы чтения данных с заданного номера или метки): 1) оператор чтения данных после метки test: restore test - чтение данных после метки test; 2) оператор чтения данных с оператора 1000: restore 1000 - чтение данных, начиная с 1000-го оператора; 3) оператор чтения данных с самого начала: restore - чтение данных сначала. В задачах обработки данных переработке подвергаются не только числовые данные, но и символьная информация. Для этих целей в программах используются символьные данные, переменные и массивы. Символьные данные - это последовательности символов. В текстах программ на Бейсике символьные данные заключаются в двойные кавычки. Примеры: «мама», «корень=», «2 + 1» и т.д. Во входных данных символьные данные записываются в соответствии с входными спецификациями. Символьные переменные - это переменные, значениями которых являются символьные данные. В программах на Бейсике символьными явлются те переменные, к имени которых справа приписан знак $. Примеры символьных переменных: s$, p$, sl$, pr$. Числовые данные и переменные в языке Бейсик могут быть трех основных типов - целочисленные, вещественные и вещественные двойной точности. В программах для этих типов переменных используются следующие обозначения:
n%, m%, nl%, m3% - целочисленные х, у, xl, y5 - вещественные а#, b#, al#, b8# - вещественные двойной точности
В качестве примера решения задач обработки данных рассмотрим алгоритм и программу вывода списка дней рождения членов семьи по данным, представленным в следующей таблице:
Дни рождения:
Для представления данных из этой таблицы в программе воспользуемся следующей последовательностью операторов data:
Дни рождения:
dni: ' дни рождения data «мама», 26, 6, 1949 data «папа», 22, 5, 1946 data «Сережа», 25, 10, 1973 data «Оля», 1, 12, 1974 data «», 0, 0, 0
Обратите внимание! 1. Каждый оператор data здесь отвечает одной строке таблицы. 2. Последний оператор data содержит пустую «запись» - пустое имя «» и три нуля, означающие конец данных. Такая форма представления данных позволяет достаточно просто вносить изменения, исправления и добавления в данные. Эти изменения в таблице переносятся в соответствующие операторы data, а добавление или удаление строк в таблице отображается добавлением или удалением соответствующих операторов в программе. Рассмотрим алгоритм и программу вывода списка дней рождения в семье, составленные в соответствии с выбранным представлением данных:
алг «дни рождения» ' дни рождения нач сls вывод («дни рождения») print «дни рождения» чтение таблицы dni restore dni цикл do чтение (пп, d, т, g) read nn$, d, m, g при пп = «» вых if nn$ = «» exit then do вывод (пп, d, m, g) print nn$, d, m, g кцикл loop кон end
Для формирования и обработки новых групп данных в программах используются массивы. Массив в программе - это область оперативной памяти ЭВМ, используемая для размещения некоторой совокупности данных. Использование массивов в программах на Бейсике требует описания их с помощью операторов dim. В операторах dim для каждого массива указывается его имя и размеры. Массивы в программах могут быть одномерными, двумерными, трехмерными и т. д. Примеры описаний массивов: одномерные массивы из 20 элементов - dim nm$(20), d(20), m(20) двумерные массивы из 2х10 и 10х10 элементов – dim fm$(2, 10), tb(10, 10) Обращения к элементам массивов записываются в зависимости от размерности, указанной в их описаниях. Примеры обращений к одномерным и двумерным массивам:
nm$(4) = «Костя» d(4) = 10 fm$(l, 10) = «Петров» tb(3, 4) = 3*4 В программах на Бейсике операторы dim являются выполняемыми. Результатом их выполнения является выделение участков памяти для хранения соответствующих массивов. По этой причине в качестве размеров массивов могут указываться переменные, которые должны получить конкретные положительные значения до выполнения оператора dim. Описание двумерного массива с переменной n в качестве его размеров:
n = 5 ' n = 5 dim tb(n, n), ' массив tb[1: n, 1: n]
В качестве примера использования массивов с переменными размерами приведем алгоритм и программу формирования «Таблицы умножения n´ n».
Таблица умножения 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25
В приведенных ниже алгоритме и программе расчета и вывода таблицы умножения для ее размещения используется двумерный массив tb(n, n) c n = 5:
алг «таблица умножения» ' таблица умножения п =5 n=5 массив tb[1: n, 1: n] dim tb(n, n) нач сls от k = 1 до п цикл for k = 1 to n от 1 = 1 до п цикл for l = 1 to п tb[k, l]: = k*l tb(k, l) = k*l вывод tb[k, l] print tb(k, l); кцикл next 1 нов_строка print кцикл next k кон end
Запуск этой программы на ЭВМ приведет к получению приведенной выше картинки с таблицей умножения размера 5х5. Для получения таблицы умножения размера 8х8 или 10 х 10 достаточно изменить в программе значение n = 5 на n = 8 или n = 10. Перечисленных базовых средств достаточно для решения большого числа задач обработки данных: экономических, статистических, инженерных, научных и т.п. Однако при постановке решения задач обработки данных важно четко различать место размещения и виды обрабатываемых данных. По способу использования при решении задач различаются следующие данные: исходные; результирующие. Исходные данные - конкретные данные решаемых задач, отвечающие принятой постановке. Исходные данные могут оказаться как допустимыми, так и недопустимыми по постановке решаемых задач. Результирующие данные - это результаты решения поставленных задач при введенных исходных данных. Сообщения о невозможности решения задачи также считаются результирующими данными. По способу размещения и использования в обрабатывающих алгоритмах и программах данные подразделяются на: · входные; · выходные; · сохраняемые. Входные данные - это данные, вводимые в ЭВМ во время работы программы. Входные данные могут вводиться с клавиатуры, магнитных дисков или с помощью других устройств ввода информации. Выходные данные - данные, выводимые ЭВМ как результат работы программ. Выходные данные могут выводиться на экран, на печать, на магнитные диски или другой носитель информации. Сохраняемые данные - данные, которые хранятся в долговременной памяти ЭВМ и могут обновляться как результат работы программ. Эти данные могут храниться и многократно обновляться на магнитных дисках в течении длительного промежутка времени. В качестве примера рассмотрим задачу поиска номеров телефонов по телефонному справочнику. Исходной информацией в этой задаче является «Телефонный справочник», который можно представить следующей таблицей:
Телефонный справочник
Результирующая информация - номера телефонов и сообщения об отсутствии таких сведений. Информация о результатах поиска информации может выводиться на экран ЭВМ. Диалог с компьютером может проходить по следующему сценарию, в котором отражаются исходные и выходные данные: Сценарий:
Для хранения таблицы «Телефонного справочника» в программе можно воспользоваться следующими операторами data:
tel: 'номера телефонов: data «Вова», «125-14-80» data «Саша», «222-01 -02» data «Маша», «102-99-00» data «», «»
При выбранных представлении данных и сценарии диалога решением могут служить следующие алгоритм и программа:
АлгоритмПрограмма алг «Телефонный справочник» ' Телефонный справочник нач сls вывод («поиск номера телефона») print «поиск номера телефона» запрос(«имя=», NN) input «имя=», NN$ чтение-таблицы tel restore tel цикл do чтение (имя, пот) read im$, nm$ если имя = NN то if im$ = NN$ then вывод («номер:», пот) print «номер:», nm$ выход [из цикла] exit do инес имя = «» то elseif im$ = «» then вывод («нет такого») print «нет такого» выход [из цикла] exit do все end if кцикл loop кон end
Из приведенного примера видно, что при составлении алгоритмов и программ обработки данных важную роль играют не только сценарии ввода-вывода данных в ЭВМ, но и представление данных. От выбора этих представлений существенно зависят способы доступа к данным и процедуры обработки. Однако наиболее важным при составлении алгоритмов и программ обработки данных прежде всего является четкое определение исходных и результирующих данных, а уже затем - подбор представлений входных, выходных и сохраняемых данных на ЭВМ. Систематические методы разработки алгоритмов и программ обработки данных состоят в том, что постановка решаемых задач, выбор представлений данных и составление спецификаций диалога проводятся до составления детальных алгоритмов и программ обработки данных. Подобный подход к составлению алгоритмов и программ обработки данных позволяет проверять правильность составляемых алгоритмов и программ по отношению к этим спецификациям и обеспечить в них полное устранение ошибок. Приведем пример систематического составления алгоритмов и программ обработки данных с использованием спецификаций для решения задачи «Выбор друзей по росту». Допустим, что исходные данные этой задачи представлены следующей таблицей:
Примем, что запросы на поиск друзей по росту и результаты поиска будут выводиться на экран по следующему сценарию:
Сценарий «Поиск друзей»
Для представления данных о друзьях в программе воспользуемся следующими операторами data: dan: 'данные о друзьях data «Иванов», «Саша», 180 data «Петров», «Вова», 160 data «Сидоров», «Миша», 190 data «», «», 0 Тогда в качестве решения на ЭВМ поставленной задачи в соответствии с выбранными сценарием и представлением сохраняемых данных, могут быть приняты следующие алгоритм и программа обработки данных.
АлгоритмПрограмма алг «выбор друзей» ' выбор друзей нач сls вывод («выбор друзей по росту») print «выбор друзей по росту» запрос («мин_рост =>», min) input «мин_рост =>», mn запрос («макс_рост =<», тах) input «макс_рост =<», mх чтение-таблицы dan restore dan n: = 0 n = 0 цикл do чтение (фам, имя, r) read fm$, im$, r при фам = «» вых if fm$ = «» then exit do если min £ r и r £ max то if mn< = r and r < = mx then вывод (фам, имя) print fm$, im$ n: = n+1 n = n+1 все end if кцикл loop если n = 0 то if n = 0 then вывод «нет таких» print «нет таких» кон end
Сравнение приведенных алгоритма и программы со сценарием диалога показывает их полное соответствие друг другу. Прогон этой программы на ЭВМ при самых различных вариантов запросов подтвердит правильность ее работы, а доказательство ее правильности потребует знания техники анализа результатов ее выполнения для всех комбинаций исходных данных.
|