Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
Сонный металюга
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295
1

типы данных

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

на Си реализовать: (не С++)
построить функцию, возвращающую все байты заданного вещественного х в целом виде.
т.е. нам например вводят 10 как float, а нам нужно вернуть его как int, елси наоборот -это просто.... а вот так...
кто подскажет?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2009, 12:36
Ответы с готовыми решениями:

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

Типы данных: чем отличается тип данных int от float?
Всем привет! Помогите пожалуйста, чем отличается тип данных int от float?

Чтение недопустимых данных, динамические массивы, типы данных
Добрый день, реализую метод интерполяции сплайнами на С++, при подсчете одного из коэффициентов...

Типы данных
Здравствуйте! В результате программа должна выводить типы данных переменных и их значения. Но...

45
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
Сонный металюга
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 13:37  [ТС] 3
не понял, можешь по подробней?
и... это не С++ операция?
0
Evg
Эксперт CАвтор FAQ
21117 / 8133 / 628
Регистрация: 30.03.2009
Сообщений: 22,448
Записей в блоге: 30
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
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
Сонный металюга
46 / 46 / 13
Регистрация: 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
21117 / 8133 / 628
Регистрация: 30.03.2009
Сообщений: 22,448
Записей в блоге: 30
09.06.2009, 14:03 7
Между 12 и 13 строками воткни: printf ("x=%f\n", x);
0
587 / 354 / 15
Регистрация: 06.02.2009
Сообщений: 1,386
09.06.2009, 14:05 8
Цитата Сообщение от Акелла Посмотреть сообщение
printf("Integer: %i",func(x));
Должно быть
C
1
printf("integer %d", func(x));
0
Сонный металюга
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 14:08  [ТС] 9
упорно выводит что iteger: 0

Добавлено через 2 минуты 14 секунд
RazorQ, нифига.. он же должен преобразовать в инт.. тем более что попробовал всеравно никак
0
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
Сонный металюга
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 14:14  [ТС] 11
бог с нми с выводом.. он выдает правда..эм...
вообще ввожу 5, получаю:
0 0 64 64
0
Evg
Эксперт CАвтор FAQ
21117 / 8133 / 628
Регистрация: 30.03.2009
Сообщений: 22,448
Записей в блоге: 30
09.06.2009, 14:16 12
Дал тебе подсказку, чтобы можно было понять, scanf у тебя косячит или функция. Ты игронируешь. После этого как-то пропадает жедание помогать

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

Я так понимаю, что у автора всё-таки компилятор под винду под режим 32 и писал в этом предположении. Но на всякий случай в своём последнем посте воткнул печать размеров типов
1
Сонный металюга
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 14:44  [ТС] 17
тем не менее... ребят, вы мне объясните принцип как это делаеться -я сам лучше напишу.. хоть воткну... а то я что то слабо улавливаю когда так
0
Evg
Эксперт CАвтор FAQ
21117 / 8133 / 628
Регистрация: 30.03.2009
Сообщений: 22,448
Записей в блоге: 30
09.06.2009, 14:50 18
Принцип я тебе написал. Почему оно у тебя не работает - вопрос. Я тебе в 14-м посте написал, какой код адо воткнуть и показать печати. Чтобы понять, в каком месте у тебя проблема.
0
Сонный металюга
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 17:09  [ТС] 19
не, ребят. я упорно не понимаю.. либо мы о разном говорим..
смотрите -вводиться например у нас 10.000 ну то бишь вещественное.. .а вернуть должно 10 то есть целое...
0
Evg
Эксперт CАвтор FAQ
21117 / 8133 / 628
Регистрация: 30.03.2009
Сообщений: 22,448
Записей в блоге: 30
09.06.2009, 17:11 20
Цитата Сообщение от Акелла Посмотреть сообщение
не, ребят. я упорно не понимаю.. либо мы о разном говорим..
смотрите -вводиться например у нас 10.000 ну то бишь вещественное.. .а вернуть должно 10 то есть целое...
C
1
2
3
4
int func (float f)
{
  return (int)f;
}
Но начальная постановка задачи всё-таки похожа на то, о чём мы тебе тут толковали
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2009, 17:11

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

Типы данных
__int64 Z = pow(a,x); long double Y = 9/Z; cout&lt;&lt;Y //Y = 0 Как вывести подробней? ...

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

Типы данных
Здраствуйте, столкнулся с ситуацией, что необходимо возвести число в факториал. Задача не сложная,...

типы данных
int x1, x2; float summa; x1 = 5; x2 = 6; summa = (x1 + x2)/2; cout &lt;&lt; summa &lt;&lt; endl;...


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

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

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