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

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

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

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

09.06.2009, 12:36. Просмотров 2871. Ответов 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
BullDogoff
10 / 10 / 1
Регистрация: 16.05.2009
Сообщений: 30
09.06.2009, 13:35 #2
Используй объединение (union), как-то так:
C++
1
2
3
4
5
union Q
{
    float F;
    char C[4];
};
Синтаксис проверь, вроде так..
0
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 13:37  [ТС] #3
не понял, можешь по подробней?
и... это не С++ операция?
0
Evg
Эксперт CАвтор FAQ
18252 / 6377 / 438
Регистрация: 30.03.2009
Сообщений: 17,652
Записей в блоге: 28
09.06.2009, 13:47 #4
C
1
2
3
4
5
6
7
8
9
10
11
int func (float fval)
{
  union
  {
    float f;
    int i;
  } u;
 
  u.f = fval;
  return u.i;
}
А поподробнее - бери книжку и читай, что такое union
1
BullDogoff
10 / 10 / 1
Регистрация: 16.05.2009
Сообщений: 30
09.06.2009, 13:55 #5
Дык я ж погуглил.. Говорят - родная сишная фишка.. Вообще очень полезная штука, а для твоих целей - самое оно..
union - это область памяти, где одновременно могут храниться объекты разных типов.. Ну, это по книжке)) Т.е., в данном случае, ты объявляешь переменную qqq типа Q, вводишь переменную типа float в qqq.F, а потом считываешь каждый байт отдельно из массива qqq.C[], т.к. это тот же самый участок памяти. Посмотри только размер float у себя, как правило, четыре байта, но мало ли.. Я предпочитаю перестраховаться.. Например, у меня int занимает четыре байта, а у кого-то - слово, т.е. два байта.. char всегда байт, соответственно задавай размер массива.. ВооодЪ.. Путано слегка, но, надеюсь, понятно приблизительно?

З.Ы.: Балин, опять не успел..
1
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 14:02  [ТС] #6
попробовал. выдает ноль. вот код:
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
#include <conio.h>
#include <STDLIB.H>
#include <ALLOC.H>
#include <stdio.h>
int func (float fval);
int main()
{
    clrscr();
        float x;
    printf("Enter nomber: ");
    scanf("%f",&x);
    printf("Integer: %i",func(x));
    getch();
    return 0;
}
int func (float fval)
{
  union
  {
    float f;
    int i;
  } u;
 
  u.f = fval;
  return u.i;
}
Добавлено через 3 минуты 36 секунд
BullDogoff,
а можешь быстренько переписать мой код под твою функцию?
я так понял на словах - с синтаксисом таким еще не работал
0
Evg
Эксперт CАвтор FAQ
18252 / 6377 / 438
Регистрация: 30.03.2009
Сообщений: 17,652
Записей в блоге: 28
09.06.2009, 14:03 #7
Между 12 и 13 строками воткни: printf ("x=%f\n", x);
0
RazorQ
581 / 348 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
09.06.2009, 14:05 #8
Цитата Сообщение от Акелла Посмотреть сообщение
printf("Integer: %i",func(x));
Должно быть
C
1
printf("integer %d", func(x));
0
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 14:08  [ТС] #9
упорно выводит что iteger: 0

Добавлено через 2 минуты 14 секунд
RazorQ, нифига.. он же должен преобразовать в инт.. тем более что попробовал всеравно никак
0
BullDogoff
10 / 10 / 1
Регистрация: 16.05.2009
Сообщений: 30
09.06.2009, 14:11 #10
На плюсах это выглядит следующим образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream.h>
 
union Q
{
    float F;
    char C[4];
};
 
main()
{
    Q qqq;
    
    cin>>qqq.F;
    for(int i=0; i<4; i++)
                cout<<int(qqq.C[i])<<" ";
    
    cout<<endl;
 
    return 0;
}
На C переводи сам, я там с вводом-выводом не дружу)) Но структурно именно так.

построить функцию, возвращающую все байты заданного вещественного х в целом виде.
Т.е. выводить нужно не int, а именно char, товарищи.. ИМХО..

я так понял на словах - с синтаксисом таким еще не работал
По сути - работаешь как со структурой, синтаксис тот же..
0
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 14:14  [ТС] #11
бог с нми с выводом.. он выдает правда..эм...
вообще ввожу 5, получаю:
0 0 64 64
0
Evg
Эксперт CАвтор FAQ
18252 / 6377 / 438
Регистрация: 30.03.2009
Сообщений: 17,652
Записей в блоге: 28
09.06.2009, 14:16 #12
Дал тебе подсказку, чтобы можно было понять, scanf у тебя косячит или функция. Ты игронируешь. После этого как-то пропадает жедание помогать

Цитата Сообщение от Evg Посмотреть сообщение
Между 12 и 13 строками воткни: printf ("x=%f\n", x);
0
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 14:19  [ТС] #13
воткнул. косячит у меня функция. уж такое то я контролирую...
ввожу 5, printf ("x=%f\n", x); выводит мне 5.0000 с ноликами то бишь
а функция выдает просто голый ноль
0
Evg
Эксперт CАвтор FAQ
18252 / 6377 / 438
Регистрация: 30.03.2009
Сообщений: 17,652
Записей в блоге: 28
09.06.2009, 14:23 #14
Цитата Сообщение от BullDogoff Посмотреть сообщение
Т.е. выводить нужно не int, а именно char, товарищи.. ИМХО..
В задче написано, написать функцию, ВОЗВРАЩАЮЩУЮ
Хотя спорить не хочется, ибо какая в пень разница, так делать или эдак

Добавлено через 1 минуту 38 секунд
К тому же у меня всё отработало
Код
Enter nomber: 1.234
Integer: 1067316150
Добавлено через 1 минуту 52 секунды
Цитата Сообщение от Акелла Посмотреть сообщение
воткнул. косячит у меня функция. уж такое то я контролирую...
Ну хотьнапиши об этом, чтобы не было ощущения, что говорю впустую

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int func (float fval)
{
  union
  {
    float f;
    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;
}
0
Haster
инженер-системотехник
110 / 109 / 2
Регистрация: 10.03.2009
Сообщений: 533
09.06.2009, 14:28 #15
А разве не будет косяков из-за такой записи?
C++
1
2
3
4
5
  union
  {
    float f;
    int i;
  } u;
Тип float явно длиннее, чем int, следовательно что-то в int не попадет
Наверно, правильней так
C++
1
2
3
4
5
  union
  {
    float f;
    long i;
  } u;
поправьте, если не прав )
0
09.06.2009, 14:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2009, 14:28
Привет! Вот еще темы с ответами:

типы данных - 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 не...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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