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

типы данных

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

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

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

Типы Данных
Извиняюсь, за тупой вопрос, но какой самый большой целочисленный тип данных...

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

Типы данных
Мне задали в университете лабораторную работу. Написать программу вычисления...

типы данных
какой диапазон данных у 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
Акелла
Сонный металюга
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 13:37  [ТС] 3
не понял, можешь по подробней?
и... это не С++ операция?
0
Evg
Эксперт CАвтор FAQ
19360 / 7209 / 538
Регистрация: 30.03.2009
Сообщений: 20,159
Записей в блоге: 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
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
Акелла
Сонный металюга
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
19360 / 7209 / 538
Регистрация: 30.03.2009
Сообщений: 20,159
Записей в блоге: 30
09.06.2009, 14:03 7
Между 12 и 13 строками воткни: printf ("x=%f\n", x);
0
RazorQ
583 / 350 / 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
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
Акелла
Сонный металюга
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 14:14  [ТС] 11
бог с нми с выводом.. он выдает правда..эм...
вообще ввожу 5, получаю:
0 0 64 64
0
Evg
Эксперт CАвтор FAQ
19360 / 7209 / 538
Регистрация: 30.03.2009
Сообщений: 20,159
Записей в блоге: 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
19360 / 7209 / 538
Регистрация: 30.03.2009
Сообщений: 20,159
Записей в блоге: 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
Haster
инженер-системотехник
111 / 110 / 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
19360 / 7209 / 538
Регистрация: 30.03.2009
Сообщений: 20,159
Записей в блоге: 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
19360 / 7209 / 538
Регистрация: 30.03.2009
Сообщений: 20,159
Записей в блоге: 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
19360 / 7209 / 538
Регистрация: 30.03.2009
Сообщений: 20,159
Записей в блоге: 30
09.06.2009, 17:11 20
Цитата Сообщение от Акелла Посмотреть сообщение
не, ребят. я упорно не понимаю.. либо мы о разном говорим..
смотрите -вводиться например у нас 10.000 ну то бишь вещественное.. .а вернуть должно 10 то есть целое...
C
1
2
3
4
int func (float f)
{
  return (int)f;
}
Но начальная постановка задачи всё-таки похожа на то, о чём мы тебе тут толковали
1
09.06.2009, 17:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2009, 17:11

Типы данных
Какого типа мне нужна переменная, чтобы принимала во такое число:...

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

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


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

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

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