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

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

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

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

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

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

Типы данных: есть ли универсальный тип, который может заменить все типы данных в Си? - C++
Добрый вечер! Был бы очень признателен, если бы Вы помогли бы мне понять нижеследующие вопросы: 1. Можете ли на понятным для...

Типы данных - C++
Какого типа мне нужна переменная, чтобы принимала во такое число: 100000000000000 (15 цифр) ???

Типы данных C++ - C++
Подскажите какие вещественные и целые типы самые большие и маленькие

Типы данных - C++
Мне задали в университете лабораторную работу. Написать программу вычисления среднего массивов типа int,float и complex. Функции,...

Типы данных - C++
Помогите пожалуйста решить проблему с типами данных. C++ только начинаю учить, поэтому не знаю, можно ли так сделать или нет. Нужно...

типы данных - C++
какой диапазон данных у main, getch? и какой тип данных у getch?

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


Цитата Сообщение от Evg Посмотреть сообщение
0x3f9e0419
а, по началу не заметил дополнение про 16 -ричное... хммм..
0
Evg
Эксперт CАвтор FAQ
17955 / 6186 / 415
Регистрация: 30.03.2009
Сообщений: 16,985
Записей в блоге: 27
10.06.2009, 22:51 #32
ага
0
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
10.06.2009, 22:52  [ТС] #33
а почему в 16-ти ричном виде а не в десятичном?
0
Evg
Эксперт CАвтор FAQ
17955 / 6186 / 415
Регистрация: 30.03.2009
Сообщений: 16,985
Записей в блоге: 27
10.06.2009, 22:55 #34
Ну пиши в десятичном, какая разница Просто в шестнадцатиричном виде удобнее воспринимать, ибо оно в уме переводится в двоичный (а в машине всё в даоичном виде)
0
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
10.06.2009, 23:06  [ТС] #35
попробовал, старнно..выводит не как у тебя а:
0х00000419
0
Evg
Эксперт CАвтор FAQ
17955 / 6186 / 415
Регистрация: 30.03.2009
Сообщений: 16,985
Записей в блоге: 27
10.06.2009, 23:18 #36
Я ведь уже писал тебе - пост #14. И покажи потом веь исходник программы
0
Акелла
Сонный металюга
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;
}
0
Evg
Эксперт CАвтор FAQ
17955 / 6186 / 415
Регистрация: 30.03.2009
Сообщений: 16,985
Записей в блоге: 27
10.06.2009, 23:25 #38
Акелла, ну не тормози пожалуйста. Возьми код из поста 14, покажи итоговый код и покажи что печатает. Блин вот в очередной раз две страницы форума уйдёт на то, чтобы ты сделал то, что тебя просят
0
Акелла
Сонный металюга
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
0
Evg
Эксперт CАвтор FAQ
17955 / 6186 / 415
Регистрация: 30.03.2009
Сообщений: 16,985
Записей в блоге: 27
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;
}
ТОЛЬКО НИЧЕГО В ЭТОМ КОДЕ НЕ МЕНЯЙ! Кроме синтаксических ошибок
0
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
10.06.2009, 23:44  [ТС] #41
вывел следующее:
2
4
4

Добавлено через 1 минуту 47 секунд
вывод заменил, теперь получаем так:
C++
1
2
3
size = 4 4
fval=1.234500
u.i=1067320345
0
Evg
Эксперт CАвтор FAQ
17955 / 6186 / 415
Регистрация: 30.03.2009
Сообщений: 16,985
Записей в блоге: 27
10.06.2009, 23:50 #42
Цитата Сообщение от Акелла Посмотреть сообщение
вывел следующее:
2
4
4
Итого, получаем следующее. Я хотел выяснить размер типов, используемых в твоём компиляторе. У профессионального программиста я бы получил ответ за 5 секунд. У непрофессионального программиста - за 2 минуты (т.е. надо было влепить код из поста 14, и показать выдачу). У непрофессионального программиста, который любит много думать - более часа и более 20 постов на форуме. Постарайся всё-таки не допускать таких ляпусов Делай то, о чём тебя просят - быстрее решишь свою задачу

