Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Функция типа char.Возвращаемые значения / 21 сообщений из 21, страница 1 из 1
23.11.2006, 01:15
    #34148562
Катька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
(Сразу говорю, что на си++ почти не работаю, так что от комментариев по поводу стиля написания прошу воздержаться =) )
Пишу программу перевода из десятичного в 16-ое... Но уже на стадии разработки алгоритма столкнулась с проблемой...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
int main()
{  unsigned int A;
   char *HEX1;
       char *Str1="ВВедите десятичное число:";
       ::CharToOem(Str1,Str1);
       cout<<Str1<<'\n';
       cin >> A;
       cout<<DecToHex(A)<<'\n';
       getch();
 return  0 ;
}
char *DecToHex(unsigned int A)
 {
char *HEX;

 if(A> 15 )
 { //;
 }
 else
        if(A< 10 )
        *HEX=A;
        else
        switch(A)
        {
        case  10 : *HEX='A';break;
        case  11 : *HEX='B';break;
        case  12 : *HEX='C';break;
        case  13 : *HEX='D';break;
        case  14 : *HEX='E';break;
        }
 return HEX;
 }
при запуске (пока ввожу числа до 15), ответ получается например при вводе 10 => A?9
затем консоль зависает, вызывается исключение EAccessViolation
Помогите справиться с проблемой!!! Буду очень благодарна!
...
Рейтинг: 0 / 0
23.11.2006, 01:26
    #34148569
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
Солнце! На стадии тестирования твоего алгоритма, обнаружилось, что он ваапще не предназначен для перевода чисел более 15. С чем и поздравляю.

P.S Не могла фотку поменьше поставить! У меня-ж модем ёлки-палки

P.P.S К стилю я не придрался!
...
Рейтинг: 0 / 0
23.11.2006, 01:29
    #34148570
Катька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
с 10-15 числами я поняла почему так, тк я ковычки одинарные поставила а надо было двойные, а как теперь правильно привести unsigned int к char (((
Код: plaintext
1.
2.
if(A< 10 )
    *HEX=A;
при вводе чисел от 0 до 9 :
то же самое только он не выводит даже значения, а только " ?9 "
...
Рейтинг: 0 / 0
23.11.2006, 01:30
    #34148571
Катька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
maytonСолнце! На стадии тестирования твоего алгоритма, обнаружилось, что он ваапще не предназначен для перевода чисел более 15. С чем и поздравляю.

P.S Не могла фотку поменьше поставить! У меня-ж модем ёлки-палки

P.P.S К стилю я не придрался!

Эту фотку пора убрать уже...
это он пока не предназначен, я его еще допишу, я только начала, а ночь еще впереди)
...
Рейтинг: 0 / 0
23.11.2006, 01:45
    #34148585
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
Оххх! Катерина! Значит слушай. Программу твою мне смотреть, честно говоря не интересно. Потому-что ты превысила допустимый лимит ошибок на 1 килобайт исходного кода. Я вообще удивляюсь, как она у тебя работает.

Значит так. Я хочу увидеть формулировку твоего задания в исходном виде (первый вопрос). Это определит, что тебе нужно писать, как писать и с использованием чего писать. В скобках замечу, что для перевода систем счисления С++ имеет готовые функции. И посему интерес к написанию подобный вещей есть только у новичков изучающих ... ээ.. а что ты изучаешь? (это второй вопрос).

Жду ответа...

C уважением
Lord Mayton
...
Рейтинг: 0 / 0
23.11.2006, 01:51
    #34148588
Катька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
maytonОххх! Катерина! Значит слушай. Программу твою мне смотреть, честно говоря не интересно. Потому-что ты превысила допустимый лимит ошибок на 1 килобайт исходного кода. Я вообще удивляюсь, как она у тебя работает.

Значит так. Я хочу увидеть формулировку твоего задания в исходном виде (первый вопрос). Это определит, что тебе нужно писать, как писать и с использованием чего писать. В скобках замечу, что для перевода систем счисления С++ имеет готовые функции. И посему интерес к написанию подобный вещей есть только у новичков изучающих ... ээ.. а что ты изучаешь? (это второй вопрос).

Жду ответа...

C уважением
Lord Mayton

Задание, преобразовать десятичное в 16-ти ричное. Число вводится с клавиатуры. Работаю в билдере 6... Если есть стандартные функции - это замечательно, я бы ей воспользовалась, если бы знала))
...
Рейтинг: 0 / 0
23.11.2006, 01:54
    #34148590
Катька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
mayton... ээ.. а что ты изучаешь? (это второй вопрос).

