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

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

Войти
Регистрация
Восстановить пароль
 
 
dmmax
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 81
#1

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

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

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

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

Если есть другой способ, то сообщите о нём пожалуйста. Заранее благодарен всем людям, кто придумает какой-либо выход из этой ситуации ^_^
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2012, 16:22     Преобразование времени (double. Может всё-таки кто-нибудь знает)
Посмотрите здесь:

кто нибудь из программистов знает? C++
C++ кто-нибудь знает где скачать русификатор для dev-c++?
C++ Всё же может кто напишет блок схему?
C++ кто нибудь знает?(про винмэйн)
C++ Кто нибудь знает как написать игру на С ?)
Кто-нибудь знает, что это за ошибка? C++
Кто нибудь знает сайт на подобии этого, только на русском? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
Эксперт C
15540 / 9882 / 1484
Регистрация: 24.12.2010
Сообщений: 18,487
12.12.2012, 16:29     Преобразование времени (double. Может всё-таки кто-нибудь знает) #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;
...
}
dmmax
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 81
12.12.2012, 16:33  [ТС]     Преобразование времени (double. Может всё-таки кто-нибудь знает) #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];//город прибытия
    //ф-ия времени(время в пути)
    //ф-ия времени(время прибытия)
};
dmmax
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 81
12.12.2012, 17:15  [ТС]     Преобразование времени (double. Может всё-таки кто-нибудь знает) #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;
};
ответьте плз, правильно не правильно сделал?

хотя функцию вроде не так надо было сделать блин помогите пожалуйста
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
12.12.2012, 17:17     Преобразование времени (double. Может всё-таки кто-нибудь знает) #5
dmmax, можно как-то более понятно объяснить.

Добавлено через 1 минуту
Цитата Сообщение от dmmax Посмотреть сообщение
double time;
Нельзя time использовать. Обзовите по-другому переменные. Но дайте им уникальные имена.
dmmax
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 81
12.12.2012, 18:34  [ТС]     Преобразование времени (double. Может всё-таки кто-нибудь знает) #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 минут
ап
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
12.12.2012, 18:40     Преобразование времени (double. Может всё-таки кто-нибудь знает) #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 секунды
Или нужно было на плюсах? ))
Байт
Эксперт C
15540 / 9882 / 1484
Регистрация: 24.12.2010
Сообщений: 18,487
12.12.2012, 18:56     Преобразование времени (double. Может всё-таки кто-нибудь знает) #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;
К сожалению почти все встречаемые мной трансляторы этой ошибкой пренебрегают. Даже Варингом ее не считают.
А ведь это ошибка грубая. Хотя казалось бы - чего там стоит ее транслятору определить, и не такие вещи сечет... Ан нет...
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
12.12.2012, 19:07     Преобразование времени (double. Может всё-таки кто-нибудь знает) #9
Байт, где ошибка?
Байт
Эксперт C
15540 / 9882 / 1484
Регистрация: 24.12.2010
Сообщений: 18,487
12.12.2012, 19:21     Преобразование времени (double. Может всё-таки кто-нибудь знает) #10
Цитата Сообщение от go Посмотреть сообщение
Байт, где ошибка?
В посте #4 ТС. Функция определена как возвращающая double, но ничего не возвращает, нет ретурна, и она возвращает некую ахинею, лежащую в стеке, но не имеющую никакого отношения к ее, весьма уважаемой, работе
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
12.12.2012, 19:23     Преобразование времени (double. Может всё-таки кто-нибудь знает) #11
Байт, честно говоря лень лезть в стандарт, но по памяти вроде только в функции main можно не писать return.
diagon
Higher
1924 / 1190 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.12.2012, 19:27     Преобразование времени (double. Может всё-таки кто-нибудь знает) #12
В сишном коде нужно(я бегло посмотрел, в основном использовались сишные тэги в этой теме) писать return 0. В плюсовом - не нужно.
Байт
Эксперт C
15540 / 9882 / 1484
Регистрация: 24.12.2010
Сообщений: 18,487
12.12.2012, 19:31     Преобразование времени (double. Может всё-таки кто-нибудь знает) #13
Цитата Сообщение от go Посмотреть сообщение
Байт, честно говоря лень лезть в стандарт, но по памяти вроде только в функции main можно не писать return.
Да при чем тут стандарт! Элементарный здравый смысл и больше ничего. Ежели ты определил функцию, как какую-то херню возвращающую, так пусть она и возвратит эту херню.
А return можно не писать во всех функциях, не возвращающих значения. Во всяком случае до недавнего времени это было так.
diagon
Higher
1924 / 1190 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.12.2012, 19:33     Преобразование времени (double. Может всё-таки кто-нибудь знает) #14
А, я понял, о чем речь. Тут же не мейновая функция. Но студия такой код вообще откажется компилить, нормальные компиляторы выдадут ворнинги.
Байт
Эксперт C
15540 / 9882 / 1484
Регистрация: 24.12.2010
Сообщений: 18,487
12.12.2012, 19:43     Преобразование времени (double. Может всё-таки кто-нибудь знает) #15
Цитата Сообщение от diagon Посмотреть сообщение
В сишном коде нужно(я бегло посмотрел, в основном использовались сишные тэги в этой теме) писать return 0. В плюсовом - не нужно.
Это все иллюзии. Читайте K&R. return в main по мысли некоторых созидателей нужен для взаимодействия энтого main-а с операционной системой. Их грех и их заморочка. но внутри как сишной так и плюсовой программы, явные ретурны для функции ничего не возвращающей (void) пока, слава тебе, Господи, не нужны.
Вообще-то глупый разговор получается. Была конкретная проблема, а мы размазываем манную кашу...
dmmax
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 81
13.12.2012, 19:09  [ТС]     Преобразование времени (double. Может всё-таки кто-нибудь знает) #16
Сегодня напишу всю программу, если компилить не будет забегу сюда ^_^

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

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

Добавлено через 18 минут
Помогите кто-нибудь пожалуйста После завтра сдавать)
Байт
Эксперт C
15540 / 9882 / 1484
Регистрация: 24.12.2010
Сообщений: 18,487
13.12.2012, 21:11     Преобразование времени (double. Может всё-таки кто-нибудь знает) #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) ...
Занимаюсь с тобой так подробно, потому как считаю, что для тебя не все еще потеряно. Только перед тем как пользоваться инструментом, надо хоть чуть-чуть почитать прилагаемую к нему инструкцию.
Обид, надеюсь, нет?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2012, 10:47     Преобразование времени (double. Может всё-таки кто-нибудь знает)
Еще ссылки по теме:

нужно сделать трассировку. кто-нибудь знает как? C++
C++ Всем добрый день! Кто-нибудь знает как исправить это?
C++ Запутался с IF. Может кто-то знает в чём ошибка?
Может кто знает как сделать рандом от 0 до 4294967295 C++
C++ Кто-нибудь знает руускоязычные уроки по чтению и редактированию данных игры из оперативной памяти?

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

Или воспользуйтесь поиском по форуму:
dmmax
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 81
14.12.2012, 10:47  [ТС]     Преобразование времени (double. Может всё-таки кто-нибудь знает) #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 минуты
Yandex
Объявления
14.12.2012, 10:47     Преобразование времени (double. Может всё-таки кто-нибудь знает)
Ответ Создать тему
Опции темы

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