Оператор цикла с предусловием( while ). — КиберПедия 

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Оператор цикла с предусловием( while ).

2019-08-03 692
Оператор цикла с предусловием( while ). 0.00 из 5.00 0 оценок
Заказать работу

УПРАВЛЕНИЕ ОБРАЗОВАНИЯ АДМИНИСТРАЦИИ

ГОРОДА ЯЛТЫ

МУНИЦИПАЛЬНОЕ БЮДЖЕТНОЕ ОБЩЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ «ЯЛТИНСКАЯ СРЕДНЯЯ ШКОЛА № 2

«ШКОЛА БУДУЩЕГО» МУНИЦИПАЛЬНОГО ОБРАЗОВАНИЯ ГОРОДСКОЙ ОКРУГ ЯЛТА РЕСПУБЛИКА КРЫМ

 

 

 

 


Ялта 201 9


 ОПЕРАТОРЫ ПОВТОРЕНИЯ

 6.1. Цель работы:

Закрепление теоретического материала и приобретение практических навыков построения и применения операторов повторения, знать различия в работе различных видов циклов, применение и запись оператора повторения при решении  задач и проверка их выполнения на ЭВМ.

      6.2. Общие положения.

  Операторы повторения позволяют многократно выполнять отдельный оператор или последовательность операторов, причем при этом нет необходимости записывать в тексте программы одинаковые операторы несколько раз. Операторы которые будут повторяться называют телом цикла. Каким бы не был оператор повторения для его работы необходимо:

n задать начальное значение, т.е. с какого значения начнет свою работу цикл:

n задать конечное значение или условие выполнения цикла:

n приращение значения или шаг с каким будет работать цикл.

   Как говорилось выше, операторами повторения в Турбо Паскале являются цикл с предусловием, цикл с постусловием и цикл со счетчиком.

ОПЕРАТОР ЦИКЛА С ПРЕДУСЛОВИЕМ(WHILE).

Блок-схема

                                  

                       

    Оператор WHILE вместе с оператором case являются самыми универсальными управляющими конструкциями. С помощью операторов варианта можно записать условие разветвления произвольной сложности, а с помощью оператора с предусловием можно записать любое циклическое действие. Этот оператор имеет вид:

          

   WHILE выражение DO Оператор;

Или WHILE  выражение DO

                                   begin

                                      оператор1;

                                      оператор2;...

                                   end;

 

      Оператор цикла с постусловием позволяет многократно выполнять одни и те же действия в зависимости от некоторого условия, которое записывается между ключевыми словами while и do и должно быть выражением булевского типа.

        Опишем работу этого цикла. Сначала, задав начальное значение, при входе в цикл вычисляется условие. Если оно равно false, то вход в цикл не выполняется и управление передается оператору, следующему непосредственно за операторами тела цикла. Если же условие истинно, то происходит вход в цикл и однократное выполнение операторов его тела. Как только достигнут конец тела цикла и сделано приращение значения, управление снова передается ни его заголовок, где снова вычисляется условие. Если значения условия все еще истинно, то тело цикла выполняется еще раз, и так далее. Как только очередное вычисление условия цикла даст значение false, работа цикла завершится.

  Примерами оператора цикла в предусловием могут служить:

1) while I <> X do I:= I + 1;

 2) While I > 0 do begin

                             if Odd(I) then Z:= Z * X;

                             I:= I div 2;

                             X:= Sqr(X);

                           end;

3) while not Eof(InFile) do {пока не конец файла InFile}

                 begin

                  Readln(InFile,Line); {Читаем из него данные}

                  wrteln(Line);

                end;

Задача1.Рассмотрим программу, которая вычисляет и выводит значения функции  на промежутке [-100,100] с шагом 0.2.

Идея решения:

1. Возьмем начальное значение Х=-100.

2. Пока значения Х не более конечного значения Х (Х<=100)

выполняем

     а) если Х отрицательное

             то У присваиваем квадрат Х

           иначе У присваиваем корень квадратный из Х;       

   б) выводим результат У на экран;

   в) увеличим значение Х на 0.2, т.е. выполним приращение Х;

 (повторяем эти действия до тех пор, пока значения Х не превысит 100).  

Программа решения

var

x,y: real;

begin

x:=-100; { вот начальное значение для работы цикла!}

