Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 81
1

Преобразование времени (double. Может всё-таки кто-нибудь знает)

12.12.2012, 16:22. Показов 2184. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как double сделать так, чтобы он работал по такому принципу.

К примеру идет число 0,01...0,59 и после 0,59 переходило не в 0,60 , а в 1,00?? Мне это надо, чтобы из файла считывал число и за 59 не переваливало. Вообще в программе это будет иметь значение времени. Если можно, то надо без классов и векторов.

Если есть другой способ, то сообщите о нём пожалуйста. Заранее благодарен всем людям, кто придумает какой-либо выход из этой ситуации ^_^
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2012, 16:22
Ответы с готовыми решениями:

ЗНАТКИ, может, знает кто-нибудь как решить ?
Кто может, если не трудно, подсказать как решить задачи с помощью Excel.!!! 1. Допустим есть...

Может кто знает какой нибудь Белорусский прокси?
Здравствуйте! Может кто знает какой нибудь Белорусский прокси?? Только бесплатный. Очень надо....

Стек и очередь, может кто-нибудь знает как делается?
Написать программу сложения элементов стека и очереди, заполненных одновременно одними и теми же...

Может кто-нибудь знает где про графы написано доступным языком?
где можно почитать про графы и кто подскажет, как их описывать в программировании

25
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
12.12.2012, 16:29 2
C
1
2
3
4
5
6
7
8
 double d, res, ip;
while {
...
res = modf(d, &ip); // дробная часть, ip - целая часть
if (fabs(res - 0.6) < 0.001) d = ip + 1;
else  d += 0.01;
...
}
1
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 81
12.12.2012, 16:33  [ТС] 3
Цитата Сообщение от Байт Посмотреть сообщение
C
1
2
3
4
5
6
7
8
 double d, res, ip;
while {
...
res = modf(d, &ip); // дробная часть, ip - целая часть
if (fabs(res - 0.6) < 0.001) d = ip + 1;
else  d += 0.01;
...
}
спасибо большое, а вот можно ли это сделать функцией и записать в структуру?

C++
1
2
3
4
5
6
struct train{
    //ф-ия времени(отправления)
    char city[15];//город прибытия
    //ф-ия времени(время в пути)
    //ф-ия времени(время прибытия)
};
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 81
12.12.2012, 17:15  [ТС] 4
Цитата Сообщение от Jupiter Посмотреть сообщение
извиняюсь за дубль...если можно, то тему удалите ^_^

Добавлено через 39 минут
C++
1
2
3
4
5
6
7
8
9
10
11
double time(double d, res, ip){
    res = modf(d, &ip); 
    if (fabs(res - 0.6) < 0.001) d = ip + 1;
    else  d += 0.01;
}
struct train{
    double time;
    char city[15];
    double time;
    double time;
};
ответьте плз, правильно не правильно сделал?

хотя функцию вроде не так надо было сделать блин помогите пожалуйста
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
12.12.2012, 17:17 5
dmmax, можно как-то более понятно объяснить.

Добавлено через 1 минуту
Цитата Сообщение от dmmax Посмотреть сообщение
double time;
Нельзя time использовать. Обзовите по-другому переменные. Но дайте им уникальные имена.
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 81
12.12.2012, 18:34  [ТС] 6
Цитата Сообщение от go Посмотреть сообщение
dmmax, можно как-то более понятно объяснить.

Добавлено через 1 минуту

