Задача 1. Подсчитать количество цифр заданного числа. — КиберПедия 

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

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Задача 1. Подсчитать количество цифр заданного числа.

2019-08-03 297
Задача 1. Подсчитать количество цифр заданного числа. 0.00 из 5.00 0 оценок
Заказать работу

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

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

Например, введем число 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.

Задача 2. Определить является ли данное число простым.

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

Будем проверять делится ли данное число на числа от 2 до половины данного числа. Если делится, то прерываем поиск, иначе проверка идет до самого конца. Если поиск прерван, то выводим на экран «число не простое», иначе выводим «число простое».

Способ первый:

 Program Simple;

var   i,n: integer;

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

begin write(‘ Введите число n=’);

      readln(n);

       simp:=True; i:=2;

while (i<=n div 2) and simp do

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

     if simp then writeln(‘OK!!!)

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

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.

Задача 3. Определить, является ли натуральное число палиндромом.

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

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.

Третий способ (демонстрирует применения знаний работы со строками)

program palindrom2;

var n:string; {считываем число, как строковую переменную}

i,k,kk:byte;

begin readln(n);

k:=length(n); { длина слова или количество цифр в числе}

kk:=0;

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

for i:=1 to k div 2 do if n[i]=n[k-i+1] then inc(kk);

{ если количество пар совпадает с половиной длины слова, то это палиндром}

if kk=k div 2 then writeln('yes!!!!') else writeln('no!!!!');

End.

Задача 4.

Дана непустая последовательность натуральных чисел, за которой следует 0. Найти порядковый номер наименьшего элемента последовательности.

Var x,i,min,k: integer;

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.

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

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

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.


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

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

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

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

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...



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

0.026 с.