Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.64
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
#1

типы данных - C++

09.06.2009, 12:36. Просмотров 2741. Ответов 45
Метки нет (Все метки)

на Си реализовать: (не С++)
построить функцию, возвращающую все байты заданного вещественного х в целом виде.
т.е. нам например вводят 10 как float, а нам нужно вернуть его как int, елси наоборот -это просто.... а вот так...
кто подскажет?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2009, 12:36     типы данных
Посмотрите здесь:

Типы данных C++
C++ Типы данных
типы данных C++
Типы данных C++ C++
Типы данных C++
Типы Данных C++
типы данных C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 17:15  [ТС]     типы данных #21
Evg, опа, а я почему то думал тчо так явно нельзя! спс огромное - вбил, прогнал пашет=)
ну, опыт сын ошибок трудных=)
Evg
Эксперт CАвтор FAQ
17385 / 5623 / 350
Регистрация: 30.03.2009
Сообщений: 15,402
Записей в блоге: 26
09.06.2009, 17:19     типы данных #22
Цитата Сообщение от Акелла Посмотреть сообщение
Evg, опа, а я почему то думал тчо так явно нельзя! спс огромное - вбил, прогнал пашет=)
ну, опыт сын ошибок трудных=)
Только всё равно мне кажется, что для задачи нужно не это, ибо смысла в такой задаче нет. Ты всё-таки уточни
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 17:21  [ТС]     типы данных #23
Evg, завтра как раз узнаю.
знаешь - наш препод мог спокойнойд дать
у него в обычае дать на контроьной кусок кода и сказать -вот напишите что он выведет когда на входе то и то...
а на самом деле прога вообще не рабочая и он это знает
Evg
Эксперт CАвтор FAQ
17385 / 5623 / 350
Регистрация: 30.03.2009
Сообщений: 15,402
Записей в блоге: 26
09.06.2009, 17:34     типы данных #24
Ну а такая постановка задачи сводится по сути к тому, что напишите прогу, которая нифига не делает
BullDogoff
10 / 10 / 1
Регистрация: 16.05.2009
Сообщений: 30
09.06.2009, 17:35     типы данных #25
Весёлый у вас препод.. Вообще в следующий раз задание дословно приводи, и пример, если получится.. Хотя полезно получилось, так я бы объединения и не попробовал бы в работе
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 17:39  [ТС]     типы данных #26
BullDogoff, а я теперь в принципе знаю что етсь что то такое=)
веселый это еще слабо сказано, но ладно не в этом суть=)
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
10.06.2009, 22:17  [ТС]     типы данных #27
BullDogoff, Evg, преподу показал... вы правы были ребята, короче суть в следующем
например приходит число 123,45 - вещественное
нужно вернуть целое 12345, т.е. все биты
Evg
Эксперт CАвтор FAQ
17385 / 5623 / 350
Регистрация: 30.03.2009
Сообщений: 15,402
Записей в блоге: 26
10.06.2009, 22:31     типы данных #28
Уверент? Потому как очередной бред. Если введут 1.22222222222222222222222222222, то у тебя нет целого числа, чтобы это дело представить. Не говоря уж о том, что плавающие числа в общем случае не представляются без округления
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
10.06.2009, 22:34  [ТС]     типы данных #29
Evg, нет, не очень уверен=) просто черезъ объединения было верно... но выводить оно должно нечто похожее на введеное.

ну вообще дословно формулировка:
построить функцию, возвращающую все байты заданного вещественного х в целом виде. может я уже не так все понимаю?=)
Evg
Эксперт CАвтор FAQ
17385 / 5623 / 350
Регистрация: 30.03.2009
Сообщений: 15,402
Записей в блоге: 26
10.06.2009, 22:46     типы данных #30
Вот при такой формулировке и нужно работать через union

#include <stdio.h>

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int
func (float fval)
{
  union
  {
    float f;
    int i;
  } u;
 
  u.f = fval;
  return u.i;
}
 
int
main (void)
{
  int i;
 
  i = func (1.2345);
  printf ("0x%08x\n", i);
 
  return 0;
}
Код
0x3f9e0419
При условии, что sizeof(int)==4 и sizeof(float)==4

Добавлено через 33 секунды
То 16-ричное число, которое ты видишь - вот так твоё плавающее число хранится в памяти
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
10.06.2009, 22:49  [ТС]     типы данных #31
Evg, подожди, а чего оно выведет то? вот то что ты написал:


