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

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

Форум «Всё о Паскале» _ Ада и другие языки _ Строки

Автор: Unknown 20.12.2006 17:55

Вот само задание:
Написать и протестировать функцию 1_ТО_В(п, s, Ь), которая переводит целое число п в строку s, представляющую число в системе счисления с основанием Ь.

Объясните, пожалуйста, что от меня хотят? smile.gif) А то я чего-то не пойму...
Желательно на примере.

Автор: volvo 20.12.2006 18:02

А хотят от тебе аналог функции itoa из библиотеки stdlib... Ей тоже надо передать число в 10-ной системе счисления, и с/с, в которую его перевести, и получаешь строку, содержащую результат:

#include <stdio.h>
#include <stdlib.h>

int main() {
char buffer[20];

printf("%s\n", itoa(124, buffer, 8));
return 0;
}

Напечатано будет 174, что является представлением 124(10) в с/с с основанием 8

Автор: Unknown 21.12.2006 20:03

Ага, понял вроде... спасибо.
Только вопрос по переводу числа из одной с/c в другую: как в двоичную из десятичной переводить я знаю, а остальные - так же?

Автор: volvo 21.12.2006 20:15

Ну, вообще-то у нас в FAQ-е (паскалевском, правда, но смысл-то тот же) была функция по переводу из с/с (10) в любую другую: http://forum.pascal.net.ru/index.php?s=&showtopic=4535&view=findpost&p=38226

Автор: Unknown 21.12.2006 22:00

Сделал:

#include <conio.h>
#include <iostream.h>
#include <string.h>

string itob(int n,string s,int b)
{
string digit="0123456789ABCDEF";
while (n>0)
{s=digit[n%b]+s;
n/=b;}
itob=s;
}

void main()
{
clrscr();
int n,b;
string s;
cout<<"\nBBeguTe 4uc/lo: ";
cin>>n;
cout<<"\nBBeguTe ocHoBaHue cucTeMbl c4uc/leHu9l: ";
cin>>b;
cout<<"\n\n"<<n<<" B cucTeMe c4uc/leHu9l "<<b<<" = "<<itob(n,s,b)<<endl;
getch();
}


Что-то не так в объявлении функции itob()...

Автор: volvo 21.12.2006 22:04

Ну, это смотря какой у тебя компилятор... Типа string как такового не существует... Есть или char *, или std::string из STL

Автор: Unknown 21.12.2006 23:20

Borland C++ V3.1

Вот, что у меня получилось - только нужно перевернуть строку, а как - я не могу понять...

#include <conio.h>
#include <iostream.h>
#include <string.h>

char* itob(int n,char* s,int b)
{
int i=0;
char* digit="0123456789ABCDEF";
while (n>0)
{s[i]=digit[n%b];
i++;n/=b;}
s[i]='\0';
return s;
}

void main()
{
clrscr();
int n,b;
char* s="";
cout<<"\nBBeguTe 4uc/lo: ";
cin>>n;
cout<<"\nBBeguTe ocHoBaHue cucTeMbl c4uc/leHu9l: \0";
cin>>b;
cout<<"\n\n"<<n<<" B cucTeMe c4uc/leHu9l "<<b<<" = "<<itob(n,s,b)<<endl;
getch();
}

Автор: volvo 21.12.2006 23:32

...
return strrev(s);
...

Автор: Unknown 22.12.2006 2:49

Спасибо!