>

Перша задача. Ввести "довге число" з файлу. Рішення задачі почнемо з опису даних.

Const MaxDig=1000; {Максимальна кількість цифр – чотиризначних}

Osn=10000;  {Основа системи числення, в елементах масиву – чотиризначні числа}

Type Tlong=Array[0..MaxDig] Integer;

Алгоритм введення "довгого числа" з файлу розглянемо на прикладі.

А[0]

А[1]

А[2]

А[3]

ch

Примітка

3

674

851

23

-

Кінцевий стан

0

0

0

0

2

Початковий стан

1

2

0

0

3

1-й крок

1

23

0

0

8

2-й крок

1

238

0

0

5

3-й крок

2

385

2

0

1

4-й крок: старша цифра елемента А [1] перейшла в поки "порожній елемент" А[2]

2

851

23

0

6

5-й крок

2

516

238

0

7

6-й крок

3

167

385

2

4

7-й крок

3

574

851

23

 

 

Нехай у файлі записано число 23851674 і основою (Osn) є 1000 (зберігаємо по три цифри в елементі масиву А). Зміна значень елементів масиву А під час введення (посимвольного в змінну ch) відображено в таблиці 2

Проаналізуємо таблицю.

1.      В А[0] зберігаємо кількість задіяних (ненульових) елементів масиву А.

2.                       При обробці кожної чергової цифри вхідного числа старша цифра елемента масиву з номером i стає молодшою цифрою числа в елементі i+1, а цифра, що вводиться, буде молодшою цифрою числа з А[1]. В результаті роботи алгоритму отримали число, записане задом наперед.

Примітка: Напишемо фрагмент тексту процедури перенесення старшої цифри з А[i] в молодшу цифруА[i+1], тобто зсув вже введеної частини числа на одну позицію вправо:

For i:=A[0] DownTo 1 Do Begin

А[i+l]:=A[i+l]+(Longint(А[i])*10) Div Osn;

А[i]:=(LongInt(А[i])*10) Mod Osn;

End;

Нехай вводиться число 23851674 і перші 6 цифр вже розмістили ззаду наперед в масиві А. В символьну змінну ch читали чергову цифру "довгого числа" – це "7". За алгоритмом ця цифра "7" має бути розміщена молодшою цифрою в А[1]. Наведений фрагмент програми "звільняє" місце для цієї цифри. В таблиці відображені результати роботи цього фрагменту.

i

А[1]

А[2]

А[3]

ch

2

516

238

0

7

2

516

380

2

 

1

160

385

2

 

Після цього залишається тільки додати поточну (зчитану в ch) цифру "довгого числа" до А[1] і змінити значення А[0].

Зрештою процедура повинна мати наступний вигляд:

Procedure ReadLong(Var А:Tlong);

Var ch:char;i:Integer;

Begin

FillChar(A,SizeOf(A),0);

Read(ch);

While Not(ch In ['0'..'9']) Do Read(ch);

{пропускання не цифр у вхідному файлі}

While ch In ['0'..'9'] Do

Begin

For i:=A[0] DownTo 1 Do

Begin

{перенесення старшої цифри в числі з A[i] в молодшу цифру числа з А[i+l]}

А[i+l]:=A[i+l]+(LongInt(А[i])*10) Div Osn;

A[i]:=(LongInt(А[i])*10) Mod Osn;

End;

А[1]:=A[l]+Ord(ch)-Ord('0');

{додаємо молодшу цифру до числа з А[1]}

If А[А[0]+1]>0 Then Inc(А[0]);

{змінюємо довжину, кількість задіяних елементів масиву А}

End;

End;

Друга задача. Виведення "довгого числа" у файл або на екран.

Нехай в елементах масиву зберігаються чотиризначні числа. Тоді "довге число" 128400583274 буде в масиві А представлено таким чином:

 

 

А[0]

А[1]

А[2]

А[3]

3

3274

58

1284

При виведенні "довгого числа" з масиву нам необхідно вивести 0058, інакше буде втрата цифр. Отже, незначущі нулі також необхідно виводити. Процедура виведення має вигляд:

Procedure WriteLong(Const А:Tlong);

Var Is,s:String;

i:Integer;

Begin

Str (Osn Div 10,Is) ;

Write(A[А[0]];{виводимо старші цифри числа}

For i:=A[0]-l DownTo 1 Do

Begin

Str(А[i],s);

While Length(s)<Length(Is) Do s:='0'+s;

{доповнюємо незначущими нулями}

Write (s) ;

End;

Writeln;

End;

Hosted by uCoz