D-Gj

Proekt (16.04.2013)

Apr 16th, 2013
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.49 KB | None | 0 0
  1. /*
  2.         1. Опис на проблемот:
  3.  
  4.             Да се најдат и испечатат сите броеви во интервалот [1, m) кои се
  5.         деливи со нивните спротивни броеви.
  6.  
  7.         2. Анализа на задачата:
  8.  
  9.             Задачата вклучува внесување на границата на интервалот кој ќе се
  10.         разгледува, дефинирање на функција за наоѓање на спротивен број,
  11.         итерирање низ броевите во интервалот, тестирање на деливост и печатење
  12.         на сите броеви кои го задовлуваат условот.
  13.  
  14.         3. Опис на влезни податоци, меѓурезултати и резултати:
  15.  
  16.             Влезни податоци: 1. Единствен влезен податок е бројот "m" кој ја претставува
  17.                                 горната граница на разгледуваниот интервал.
  18.  
  19.  
  20.             Меѓурезултати:      N/A
  21.  
  22.  
  23.             Резултати:       1. Сите броеви во интервалот [1, m) кои се деливи со нивните
  24.                                 спротивни броеви (кои исто така се печатат).
  25.  
  26.         4. Алгоритам:
  27.  
  28.             алгоритам BroeviDeliviSoSprotivniBroevi;
  29.  
  30.                 функција NajdiSprotivenBroj(OriginalenBroj);
  31.                     почеток
  32.                         SprotivenBroj <- 0;
  33.  
  34.                         додека (OriginalenBroj > 0) извршувај
  35.                             почеток
  36.                                 SprotivenBroj <- (SprotivenBroj * 10) + (OriginalenBroj MOD 10);
  37.                                 OriginalenBroj <- OriginalenBroj DIV 10;
  38.                             крај
  39.                         крај_додека {OriginalenBroj > 0}
  40.  
  41.                         врати SprotivenBroj;
  42.                     крај
  43.                 крај_функција
  44.  
  45.             почеток
  46.                 читај m;
  47.  
  48.                 ако (m <= 1) тогаш
  49.                     печати 'Грешка!';
  50.                 крај_ако{m <= 1}
  51.  
  52.                 додека (m > 1) извршувај
  53.                     почеток
  54.                         m <- m - 1;
  55.                         n <- SprotivenBroj(m);
  56.                         ако (m MOD n = 0) тогаш
  57.                             печати m, ' е делител на ', n;
  58.                         крај_ако{m MOD n = 0}
  59.                     крај
  60.                 крај_додека{m > 0)
  61.             крај.
  62.  
  63.  
  64.             5. Користење на програмата:
  65.  
  66.                 Програмата се користи така што преку стандарден влез (тастатура) се внесува
  67.             горната граница на интервалот во кој ќе се бараат броеви деливи со нивните
  68.             спротивни броеви.
  69. */
  70.  
  71. #include <iostream>
  72.  
  73. using namespace std;
  74.  
  75. int findOpposite ( int ); // Prototip.
  76.  
  77. int main ( )
  78. {
  79.     // Ispechati informacii.
  80.     cout << "Ovaa programa kje iterira niz site elementi vo intervalot [1, m)," << endl
  81.          << "naogjajkji i pechatejkji gi broevite koi se delivi so svoite sprotivni broevi." << endl << endl
  82.          << "Vnesete go \"m\": ";
  83.     // Vlezni podatoci.
  84.     int m;
  85.     cin >> m;
  86.     cout << endl;
  87.     // Osiguraj deka e vnesen broj, i deka brojot e pogolem od 1.
  88.     if ( !cin || m <= 1 )
  89.     {
  90.         cout << "Losh vnes... prekinuvam so izvrshuvanje." << endl;
  91.         return 1;
  92.     }
  93.     // Iteriraj niz broevite, pochnuvajkji od (n - 1) i odejkji do 1.
  94.     while ( --m >= 1 )
  95.     {
  96.         int n = findOpposite ( m );
  97.  
  98.         if ( m % n == 0 )
  99.             cout << n << " e delitel na " << m << "." <<endl;
  100.     }
  101.     return 0;
  102. }
  103.  
  104. int findOpposite ( int number )
  105. {
  106.     // Vo ovaa promenliva kje bide skladiran generiraniot broj.
  107.     int oppositeNumber = 0;
  108.     // Generiraj go brojot.
  109.     do
  110.     {
  111.         oppositeNumber = (oppositeNumber * 10) + (number % 10);
  112.         number /= 10;
  113.     }
  114.     while ( number > 0 );
  115.     // Vrati go rezultatot.
  116.     return oppositeNumber;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment