Пользователь
Регистрация: 13.06.2011
Сообщений: 23
|
перевод чисел на си
помогите исправить хотя бы синтаксические ошибки уже сдавать через несколько часов
main.cpp
Код:
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include"main.h"
int main()
{
int w,a,b1,b2,n=0,n1=0,l=0,l1=0;
int k=0,i,i1=0,i2=0;
double result,fractional,celie;
char c[14];
scanf("%d%d",&b1,&b2);
scanf("%s",c);
bad(b1,b2);
bad_input(c,n,b1);
n=schet(c);
if (w=1)
{
l1=celiy_schet(c);
result=celie_v_dec_system(c,b1,l1);
celie=celie_v_b2(result,b2);
result=0;
result=fractional_v_dec(l1,n,b1,c);
fractional=result_to_b2_fractional(l1,b2,result);
crazy_vivod(w,celie,fractional);
}
else
{
result=celie_v_dec_system(c,b1,n);
celie=celie_v_b2(result,b2);
fractional=0;
crazy_vivod(w,celie,fractional);
}
}
main.h
Код:
int powe( int a, int x);
//возведение в положительную и отрицательную степень
void bad(int b1,int b2);
//смотрим действительно ли б1 и б2 от 2 до 16
int schet(char c);
//считает кол-во символов попутно сообщая дробьное число это или нет
int celiy_schet(char c);
//считает кол-во четных символов
int bad_input(char c,int n,int b1);
//смотрит то ли введено
int celie_v_dec_system(char* c,int b1,int l1);
//берем целую часть и переводим в 10-ную систему
int celie_v_b2(double result,int b2);
//результат предыдущей деятельности в б2
int fractional_v_dec(int l1,int n,int b1,char c);
//дробину при наличии оной в десятичную
int result_to_b2_fractional(int l1,int b2,double result);
//а потом в б2
void crazy_vivod(int w,double celie,double fractional);
//все это чудо выводим
//PROFIT
func.cpp
Код:
#include<stdlib.h>
#include"main.h"
#include<stdio.h>
int powe( int a, int x){ // а в степени х
int result = 1;
if (x>0){
while(x>0){
result = result * a;
--x;
}
} else
while(x>0){
result = result * (1/a);
--x;
}
return result;
}
void bad(int b1,int b2)
{
if (b1>16||b2>16||b1<2||b2<2) // 2<b1 b2<16
{printf("bad input");
exit(0);}
}
int schet(char* c){
int i,w,n;
for(i=0;c[i]!=0;i++)
{if (c[i]=='.')
w=1;
n++;}
return w,n;
}
int celiy_schet(char* c)
{
int i,l1;
for(i = 0; c[i] != '.' && c[i] != 0; i++)
l1++;
return l1;
}
void bad_input(char* c[],int n,int b1)
{
int i;
for(i=0;i<n;i++)
if (!(c[i]-'0'<b1||c[i]==','))
{
printf("bad input");
exit(0);
}
}
int celie_v_dec_system(char* c,int b1,int l1)
{
int i;
double celie;
for(i=0;i<l1;i++)
{
celie=celie+c[i]*powe(b1,l1-1);
l1--;
}
return celie;
}
int celie_v_b2(double result,int b2)
{
int i,a;
double celie;
for(i=0;celie!=0;i++)
{ a =(int) celie % b2;
celie = celie / b2;
celie=celie+a*powe(10,i);
}
return result;
}
int fractional_v_dec(int l1,int n,int b1,char* c)
{
int i,k=0;
double result=0;
for(i=l1;i<n;i++)
{
result=result+c[i]*powe(b1,-k);
k++;
l1--;
}
return result;
}
int result_to_b2_fractional(int l1,int b2,double result,double celie)
{
double fractional;
int i,a;
for(i=l1;fractional!=0;i++)
{ a =(int)fractional % b2;
fractional = celie / b2;
result=result+a*powe(10,i);
}
return fractional;
}
void crazy_vivod(int w,double celie,double fractional)
{
if(w=1)
printf("%s.%s",celie,fractional);
else
printf("%s",celie);
}
Последний раз редактировалось Stilet; 08.04.2012 в 22:35.
|