Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Программа к задаче 9

INPUT "Введите числа X и Y", x, y

IF x<y THEN k=x ELSE k=y 'определение минимального (переменная К) значения из X и Y

FOR i = k TO 1 STEP –1 'перебор чисел от К до 1

IF x MOD i=0 AND y MOD i=0 THEN?"НОД="; i: EXIT FOR 'если Х и Y делятся нацело на i, НОД=i найден

NEXT

Взятие модуля Х по I означает получение целого остатка от деления Х на I. Иными словами, если x MOD i=0, то число X кратно числу i.

@ Задачи для самостоятельного решения.

1). Напечатать все числа, на которые число Х делится без остатка.

2). Вычислить наименьшее общее кратное (НОК) чисел X и Y. НОК – это минимальное число, которое делится на Х и Y без остатка. Общим кратным, конечно, является произведение X на Y, но оно не обязательно наименьшее. Так если Х=6, а Y=9, то X*Y=54. Однако еще есть общие кратные 36 и 18. Т.е. НОК=18. Удобно поиск НОК осуществлять следующим образом. Сначала получить произведение N=XY. Затем, перебирая числа от 2 до N попытаться найти другое значение, которое делится на Х и Y без остатка.

3). Имеется N произвольных чисел Х. Составить программу вычисления и напечатать сумму всех положительных чисел S, число отрицательных чисел К и произведение P всех чисел, не равных нулю. В качестве значений Х использовать последовательные цифры натурального ряда с изменяющимися знаками (Х=0, –1, 2, –3, 4, –5).

4). В банке хранится известное количество N срочных вкладов. О каждом вкладе известно его значение на начало года – X. Размер годовой прибыли зависит от величины вклада. Если вклад до 10000 руб. – прирост составляет 10% годовых, если до 50000 руб. – 12%, если больше – 15%. Вычислить и напечатать значение каждого вклада на конец года Y, а также сумму всех вкладов на начало SX и конец SY года. Задачу решить двумя способами – с оператором цикла и без него. Указание. Процент увеличения вклада удобно отобразить в виде коэффициента. Так при 12% годовых, значение вклада Y на конец года соответствует 1.2X.

Оператор итерационного цикла имеет вид

üWHILE условие

Операторы

WEND

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

Для примера снова решим задачу 3 (вычислять и печатать Y=2/Х до обнаружения первого Х=0). Программа приведена ниже.

INPUT x

WHILE x<>0

?х; 2/x

INPUT x

WEND

Если параметр условие опущен, цикл будет выполняться бесконечно. В этом случае внутри него должно быть предусмотрено средство выхода, например строка GOTO. Кроме того, в Бейсике имеется еще один оператор цикла с условием. Он имеет две разновидности: цикл с предусловием (условие рассматривается до входа в цикл)

üDO [WHILE/UNTIL условие]

Операторы

LOOP

и цикл с постусловием (условие оценивается после выполнения тела цикла)

üDO

Операторы

LOOP [WHILE/UNTIL условие]

Ключевое слово UNTIL действует обратным образом по отношению к WHILE, т.е. UNTIL-цикл будет выполняться до тех пор, пока условие не станет истинным. Иными словами WHILE условие это UNTIL NOT условие.

Здесь, имеется собственный оператор принудительного выхода из цикла

üEXIT DO

Структуру с постусловием удобно применять в случае, если цикл необходимо выполнить хотя бы один раз независимо от значения условия или, если само условие формируется в цикле и не может быть оценено до входа в цикл.

@ Задачи для самостоятельного решения.

1). Решите задачу 4, используя оператор WHILE, а затем оператор DO.

2). Суммировать элементы числового ряда вида 2+6+18+… до тех пор, пока сумма не превысит число 120. Напечатать получившуюся сумму и номер элемента, на котором произошло это событие.

 

Работа с массивами

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

INPUT n INPUT n,m FOR i=1 TO n DIM a(n) DIM b(n,m) FOR j=1 TO n FOR i=1 TO n FOR i=1 TO n PRINT b(i,j); INPUT a(i) FOR j=1 TO m NEXT j NEXT i INPUT b(i,j) PRINT NEXT j NEXT i ВводNEXT i вектора Ввод матрицы Вывод матрицы Рис. 16
Например, вектор А длиной К чисел и матрица В из N строк и M столбцов (всего из N×M элементов) выглядят следующим образом (рис. 15).

 
 

 

 


Цифры при имени массива, указывающие порядковый номер эле­мента, называются индексами. В алгоритмических языках элементы массивов АIи BIJобозначаются как А(I) и B(I,J). К массиву в целом обратиться нельзя. Обработка массива обычно означает последовательную обработку отдельных его элементов.

Оператор описания массивов. Если предполагается работа с массивами, предварительно следует “известить” об этом компьютер оператором вида

