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

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

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

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

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

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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];
};
Синтаксис проверь, вроде так..
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 13:37  [ТС]     типы данных #3
не понял, можешь по подробней?
и... это не С++ операция?
Evg
Эксперт CАвтор FAQ
17463 / 5701 / 361
Регистрация: 30.03.2009
Сообщений: 15,654
Записей в блоге: 26
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
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 всегда байт, соответственно задавай размер массива.. ВооодЪ.. Путано слегка, но, надеюсь, понятно приблизительно?

З.Ы.: Балин, опять не успел..
Акелла
Сонный металюга
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,
а можешь быстренько переписать мой код под твою функцию?
я так понял на словах - с синтаксисом таким еще не работал
Evg
Эксперт CАвтор FAQ
17463 / 5701 / 361
Регистрация: 30.03.2009
Сообщений: 15,654
Записей в блоге: 26
09.06.2009, 14:03     типы данных #7
Между 12 и 13 строками воткни: printf ("x=%f\n", x);
RazorQ
576 / 343 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
09.06.2009, 14:05     типы данных #8
Цитата Сообщение от Акелла Посмотреть сообщение
printf("Integer: %i",func(x));
Должно быть
C
1
printf("integer %d", func(x));
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 14:08  [ТС]     типы данных #9
упорно выводит что iteger: 0

Добавлено через 2 минуты 14 секунд
RazorQ, нифига.. он же должен преобразовать в инт.. тем более что попробовал всеравно никак
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, товарищи.. ИМХО..

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

Цитата Сообщение от Evg Посмотреть сообщение
Между 12 и 13 строками воткни: printf ("x=%f\n", x);
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 14:19  [ТС]     типы данных #13
воткнул. косячит у меня функция. уж такое то я контролирую...
ввожу 5, printf ("x=%f\n", x); выводит мне 5.0000 с ноликами то бишь
а функция выдает просто голый ноль
Evg
Эксперт CАвтор FAQ
17463 / 5701 / 361
Регистрация: 30.03.2009
Сообщений: 15,654
Записей в блоге: 26
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;
}
Haster
инженер-системотехник
109 / 108 / 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;
поправьте, если не прав )
Evg
Эксперт CАвтор FAQ
17463 / 5701 / 361
Регистрация: 30.03.2009
Сообщений: 15,654
Записей в блоге: 26
09.06.2009, 14:33     типы данных #16
Цитата Сообщение от Haster Посмотреть сообщение
А разве не будет косяков из-за такой записи?
Если писать на все случаи жизни - то вообще неизвестно, что должно быть, ибо язык Си тебе не даёт вообще никакой гарантии, что у тебя float 4 байта и что какойто целый тип занимает 4 байта.

Я так понимаю, что у автора всё-таки компилятор под винду под режим 32 и писал в этом предположении. Но на всякий случай в своём последнем посте воткнул печать размеров типов
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 14:44  [ТС]     типы данных #17
тем не менее... ребят, вы мне объясните принцип как это делаеться -я сам лучше напишу.. хоть воткну... а то я что то слабо улавливаю когда так
Evg
Эксперт CАвтор FAQ
17463 / 5701 / 361
Регистрация: 30.03.2009
Сообщений: 15,654
Записей в блоге: 26
09.06.2009, 14:50     типы данных #18
Принцип я тебе написал. Почему оно у тебя не работает - вопрос. Я тебе в 14-м посте написал, какой код адо воткнуть и показать печати. Чтобы понять, в каком месте у тебя проблема.
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 17:09  [ТС]     типы данных #19
не, ребят. я упорно не понимаю.. либо мы о разном говорим..
смотрите -вводиться например у нас 10.000 ну то бишь вещественное.. .а вернуть должно 10 то есть целое...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2009, 17:11     типы данных
Еще ссылки по теме:

ТЕСТЫ Типы данных на С - C++
Какой тип машинно-зависимый А. unsigned long Б. unsigned char В. unsigned int Г. unsigned short Д. unsigned long long Какой...

Перечисляемые типы данных - C++
Какие есть в С++ перечисляемые типы данных? Какая у них область применения? Спасибо!)

Функции и типы данных - C++
Cоздать 3 одномерных статических массива Х1, Х2, Х3 размерностями N1, N2, N3 (где N константа, определяемая в программе программистом)....

Основные типы данных - C++
1) Объявить в программе переменные и константы (выбор обосновать) для хранения следующих данных: а) площадь произвольного цилиндра, ...


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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17463 / 5701 / 361
Регистрация: 30.03.2009
Сообщений: 15,654
Записей в блоге: 26
09.06.2009, 17:11     типы данных #20
Цитата Сообщение от Акелла Посмотреть сообщение
не, ребят. я упорно не понимаю.. либо мы о разном говорим..
смотрите -вводиться например у нас 10.000 ну то бишь вещественное.. .а вернуть должно 10 то есть целое...
C
1
2
3
4
int func (float f)
{
  return (int)f;
}
Но начальная постановка задачи всё-таки похожа на то, о чём мы тебе тут толковали
Yandex
Объявления
09.06.2009, 17:11     типы данных
Ответ Создать тему
Опции темы

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