Цитата Сообщение от Акелла Посмотреть сообщение
вывод заменил, теперь получаем так:
C++
1
2
3
size = 4 4
fval=1.234500
u.i=1067320345
Это правильный вариант. ТОлько в десятичном виде. Если нужно в 16-ричном, то печтать надо через "%lx" (вместо "%ld"). В в main замени "%i" на "%ld" или "%lx" (что больше нравится)

Суть проблемы была написана изначально. В union'е в качестве целого типа надо поставить тот, чей размер равен 4 байтам (размеру float'а)
1
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
10.06.2009, 23:53  [ТС] #43
Цитата Сообщение от Evg Посмотреть сообщение
У непрофессионального программиста - за 2 минуты (т.е. надо было влепить код из поста 14, и показать выдачу). У непрофессионального программиста, который любит много думать - более часа и более 20 постов на форуме.
спасибо порадовал=)
ну нет, надо же думать - просто переписывать я не хочу, толку то от меня тогда и грош мне цена коли не учусь=)



Цитата Сообщение от Evg Посмотреть сообщение
Это правильный вариант. ТОлько в десятичном виде. Если нужно в 16-ричном, то печтать надо через "%lx" (вместо "%ld"). В в main замени "%i" на "%ld" или "%lx" (что больше нравится)
а, то есть выводит он верно.. эм.. а вариант так чтобы вводим например 1,2345 а он выводит (возвращает то етсь) нам 12345 нет?
0
Evg
Эксперт CАвтор FAQ
17955 / 6186 / 415
Регистрация: 30.03.2009
Сообщений: 16,985
Записей в блоге: 27
11.06.2009, 00:00 #44
Цитата Сообщение от Акелла Посмотреть сообщение
спасибо порадовал=)
ну нет, надо же думать - просто переписывать я не хочу, толку то от меня тогда и грош мне цена коли не учусь=)
Наверно изначально нужно было сказать, что я прошу тебя влепить этот код не потому, что я его за тебя написал, а для того, чтобы выяснить, в чём проблема. Просто суть задачи ты понял, но подводных камней (типа размеры базовых типов) по совей неопытности пока не видишь. А суть подводного камня я достаточно чётко не обрисовал. Проблему в BullDogoff мы обсудили, но ты этого не понял. А я со своей стороны поленился довести это до тебя

Цитата Сообщение от Акелла Посмотреть сообщение
а, то есть выводит он верно.. эм.. а вариант так чтобы вводим например 1,2345 а он выводит (возвращает то етсь) нам 12345 нет?
Такой вариант не удовлетворяет постановке задачи. Но если очень хочится - вводишь строку и удаляешь в ней точку. По другому никак. Если 1.2345 представляется точно, то какое-нибудь 1.333 - нет (ну или просто подобрать число). Т.е. уже на этапе формирования этого числа в виде float'а ты потеряешь его истинное значение
1
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
11.06.2009, 00:08  [ТС] #45
Цитата Сообщение от Evg Посмотреть сообщение
Просто суть задачи ты понял, но подводных камней (типа размеры базовых типов) по совей неопытности пока не видишь.


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

кстати, можешь про объединение в двух словах как про структуру данных?

я для себя полистал справочник - узнал что это структура, элементы которой расположенны по одному и тому же адресу, откда следует что ее размер определяеться размером наибольшего элемента и в любой момент времени оно омжет хранить только один элемент.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2009, 00:08
Привет! Вот еще темы с ответами:

типы данных - C++
int x1, x2; float summa; x1 = 5; x2 = 6; summa = (x1 + x2)/2; cout &lt;&lt; summa &lt;&lt; endl; почему в результате 5, а не...

типы данных - C++
уважаемые программисты, как отвести типу char 2 байта? пишу шахматы, 6 фигур, хочу, чтобы каждый бит отводился для определенной фигуры, +...

типы данных - C++
Подскажите как средствами С++ получить доступ к отдельным байтам стандартных типов данных, только без использования асматических вставок.

Типы данных - C++
__int64 Z = pow(a,x); long double Y = 9/Z; cout&lt;&lt;Y //Y = 0 Как вывести подробней? Добавлено через 6 минут И при Y%Z не...


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

Или воспользуйтесь поиском по форуму:
45
Yandex
Объявления
11.06.2009, 00:08
Ответ Создать тему
Опции темы

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