while x <=100 do {это конечное значение или условие выполнения цикла!}

                         begin

                          if x<0 then y:= sqr(x) else y:= sqrt(x);   

             {выводится результат, после каждого вычисления У}

                          writeln(‘x=’,x,’ y=’.y);

                          x:= x +0. 2; {а это приращение или шаг}

                          end;

end. 

Обратите внимание на то, что цикл с предусловием может ни разу не выполнить операторы тела цикла!

ОператорК                         

          UNTIL выражение;

 

       Заметим, что в отличие от while, оператор repeat не требует использования составного оператора, когда в его теле необходимо записать более одного оператора. Кроме того, оператор REPEAT являетсяне столь универсальным, как оператор WHILE, поскольку его условие располагается в конце тела цикла и операторы его тела будут, в отличие от цикла WHILE, всегда выполняться как минимум один раз. Это означает, что оператор REPEAT не годится для записи циклов, в которых может возникать ситуация, когда тело цикла не должно выполняться ни разу.

       Общий принцип работы данного цикла такой же, как и предыдущего, но в отличие от цикла WHILE, повторимся, условие проверяется не перед выполнением цикла, а после него, и управление циклом REPEAT прямо противоположно управлению циклом WHILE. То есть цикл продолжается пока условие равно FALSE и заканчивается при истинности условия.

Приведем примеры оператора цикла с постусловием:

1) repeat

  K:= I mod J;

 I:= J;

 J:= K;

   until J = 0;

 

 

2) repeat

 Write('Введите значение (0..9):');

 Readln(I);

until (I >= 0) and (I <= 9);

Решим задачу 1, используя цикл с постусловием:

var x,y: real;

begin x:=-100; { вот начальное значение для работы цикла!}

        repeat

                if x<0 then y:= sqr(x) else y:= sqrt(x);   

                writeln(‘x=’,x,’ y=’.y);

                 x:= x +0.2; {а это приращение или шаг}

         until x >100 {это конечное значение или условие выполнения цикла!}

end. 

Разберем несколько задач.

1. Составить алгоритм и его блок-схему вычисления функции:

Y=        на промежутке [-20,20] с шагом 0.5

Идея решения:

Необходимо, изменять значение Х от -20 до 20 с шагом 0.5 и вычислять значения У, учитывая, что при х=10 наша функция не существует.

Алгоритм решения:

1. Присвоить Х начальное значение -20

2. Пока Х не более 20 выполнять такие действия:

    а) если х не равен 10

             то вычисляем у

                   вывести на экран значения у

              иначе выведем на экран «функция не существует»);

 

 

     б) увеличить значение Х

Программа решения:

Program Task1;

var x, y: real;

begin x: = -20; { начальное значение х}

while x<=20 do {пока х не превысил 20}

      begin

      if x <> 10 then begin {знаменатель не равен 0, вычисляем у}

                                 y: = 2/abs(10-x)+ abs(x-5)

                                 writeln(‘y=’,y,’при х=’, x);

                                end     

                         else writeln(‘В этой точке функция не сущ-ет’);

         x:=x+0.5; {приращение х}

         end;

end.              

2. Составить алгоритм и его блок-схему вычисления функции:

                Y=                

            на промежутке [-20,20] с шагом 0.5.

Идея решения:

Необходимо пройтись от -20 до 20 с увеличением х на 0.5 с каждым шагом, при этом выполняя проверку, к какому из предложенных промежутков данное значение х принадлежит и вычисляя значение у по соответствующей формуле.

Алгоритм:   

1. Присвоить начальное значение х:= -20;

2. пока х<=20 выполняем такие действия

               а) если х<-10

                        то у:=2-х

                         иначе если x<-5 (ведь х  уже более -10)

                                          то у:= х-х2               

                                          иначе если x<2             

                                                          то у:=х3

                                                          иначе у:= ;

                б) вывести значение у;

                в) увеличить значение х на 0.5;

Программа имеет вид:

Program Task2;

var x, y: real;

begin x: = -20;

while x<=20 do

        begin

      if x < - 10 then y: = 2-x

                       else if x<-5 then y:=x-x*x

                                            else if x<2 then y:=x*x*x

                                                              else y:=sqrt(x);

       writeln(‘y =’,y,’ при х =’, x);     

        x:=x+0.5;

        end;

