ВХОД

МЕТОДИЧЕСКИЕ РАЗРАБОТКИ ПО КУРСУ ИНФОРМАТИКИ

"ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PASCAL"

Начало > Палиндромы , Фибоначчи> Общие задачи с использованием этоих алгоритмов

ГЛАВА III

ОБЩИЕ ЗАДАЧИ

Палиндромы и числа Фибоначчи



1. Найти первое число Фибоначчи , большее 10, являющееся палиндромом.
  Переход
Блок-схема

2. Найти первое число Фибоначчи, большее 10, сумма цифр которого – двузначный палиндром.
  Переход
Блок-схема

3. Найти количество палиндромов и количество фибоначчиевых чисел в интервале от 10 до 1000.
  Переход
Блок-схема



1. Найти первое число Фибоначчи , большее 10, являющееся палиндромом.

Ответ: 55 - палиндром и число Фибоначчи


program block3_01;
uses crt;
var
    p: boolean; {флаг условия задачи}
    i : integer; {ряд натуральных чисел, больших 10}
    x, xx, c, x1 :integer ;
      {переменные для поиска палиндромов:
      x - исходное число;
      xx - дубликат исходного числа;
      x1 - обратное число;
      c - цифра исходного числа}

    ch, ch1, ch2: integer;
      {переменные для поиска чисел Фибоначчи:
      ch - число Фибоначчи;
      ch1, ch2 - два предыдущих числа ряда Фибоначчи}

begin
clrscr;
i:=10;{первое проверяемое число}
p:=false;
while p=false do{пока не выполнится условие задачи, цикл будет продолжаться}
    begin
    x:=i; {число i изменяется только для внешнего цикла, поэтому будем проверять его дубликат}
    ch1:=0; ch2:=1; ch:=1; {алгоритм для поиска чисел Фибоначчи}
    repeat
      ch1:=ch2;
      ch2:=ch-1;
      ch:=ch1+ch2;inc(ch);
    until (x<ch) ;

    if x = ch-1 then {если Х - число Фибоначчи, то имеет смысл дальнейшая проверка}

      begin
        writeln( x ,'- число Фибоначчи') ;
        xx:=x; {создали дубликат исходного числа}
        x1:=0;
        while xx< >0 do {применим алгоритм разделения числа на цифры для сборки обратного числа}
          begin
          c:=xx mod 10;
          xx:=xx div 10;
          x1:=x1*10+c; {учитываем порядок цифр числа}
          end;
        writeln('x1=',x1);
        {если обратное число равно дубликату исходного числа:}
        If x1=x then p:=true; {если p=true, то внешний цикл завершается}
      end;
    inc(i) {готовим следующее число для проверки}
    end;

writeln(x, ' - палиндром и число Фибоначчи')
end.





2. Найти первое число Фибоначчи, большее 10, сумма цифр которого – двузначный палиндром.

Ответ:
1597 - число Фибоначчи
Sc = 22 - палиндром


program block3_02;
uses crt;
var p: boolean; {флаг условия задачи}
i :integer; {ряд натуральных чисел, больших 10}
x, xx, c, x1 :integer ;
    {переменные для поиска палиндромов:
    x - исходное число;
    xx - дубликат исходного числа;
    c - цифра исходного числа}

ch,ch1,ch2: integer;
    {переменные для поиска чисел Фибоначчи:
    ch - число Фибоначчи;
    ch1, ch2 - два предыдущих числа ряда Фибоначчи}
Sc, Sc1:integer;
    {Sc - сумма цифр очередного числа Фибоначчи;
    Sc1 - дубликат суммы цифр для поиска палиндрома;
    x1 - обратное число суммы цифр}
begin
    clrscr;
    i:=10;{первое проверяемое число}
    p:=false;
    while p=false do {пока не выполнится условие задачи, цикл будет продолжаться}
      begin
      x:=i; {число i изменяется только для внешнего цикла, поэтому будем проверять его дубликат}
      ch1:=0; ch2:=1; ch:=1; {алгоритм для поиска чисел Фибоначчи}
      repeat
        ch1:=ch2;
        ch2:=ch-1;
        ch:=ch1+ch2;
        inc(ch);
      until (x<ch) ;
      if x = ch-1 then {если Х - число Фибоначчи, то имеет смысл дальнейшая проверка}
        begin
        xx:=x; {создали дубликат исходного числа}
        Sc:=0;
        while xx< >0 do {применим алгоритм разделения числа на цифры для поиска суммы цифр}
          begin
          c:=xx mod 10;
          xx:=xx div 10;
          inc(Sc,c); {Найдем сумму цифр числа}
          end;
        x1:=0; {x1 - обратное число суммы цифр}
        Sc1:=Sc; {создали дубликат суммы цифр числа}
        while Sc1 < >0 do {применим алгоритм разделения числа на цифры для сборки обратного числа}
          begin
          c:=Sc1 mod 10;
          Sc1:=Sc1 div 10;
          x1:=x1*10+c; {после окончания этого цикла - палиндром суммы цифр = x1}
          end;
        {если обратное число двузначное, а так же равно сумме цифр числа:}
        If (x1 div 10> 0) and (x1=Sc) then p:=true; {если p=true, то внешний цикл завершается}
        end;

      inc(i) {готовим следующее число для проверки}
      end;

    writeln( x,'- число Фибоначчи') ;
    writeln( ' Sc = ',Sc, '- палиндром')

end.




3. Найти количество палиндромов и количество фибоначчиевых чисел в интервале от 10 до 1000.

Ответ:

количество фибоначчиевых чисел = 10
количество палиндромов = 99


program block3_03;
uses crt;
var
i : integer; {ряд натуральных чисел, больших 10}
ch, ch1, ch2: integer;
    {переменные для поиска чисел Фибоначчи:
    ch - число Фибоначчи;
    ch1, ch2 - два предыдущих числа ряда Фибоначчи}
x, c, x1 :integer ;
    {переменные для поиска палиндромов:
    x - дубликат исходного числа;
    x1 - обратное число;
    c - цифра исходного числа}kolfib, kolpal: integer; {количество чисел Фибоначчи и палиндромов}
begin
    clrscr;
    i:=10;{первое проверяемое число}
    while i<=1000 do {пока не закончится интервал, цикл будет продолжаться}
      begin
      x:=i; {число i изменяется только для внешнего цикла, поэтому будем проверять его дубликат}
      ch1:=0; ch2:=1; ch:=1; {алгоритм для поиска чисел Фибоначчи}
      repeat
        ch1:=ch2;
        ch2:=ch-1;
        ch:=ch1+ch2;inc(ch);
      until (x<ch) ;

      if x = ch-1 then inc(kolfib); {если Х - число Фибоначчи, то увеличим количество фибоначчиевых чисел} x:=i; {восстановим дубликат исходного числа}
      x1:=0; {сначала в переменной для сборки палиндрома - ноль}
      while x < >0 do {применим алгоритм разделения числа на цифры для сборки обратного числа}
        begin
        c:=x mod 10;
        x:=x div 10;
        x1:=x1*10+c; {собираем обратное число }
        end;

      If x1=i then inc(kolpal); {если обратное число равно исходному, то увеличим количество палиндромов}

      inc(i) {готовим следующее число для проверки}
      end;

    writeln( 'количество фибоначчиевых чисел = ':40,kolfib) ;
    writeln( 'количество палиндромов = ':40,kolpal) ;
    writeln;
end.

 

 

 

 

Copyright ©2011 Nika A.S.
Hosted by uCoz