Алгоритм сочетания цикла и разветвления
Цель работы: получение практических навыков разработки и программирования вычислительного процесса сочетания циклической и разветвляющейся структуры.
Основы теории
Использование массивов. При выполнении заданий лабораторной работы №1 потребуется использование массива, т.е. упорядоченной последовательности величин, обозначаемой одним именем. Чтобы получить доступ к элементу массива нужно указать его имя и индекс. Имя массива образуется также как и имя простой переменной (буква и буква с цифрой). Индекс массива заключается в круглые скобки.
Задание размерности массива M осуществляется оператором DIM M(N), где N – целое число.
Примеры
10 DIM M(5)
20 DIM M(10)
30 N=100 : DIM M(N)
Ввод последовательности чисел в память ЭВМ может осуществляться двумя способами с использованием цикла.
1. Почленный ввод массива с клавиатуры
Пример
10 INPUT "Введите количество членов последовательности ";N
20 DIM(N)
30 FOR I = 1 TO N STEP 1
40 PRINT "А(";I;")="; : INPIT A(I)
50 NEXT I
При этом после ввода N на экране будут появляться вопросы:
A(1) = ?
A(2) = ?
...,
и пользователь будет присваивать элементам массива соответствующие значения.
2. Заполнение массива случайными числами.
Для получения случайных чисел (с.ч.) используются следующие операторы:
RANDOMIZE(X) – инициализирует генератор случайных чисел, где X – число, используемое для инициализации генератора с.ч.;
RND(N) – возвращает число между 0 и 1. N – значение, устанавливающее то, как RND генерирует следующее с.ч.
Значения N | RND возвращает: |
меньше 0 | то же самое число для любых N |
больше 0 (или опущено) | следующее случайное число |
последнее сгенерированное число |
Для того чтобы получить целое случайное число D, можно использовать запись:
D = INT( RND * C ),
где С – порядок числа (например С= 10; С= 100).
Пример
10 INPUT "Введите количество членов последовательности ";N
20 DIM(N)
30 FOR I = 1 TO N STEP 1
40 A(I) = INT( RND * 100 )
50 NEXT I
В результате выполнения этого фрагмента будет сгенерирована последовательность целых чисел, находящихся в диапазоне 0 < A(I) < 1.
Для просмотра полученной последовательности в предыдущий фрагмент необходимо добавить строки:
25 PRINT "Получена последовательность :"
45 PRINT "А(";I;")="; A(I)
Задания для самостоятельной подготовки
2.1. Изучить возможности языка программирования для реализации вычислительного процесса сочетания циклической и разветвляющейся структуры.
2.2. Разработать алгоритм решения в соответствии с заданием.
2.3. Составить программу решения задачи.
2.4. Подготовить тесты (число тестов равно числу ветвей вычислительного процесса) для проверки правильности функционирования программы.
Задания к работе
Выполнить программу на ЭВМ с использование массивов. В программе указать название работы, фамилию исполнителя, группу и номер варианта задания. На печать вывести значения вводимых исходных данных и результаты вычислений.
Варианты заданий
1. Дано натуральное число n и действительные числа a1, ..., an. Определить количество членов последовательности a1, ..., an, являющихся четными и нечетными числами.
2. Дано натуральное число n и действительные числа c1, ..., cn. Определить количество членов последовательности q1, ..., qn, кратных 3 и некратных 5.
3. Дано натуральное число n и действительные числа x1, ..., xn. Определить количество членов последовательности x1, ..., xn, являющихся квадратами четных чисел.
4. Дано натуральное число n и действительные числа y1, ..., yn. Определить количество членов последовательности y1, ..., yn, имеющих четные порядковые номера и являющихся нечетными числами.
5. Дано натуральное число n и действительные числа a1, ..., an. Определить количество членов последовательности a1, ..., an, удовлетворяющих условию .
6. Даны натуральные числа n и z1, ..., zn. Найти те члены последовательности z1, ..., zn, которые являются удвоенными нечетными числами.
7. Даны натуральные числа n и t1, ..., tn. Найти те члены последовательности t1, ..., tn, которые при делении на 7 дают остаток 1, 2 или 5.
8. Дано натуральное число n и целые числа x1, ..., xn. Получить сумму тех чисел данной последовательности, которые кратны 5.
9. Дано натуральное число n и целые числа x1, ..., xn. Получить сумму тех чисел данной последовательности, которые удовлетворяют условию .
10. Даны натуральные числа n, q, целые числа g1, ..., gn. Получить произведение чисел последовательности g1, ..., gn, кратных q.
11. Дано натуральное число n и действительные числа a1, ..., an. Получить max(a1, ..., an), min(a1, ..., an).
12. Дано натуральное число n и действительные числа a1, ..., an. Получить .
13. Дано натуральное число n и действительные числа a1, ..., an. Получить .
14. Дано натуральное число n и действительные числа a1, ..., an. Определить, каких членов в последовательности a1, ..., an больше - положительных или отрицательных.
15. Даны натуральное число n и целые числа p, q, s1, ..., sn ( p>q>0). В последовательности определить члены, модуль которых при делении на p дает остаток q.
16. Даны натуральное число n, и целые числа a1, ..., an. Получить последовательность b1, ..., bn, которая отличается от исходной тем, что все нечетные члены удвоены, а четные утроены.
17. Дано натуральное число n. Исключить из записи числа n цифры 0 и 5, оставив прежним порядок остальных цифр. Например, из числа 5901509 должно получиться 919.
18. Дано натуральное число n. Выяснить, можно ли представить его в виде суммы двух квадратов натуральных чисел. Если можно, то указать все пары x, y таких чисел, что .
19. Дано натуральное число n. Получить все его натуральные делители.
20. Дано натуральное число n. Вычислить , где ai = i, bi = i2 если i - нечетное ai = i/2, bi = i3 в противном случае.
21. Даны натуральные числа n, b0, ..., bn. Вычислить f(b0)+ (b1)+...+ (bn), где f(x) = x2, если x кратно 3; f(x) = x, если x при делении на 3 дает остаток 1; f(x) = x/3 - в остальных случаях.
22. Даны натуральное число n, и целые числа a, x1, ..., xn. Если в последовательности x1, ..., xn есть хотя бы один член равный a, то получить сумму всех членов, следующих за первым таким членом.
23. Даны натуральное число n, и целые числа a, x1, ..., xn. Определить, сколько раз элемент равный встречается в последовательности x1, ..., xn.
24. Дано натуральное число n и целые числа a1, ..., an. Определить наибольшие из четных и нечетных членов последовательности a1, ..., an.
25. Дано натуральное число n и целые числа a1, ..., an. Определить наименьшие из четных и нечетных членов последовательности a1, ..., an.
26. Дано натуральное число n и целые числа а1...аn. Получить все числа, которые входят в последовательность по одному разу.
27. Дано натуральное число n и целые числа а1...аn, b1...bn. Получить все члены последовательности а1...аn, которые не входят в b1...bn.
28. Дано натуральное число n и целые числа а1...аn. Получить все числа, которые входят в последовательность более чем по одному разу.
29. Дано натуральное число n и целые числа а1...аn. Для каждого из чисел а1...аn определить, сколько раз оно входит в данную последовательность.
30. Дано натуральное число n, целые числа m, а1...аn. Найти три натуральных числа i, j, k, каждое из которых не превосходит n, такие, что . Если таких чисел нет, то сообщить об этом.
ЛАБОРАТОРНАЯ РАБОТА № 2
ВЛОЖЕННЫЕ ЦИКЛЫ
Цель работы: получение практических навыков в программировании вычислительных процессов вложенной циклической структуры и навыков в организации вывода информации в виде таблиц.
Основы теории
В Бейсике массивы могут быть одномерные и двумерные. В двумерном массиве каждый элемент идентифицируется номером строки и номером столбца, на пересечении которых он расположен. Положение элемента в массиве определяется индексами: одним – для одномерных массивов и двумя – для двумерных. При записи элемента массива индекс (индексы) записывается в круглых скобках после имени массива. Если индексов два, то они разделяются запятой. В качестве индексов могут употребляться любые арифметические выражения.
Если значение арифметического выражения содержит дробную часть, то при определении индекса она отбрасывается. Появление отрицательного значения индекса вызывает сообщение об ошибке.
Под массивы, так же как и под переменные, машина должна выделять память. Под переменную одна ячейка памяти выделяется, как только эта переменная первый раз встречается в программе. Для массивов такой способ не годится. Машине нужно сообщить, какие массивы будут использованы в программе и каков размер каждого массива. Эта информация задается в операторе описания массивов DIM. В операторе DIM указываются имя массива и в круглых скобках верхние границы изменения индексов, которые должны быть целыми положительными числами (нижняя граница фиксирована и равна 1). В Бейсике могут использоваться массивы как числовые, так и символьные. Например, оператор
DIM A(3), B(4,5), T$(12)
описывает два числовых массива: массив А, состоящий из трех элементов: А(1), А(2), А(3), и массив В, содержащий 4 строки и 5 столбцов, т.е. 20 элементов, и символьный массив Т$, состоящий из 12 элементов.
Под двумерный массив выделяется линейный участок памяти, в котором массив располагается по строкам.
Описание массива должно появляться в программе до первого обращения к элементам этого массива. Для улучшения структуры программы описание всех массивов рекомендуется давать в начале программы.
Замечания.
1. Не рекомендуется использовать одинаковые имена для переменных и массивов.
2. Если описание массива отсутствует, то по умолчанию максимальное значение каждого индекса равно 10, т.е. под одномерный массив выделяются 10 ячеек памяти, под двумерный –100 (10×10).
Любая обработка массивов, а также ввод – вывод массивов осуществляется поэлементно.
Например, ввод одномерного массива А, содержащего 10 элементов, можно осуществить при помощи операторов
10 DIM A(10)
20 FOR I=1 TO 10
30 INPUT A(I)
40 NEXT I
Ввод двумерного массива В размером 4´5 можно осуществить при помощи операторов
10 DIM B(4,5)
20 FOR I=1 TO 4
30 FOR J=1 TO 5
40 INPUT B(I,J)
50 NEXT J
60 NEXT I
Ввод двумерного массива в приведенной программе осуществляется по строкам.
Вывод двумерных массивов для повышения наглядности рекомендуется осуществлять по строкам, начиная вывод каждой новой строки массива в новую строку экрана. Например, вывод массива В размером 4´5 можно осуществить при помощи операторов
10 DIM B(4,5)
...........…………
150 FOR I=1 TO 4
160 FOR J=1 TO 5
170 PRINT B(I,J);
180 NEXT J
190 PRINT
200 NEXT I
...........…….
Элементы одной строки будут выводиться в плотном формате. Оператор 190 осуществляет перевод печати на новую строку.
Пример. В сессию 10 студентов одной группы сдали по 5 экзаменов. Результаты сессии представлены в виде матрицы М(10´5). Определить средний балл по каждому предмету. Результаты получить в виде одномерного массива С, содержащего 5 элементов.
Решение. Просуммируем элементы каждого столбца матрицы М и, разделив на число студентов, поместим результат в соответствующий элемент массива С.
Для наглядности исходные данные задаются в программе в операторах DATA. В одном операторе DATA заданы оценки всех студентов по одному предмету, т.е. элементы одного столбца матрицы М. Ввод матрицы М осуществляется по столбцам.
10 DIM M(10,5),C(5)
20 DATA 5,4,5,3,4,3,3,3,4,4
30 DATA 5,5,3,5,3,4,5,4,5,4
40 DATA 3,4,5,3,4,5,3,3,3,3
50 DATA 4,4,4,4,4,5,4,4,3,3
60 DATA 4,3,3,3,5,4,3,3,5,5
70 FOR J=1 TO 5
72 FOR I=1 TO 10: READ M(I,J): NEXT I
74 NEXT J
80 FOR J=1 TO 5
90 S=0
100 FOR I=1 TO 10:S=S+M(I,J):NEXT I
110 C(J)=S/10
120 NEXT J
130 PRINT ' ТАБЛИЦА СРЕДНИХ БАЛЛОВ ПО ЭКЗАМЕНАМ'
140 FOR I=1 TO 5:PRINT C(I),: NEXT I
150 PRINT
160 STOP
RUN
ТАБЛИЦА СРЕДНИХ БАЛЛОВ ПО ЭКЗАМЕНАМ
3.8 4.3 3.6 3.9 3.8
STOP AT LINE 160