изучаю.. гм... технология программирования))))
...
Рейтинг: 0 / 0
23.11.2006, 02:07
    #34148599
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
Ну.. в первом приближении где-то так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#include <iostream.h>
#include <stdio.h>

int main()
{  	
	unsigned int A;

	// min= 0 , max= 4294967295 

	cin >> A;

	printf("%X",A);

        return  0 ;

}

Стандартная функция - printf(...) . Она выводит на экран целочисленный тип данных в различных системах счисления. Если нужно выводить не на экран а в строку, надо воспользоватся функцией sprintf(...) .


C уважением
Lord Mayton
...
Рейтинг: 0 / 0
23.11.2006, 02:15
    #34148604
Катька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
maytonНу.. в первом приближении где-то так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#include <iostream.h>
#include <stdio.h>

int main()
{  	
	unsigned int A;

	// min= 0 , max= 4294967295 

	cin >> A;

	printf("%X",A);

        return  0 ;

}

Стандартная функция - printf(...) . Она выводит на экран целочисленный тип данных в различных системах счисления. Если нужно выводить не на экран а в строку, надо воспользоватся функцией sprintf(...) .


C уважением
Lord Mayton

Вау!!! РАБОТАЕТ!!!!!!! УРа!! УрА!!! Тысяча благодарностей!!!!!!!!! Даже и не знаю, что сказать))) Я пару часов провозилась, а оказалось все так просто (но все равно я бы до такого не додумалась)))))))
...
Рейтинг: 0 / 0
23.11.2006, 02:20
    #34148608
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
Пустяки!

А новая фотка - лучше.

C уважением
Lord Mayton
...
Рейтинг: 0 / 0
23.11.2006, 02:24
    #34148610
Катька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
maytonПустяки!

А новая фотка - лучше.

C уважением
Lord Mayton

Правда я сама хотела написать программу преобразования (без использования стандартных функций) ))) ну это уже неважно, может на досуге займусь))) :D
...
Рейтинг: 0 / 0
23.11.2006, 07:22
    #34148712
Функция типа char.Возвращаемые значения
Катька maytonПустяки!

А новая фотка - лучше.

C уважением
Lord Mayton

Правда я сама хотела написать программу преобразования (без использования стандартных функций) ))) ну это уже неважно, может на досуге займусь))) :D
Ну, тогда тебе нужен алгоритм перевода числа из одной системы счисления в другую

Для случая перевода из 10-ой в 16-ричную это будет так:
автор1. Исходное число делим на 16 с остатком. Получаем частное и остаток. Остаток преобразуем в 16-ричную систему счисления. Это будет самая "правая" цифра
2. Частное снова делим на 16 с остатком. Остаток преобразуем в 16-ричную систему счисления. Это будет следующая цифра "справа"
3. Повторяем п.2 пока частное больше 16. Если частное меньше 16, то преобразуем его в 16-ричную систему. Эта цифра будет самой "левой" в результате.


Рассмотрим алгоритм на примере.
автор
Пусть имеем число 300 (триста) в десятичной системе счисления. Переведем его в 16-ричную.

1. 300:16=18; остаток = 12, переводим его в 16-ричную систему, получаем С
2. 18:16=1; остаток = 2, переводим в 16-ричную систему счисления, получаем 2
3. 1 < 16 - деление прекращаем, преобразуем 1 в 16-ричную систему счисления, получаем 1

В итоге получаем:300 (десятичное) = 12С (шестнадцатиричное)...


Точно такой же алгоритм и для перевода в двоичную систему счисления. Только там делить надо на 2

Что касается твоей программы, то:
1. забыла приписать следующую ветку:
Код: plaintext
1.
        case  15 : *HEX='F';break;
2. Возвращаемое значение объявлено как char *, а память-то под массив символов нигде не выделяется... Неудивительно, что программа ведет себя неадекватно и виснет...
...
Рейтинг: 0 / 0
23.11.2006, 11:13
    #34149284
sashka304
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
а в билдере есть такая замечательная функция как
Код: plaintext
1.
 AnsiString __fastcall IntToHex(int Value, int Digits);
берешь ее и никаких проблем :)
...
Рейтинг: 0 / 0
29.11.2006, 19:22
    #34165362
Катька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
Станислав С Катька maytonПустяки!

А новая фотка - лучше.

C уважением
Lord Mayton

Правда я сама хотела написать программу преобразования (без использования стандартных функций) ))) ну это уже неважно, может на досуге займусь))) :D
Ну, тогда тебе нужен алгоритм перевода числа из одной системы счисления в другую