End.

Вопросы для самопроверки.

1. Как записывается и исполняется цикл-ДО?

2. Как записывается и исполняется цикл-ПОКА?

3. Какие основные элементы построения циклов, без которых невозможна работа?

4. Как записывается и исполняется цикл-ДЛЯ?

5. Может ли в цикле-ДЛЯ начальное значение быть больше конечного?

6. Может ли в цикле- ДЛЯ использовать шаг?

7. В каких циклах это возможно?

8. Когда используются в циклах операторные скобки?

9. Что такое тело цикла?

10. Можно ли и как заменить команду повторения с параметром другим видом повторения? А наоборот?

11. Является ли оператором цикла:

а) while x<0 do x:=x+0.5;

б) while x<0 do x:=x-100;

в) while 0<y<1 do y:=sqr(y);

г) while a>0 do y:=2*y;

д) while a>b do a:=a-1;b:=b+1;

12. Может ли завершиться выполнение оператора цикла, начало которого выглядит так:

          while abs(x)+1>0.793 do...?

13. Для каких начальных значений переменной х завершится выполнение оператора цикла:

а) while x<1.3 do x:=sqr(x);

б) while abs(x)>=1 do x:=x-1;

в) while 2*x>x do x:=x-1;

г) while sqr(x)>= do x:=sin(x)+1.315?

14. Вычисление F=10! описать каждым из трех вариантов оператора цикла.

15. Определить значение переменной s после выполнения следующих

операторов:

а) s:=0; i:=0;

   while i<5 do i:=i+1; s:=s+1/i;

б) s:=0; i:=1;

   while i>1 do begin s:s+1/i; i:=i-1 end;

в) s:=0; i:=1;

   repeat s:=s+1/i; i:=i-1 until i<=1;

г) s:=0;i:=1;

   repeat s:=s+1/i;i:=i-1 until i>10;

д) s:=1; n:=1;

   for i:=2 to n do s:=s+1/i;

e) s:=1; i:=1;

   for i:=10 downto 1 do s:=s+1/i;i:=i-2;

16. Выписать фрагмент программы для решения указанной задачи и обосновать, почему был выбран тот или рой вариант оператора цикла:

а) вычислить с-наибольший общий делитель натуральных чисел а и в;

б) найти u-первый отрицательный член последовательности cos(ctg(n)),n=1,2,3,...;

в) вычислить y=cos(1+cos(2+...+cos(39+cos(40)...));

г) вычислить p=(1-1/22)(1-1/32)...(1-1/n2),n>2;

д) вычислить f=1*2*3*...n;

e) вычислить y=sinx +sinx2 +sinx3 +...+sinx30;

Задания.

Вариант 1.

1. Вычислить значения функции

            Y =    

на промежутке [-2П,2П] с шагом 0,2.

2. Даны натуральные числа n, a1, a2, a3,... an. Определить количество членов ak последовательности a1, a2, a3,..., an, являющихся нечетными числами.

Вариант 2.

1. Вычислить значения функции

              y=   

               на промежутке [-10,10] с шагом 0,5.

2. Даны натуральные числа n, a1, a2, a3,...,an. Определить количество членов последовательности a1, a2, a3,..., an кратных 3 и не кратных 5.

Вариант 3.

1. Вычислить значения функции

           y=    

         на промежутке [-5,5] с шагом 0,2.

2. Даны натуральные числа n, a1, a2, a3,..., an. Определить количество членов последовательности a1, a2, a3,..., an, являющихся квадратами четных чисел.

Вариант 4.

1. Вычислить значения функции

                 y=      

              на промежутке [0,4] с шагом 0,5.

2. Даны натуральные числа n, a1, a2, a3,..., an. Определить количество членов последовательности a1, a2, a3,..., an, которые удовлетворяют условию: каждый элемент, начиная со второго является средним арифметическим двух соседних (предыдущего и последующего).

Вариант 5.

1. Вычислить значения функции

                   y=      

             на промежутке [-5,10] с шагом 0,5.

2. Даны целые числа n, a1, a2, a3,..., a50. Получить сумму тех чисел данной последовательности, которые кратны 5.

Вариант 6.

1. Вычислить значения функции

                 y=    

            на промежутке [-8,8] с шагом 0,3.