Цитата Сообщение от Evg Посмотреть сообщение
0x3f9e0419
а, по началу не заметил дополнение про 16 -ричное... хммм..
Evg
Эксперт CАвтор FAQ
17385 / 5623 / 350
Регистрация: 30.03.2009
Сообщений: 15,402
Записей в блоге: 26
10.06.2009, 22:51     типы данных #32
ага
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
10.06.2009, 22:52  [ТС]     типы данных #33
а почему в 16-ти ричном виде а не в десятичном?
Evg
Эксперт CАвтор FAQ
17385 / 5623 / 350
Регистрация: 30.03.2009
Сообщений: 15,402
Записей в блоге: 26
10.06.2009, 22:55     типы данных #34
Ну пиши в десятичном, какая разница Просто в шестнадцатиричном виде удобнее воспринимать, ибо оно в уме переводится в двоичный (а в машине всё в даоичном виде)
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
10.06.2009, 23:06  [ТС]     типы данных #35
попробовал, старнно..выводит не как у тебя а:
0х00000419
Evg
Эксперт CАвтор FAQ
17385 / 5623 / 350
Регистрация: 30.03.2009
Сообщений: 15,402
Записей в блоге: 26
10.06.2009, 23:18     типы данных #36
Я ведь уже писал тебе - пост #14. И покажи потом веь исходник программы
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
10.06.2009, 23:23  [ТС]     типы данных #37
исплонил=) ну в смысле что проверяю ввод -с ним все нормально....
постарасля сделат ьвывод в десятичной форме для целого.. что то я явно не так делаю:

C++
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
#include <stdio.h>
#include <conio.h>
 
int func (float fval)
{
  union
  {
    float f;
    int i;
  } u;
 
  u.f = fval;
  return u.i;
}
 
int main (void)
{
  int i;
  float x;
  clrscr();
  printf("\n\t enter x: ");
  scanf("%f",&x);
  i = func (x);
  printf ("\n\t%f",x);
  printf ("\n\t%i\n", i);
  getch();
  return 0;
}
Evg
Эксперт CАвтор FAQ
17385 / 5623 / 350
Регистрация: 30.03.2009
Сообщений: 15,402
Записей в блоге: 26
10.06.2009, 23:25     типы данных #38
Акелла, ну не тормози пожалуйста. Возьми код из поста 14, покажи итоговый код и покажи что печатает. Блин вот в очередной раз две страницы форума уйдёт на то, чтобы ты сделал то, что тебя просят
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
10.06.2009, 23:32  [ТС]     типы данных #39
=)))
сделано -вот смотри - тот код что не в коментариях -из 14 поста.
C++
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
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <conio.h>
long int func (float fval)
{
  union
  {
    float f;
    long int i;
  } u;
 
  printf ("sizes = %d %d\n", sizeof (u.i), sizeof (u.f));
  printf ("fval=%f\n", fval);
  u.f = fval;
  printf ("u.i=%d\n", u.i);
  return u.i;
}
/*int func (float fval)
{
  union
  {
    float f;
    int i;
  } u;
 
  u.f = fval;
  return u.i;
}*/
 
int main (void)
{
  long int i;
  float x;
  clrscr();
  printf("\n\t enter x: ");
  scanf("%f",&x);
  i = func (x);
  printf ("\n\t%f",x);
  printf ("\n\t%i\n", i);
  getch();
  return 0;
}
а на экран он выводит во чего:

C++
1
2
3
size = 4 4
fval=1.234500
u.i=1024
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2009, 23:37     типы данных
Еще ссылки по теме:

типы данных C++
Типы данных C++
C++ типы данных
C++ Типы данных
C++ Типы данных

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17385 / 5623 / 350
Регистрация: 30.03.2009
Сообщений: 15,402
Записей в блоге: 26
10.06.2009, 23:37     типы данных #40
Епона-мама. Ты взял тот код и заменил int на long. ТОгда уж и печать меняй

15 строка - printf ("u.i=%ld\n", u.i);

Тогда уж ставлю вопрос тупо в лоб, чтобы отмазаться тяжелее было. Запсути следующий код и покажи, что он напечатает

C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main (void)
{
  printf ("int=%d\n", (int)sizeof(int));
  printf ("long=%d\n", (int)sizeof(long));
  printf ("float=%d\n", (int)sizeof(float));
 
  return 0;
}
ТОЛЬКО НИЧЕГО В ЭТОМ КОДЕ НЕ МЕНЯЙ! Кроме синтаксических ошибок
Yandex
Объявления
10.06.2009, 23:37     типы данных
Ответ Создать тему
Опции темы

Текущее время: 13:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru