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


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


Совет 2 (Си)

К сожалению, среди строковых функций Си, включенных в заголовочный файл string.h, нет процедуры вставки символа в строку. Поэтому нам придется сдвигать вправо на одну позицию часть символов от начала периода и вставлять открывающуюся скобку. Не следует забывать и о вставке признака конца строки.

Программа 3_10.bas

RЕМ Преобразование обычной дроби в десятичную

DECLARE FUNCTION FRAC2STR$(M%, N%)

CLS : DEFINT A-Z

INPUT "Введите числитель и знаменатель дроби : ",M,N

PRINT M;"/";N;"= ";FRAC2STR$(M,N)

END

DEFSNG A-Z

FUNCTION FRAC2STR$(M AS INTEGER,N AS INTEGER)

DIM S AS STRING, REST(100) AS INTEGER

DEFINT A-Z

I=3: S="0."

DO

Q=M*10\N : P=M*10 MOD N: REST(I)=P

IF P=0 THEN

FRAC2STR=S+CHR$(Q+48) EXIT FUNCTION

END IF

FOR J=3 TO 1-1

IF REST(J)=P THEN

FRAC2STR=LEFT$(S, J-l}+"("+RIGHT$(S,LEN(S)-J+l)+")"

EXIT FUNCTION

END IF

NEXT J

S=S+CHR$(Q+48): I=1+1: M=P LOOP UNTIL P=0

END FUNCTION

Программа 3_10.с

/* Преобразование обычной дроби в десятичную */

#include <stdio.h>

#include <conio.h>

char *frac_to_str(char m,char n);

main() {

char m,n;

printf("\n Введите числитель и знаменатель дроби : ");

scanf("%d %d",sm,&n) ;

printf("\n%d/%d=%s",m,n,frac_to_str(m,n));

getch();

}

/ *-----------------------------------------------* /

char *frac_to_str(char m,char n) {

int i=2,j,p,q;

char rest[100];

static char s [100]="0.";

do {

q=m*10/n; p=m*10%n; rest[i]=p;

if(p==0) { s[i]=q+48;

s[i+l]=0x0;

return s; }

for(j=2; j<i; j++)

if(rest[j]==p) {

for(p=i; p>=j; p--)

s[p+l]=s[p];

s[j]='(';

s[i+l]=')';

s [i+2]=0x0 ;

return s ; }

s[i]=q+48;

i++;

m=p; }

while (p!=0); }

Программа 3_10.pas

program drobi;

{ Преобразование обычной дроби в десятичную }

var

m, n:byte;

function frac_to_str(m,n:byte):string;

var

i,j,p,q:word;

s:string;

rest:array [1..100] of byte;




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