2. Даны целые числа a1, a2, a3,...a50. Получить сумму тех чисел данной последовательности, которые нечетные и отрицательные.

Вариант 7.

1. Вычислить значения функции

y=      

        на промежутке [-10,10] с шагом 0,6.

2. Даны натуральное число N, целые числа a2, a2, a3,..., an. Найти количество и сумму тех членов последовательности, которые делятся на 5 и не делятся на 7.

Вариант 8.

1. Cоставить алгоритм и блок-схему вычисления функции:

y=  

          на промежутке [-10,10] c шагом 1.

2. Даны натуральные числа n, p, целые числа a1, a2, a3,..., an. Получить произведение членов последовательности кратных p.

Вариант 9.

1. Вычислить

      на промежутке [-П,П] с шагом П/10.

 2. Даны натуральное число N и действительные числа a1, a2, a3,..., an. Получить удвоенную сумму всех положительных членов последовательности.

Вариант 10.

1. Вычислить

           на промежутке [-5,5] с шагом 0,5.

2. Даны натуральное число N, действительные числа a1, a2, a3,..., an. В этой последовательности все числа меньшие 2 заменитьКроме того, получить сумму членов, принадлежащих [3,7].

Вариант 11.

1. Вычислить значения функции

                       

        на промежутке [-15,15] с шагом 0,5.

2. Даны натуральное число N, действительные числа a1, a2, a3,..., an. Получить наибольшее из этих действительных чисел.

Вариант 12.

1.Вычислить    

   

на промежутке [1,1000] с шагом 1.

Вариант 13.

Напишите в от­ве­те число, ко­то­рое будет на­пе­ча­та­но в ре­зуль­та­те вы­пол­не­ния сле­ду­ю­ще­го ал­го­рит­ма (для Ва­ше­го удоб­ства ал­го­ритм пред­став­лен на четырёх язы­ках программирования).

Паскаль
var a,b,t,M,R:integer; Function F(x:integer):integer; begin F:= 10*x*x-120*abs(x)+320 end; begin a:= -12; b:= 12; M:= a; R:= F(a); for t:= a to b do begin if (F(t) <= R) then begin M:= t; R:= F(t) end end; write(M+9) end.

 

Вариант 14.

Определите, какое число будет на­пе­ча­та­но в ре­зуль­та­те выполнения сле­ду­ю­ще­го алгоритма (для Ва­ше­го удобства ал­го­ритм представлен на четырёх языках):

 

var a,b,t,M,R:integer; Function F(x:integer):integer; begin F: = 19 * (11 - x) * (11 - x) + 27; end; begin a: = -20; b: = 20; M: = a; R: = F(a); for t: = a to b do begin if (F(t) < R) then begin M: = t; R: = F(t) end end; write(R); end.

Вариант 15.

Напишите в от­ве­те число, ко­то­рое будет на­пе­ча­та­но в ре­зуль­та­те вы­пол­не­ния сле­ду­ю­ще­го ал­го­рит­ма (для Ва­ше­го удоб­ства ал­го­ритм пред­став­лен на четырёх языках).

 

var a,b,t,M,R:integer; Function F(x:integer):integer; begin F:= (x*x-25)*(x*x-25)+25 end; begin a:= -11; b:= 11; M:= a; R:= F(a); for t:= a to b do begin if (F(t) <= R) then begin M:= t; R:= F(t) end end; write(M+25) end.

Вариант 16.

Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

var a,b,t,M,R:integer;

Function F(x:integer):integer;

begin

F:= x*x + 6*x + 10;

end;

Begin

a:=-10; b:=10;

M:=a; R:=F(a);

for t:=a to b do begin

if (F(t)> R)then begin

M:=t;

R:=F(t);

end;

end;

write(M);

End.

ОПЕРАТОРЫ ПОВТОРЕНИЯ

 7.1. Цель работы:

Закрепление теоретического материала и приобретение практических навыков построения и применения операторов повторения, знать различия в работе различных видов циклов, применение и запись операторов повторения при решении  задач и проверка их выполнения на ЭВМ. Формировать творческий подход к решениям задач, развивать дивергентное мышление - различное виденье решения задач.

Общие положения.

Разберем несколько задач и их возможные варианты решения.

Идея решения:

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

