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


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


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

RЕМ Поиск симметричного разложения числа

DECLARE FUNCTION perevod!(n%,p%,a%())

DECLARE FUNCTION proba! (a%(),k%)

DIM a%(16)

CLS

INPUT "Введите число из диапазона [0,30000] : ",n%

FOR p%=2 TO n%-l

k%=perevod(n%,p%,a%()) : ' Перевод в р-ричную систему

IF proba(a%(), k%) о 0 THEN

PRINT "Симметричное разложение с минимальным основанием

FOR i = 0 ТО k% - 1

PRINT TAB(0);а%(i);"*";р%; "^";k%-i;"+";

NEXT i

PRINT :

PRINT a% (0);"*";p%;"^";0

END

END IF

NEXT p%

END

FUNCTION perevod (n%,p%,a%())

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

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

m%=n%

FOR i=0 TO 15

a%(i)=m% MOD p%

m%=(m%-a%(i))/p%

IF m%=0 THEN perevod=i: EXIT FUNCTION

NEXT i

END FUNCTION

FUNCTION proba (a%(),k%)

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

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

proba=l

FOR i=0 TO k%/2

IF a% (i)0a% (k%-i) THEN proba=0: EXIT FUNCTION

NEXT i

END FUNCTION

Программа 2_05.с

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

#include <conio.h>

#include <stdio.h>

int perevod(int n, int p, int *a);

int proba(int *a, int k);

int i ;

main() {

int k,p,N,a[16];

clrscr () ;

scanf("%d",&N);

for (p=2; p<N; p++)

k=perevod(N, p, a); /* Перевод в р-ричную систему */

if (proba(a,k)==0) continue;

printf("Хпминимальное основание = %d\n",p);

for(i=0; i<=k; i++)

printf("%d ",a[i]);

break;

getch(); }

int perevod(int n,int p,int *a) /* Перевод числа п в систему с основанием р

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

for(1=0; 1<1б; 1++)

a[i]=n % р; n=n/р;

if(n==0) return i;

}

int proba (int *a, int k)

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

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

for(i = 0; i <= k/2; 1++)

if(a[i] != a[k-i]) return 0; return 1 ;

Программа 2_05.pas

program min_base;




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