Практика программирования (Бейсик, Си, Паскаль)


Задачи,советы и ответы - часть 10


{ Поиск симметричного разложения числа }

uses Crt;

var

i, k, p,N: integer;

a:array [0..15] of integer;

function perevod(n,p:integer) :integer;

{ Перевод числа n в систему с основанием р

Цифры р-ричного числа запоминаются в массиве а}

begin

for i:=0 to 15 do

begin

a[i]:=n mod p;

n:=n div p;

if n=0 then

begin perevod:=i;

exit;

end;

end;

end;

function proba(k:integer):integer;

{ Анализ числа, представленного k цифрами в массиве а

Если число - палиндром, то proba=l }

begin

for i:=0 to k div 2 do

if a[i]<>a[k-i] then

begin proba:=0;

exit;

end;

proba:=1;

end;

begin clrscr;

writeln('Поиск симметричного разложения с минимальным основанием');

writeln('Введите число');

readln(N);

for p:=2 to N do

begin

k:=perevod(N,p);

if proba(k)=0 then continue;

writeln('минимальное основание = ',p);

for i:=0 to k do writeln(a[i]);

break;

end;

readln;

end.

Задание 2.06. Суммирование десятичных цифр

Составить функцию sum_dig(n), аргументом которой является длинное целое число. Возвращаемое значение должно быть равно сумме десятичных цифр числа n.

Совет 1 (общий)

Обратите внимание на ситуацию, когда аргумент отрицателен. Остаток от де-ления отрицательного числа на 10 будет также отрицательным.

Совет 2 (OBasic)

Будьте внимательны при определении очередного частного от деления числа на 10. QBasic производит округления, и результат деления, например, целого числа 15 на целое число 10 даст в частном не 1, а 2.

Совет 3 (Си, Паскаль)

Обратите внимание на то, что циклы do (Си) и repeat (Паскаль) требуют противоположных условий выхода из цикла.

Программа 2_06.bas

RЕМ Суммирование десятичных цифр числа

DECLARE FUNCTION SUMDIG (N&)

CLS

INPUT "Введите целое число";М&

K=SUMDIG(M&)

PRINT "Сумма его цифр = ";К

END

FUNCTION SUMDIG(N&)

IF N&<0 THEN N&=-N& : ' Смена знака у отрицательного числа

RESULT=0

DO

RESULT=RESULT+(N& MOD 10&) : ' Накопление суммы цифр




- Начало -  - Назад -  - Вперед -