Например, введем число 12345. Мы зачеркнем 5 цифр (1234,123,12,1, зачеркивая 1 наше число превратится в 0) значит в числе 5 цифр!

 Первый способ

Program task1;

var m,n: longint;

     k: byte;

begin readln(n);

k:=0; m:=n { скопируем это число }

while m<>0  do begin

                            inc(k);

                            m:=m div 10;

{«отбрасываем» из числа последнюю цифру}

end;

writeln(k);

End.

Идея решения:

Теперь попробуем проверять: данное число больше 10к ? (где к изменяется от 1 до тех пор, пока выполняется условие). При каждой проверке ведем подсчет.

Например, введем число 12345. Проверяем, ведя отсчет от 1:

1) 12345>10; 2

2) 12345>100; 3

3) 12345>1000; 4

4) 12345>10000; 5

5) 12345<100000 подсчет окончен.

 Второй способ

program task 1_2;

var n:longint;

i:byte;

begin readln(n);{ запрашиваем число}

{ подсчитаем количество цифр в нем }

i:=1; {пока число больше 10 в степени i}

while n>exp(ln(10)*i) do inc(i);

writeln(i);

end.

End.

Способ второй, классический предлагается во многих источниках:

Program Simple;

var i,n: integer;

 simp: boolean; { если встретится делитель числа n simp=False} 

begin write(‘n=’); readln(n);

      simp:=True; i:=3;

while (i<=trunc(sqrt(n))) and simp do

     if n mod i=0 then simp:= false else i:=i+2;

     if simp then writeln(‘OK!!!)

       else writeln(‘NO!!!!’);

End.

Третий способ, очень краток и красив!!! Но количество проверок больше, чем в первом способе.

Program task2;

var n,i: integer;

begin

  writeln(‘введите число n’);  readln(n);

  i:=1;

repeat inc(i) 

{увеличиваем делитель, пока выполняется условие, что число не делится на i}

until n mod i = 0;

if n=i then writeln (n,’- простое’)

          else writeln (n,’- не простое, делится на ‘,i);

End.

Первый способ решения.

program palindrom;

var n, m: longint;

j, i, ii, a, b:byte;

begin readln(n);{ запрашиваем число}

{ подсчитаем количество цифр в нем }

i:=1; m:=n; {скопируем число}

while n>exp(ln(10)*i) do inc(i);

{поиск одинаковых цифр справа и слева до середины числа}

j:=1;

for ii:=i div 2 downto 1 do begin

               a:= n div trunc(exp(ln(10)*(i-1))); {первая цифра}

               b:= m mod 10; {последняя цифра}

             { продолжаем поиск, если они равны }

         if a= b then begin {отбрасываем найденные цифры}                           

                                    n:=n mod trunc(exp(ln(10)*(i-1)));

                                    m:=m div 10;

                                    dec(i);

                                    end {прерывание работы}

                            else begin writeln('not!!!!'); halt end

               end;

{к концу программы мы дойдем только в случае, если число - палиндром} writeln('yes!!!!');

End.

Второй способ:

Идея этого способа заключается в том, что число переворачиваем, например, 123 станет 321. Если же это палиндром, то эти числа будут равными. Например, 12321 и после 12321. Этот палиндром! 

var n, k, L, n1: longint;

Begin

  writeln(‘Введите число‘);

  readln(n);

  k:=n; n1:=0; {в этой переменной будет перевернутое число n}

  while k>0 do

      begin L: = k mod 10; {получаем последнюю цифру}

                  k: =k div 10;{отбрасываем ее}

                 n1:=n1*10+L { переворачиваем число, последняя цифра становится первой цифрой числа n1, затем предпоследняя приписывается к n1 как вторая цифра и т.д., пока первая не станет последней в n1}

      end;

  if n=n1 then writeln(n,’-палиндром’)

             else writeln(n,‘- не палиндром’);

End.

End.

Задача 4.

Begin

   writeln(‘введите первый элемент последовательности ‘);

   read(x);

   k:=1;{ индекс введенного элемента}

   min:=x;{ считаем, что элемент минимальный}

   i:=2; 

   while x<> 0 do begin

                           if x<min then begin min:=x; k:=i-1 end;

                           writeln(‘введите ‘,i,’- элемент’);

                            read(x);

                           inc(i);

                          end;

           writeln(‘ номер минимального элемента ’,k);        

