|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Оператор цикла FOR с параметромЕсли число повторений цикла заранее известно и параметр цикла меняется по закону арифметической прогрессии с шагом, равным ± 1, то подходящей конструкцией является оператор For. Оператор For имеет два вида записи: For x:= x1 to x2 do оператор; For x:= x1 downto x2 do оператор; Использованы обозначения: x – параметр, или счетчик цикла, x1 и x2 – исходное и конечное значения параметра. Параметр цикла должен иметь порядковый тип: char, boolean, целые типы. Начальное и конечное значения вычисляются до начала цикла и сохраняются на все время выполнения оператора For. Перед началом цикла параметру X присваивается начальное значение х1. После каждого выполнения операторов тела цикла значение параметра автоматически меняется на 1: если использовано ключевое слово to и x1 <= x2, параметр увеличивается, если использовано слово downto и x1 >= x2, параметр цикла уменьшается. Пример 3. Демонстрация работы оператора For:
For x:=1 TO 5 do Write(x:5); writeln; For x:=5 DOWNTO 1 do write(x:5); readln;
На экран будут выведены вначале значения X: 1 2 3 4 5 Затем эти же числа по убыванию: 5 4 3 2 1 Пример 4. Применение оператора цикла FOR для печати таблицы:
Program Table_for; Var A,b,h, X,Y:real; I, n:integer; BEGIN Writeln('Введите A, B, H '); readln(a,b,h); N:=round((b-a)/h); Writeln(' x y=sinx ') For i:=0 to n do begin {начало тела цикла } x:=a+i*h; y:=sin(x); Writeln(x:5:1,y:8:5); end; { конец тела цикла } end.
Пример 5. Для вводимой последовательности целых чисел запрограммировать элементарные схемы вычислений: сумма, среднее арифметическое, произведение. Все вычисления выполняются при вводе, без запоминания последовательности.
program Shems_3; Var i,sum,prod,n:integer; Begin writeln('Вычисление суммы, среднего арифметического и произведения '); writeln('целых чисел из входной последовательности'); writeln('вводите по одному числу, последовательность завершите нулем'); readln(i); if i=0 then begin writeln('пустая последовательность'); readln; Halt end; sum:=0; n:=0; prod:=1; while i<>0 do begin sum:=sum+i; {к сумме прибавляется очередное слагаемое} prod:=prod*i; {произведение умножается на очередной множитель} n:=n+1; {счетчик увеличивается на 1} readln(i) {чтение следующего числа} end; {конец ввода чисел} writeln('сумма равна ', sum); writeln('среднее арифметическое равно ', sum/n:10:5); writeln('произведение равно ',prod); readln; end.
В наборе тестов для данного примера должно быть по крайней мере три теста: а) входной поток состоит из одного числа, равного 0, ожидаемый ответ: 'пустая последовательность'; б) входной поток состоит из двух чисел: 1 0, ожидаемые ответы: 1 1.00000 1; в) входной поток состоит из четырех чисел: 1 2 3 0, ожидаемые ответы: 6 2.00000 6 1.
Пример 6. Логической переменной P присвоить значение TRUE, если целое N (n>1) простое число, и значение False в противном случае. { У составного числа N обязательно есть делитель K из отрезка [2,Ön ], он и ищется } Program Simple_n; Var K,n: integer; P:boolean; Begin Writeln('введите N>1'); readln(n); P:=true; k:=2; While p and (k*k<=n) do If n mod k=0 then p:=false else k:=k+1; Writeln('число ',n,' простое?',p); Readln; End.
В наборе тестов для данного примера должно быть, по крайней мере, одно простое и одно составное. Среди четных чисел единственное простое число 2 должно обязательно входить в набор тестов, затем любое четное число как составное. Среди нечетных чисел взять хотя бы два простых числа и составное. Окончательный набор тестов мог бы выглядеть следующим образом: a) n = 2 – простое, б) n = 3 – простое, в) n = 6 – составное, г) n = 11 – простое, д) n = 99 – составное. Пример 7. Найти наибольший общий делитель и наименьшее общее кратное двух заданных натуральных чисел X и Y. program nod_nok; var x,y,u,v:longint; d,nod:longint; begin write('X=');readln(x); write('y=');readln(y); u:=x; v:=y; repeat writeln('u=',u,' v=',v); d:=u mod v; {остаток от деления u/v} u:=v; v:=d; until v=0; nod:=u; writeln('nod=',nod); writeln('NOK=',x*y div nod); readln; end.
В наборе тестов для данного примера должны быть следующие тесты: a) числа X и Y равны между собой; б) Y кратно X; в) X кратно Y; г) X и Y не кратны и не имеют общих множителей; е) X и Y не кратны, но имеют общие множители. Пример 8. Подсчитать количество цифр в десятичной записи целого неотрицательного числа N.
program Count_number; var n, r:longint; k: byte; begin repeat write('Введите целое неотрицательное число n ');readln(n); until n>=0; r:=n; k:=0; repeat r:=r div 10; { убираем младшую цифру в записи числа } k:=k+1; until r=0; write('количество цифр в десятичной записи числа ', n); writeln(' равно ',k); end.
Набор тестов для данного примера может выглядеть следующим образом: а) число n = 0 ->'количество цифр в десятичной записи равно 1'; б) число n = 1 ->'количество цифр в десятичной записи равно 1'; в) число n = 12090 ->'количество цифр в десятичной записи равно 5'. Варианты заданий к лабораторной работе Общая постановка. Дана последовательность чисел a1, a2, a3, …. Количество элементов в последовательности заранее неизвестно. Написать программу с запросом продолжения ввода (массив не использовать).
1. Найти количество и сумму всех тех членов последовательности, которые делятся на 5 и не делятся на 7. 2. Получить сумму квадратов всех положительных членов последовательности. 3. Получить число отрицательных членов и число членов, принадлежащих отрезку [1, 2]. 4. Вычислить количество членов, равных по значению своему порядковому номеру. 5. Вычислить произведение абсолютных значений членов последовательности. 6. Получить число отрицательных членов последовательности. 7. Получить число ненулевых членов последовательности, кратных 3. 8. Подсчитать количество четных элементов последовательности. 9. Найти наибольший из отрицательных элементов. 10. Получить произведение членов последовательности, кратных P. 11. В исходной последовательности подсчитать количество тех членов, которые при делении на P дают в остатке Q. 12. Получить сумму тех членов последовательности, которые: а) кратны 5; 13. Получить удвоенную сумму всех нечетных членов последовательности. 14. Вычислить обратную величину произведения тех членов последовательности, для которых выполнено: 0< ai < 1. 15. Определить, каким по счету идет в исходной последовательности член, равный В. Если такого члена нет, выдать соответствующее сообщение. 16. Установить, верно ли, что отрицательных членов в последовательности больше, чем положительных? 17. Установить, верно ли, что наибольший по модулю член последовательности больше единицы? 18. Верно ли что наименьший элемент последовательности – четный? 19. Подсчитать количество нечетных челнов последовательности, кратных 5. 20. Определить, каким по счету идет в исходной последовательности член, не равный А. Если такого члена нет, выдать соответствующее сообщение. 21. Найти полусумму максимального и минимального членов последовательности. 22. Найти произведение нечетных отрицательных членов последова-тельности. 2.2.3. Контрольные вопросы и задания 1. Сколько операторов повторения вы знаете? Перечислите их. 2. Оператор For: общий вид, реализуемый алгоритм, примеры. 3. Оператор Repeat: общий вид, реализуемый алгоритм, примеры. 4. Оператор While: общий вид, реализуемый алгоритм, примеры. 5. Определить значение переменной s после выполнения следующих операторов: а) s = 0; i:= 0; while i < 5 do i:= i + 1; s: = s + 1/i; б) s: = 0; i: = 1; repeat s: = s + 1/i; i: = i - 1 until i< = 1; Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.017 сек.) |