üDIM список_массивов

Описание массива содержит имя массива и его размерность. Например, оператор DIM A(20), B(4,6) читается как “Установить размерность одномерного массива А из 20 элементов и двумерного массива В из 24–х элементов (4 строки, 6 столбцов)”.

Программа к задаче 10 INPUT n DIM c(n) FOR i=1 TO n INPUT c(i) NEXT   Проверка    
m=c(1): k=1 FOR i=2 TO n IF m<c(i) THEN m=c(i): k=i NEXT ?m k m=5, k=1 i=2 5>2 i=3 5<7 m=7,k=3 i=4 7>4 i=5 7, 3

По умолчанию отсчет элементов в Бейсике начинается с нуля, то есть оператор DIM А(20) определяет на самом деле 21 элемент памяти (нулевой элемент можно игнорировать). Если есть необходимость установить нестандартную нумерацию, можно при определении размерности использовать указатель вида нижняя граница индекса ТО верхняя граница. Например, оператор DIM Y(5 TO 20, 1 TO 8) определяет двухмерный мас­сив Y, у которого первый индекс изменяется от 5 до 20, а второй – от 1 до 8. Размерность массива задается исходя из условий решаемой задачи. Первоочередной задачей при работе с массивами является ввод-вывод данных, который организуется с помощью циклов (рис. 16). Слева осуществляется ввод данных в вектор А размерностью N эле­ментов. В центре – в матрицу В размерностью N строк на M столбцов. Ввод осуществляется с помощью двух циклов, один из которых вложен в другой. В наружном цикле изменяется первый индекс I элемента матрицы В, во внутреннем – второй индекс J. Таким образом, второй индекс J изменяется быстрее, чем первый. Это означает, что ввод элементов матрицы будет производиться в следующей последовательности: B(1,1), B(1,2),..., B(1,M); B(2,1), B(2,2),..., B(2,M);...; B(N,1), B(N,2),... B(N,M), т.е. по строкам. Замечание. Два последних оператора могут быть объединены в один вида NEXT j,i (первым должен быть указан индекс внутреннего цикла, вторым – внешнего). Аналогичным образом осуществляется и вывод (фрагмент программы справа), но вместо оператора INPUT используется оператор PRINT. Здесь, однако, следует позаботиться об удобстве восприятия выводимых данных. Желательно, чтобы строка матрицы занимала на экране именно одну строку. Для этого во внутреннем цикле печати нужно поставить точку с запятой после оператора вывода (PRINT;), что подавляет переход на новую строку монитора после вывода каждого числа. Напротив, после завершения вывода всех элементов строки матрицы, как раз следует перейти на следующую строку монитора. Для этого ниже оператора NEXT j следует поставить пустой оператор PRINT, который переведет вывод на следующую строку экрана. Кроме того, для обеспечения фиксированного расположения элементов матрицы друг под другом в столбцы, имеет смысл использовать для вывода не оператор PRINT, а PRINT USING (например, PRINT USING “####.##”; b(i,j);).

Задача 10. В векторе С размерности N элементов найти максимальный по значению элемент и его номер в С. Ниже приведена программа и ее проверка для N=4 и C=[5,2,7,4] (с оператора m=c(1)). Здесь переменная М запоминает значение максимального элемента, а К – номер этого элемента в векторе С. Первоначально в качестве такого элемента берется самый первый.

Задача 11. Определение значения вклада в банке на конец года. Пусть в банке имеется N счетов вкладчиков. Для всех известны значения остатков на счете в конце каждого квартала. Следует определить и напечатать значения всех вкладов на конец года с учетом известного процента роста вклада Р. Данные о вкладах хранятся в массиве Х из N строк и пяти столбцов. Первые четыре элемента каждой i-ой строки Х(i,1), Х(i,2), Х(i,3), Х(i,4), хранят остатки вклада на конец каждого из четырех кварталов года. В последний пятый элемент строки X(i,5) следует занести вычисленную величину вклада на конец года. Он равен остатку вклада на конец последнего квартала Х(i,4) плюс установленный процент Р/100 от среднего значения вклада (Х(i,1)+Х(i,2)+Х(i,3)+Х(i,4))/4 за год. Отсюда X(i,5)=Х(i,4)+ (Р/100)*(Х(i,1)+Х(i,2)+ Х(i,3)+Х(i,4))/4.

 

I кв Х(i,1) II кв Х(i,2) III кв Х(i,3) IV кв Х(i,4) Остаток на конец года X(i,5)=Х(i,4)+(Р/100)*(Х(i,1)+Х(i,2)+Х(i,3)+Х(i,4))/4

 

Кроме перечисленного, следует найти сумму всех вкладов в банке S и среднее значение вклада, приходящееся на одного вкладчика S/N.

<== предыдущая лекция | следующая лекция ==>
 | 


Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных