Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Перевод из 10ой в 16ую с.с.

Автор: Rudolf 30.10.2006 20:33

Программа работает но только с первыми 16 ю числами smile.gif Помогите пожалста исправить...


#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
#include <math.h>
int main(void) {
clrscr();
int n;
char s;
const char digit[16]="0123456789ABCDEF";
cin>>n;
while (n != 0)
{
s=digit[(n % 16)]+s;
n=n / 16;
}
cout<<s;
getch();
return 0;

}


Автор: klem4 30.10.2006 20:35

http://forum.pascal.net.ru/index.php?showtopic=4535

Переводи на Си++ и все готово ...

Автор: Rudolf 30.10.2006 20:39

Я так и сделал, только она не работает все равно...там помоему я вместо паскалевского div поставил просто / , может в этом ошибка?

Автор: klem4 30.10.2006 20:42

char s;

char - символ, а нужна строка, это во первых

Volvo, опоздал ;)

Автор: volvo 30.10.2006 20:42

Нет... Ошибка в том, что char в С и string в Паскале - совершенно разные вещи... Ты просто суммируешь в S что-то, а в строке символы склеиваются...

P.S.

Rudolf, кстати, зачем изобретать свое, если есть готовое? itoa, например...

Автор: Rudolf 30.10.2006 20:52

ошибку понял...
то volvo: Что такое itoa?

Автор: klem4 30.10.2006 20:55

http://www.zsu.zp.ua/lab/help/C/htm/itoa.htm

Автор: Rudolf 30.10.2006 21:37

Спасибо за такую полезную функцию smile.gif Но думаю препод этого не поймет dry.gif
вобщем я переделал через функцию сцепления строк, но теперь выводит вдобавок к числу еще и непонятные символы


#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int main(void) {
clrscr();
int n,i;
char s[25],*ch;
const char digit[16]="0123456789ABCDEF";
cin>>n;
i=n;
while (n != 0)
{
if (n==i) {
*ch=digit[(n % 16)];
strcpy(s,ch);
}
else {
*ch=digit[(n % 16)];
strcat(s,ch);
}
n=n / 16;
}
cout<<s;
getch();
return 0;

}


Автор: volvo 30.10.2006 21:54

#include <conio.h>
#include <iostream.h>
#include <string.h>
int main(void) {

clrscr();
int n, pos = 0;

char s[25];
const char digit[16]="0123456789ABCDEF";
cin >> n;
while(n) {
s[pos++] = digit[(n % 16)];
n /= 16;
}

s[pos] = '\0';
strrev(s);

cout << s;
getch();
return 0;
}
Так лучше?

Автор: Rudolf 30.10.2006 22:05

Конечно лучше smile.gif Спасибо!!volvo ты как всегда просто спаситель smile.gif

Автор: volvo 30.10.2006 22:06

Вопрос на засыпку: а почему у тебя выводило какой-то мусор кроме правильного значения, ты разобрался?

Автор: Rudolf 30.10.2006 22:21

Да...наверно потому что символа конца строки не было???