Для случая перевода из 10-ой в 16-ричную это будет так:
автор1. Исходное число делим на 16 с остатком. Получаем частное и остаток. Остаток преобразуем в 16-ричную систему счисления. Это будет самая "правая" цифра
2. Частное снова делим на 16 с остатком. Остаток преобразуем в 16-ричную систему счисления. Это будет следующая цифра "справа"
3. Повторяем п.2 пока частное больше 16. Если частное меньше 16, то преобразуем его в 16-ричную систему. Эта цифра будет самой "левой" в результате.


Рассмотрим алгоритм на примере.
автор
Пусть имеем число 300 (триста) в десятичной системе счисления. Переведем его в 16-ричную.

1. 300:16=18; остаток = 12, переводим его в 16-ричную систему, получаем С
2. 18:16=1; остаток = 2, переводим в 16-ричную систему счисления, получаем 2
3. 1 < 16 - деление прекращаем, преобразуем 1 в 16-ричную систему счисления, получаем 1

В итоге получаем:300 (десятичное) = 12С (шестнадцатиричное)...


Точно такой же алгоритм и для перевода в двоичную систему счисления. Только там делить надо на 2

Что касается твоей программы, то:
1. забыла приписать следующую ветку:
Код: plaintext
1.
        case  15 : *HEX='F';break;
2. Возвращаемое значение объявлено как char *, а память-то под массив символов нигде не выделяется... Неудивительно, что программа ведет себя неадекватно и виснет...

гм)) спасибо))
Как переводить из 10 в 16-ую систему я знаю (учеба не позволяет не знать этого) ^_^
...
Рейтинг: 0 / 0
29.11.2006, 19:25
    #34165366
Катька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
sashka304а в билдере есть такая замечательная функция как
Код: plaintext
1.
 AnsiString __fastcall IntToHex(int Value, int Digits);
берешь ее и никаких проблем :)
а где она лежит, в какой библиотеке? я просто писала так (от Delphi в памяти осталось), но что-то не получалось...
...
Рейтинг: 0 / 0
29.11.2006, 22:49
    #34165625
M.Alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
Катька - лохушка
...
Рейтинг: 0 / 0
29.11.2006, 22:50
    #34165628
M.Alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
Извини, не воздержался )))
...
Рейтинг: 0 / 0
30.11.2006, 00:56
    #34165711
sashka304
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
а где она лежит, в какой библиотеке? я просто писала так (от Delphi в памяти осталось), но что-то не получалось...
ну вроде это была VCL ф-я,
#include <vcl.h>
а потом ее юзаешь и все у тебя цветет и пахнет
а в хелпе пишут про нее так:
Converts a number into a string containing the number's hexadecimal (base 16) representation.
static AnsiString __fastcall IntToHex(int value, int digits);
Description
Value is the number to convert. Digits indicates the minimum number of hexadecimal digits.
...
Рейтинг: 0 / 0
30.11.2006, 07:24
    #34165822
muk07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
char *DecToHex(unsigned int A)
 {
char *HEX;

 if(A> 15 )
 { //;
 }
 else
        if(A< 10 )
        *HEX=A;
        else
        switch(A)
        {
        case  10 : *HEX='A';break;
        case  11 : *HEX='B';break;
        case  12 : *HEX='C';break;
        case  13 : *HEX='D';break;
        case  14 : *HEX='E';break;
        }
 return HEX;
 }
А кто даст память под HEX?
HEX=new char;
Непонятно почему не было access violation
...
Рейтинг: 0 / 0
19.01.2007, 15:28
    #34268579
Функция типа char.Возвращаемые значения
А я вот так поизвращался
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
unsigned char StrToHex(AnsiString Str)
{
        int FirstSymbol,SecondSymbol;
        AnsiString Symbol1,Symbol2;
        AnsiString HEX[ 16 ] = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
        Symbol1 = Str.SubString( 1 , 1 );
        Symbol2 =Str.SubString( 2 , 2 );
        for(int d= 0 ;d< 16 ;d++)
                {
                if (HEX[d]==Symbol1)    FirstSymbol = d;
                if (HEX[d]==Symbol2)    SecondSymbol = d;
                }

        return char(FirstSymbol* 16 +SecondSymbol);
}
...
Рейтинг: 0 / 0
19.01.2007, 15:57
    #34268679
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция типа char.Возвращаемые значения
извгашенец пишет:
> for(int d=*0*;d<*16*;d++)
> {
> if (HEX[d]==Symbol1) FirstSymbol = d;
> if (HEX[d]==Symbol2) SecondSymbol = d;
> }

Вообще-то это без циклов всяких пишется.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Функция типа char.Возвращаемые значения / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]