четвер, 10 листопада 2016 р.

СОРТУВАННЯ ЕЛЕМЕНТІВ РЯДКА. ПРОГРАМИ НА ПАСКАЛІ.


Сортування елементів рядка – означає розташування(впорядкування) їх  згідно відомих наперед критеріїв. Найчастіше впорядковують числа в рядку по зростанню або по спаданню.
Приклад.  Сортування цифр числа. Записати цифри довільного багатоцифрового числа у зворотному порядку способом знаходження остач від ділення на 10 і знайти суму його цифр та  неповну частку з остачею при діленні  даного числа на 4.
Словесний опис алгоритму:
1. Виявити останню цифру, тобто зберегти остачу  при діленні даного числа на 10.
2. Утворити нове число способом «відрізання» останньої цифри в даному числі, тобто знайти цілу частину при діленні  даного числа на 10 і зберегти її .
3. Виявити передостанню цифру, тобто зберегти остачу  при діленні новоутвореного числа на 10.
4. Утворити нове число способом «відрізання» передостанньої цифри в новоутвореному числі, тобто знайти цілу частину при діленні  даного числа на 10 і зберегти її .
І так далі…
Останній крок. Утворити ціле число, з цифрами в оберненому порядку,  способом множення кожної цифри на  її розрядну одиницю і сумуванням цих добутків:  а*10m + с* 10m-1 + … р*10 + n.
Програмa  на мові PASCAL:
Спочатку треба утворити в одній папці такі файли: ZVOROT.PAS,   DANO.TXT,  RESULT.TXT, SUMMA.TXT. ZASTKA.TXT, а потім в середовище PASCAL ввести коди самої програми.
Program ZVOROT;
 CONST   {оголошується перелік усіх постійних величин, тобто кількість цифр у даному числі буде всього 9}
           n=9;
 TYPE   {оголошується  (MASSIV)рядок  цілих чисел  і кількість місць для них від 1 до n в діапазоні   byte }
     MASSIV=array[1..n] of  byte;
 VAR    {оголошується перелік усіх змінних величин, що використовуються у програмі}
    f: text; {оголошується текстовий файл, що буде використовуватися у програмі  }
    i, s, k, c, a, b, t: longint; {оголошуються довгі цілі змінні величини, що будуть використовуватися у програмі}
      m: Massiv; {оголошується рядок  змінних величин, що будуть використовуватися у програмі}
BEGIN   {оголошується рядок  початок виконання  алгоритмічних дії програми}
Assign(f,'DANO.TXT');  {оголошується присвоєння  файловій змінній   об’єкта DANO.TXT}
Reset (f);   {оголошується відкриття   об’єкта DANO.TXT}
Readln (f,t); {оголошується присвоєння змінній t даного числа, що є  в  об’єкті DANO.TXT}
Close (f);  {оголошується закриття об’єкта DANO.TXT}
Assign(f,'ZASTKA.TXT');  {оголошується присвоєння  файловій змінній   об’єкта 'ZASTKA.TXT'}
Rewrite(f);  {оголошується відкриття об’єкта f  для запису текстової інформації}
Write(f,t, '  : 4  = ', t div 4, ' (остача ',t mod 4, ' )');  {так записують у файл 'ZASTKA.TXT'  результати ділення числа на 4}
close(f);   {оголошується закриття об’єкта}
for i:=n  downto 1 do m[i]:=0; {цикл з лічильником у зворотному порядку для присвоєння усім елементам рядка  m[i]  нулів }
s:=0;
    while t<>0 do {оголошується цикл з перед умовою: поки змінна t не рівна нулю, то треба виконувати дії}
       begin
     s:=s+1;  { підраховують скільки разів працював цикл, тобто, це кількість   цифр  у даного числа}
    m[s]:=t mod 10; {так знаходять остачу від ділення на 10 і запам’ятовують її в рядок, як цифру даного числа}
    t:=t div 10; {так відкидають останню цифру числа і запам’ятовують новоутворене число }
                 end; {так закінчують цикл з перед умовою }
c:=0; k:=1; b:=0;  
    for i:=s downto 1 do {оголошується цикл з лічильником від s до 1 , тобто, треба виконувати такі дії}
        begin
          c:=c+m[i]*k; {так знаходять а*10m + с* 10m-1 + … р*10 + n і запам’ятовують шукане число}
          k:=k*10; {так отримують розрядну одиницю  100..0 для наступних цифр і запам’ятовують її}
         b:=b+m[i]; {так знаходять суму усіх цифр даного числа і запам’ятовують її}
       end;                   {так закінчують цикл з лічильником від s до 1 }
Assign(f,'RESULT.TXT');  Rewrite(f);  Write(f, c);  close(f); {так записують шукане число у файл 'RESULT.TXT'}
Assign(f,'SUMMA.TXT');  Rewrite(f);  Write(f, b);  close(f); {так записують суму цифр у файл 'SUMMA.TXT'}
END.                {так закінчують виконання програми}



Приклад.

Сортування способом вибору елементів в несортованому рядку.
Словесний опис алгоритму:
Перший крок. Визначити найменший елемент масиву.
Другий крок. Поміняти його місце з першим елементом.
Третій крок. Визначити найменший елемент серед інших елементів рядку.
Четвертий крок. Переставити його на місце другого, а другий елемент на місце найменшого.
І так далі.
Програмне кодування сортування на мові Паскаль:

Program Illusion;
Var f: text;
i,s,k,c,d,a,b,t1:integer;
m:array[1..5]of byte;
BEGIN
Assign(f,'dano.txt');
Reset (f);
Readln (f,t1);
Close (f);
m[1]:=0; m[2]:=0; m[3]:=0; m[4]:=0; m[5]:=0; s:=0;
while t1<>0 do begin s:=s+1; m[s]:=t1 mod 10; t1:=t1 div 10;
end;
c:=0;k:=1;
for i:=s downto 1 do begin c:=c+m[i]*k; k:=k*10; end;
Assign(f,'result.txt');
Rewrite(f);
Write(f,c);
close(f);
END.



Немає коментарів:

Дописати коментар