End.

Первый способ

program task5;

var a, b, n, m: longint;

i, ii,j, k, aa, bb:byte;

Begin

 readln(a,b);{ запрашиваем границы промежутка}

for i:=a to b do begin

{ подсчитаем количество цифр в выбранном числе }

k:=1; m:=i; n:=i;{ скопируем это число дважды}

while n>exp(ln(10)*k) do inc(k);

{поиск одинаковых цифр справа и слева до середины числа}

j:=0;

for ii:=1 to k div 2 do begin

               aa:= n div trunc(exp(ln(10)*(k-1))); {первая цифра}

               bb:= m mod 10; {последняя цифра}

           { продолжаем поиск, если они равны }

          if (aa=bb) and (k div 2 =1) then writeln(i);

        if aa= bb then begin {отбрасываем найденные цифры}

                                  inc(j);

                                  n:=n mod trunc(exp(ln(10)*(k-1)));

                                   m:=m div 10;    dec(k);

                                     end;

                        end;

                        if j=k div 2 then writeln(i);

end;

End.

Второй способ

program palinAB;

var  n1, L, k, i, a, b: Longint;

begin  writeln(‘ Введите границы промежутка AB’);

         readln(a,b);{ запрашиваем границы промежутка}

  for i:=a to b do begin

         k:=i; n1:=0; {в этой переменной будет перевернутое число n}

  while k>0 do

      begin L: = k mod 10; {получаем последнюю цифру}

                  k: =k div 10;{отбрасываем ее}

                 n1:=n1*10+L { переворачиваем число, последняя цифра становится первой цифрой числа n1, затем предпоследняя приписывается к n1 как вторая цифра и т.д., пока первая не станет последней в n1}

      end;

  if i=n1 then writeln(n,’-полиндром’);

     end;

End.

End.

   7.3. Вопросы, задачи и упражнения для самопроверки.

1. Дана последовательность операторов:

а:=1; b:=1;

while a+b<8 do begin a:=a+1; b:=b+2; end;

     s:=a+b;

Сколько раз будет повторен цикл и какими будут значения переменных a,b,s после завершения этой последовательности операторов?

2. Какими будут значения переменных a и b после выполнения последовательности операторов:

  a:=1; b:=1;

  while i<=3 do a:=a+1; b:=b+1;

3.  Определите значение переменной s после выполнения следующих действий:

a) s:=0; i:=0;

      while i<5 do inc(i); s:=s+100 div i;

b)  s:=0; i:=1;

      while i>1 do begin s:=s+100 div i; dec(i) end;

4. Определить значение переменной s после выполнения следующих операторов:

s:=0; i:=1;

Repeat s:=s+5 div i; i:=i-1;

Until i<=1;

 

 5.   В последовательности операторов содержится 5 ошибок. Найдите эти ошибки.       

  k:=1; f:=0;

  while k<n do f=f*k

            k:=k+1;

6. Найдите и исправьте ошибки в следующем фрагменте программы, определяющей для заданного натурального числа  n число, записанное цифрами этого числа в обратном порядке:

 p:=n;

 while p>=0 do

begin

  a:=a+p mod 10;

  p:=p div10

end; 

7. Показать, что любой оператор цикла с предусловием можно записать с помощью условного оператора и оператора цикла с постусловием.

8. Показать, что любой оператор цикла с постусловием можно записать с помощью условного оператора и оператора с предусловием.

9. Найти старшую цифру данного числа N.

10. Приписать по 1 в начало и в конец записи числа  N.

11. Поменять местами первую и последнюю цифры.

12. Найти количество четных цифр натурального числа.

13. Найти самую большую цифру данного натурального числа.

14. Найти сумму цифр числа, больших 5.

15. Сколько раз данная цифра (X) встречается в целом числе.

16. Составить программу, проверяющую, является ли последовательность из 10 целых чисел, вводимых с клавиатуры, возрастающей.

Контрольные задания.

Вариант 1

1. Дано натуральное число:

n найти сумму его цифр;

n верно ли, что число начинается и заканчивается одной и той же цифрой?

2. Найти все трехзначные числа, сумма цифр которых равна А, а само число делится на В.

Вариант 2.

1. Дано натуральное число:

n найти произведение его цифр;

n верно ли, что в данном числе нет данной цифры А?