Нельзя time использовать. Обзовите по-другому переменные. Но дайте им уникальные имена.
Вообщем до этого у меня был такая структура
C++
1
2
3
4
5
6
7
8
9
10
struct train{
   int hours;//время отправления(час);
   int minut;//время отправления(минута);
   char city[15];
   int timewayH;//Время пути(час);
   int timewayM;//Время пути(минуты);
   int timearrivalH;//время прибытия(час);
   int timearrivalM;//время прибытия(минуты);
   int time
};
вообщем дальше я или самостоятельно записывал значения в файлы, но сортировка мне не удавалась.(объяснить не могу почему, вообще я решил соединить время(час+минуты) в double.

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

пример текстового файла, из которого надо было взять данные(как было раньше):

Кликните здесь для просмотра всего текста

1 15 Смоленск 2 30
2 40 Казань 1 40
3 15 Омск 2 45

P.S.: Первые два числа - это время отправления, названия - это город прибытия, вторые два числа - время в пути.
Как я хочу чтобы получилось:
Кликните здесь для просмотра всего текста

1.15 Смоленск 2.30
2.40 Казань 1.40
3.15 Омск 2.45

чтобы заместо ДВУХ чисел, было ОДНО число. Намного упроститься сортировка. Да и понятней будет, во всяком случае для меня ^_^

Вот как мне функцию в структуру занести?

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
double time(double d, res, ip){
    res = modf(d, &ip); 
    if (fabs(res - 0.6) < 0.001) d = ip + 1;
    else  d += 0.01;
}
double timeWay(double d, res, ip){
    res = modf(d, &ip); 
    if (fabs(res - 0.6) < 0.001) d = ip + 1;
    else  d += 0.01;
}
double timeArrival(double d, res, ip){
    res = modf(d, &ip); 
    if (fabs(res - 0.6) < 0.001) d = ip + 1;
    else  d += 0.01;
struct train{
    double time;
    char city[15];
    double timeWay;
    double timeArrival;
};
}
пример кода, ещё один

Добавлено через 7 минут
тип функции будет не double, а void, ну мне, типа, возвращаться значение не надо.

Добавлено через 59 минут
ап
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
12.12.2012, 18:40 7
Цитата Сообщение от dmmax Посмотреть сообщение
double time;
Не смущает, что подсветился time?
ничего не понял
C
1
2
3
4
5
6
7
8
struct ABC
{
    double t1, t2;
    char s[BUFISZ];
};
 
struct ABC st;
fscanf(in_file, "%lf %s %lf", &st.t1, st.s, &st.t2); // Допилите сами
Добавлено через 33 секунды
Или нужно было на плюсах? ))
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
12.12.2012, 18:56 8
C
1
2
3
4
5
6
double time(double d, res, ip){
    res = modf(d, &ip); 
    if (fabs(res - 0.6) < 0.001) d = ip + 1;
    else  d += 0.01;
    return d;
}
return d;
К сожалению почти все встречаемые мной трансляторы этой ошибкой пренебрегают. Даже Варингом ее не считают.
А ведь это ошибка грубая. Хотя казалось бы - чего там стоит ее транслятору определить, и не такие вещи сечет... Ан нет...
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
12.12.2012, 19:07 9
Байт, где ошибка?
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
12.12.2012, 19:21 10
Цитата Сообщение от go Посмотреть сообщение
Байт, где ошибка?
В посте #4 ТС. Функция определена как возвращающая double, но ничего не возвращает, нет ретурна, и она возвращает некую ахинею, лежащую в стеке, но не имеющую никакого отношения к ее, весьма уважаемой, работе
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
12.12.2012, 19:23 11
Байт, честно говоря лень лезть в стандарт, но по памяти вроде только в функции main можно не писать return.
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.12.2012, 19:27 12
В сишном коде нужно(я бегло посмотрел, в основном использовались сишные тэги в этой теме) писать return 0. В плюсовом - не нужно.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
12.12.2012, 19:31 13
Цитата Сообщение от go Посмотреть сообщение
Байт, честно говоря лень лезть в стандарт, но по памяти вроде только в функции main можно не писать return.
Да при чем тут стандарт! Элементарный здравый смысл и больше ничего. Ежели ты определил функцию, как какую-то херню возвращающую, так пусть она и возвратит эту херню.
А return можно не писать во всех функциях, не возвращающих значения. Во всяком случае до недавнего времени это было так.
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.12.2012, 19:33 14
А, я понял, о чем речь. Тут же не мейновая функция. Но студия такой код вообще откажется компилить, нормальные компиляторы выдадут ворнинги.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
12.12.2012, 19:43 15
Цитата Сообщение от diagon Посмотреть сообщение
В сишном коде нужно(я бегло посмотрел, в основном использовались сишные тэги в этой теме) писать return 0. В плюсовом - не нужно.
Это все иллюзии. Читайте K&R. return в main по мысли некоторых созидателей нужен для взаимодействия энтого main-а с операционной системой. Их грех и их заморочка. но внутри как сишной так и плюсовой программы, явные ретурны для функции ничего не возвращающей (void) пока, слава тебе, Господи, не нужны.
Вообще-то глупый разговор получается. Была конкретная проблема, а мы размазываем манную кашу...
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 81
13.12.2012, 19:09  [ТС] 16
Сегодня напишу всю программу, если компилить не будет забегу сюда ^_^

