
- •Федеральное агентство воздушного транспорта
- •Введение
- •Работа в интегрированной среде Qbasic(версияqb45) Начальная информация о системе QuickBasic
- •Загрузка системы QuickBasic
- •Текстовый редактор системы qbasic
- •Выполнение программы
- •Создание и Сохранение программы - команды меню File (Файл)
- •Запуск и перезапуск программы - Команды меню Run (Запуск)
- •Отладка программы
- •Подсистема помощи – help (Справка)
- •Использование окна «Immediate» (Немедленно)
- •ЛАбораторная Работа № 9. Программирование линейных алгоритмов
- •Способы описания типа данных в Qbasic
- •Ввод данных
- •1) Input a, b, c - оператор ввода данных в диалоговом режиме, где a, b, c - список имен переменных
- •Выполнение вычислений
- •Наиболее часто используемые функции языка Qbasic
- •Вывод данных и результатов
- •Лабоpатоpное задание
- •Лабораторное задание
- •Первоначальный вход в цикл выполняется через блок подготовки;
- •Сложные циклы
- •Лабораторное задание
- •Вариант №5
- •Вариант №6
- •Вариант №7
- •Вариант №8
- •Вариант №9
- •Вариант №10
- •Вариант №11
- •Вариант №12
- •Вариант №13
- •Вариант №14
- •Лабораторная работа № 12 Работа с одномерными массивами
- •Лабораторное задание
- •Лабораторное задание
- •Работа со строками. Строковые операции
- •Строковые функции и операторы
- •Лабораторное задание
- •Функции и операторы графического режима
- •Лабораторное задание
Вариант №11
Задание № 1.
Вычислить выражения, используя для организации цикла операторы FOR … NEXT (значения переменной п задавать с клавиатуры):
Задание № 2.
Определить
сумму ряда с заданной точностью t ()
и число слагаемых, необходимое для
достижения этой точности.
Задание № 3.
Даны натуральные числа п и m. Вывести сумму всех простых чисел в диапазоне от п до m.
Задание № 4.
Вычислить число точек с целочисленными координатами, попадающих в квадрат со стороной a, центр пересечения диагоналей которого находится в начале координат, но не попадающих во вписанный в него круг.
Вариант №12
Задание № 1.
Вычислить выражения, используя для организации цикла операторы FOR … NEXT (значения переменной п задавать с клавиатуры):
Задание № 2.
Определить
сумму ряда с заданной точностью t ()
и число слагаемых, необходимое для
достижения этой точности.
Задание № 3.
Дано натуральное число п. Вывести все совершенные числа, меньшие п (число является совершенным, если оно равно сумме своих делителей, включая 1, но не включая само число).
Задание № 4.
Вводится последовательность ненулевых чисел, завершаемая нулем. Определить среднее арифметическое чисел данной последовательности.
Вариант №13
Задание № 1.
Вычислить выражения, используя для организации цикла операторы FOR … NEXT (значения переменной п задавать с клавиатуры):
Задание № 2.
Определить
сумму ряда с заданной точностью t ()
и число слагаемых, необходимое для
достижения этой точности.
Задание № 3.
Дано натуральное число п. Вывести число, меньшие п с максимальной суммой делителей.
Задание № 4.
Вводится последовательность ненулевых чисел, завершаемая нулем. Определить среднее арифметическое положительных чисел данной последовательности.
Вариант №14
Задание № 1.
Вычислить выражения, используя для организации цикла операторы FOR … NEXT (значения переменной п задавать с клавиатуры):
Задание № 2.
Определить
сумму ряда с заданной точностью t ()
и число слагаемых, необходимое для
достижения этой точности.
Задание № 3.
Дано натуральное число п. Вывести число, меньшие п с максимальным произведением делителей.
Задание № 4.
Вычислить число точек с целочисленными координатами, попадающих в прямоугольник со сторонами a и b, центр пересечения диагоналей которого находится в начале координат.
Лабораторная работа № 12 Работа с одномерными массивами
Цель работы:
Изучение приемов программирования с использованием массивов.
Закрепление навыков работы в отладочных режимах среды QBasic.
Массивом называют совокупность данных одного типа, обозначаемую одним именем. В зависимости от типа данных массивы могут быть числовыми или текстовыми. При работе с массивами, в ЭВМ под каждый элемент массива отводится ячейка памяти, обращение к которой осуществляется с помощью имени массива с индексом, например А(15). Положение элемента в массиве определяется индексами: одним - для одномерных массивов, двумя - для двумерных (матриц) и т.д. В QBasic допускаются массивы размерностью 255. Максимальное значение каждого индекса не должно превышать 32767.
Имя массива образуется так же, как имя простой переменной. Индексы заключаются в круглые скобки и разделяются запятой, если массив не одномерный. В качестве индексов использоваться числа, переменные или арифметические выражения, значения которых автоматически округляются до целого. Если индексы не числовые, то их значения должны быть определены заранее.
Примеры обозначения в QBASIC элементов массивов:
AQ(33), AQ(I), AQ(I + 4/3) - для одномерного массива;
AD(12,3), AD(I,J), AD(I/2,J+3) - для двумерных массивов.
В случае, когда какой-либо из индексов массива превышает 10, массив должен быть заранее объявлен оператором DIM. В операторе DIM указываются имена массивов и в круглых скобках верхние и нижние границы изменения индексов, которые должны быть целыми положительными числами или переменными, значения которых ранее определены в программе.
Если в процессе выполнения программы значение индекса превысит верхнюю границу массива, то система выдаст сообщение Subscript out of range (Индекс вне диапазона).
Например, оператор DIM ASD12(5 TO 50) AS INTEGER описывает одномерный целочисленный массив, имя которого ASD12, а индексы могут принимать значения от 5 до 50, т.е. под этот массив выделяется 46 ячеек памяти.
Значение нижней границы индексов может быть опущено, и тогда по умолчанию оно принимается равным нулю, например, оператор DIM MASSIV1(15) описывает одномерный массив MASSIV1, элементы которого принимают вещественные значения обычной точности (тип SINGLE по умолчанию),а индексы могут принимать значения от 0 до 15, т.е. зарезервировано 16 ячеек памяти.
Обработка массивов в QBasic осуществляется поэлементно, в том числе и ввод-вывод массива. Если массив содержит несколько элементов, то задать их значения можно с помощью операторов присваивания:
DIM Q(1 TO 4)
Q(1)=0.25: Q(2)=0.12: Q(3)=0.35: Q(4)=0.28
или с помощью оператора ввода:
DIM Q(1 TO 4)
INPUT Q(1), Q(2), Q(3), Q(4)
Вывод массива осуществляется с помощью оператора PRINT:
PRINT Q(1); Q(2); Q(3); Q(4) – этот оператор выводит значения элементов в строку.
PRINT Q(1), Q(2), Q(3), Q(4) – этот оператор выводит значения элементов массива в строку в зонном формате (на каждое значение отводится по 14 колонок).
В случае, когда массив содержит много элементов и перечисление их при вводе-выводе становится неудобным, организуются циклы. Поскольку количество элементов массива всегда известно, для ввода и вывода значений элементов массива используются циклы с заранее известным числом повторений
Ниже приведены фрагменты программ, представляющие возможные варианты ввода и вывода значений элементов одномерных массивов:
REM Ввод массива с помощью ' оператора "INPUT" DIM n, I AS INTEGER INPUT n DIM Q(n) FOR I=1 TO n INPUT Q(I) NEXT I |
REM Ввод массива с помощью 'оператора " INPUT " из файла OPEN "d:\dan.dat" FOR INPUT AS #1 DIM n, I AS INTEGER INPUT n DIM Q(n) FOR I=1 TO n INPUT #1, Q(I) NEXT I |
REM Ввод массива с помощью 'оператора "READ" DIM I AS INTEGER DATA 5,7,12,2,0,7,23,6,4,8,1 DIM Q(1 TO11) FOR I=1 TO 11 READ Q(I) NEXT I |
REM Ввод массива с помощью ' датчика случайных чисел*** RANDOMIZE TIMER DIM n, I AS INTEGER INPUT n DIM Q(n) FOR I=1 TO n Q(I)= FIX(RND*60) ' любая формула NEXT I |
REM Вывод массива на экран в строку FOR I=1 TO N PRINT Q(I); NEXT I REM Вывод массива на экран в столбик FOR I=1 TO N PRINT Q(I) NEXT I |
REM вывод массива в файл OPEN "d:\rez.dat" FOR OUTPUT AS #2 FOR I=1 TO N PRINT #2,Q(I); NEXT I |
ПРИМЕР 12.1 Дан массив целых чисел. Найти значение максимального элемента. Если таких элементов несколько, то определить их количество.
REM Нахождение максимального элемента массива
DIN N, I, K YMAX AS INTEGER
INPUT "Введите размер массива N= ", N
DIM X(1 TO N) AS INTEGER
REM Формируем массив с помощью датчика случайных чисел
RANDOMIZE TIMER
FOR I = 1 TO N
X(I) = RND*50 + 20
PRINT X(I); 'выводим массив на экран в строку
NEXT I
PRINT 'переходим на новую строку после вывода массива
REM Введем переменную YMAX для хранения в ней максимального значения
YMAX = X(1) 'Начальное значение переменной YMAX
K = 1 'Начальное значение счетчика равных максимальных элементов
FOR I = 2 TO N
IF X(I) > YMAX THEN 'Если YMAX окажется меньше очередного элемента
YMAX = X(I) 'то его значение заменяем
K = 1 'устанавливаем начальное значение счетчика максимальных элементов
ELSEIF X(I) = YMAX THEN 'Если очередной элемент окажется равным YMAX
K = K + 1 'увеличиваем значение счетчика равных максимальных элементов
END IF
NEXT I
PRINT 'Пропускаем строку
REM Выводим значение максимального элемента массива и их количество
PRINT "YMAX="; YMAX, "КОЛИЧЕСТВО="; K
END
Пояснения к программе:
описываем целочисленные переменные: N - размер массива, I - переменная (счетчик) цикла, K - счетчик элементов, равных максимальному, YMAX – переменная для хранения максимального элемента массива;
вводим размер массива N и описываем целочисленный массив X из N элементов;
в цикле формируем массив с помощью датчика случайных чисел и выводим его на экран в одну строку;
устанавливаем начальное значение переменной YMAX – значение первого элемента массива X и начальное значение счетчика K;
последовательно просматриваем элементы массива и если очередной элемент больше, чем YMAX, то меняем значение YMAX и устанавливаем начальное значение счетчика K, если очередной элемент массива равен YMAX, то значение счетчика K увеличивается на 1.
после завершения цикла выводим результаты.
ПРИМЕР 12.2 Дан массив чисел. Найти, сколько в нем пар одинаковых соседних элементов.
REM Нахождение пар одинаковых элементов массива
DIN N, I, K AS INTEGER
INPUT "Введите размер массива N= ", N
DIM MAS(1 TO N)
REM Формируем массив с помощью датчика случайных чисел
RANDOMIZE TIMER
FOR I = 1 TO N
MAS(I) = RND*50 + 20
PRINT MAS(I); 'выводим массив на экран в строку
NEXT I
PRINT 'переходим на новую строку после вывода массива
K = 0 'Начальное значение счетчика пар равных элементов массива
FOR I = 1 TO N-1
IF MAS(I) = MAS(I+1) THEN K=K+1
NEXT I
PRINT 'пропускаем строку
REM Выводим количество пар равных соседних элементов массива
PRINT "K= "; K
END
Пояснения к программе:
начало программы аналогично предыдущему примеру;
устанавливаем начальное значение счетчика K равное 0;
последовательно сравниваем пары элементов массива и если они совпадают, то значение счетчика K увеличивается на 1. Следует обратить внимание на то что переменная цикла I изменяется от 1до (N-1), поскольку в цикле сравниваются элементы массива с индексами I и (I+1) – изменение переменной цикла до N приведет к выходу за границу диапазона;
после завершения цикла выводим результаты.
ПРИМЕР 12.3 Дан массив чисел. Упорядочить его по убыванию.
Для решения задачи можно использовать алгоритм сортировки с помощью прямого выбора:
выбираем наибольший элемент в массиве;
меняем его местами с первым элементом;
повторяем процесс с оставшимися (N-1) элементами, (N-2) элементами и т.д. до тех пор, пока не останется последний, самый маленький элемент.
REM Сортировка массива
DIN N, I, J AS INTEGER
INPUT "Введите размер массива N= ", N
DIM A(1 TO N)
REM Формируем массив с помощью датчика случайных чисел
RANDOMIZE TIMER
FOR I = 1 TO N
A(I) = RND*50 + 20
PRINT A(I); 'выводим массив на экран в строку
NEXT I
PRINT 'переходим на новую строку после вывода массива
FOR I = 1 TO N-1
MAX = A(I) 'устанавливаем начальное значение текущего максимума
NM = I 'устанавливаем начальное значение номера максимального элемента
FOR J = I + 1 TO N
IF MAX <= A(J) THEN
MAX = A(J)
NM = J
END IF
NEXT J
SWAP A(I), A(NM) 'меняем местами элементы массива
NEXT I
REM Вывод упорядоченного массива на экран
FOR I = 1 TO N
PRINT A(I); 'выводим упорядоченный массив на экран в строку
NEXT I
END
Пояснения к программе:
вводим размер массива, формируем массив и выводим его на экран;
организуем два вложенных цикла: внешний цикл регулирует размер неупорядоченного массива, во внутреннем цикле осуществляется поиск максимального элемента неупорядоченного массива и его индекса;
меняем местами первый элемент неупорядоченного массива и найденный максимальный элемент – оператор SWAP;
с каждым витком внешнего цикла размер неупорядоченного массива уменьшается на единицу;
после завершения внешнего цикла выводим на экран упорядоченный массив.