2. Найти все трехзначные числа, которые при увеличении на 2 делятся на 2, при увеличении на 2 делятся на 3, при увеличении на 3 делятся на 4, при увеличении на 4 делятся на 5.

Вариант 3.

1. Дано натуральное число:

n найти количество его цифр;

n верно ли, что данное число заканчивается на нечетную цифру?

2. Найти количество трехзначных чисел, сумма цифр которых равна А, а само число заканчивается цифрой В.

Вариант 4.

1. Дано натуральное число:

n найти количество четных цифр числа;

n верно ли, что данная цифра А встречается в числе более двух раз?

2. Найти все четырехзначные числа, у которых сумма крайних цифр равна сумме средних цифр, а само число делится на 6 и 27.

Вариант 5.

1. Дано натуральное число:

n найти первую и последнюю цифры числа;

n верно ли, что сумма цифр данного числа равна А?

2. Найти все трехзначные числа, которые при делении на 2 дают остаток 1, при делении на 3- остаток 2, при делении на 4 - остаток 3, а само число делится на 5.

Вариант 6.

1. Дано натуральное число:

n сколько раз данная цифра А встречается в данном числе;

n верно ли, что в данном числе сумма цифр больше В, а само число делится на В?

2. Найти все четырехзначные числа, в которых есть две цифры 5.

Вариант 7.

1. Дано натуральное число:

n найти вторую (с начала) цифру данного числа;

n верно ли, что данное число делится на А, В и С?

2. Найти все двухзначные числа, которые при умножении на 2 заканчиваются на 8, а при умножении на 3 - на 4.

Вариант 8.

1. Дано натуральное число:

n найти количество цифр данного числа, больших А;

n верно ли, данное число принадлежит промежутку от А до В и кратно 3,4 и 5?

2. Найти сумму всех чисел из промежутка от А до В, кратных 13 и 5.

Вариант 9.

1. Дано натуральное число:

n сколько четных цифр в данном числе;

n верно ли, что в данном числе встречаются цифры А и В?

2. Найти все симметричные четырехзначные числа.

Вариант 10.

1. Дано натуральное число:

n сколько раз первая цифра встречается в данном числе;

n верно ли, что данное число начинается на А и заканчивается на В?

2. Найти все четырехзначные числа, в которых ровно две одинаковые цифры.

Вариант 11.

1. Дано натуральное число:

n найти две первые цифры числа;

n верно ли, что первая цифра данного числа четная?

2. Найти все трехзначные числа, которые состоят из различных цифр, а их сумма равна А.

Вариант 12,13,14,15,16

1. Дано натуральное число:

n найти старшую цифру.

n верно ли, что первая цифра данного числа 5?

2. Дано натуральное число. Приписать к нему такое же число.

 

Практическая работа № 8

ОПЕРАТОРЫ ПОВТОРЕНИЯ

 8.1. Цель работы:

Закрепление теоретического материала и приобретение практических навыков построения и применения операторов повторения, знать различия в работе различных видов циклов, применение и запись операторов повторения при решении  задач и проверка их выполнения на ЭВМ. Формировать творческий подход к решениям задач, развивать дивергентное мышление - различное виденье решения задач.

  8.2. Общие положения.

Разберем несколько задач для работы с числами, для решения которых применяются различные виды циклов:

Задача 1.

Написать программу нахождения наибольшего общего делителя двух целых неотрицательных чисел.

Так как мы будем искать наибольший общий делитель, то нам необходимо найти такое число на которое делятся данные числа без остатка, значит решение сводится к поиску остатков от деления.

Первый способ

Program NOD;

var а, b: word;

Begin

writeln(‘введите два числа’);

readln(a, b);

repeat

      if a>b then a:=a mod b else b:=b mod a

      until (a=0) or (b=0);

writeln(‘nod=’,a+b));

end.      

Второй способ

...

   if a > b then k:= a

               else k:= b;                                       

   {k = max (a,b)}

   {инвариант: никакое число, большее k, не является общим делителем}

    while not ((a mod k = 0) and (b mod k = 0)) do k:= k - 1;

                   {k - общий делитель, большие - нет}