Добавлено через 6 часов 18 минут
Вообщем сделал, компилиться но не показывается на экран. Посмотрите кто-нибудь https://mail.yandex.ru/disk/pu... rt6Dw8M%3D

Добавлено через 8 минут
для тех, кто всё-таки будет смотреть прогу: в textFile и textFileAll, printText в printf и scanf поменяйте %d на %f =) глупая ошибка)
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 81
13.12.2012, 19:25  [ТС] 17
вот кстати по тому коду работаю, он как-то не так работает -_- при чём он каждый раз выдает разные вот такие огромные числа.
Миниатюры
Преобразование времени (double. Может всё-таки кто-нибудь знает)  
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 81
13.12.2012, 20:05  [ТС] 18
ап

Добавлено через 18 минут
Помогите кто-нибудь пожалуйста После завтра сдавать)
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
13.12.2012, 21:11 19
dmmax, Ну и чуши ты понаписал! И на будущее старайся коды показывать текстами а не скринами. Ну как я из скрина вытащу твою ошибочную строчку и ткну тебя туда носом? Приходится твой бред переписывать...
Самое страшное
C
1
 printf("%d", &c);
Тут сразу 2 грубых ошибки. 1) Ты печатаешь не сам "c" а его абсолютный адрес в памяти компьютера. Который естественно оказывается разным при разных запусках. 2)
C
1
double c
А ты его печатаешь как целый (%d) Надо
C
1
 printf("%.2f", c);
Добавлено через 12 минут
Далее.. (Вот, блин, приходится на кажный чих твой скрин открывать)
C
1
 if ((....)= 0.001
Шерсть дыбом встает!
Ты адресу функции присваешь значение!!! Ну и чего ты хочешь? Твое счастье, что компьютер не загорелся!
Потом идея здесь в том, что нужно сравнивать на близость к предельному значению. С шуточками компутерной арифметики не сталкивался? Ну, у тебя все впереди. Короче, надо
C
1
 if (fabs(res-0.6) < 0.001) ...
Занимаюсь с тобой так подробно, потому как считаю, что для тебя не все еще потеряно. Только перед тем как пользоваться инструментом, надо хоть чуть-чуть почитать прилагаемую к нему инструкцию.
Обид, надеюсь, нет?
1
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 81
14.12.2012, 10:47  [ТС] 20
Байт, спасибо что уделили мне время : ) и вправду глуппые ошибки хотя в своей программе я это исправил.

по вашему коду:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <math.h>
#include <conio.h>
#include <stdio.h>
 
int main(){
    double a,b;
 
    a = 2.45;
    b = 3.47;
 
    double c, res, ip;
    
    c = a + b;
    res = modf(с, &ip);
    if(abs((res - 0.6) > 0.001))
        c = ip + 1;
    else c += 0.01;
    printf("c = %.2f", c); // c = 6.00 , а должно быть 6,32
    getchar();
    return 0;
}
ну собственно всё ровно он не так работает

Добавлено через 5 часов 54 минуты
0
14.12.2012, 10:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2012, 10:47
Помогаю со студенческими работами здесь

Кто-нибудь может пройти все уровни?
Мне тут игрушку подкинули - там 15 уровней. Можете пройти? Я только 4 осилила) ...

Где можно посмотреть все функции по работе с динамической памятю в C++ ? Может кто сайт знает
???

кто нибудь может слепить всё воедино ? и желательно прислать слепленную программу. за ранее спасибо
Процедура рисования: procedure draw(k:integer); var i,j:integer; begin for i:=0 to 100 do for...

Кто -нибудь знает
как настроить вот это устройство Мобильный корпус для HDD 3.5&quot; AgeStar NSB3AS1T USB2.0+RJ45, SATA,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru