P
Pront0
Всем доброе время суток)
Есть задача:
На входе строка с числом в шестнадцатиричной форме. Распознать строку в переменную типа int. На выходе строки с введенным числом в двоичной, восьмиричной и десятичной форме.
Нужно решить ее на С (не плюсах).Туплю, не могу решить. На паскале делал все норм.
Но тут проблема, вобщем вот код:
[codebox]
#include <stdio.h>
#include <conio.h>
//функция для перевода интежеровского 10ого в интежеровский 2ичный
int dec_v_bin(int x) {
int k,j,y,i;
char Ch[32];
for (i=0;i<32;i++) { /* заполняем массив Ch[] */
y=x&1; //побитовое и, т.е. определяем 1 или ноль
Ch=y; //затем записываем в массив
x=x>>1; //сдвигаем
};
for(j=31;j>=0;j-=1) { /* Выводи массив Ch[] */
if(Ch[j]!=0) {
for (k=j;k>=0;k-=1) { //2 цикла которые переворачивают массив
printf("%d",Ch[k]);
};
break;
};
};
return 0;
}
//фунцкция перевода строки 16го формата в интежер 16го
int Str2Int16(char* str)
{
int i,r,n = strlen(str);
for(r=i=0;i<n;i++)
{
r*=16;
if(str>='0'&& str<='9') r+=str-'0';
if(str>='A'&& str<='F') r+=str-'A'+10;
if(str>='a'&& str<='f') r+=str-'a'+10;
}
return r;
}
int main()
{
char s[30];
int dec;
printf("Enter hex->");
scanf("%s",s); //вводим строку 16ое число
dec=Str2Int16(s); //запоминаем в dec уже интежер 16го
printf("Dec: %d\n",dec); //выводим в десятичной
printf("Oct: %o\n",dec); //восбмиричной
dec_v_bin(dec); //двоичной
getch();
return 0;
}[/codebox]
Этот код рабочий, это максимум что я смог.
А нужно чтобы строки были на выходе, т.е. можно пользоваться только %s в printf е
Т.е. последний строки должны выглядеть не так:
[codebox]printf("Dec: %d\n",dec); //выводим в десятичной
printf("Oct: %o\n",dec); //восбмиричной
dec_v_bin(dec); //двоичной[/codebox]
А:
[codebox]printf("Dec: %s\n",.....); //выводим в десятичной
printf("Oct: %s\n",...); //восбмиричной
dec_v_bin(dec); //двоичной[/codebox]
Да, и в фунцкции dec_v_bin(int x), тоже не printf("%d",Ch[k]); А printf("%s",Ch[k]);
Помогите))
Есть задача:
На входе строка с числом в шестнадцатиричной форме. Распознать строку в переменную типа int. На выходе строки с введенным числом в двоичной, восьмиричной и десятичной форме.
Нужно решить ее на С (не плюсах).Туплю, не могу решить. На паскале делал все норм.
Но тут проблема, вобщем вот код:
[codebox]
#include <stdio.h>
#include <conio.h>
//функция для перевода интежеровского 10ого в интежеровский 2ичный
int dec_v_bin(int x) {
int k,j,y,i;
char Ch[32];
for (i=0;i<32;i++) { /* заполняем массив Ch[] */
y=x&1; //побитовое и, т.е. определяем 1 или ноль
Ch=y; //затем записываем в массив
x=x>>1; //сдвигаем
};
for(j=31;j>=0;j-=1) { /* Выводи массив Ch[] */
if(Ch[j]!=0) {
for (k=j;k>=0;k-=1) { //2 цикла которые переворачивают массив
printf("%d",Ch[k]);
};
break;
};
};
return 0;
}
//фунцкция перевода строки 16го формата в интежер 16го
int Str2Int16(char* str)
{
int i,r,n = strlen(str);
for(r=i=0;i<n;i++)
{
r*=16;
if(str>='0'&& str<='9') r+=str-'0';
if(str>='A'&& str<='F') r+=str-'A'+10;
if(str>='a'&& str<='f') r+=str-'a'+10;
}
return r;
}
int main()
{
char s[30];
int dec;
printf("Enter hex->");
scanf("%s",s); //вводим строку 16ое число
dec=Str2Int16(s); //запоминаем в dec уже интежер 16го
printf("Dec: %d\n",dec); //выводим в десятичной
printf("Oct: %o\n",dec); //восбмиричной
dec_v_bin(dec); //двоичной
getch();
return 0;
}[/codebox]
Этот код рабочий, это максимум что я смог.
А нужно чтобы строки были на выходе, т.е. можно пользоваться только %s в printf е
Т.е. последний строки должны выглядеть не так:
[codebox]printf("Dec: %d\n",dec); //выводим в десятичной
printf("Oct: %o\n",dec); //восбмиричной
dec_v_bin(dec); //двоичной[/codebox]
А:
[codebox]printf("Dec: %s\n",.....); //выводим в десятичной
printf("Oct: %s\n",...); //восбмиричной
dec_v_bin(dec); //двоичной[/codebox]
Да, и в фунцкции dec_v_bin(int x), тоже не printf("%d",Ch[k]); А printf("%s",Ch[k]);
Помогите))