Третий способ (алгоритм Евклида). Будем считать, что НОД(0,0) = 0. Тогда НОД (a,b) = НОД (a-b,b) = НОД (a,b-a); НОД(a,0) = НОД (0,a) = a для всех a,b>=0.

    m:= a; n:= b;

   {инвариант: НОД (a,b) = НОД (m,n); m,n >= 0 }

   while not ((m=0) or (n=0)) do begin

                                                   if m >= n then m:= m - n;

                                                                   else n:= n - m;

                                                   end;

   {m = 0 или n = 0}

   if m = 0 then begin

                       k:= n;

                         end else begin {n = 0}

                                      k:= m;

                                      end;

Задача 2. Даны натуральные числа n и k. Составить программу вычисления выражения

                     

 Для вычисления указанной суммы целесообразно организовать цикл с параметром і, в котором, во-первых, находилось бы значение очередного члена ряда (у:=ік) и, во-вторых, осуществлялось бы накопление искомой суммы путем прибавления полученного слагаемого к сумме всех предшествующих (s:=s+y).

Program task4;

   var n, k, i, y, s, m: integer;

begin writeln(‘введите  n и k’); readln(n,k); s:=0;

for i:=1 to n do

      begin y:=1;

           for m:=1 to k  do y:=y+i;

             {нахождение степени к числа і }

           s:=s+y;

     end;

writeln(‘ответ:’,s);

End.

Модифицировать предыдущую задачу так, чтобы в ней вычислялась сумма:

       

Program task3_1;

   var n, i, y, s, m: integer;

begin writeln(‘введите  n ’); readln(n); s:=0;

   for i:=1 to n do

      begin y:=1;

           for m:=1 to i  do y:=y+i;

             {нахождение степени к числа і }

           s:=s+y;

     end;

writeln(‘ответ:’,s);

End.

End.

       8.3. Задачи для самопроверки.

1. (8)Найти НОД трех чисел.

Примечание. НОД(a,b,c)=НОД(НОД(a,b),c).

2. (9)Два числа называются взаимно простыми, если их наибольший общий делитель равен 1. Проверить, являются ли два данных числа взаимно простыми.

3. (10)Найти наименьшее общее кратное (НОК) чисел n и m, используя соотношение

НОК(n,m)= .

4. (11)Даны натуральные взаимно простые числа n,p. Найдите такое m, что, во-первых, m<p, во-вторых, произведение чисел m и n при делении на p дает остаток 1.

5. (12)От прямоугольника 324х141 отрезают квадраты со сторонами 141, пока это возможно. Затем вновь отрезают квадраты со стороной, равной 324-2*141=42 и т.д. На какие квадраты и на сколько квадратов будет разрезан прямоугольник?

6. (13)Написать программу для нахождения НОД, используя следующие соотношения:

НОД(2a,2b)=2НОД(a,b);

НОД(2a,b)=НОД(a,b) при нечетном b.

В программе не должно использоваться деление с остатком. Можно лишь делить на 2 и проверять числа на четность.

7. (14,15,16)Даны натуральные числа m и n. Найти такие натуральные взаимно простые p и q, что

           Контрольные задания.

Вариант № 1

1. Найти количество делителей натурального числа. Сколько из них четных?

2. Найти все натуральные числа a, b и с из интервала от 1 до 20, для которых выполняется равенство  a2+b2=c2.

Вариант № 2

1. Найти сумму нечетных делителей натурального числа.

2. Найти все равновеликие прямоугольники, стороны которых выражены натуральными числами a, b, а площадь равна S (a и b  из интервала от 1 до 20, а площадь вводится с клавиатуры).

Вариант № 3

1. Найти все натуральные числа из промежутка от 1 до 200, у которых количество делителей равно К (К вводится с клавиатуры.)

2. Найти все натуральные числа a, b и с из интервала от 1 до 20, для которых выполняется равенство  a+b2=c2.

Вариант № 4

1. Найти все натурального числа из промежутка от 1 до 200, у которых сумма делителей равна С (С вводится с клавиатуры).

2. Найти все такие тройки натуральных чисел a, b и с из интервала от 1 до 20, для которых выполняется равенство  a2-b2=c2.

Вариант № 5

1. Найти количество делителей натурального числа, больших К (К вводится с клавиатуры).

2. Найти все натуральные числа a, b и с из интервала от 1 до 20, для которых выпо


Поделиться с друзьями:

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.489 с.