![]() ![]() ![]() ![]() |
|||
Тема
18. Рiзнi задачi
|
|||
Задача 18.4.1. Визначити скiльки цифр маї задане цiле число. program kilk_cifr; var n,x:integer; d:longint; begin x:=32767; d:=10; n:=1; while (x div d)<>0 do begin d:=d*10; n:=n+1; end; writeln('n=',n) end. Зауваження.Задане число є типу integer тому значення цього чис- ла не повинно виходити за межi допустимих значень для цього типу. Змiнна d також типу integer. Хоча х може приймати значення до 32767, але при цьому d набуде значення 100000, що виходить за межi допустимих зна- чень для чисел типу integer. Тому ця програма може працювати з числами, що мають не бiльше чотирьох цифр. **************************************************************** Задача 18.4.2. Визначити скiльки цифр маї задане цiле число (З перевiркою на вихiд за межi дiапазону). **************************************************************** program kilk_cifr; var n,d,x:integer; {d:longint;} begin x:=32000; d:=10; n:=1; while n<=5 do begin while (x div d)<>0 do begin d:=d*10; n:=n+1; end; x:=x+1; end; writeln('n=',n,x:9) end. ************************************************************** Задача 18.4.3. Визначити цифри заданого числа. Для Turbo Pascal 7.0 (Великi числа). ************************************************************** program kilk_cifr; var i,n,d,x:longint; a:array [1..100] of Longint; begin x:=214748364; d:=10; n:=1; while (x div d)<>0 do begin d:=d*10; n:=n+1; end; writeln('n=',n); {++++++++++++++++++++++} {Визначення цифр заданого числа x} for i:=1 to n do begin a[i]:=x mod 10; x:=x div 10; Write(a[i]:5); end; Writeln; {++++++++++++++++++++++} end. Зауваження.Можна зробити висновок, що наведенi вище програми ко- ректно працюють коли кiлькiсть цифр в заданому числi на одиницю менша максимально допустимої кiлькостi цифр для заданого типу величин. *************************************************************** Задача 18.4.4. Визначити кiлькiсть цифр в цiлiй частинi дiйсного числа. *************************************************************** program kilk_cifr; var n,i:integer; x,d:real; a:array[1..100] of integer; begin x:=9999999998.; d:=10; n:=1; while x/d>1 do begin d:=d*10; n:=n+1; end; writeln('n=',n); {++++++++++++++++++++++} {Визначення цифр заданого числа x} writeLn(x:2:0); d:=10; for i:=1 to n-2 do begin d:=d*10; end; for i:=1 to n do begin a[i]:=trunc(x/d); {trunc(x)-вiдкидання дробово• частини} {x:=(x/d-(round(x/d)-1))*d;} {round(x)-округлення до цiлого} x:=frac(x/d)*d; {frac(x)-дробова частина дiйсного числа} d:=d/10; Write(a[i]:5); end; {++++++++++++++++++++++} writeln end. Пояснення.Алгоритм визначення цифр грунтується на вiдкиданнi дробової частини числа пiсля його дiлення на 10^(n-1)-де n-кiлькiсть цифр в числi. Пiсля цього вiдкидається перша цифра числа (найстарший розряд) шляхом вiддiлення дробової частини отриманої вiд попе- реднього дiлення i наступного множення його на 10^(n-1).Таким чином визначають всi цифри числа. Зауваження.Через те, що Турбо Паскаль дозволяє працювати тiльки з першими 12 цифрами дiйсного числато решта цифр бу- дуть невiрними. Хоча кiлькiсть цифр можна визначати для чисел, що мають 38 цифр. |
|||