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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.94
Наташа2009
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 6
#1

Даты ввод вывод разность - C++

15.03.2009, 18:35. Просмотров 2474. Ответов 15
Метки нет (Все метки)

Нужно написать программу, которая принимает от пользователя 2 даты-строки вида- ЦЦ. ЦЦ. ЦЦЦЦ, где Ц-это любая цифра из диапазона(0-9). Далее она вычисляет полное количество дней, прошедших между введенными датами и выводит на экран.


ПОМОГИТЕ, ВЫ ЖЕ ОЧЕНЬ УМНЫЕ, я знаю!Вам это ничего не стоит, а я "погибаю"....
Наташа.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2009, 18:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Даты ввод вывод разность (C++):

Календарь. Ввод даты - вывод дня недели - C++
Здрасте , помогите написать ф-ю. Ввожу 4.11.2014 , программа выдает "Вторник" спасибо большое

Заменить в программе, переводящую строку в двоичный код, консольный ввод/вывод на файловый ввод/вывод - C++
Добрый день! Помогите, пожалуйста, с программой. Программа считывает строку с клавиатуры и переводит её в двоичный код. затем наоборот...

Поменять консольный ввод-вывод на файловый ввод-вывод - C++
вот у меня калькулятор как мне сделать что б числа вводились из файла и результат записывался в новый файл ? // ОБРАТНАЯ...

Запись выражений, ввод–вывод информацииЗапись выражений, ввод–вывод информации - C++
Задача 2.1. Пользуясь только операцией умножения, вычислить (A в 7-ой степени) за четыре операции. Задача 2.2. Очистить экран,...

Файловый ввод-вывод, ввод с клавиатуры и обработка массива структур - C++
Добрый вечер)) У меня небольшой вопрос. Почему первые буквы (в названии книг) не выводит на экран? Само задание: О каждой книге ...

Ввод даты - C++
Здравствуйте! Помогите с идеями, как в консольном окне организовать ввод даты в формате год.месяц. дата.час через точку. Спасибо. ...

15
Illustris
15.03.2009, 19:25
  #2

Не по теме:

Вы наверно думаете что если написать под женским ником, то все кинутся решать ваши проблемы?

0
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
15.03.2009, 23:08 #3
Я вот щаз тоже решал подобную задачку и вот что родил:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <cstdlib>
#include <iostream>
#include <windows.h>
 
 
using namespace std;
 
 
int main(int argc, char *argv[])
{
    int day,month,year,day1,month1,year1;/*dannye nachala/konca otscheta*/
    int god[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
 
/*vood dannyh*/ 
 
/*nachal'nye den'/mesyac/god*/
 
    cout << "in\nday:";
    cin >>  day;
    cout << "month:";
    cin >> month;
    cout << "year:";
    cin >> year;
    
/*konechnye den'/mesyac/god*/
    
    cout << "out\nday:";
    cin >> day1;
    cout << "month:";
    cin >> month1;
    cout << "year:";
    cin >> year1;
    
/*podschet dney*/   
 
    int summa = 0;/*obschaya summa dney*/
 
/*podschet dney v nachal'nom gode*/ 
 
    for (int i = month; i <=11; i++)
        summa = summa + god[i];
    
    if (year%4 == 0) /*proverka na vysokosnost' nachal'nogo goda*/
        summa++;
 
    summa = summa - day;
    
/*podschet dney m konechnom gode*/
    
    for (int i = 0; i < month1; i++)
            summa = summa + god[i];
            
    if (year1%4 == 0) /*proverka na vysokosnost' konechnogo goda*/
        summa++;
    
    summa = summa + day1;
    
/*vycheslenie kolichestva dney mejdu nachal'nym i konechnym godom*/ 
 
    if (year1 - year > 1)
    {
        int raznica = year; /*raznica mejdu nachal'nym i konechnym godom*/
        
        for(int i = 1; i < year1 - year; i++)
        {
            raznica = raznica + 1;
            
            for(int j = 0; j <= 11; j++)
                summa = summa + god[j];
                
            if (raznica%4 == 0) /*proverka na vysokosnost'*/
                summa++;
        }
    }
    
    cout << summa << "\n";
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
громоздко и я уверен, что есть более простой способ...но я пока сам тока учусь
1
Наташа2009
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 6
16.03.2009, 08:05  [ТС] #4
Illustris очень жаль, что вы не верите людям, и просто по-человечески не можете им помочь.
P.S. Наташа-мое настоящее имя!
0
Вертолётчик
1 / 1 / 0
Регистрация: 01.12.2008
Сообщений: 113
16.03.2009, 09:28 #5
Цитата Сообщение от Illustris Посмотреть сообщение

Не по теме:

Вы наверно думаете что если написать под женским ником, то все кинутся решать ваши проблемы?

Ну судя по результату- ответ да.
0
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
16.03.2009, 09:45 #6
а по теме есть идеи как сделать более компактным решение данной задачи? пораграммлю из под Dev-Cpp, может есть какие нибудь другие решения?
0
Вертолётчик
1 / 1 / 0
Регистрация: 01.12.2008
Сообщений: 113
16.03.2009, 09:47 #7
Цитата Сообщение от G-Cat Посмотреть сообщение
а по теме есть идеи как сделать более компактным решение данной задачи? пораграммлю из под Dev-Cpp, может есть какие нибудь другие решения?
Может функция есть , которая дату в секунды переводит
0
Illustris
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 8
16.03.2009, 12:54 #8
Я попытался написать эту задачу на c++ но споткнулся об работу со строками... (в с# с этим гораздо проще)
У меня появился вопрос, как разбить строку на составляющие...
input: dd.mm.yyyy
мне надо присвоить int переменным значения dd, mm и yyyy
0
Наташа2009
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 6
16.03.2009, 13:43  [ТС] #9
Цитата Сообщение от Вертолётчик Посмотреть сообщение
Ну судя по результату- ответ да.
Да что такого, что я девушка?!)))
0
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
16.03.2009, 14:19 #10
Цитата Сообщение от Наташа2009 Посмотреть сообщение
Да что такого, что я девушка?!)))
Большинство девушек с компьютером ну никак не ладят даже на пользовательском уровне, а тут программинг
1
Наташа2009
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 6
16.03.2009, 14:44  [ТС] #11
Цитата Сообщение от Бартимеус Посмотреть сообщение
Большинство девушек с компьютером ну никак не ладят даже на пользовательском уровне, а тут программинг
Ну так и я не в ладах с программированием, вот поэтому и прошу помощи у людей, которые в этом деле "дышат полной грудью")))
0
Zeag
2 / 2 / 0
Регистрация: 09.03.2009
Сообщений: 13
16.03.2009, 20:25 #12
Для расчета разницы дат еще есть очень полезная штука -- юлианские даты (JD). Применяются в астрономии. Дата приводится к числу дней после заданной, после чего остается вычесть одно из другого. Вот программка-тест, еще в 1995 написанная.
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
* Advance date to +/- N days using Julian dates.
* 25.01.95 15:38
*/
 
#include <stdio.h>
#include <dos.h>
 
#define INT(a) (long)(a)
#define FRAC(a) ((a)-INT(a))
 
void date_new(struct date *dt, long days)
{
double JD, JD1, F, Y, M, D, Mn, A, B, C, E, Q, Z, y, m, IsGrig;
 
Y = dt->da_year;
M = dt->da_mon ;
D = dt->da_day ;
 
/* --- Only after 1582, Oct 15 --- */
/*
JD = 367*Y - INT( 7 * (Y + INT( (M+9)/12 )) / 4) +
INT(275 * M/9) + D + 1721013.5;
*/
 
if(INT(M) > 2) { y = Y; m = INT(M); }
else { y = Y-1; m = INT(M)+12; } /* относим к предыдущему году */
 
IsGrig = ((Y*100)+INT(M))*100+D;
 
if(IsGrig > 15821015L) /* григорианская дата */
{ A = INT(y/100); B = 2 - A + INT(A/4); }
 
JD = INT(365.25*y) + INT(30.6001 * (m+1)) + D + 1720994.5;
 
if(IsGrig > 15821015L) JD += B; /* исх. дата - григорианская */
 
JD += days; /* Add period and convert back to DMY */
 
JD1 = JD + 0.5;
Z = INT (JD1);
F = FRAC(JD1);
 
if(Z < 2299161L) A = Z;
else {
Q = INT( (Z - 1867216.25) / 36524.25);
A = Z + 1 + Q - INT(Q/4);
}
 
B = A + 1524;
C = INT((B - 122.1)/365.25);
D = INT(365.25*C);
E = INT((B - D) / 30.6001);
 
M = (E <= 13) ? E - 1 : E - 13; /* месяц */
Mn = B - D - INT(30.6001 * E) + F; /* число (с дес. долями) */
Y = (M > 2.5) ? C - 4716 : C - 4715; /* год */
 
dt->da_day = INT(Mn);
dt->da_mon = M;
dt->da_year = Y;
}
 
#ifdef TEST
 
void main(void)
{
struct date dt;
 
getdate(&dt);
printf("Current date is %02d.%02d.%04d\n", dt.da_day, dt.da_mon, dt.da_year);
date_new(&dt, 1802); /* For 25.01.95 --> 01.01.2000 */
printf("Date%+6ld days is %02d.%02d.%04d\n", 1802L, dt.da_day, dt.da_mon, dt.da_year);
 
getdate(&dt);
date_new(&dt, -25); /* For 25.01.95 --> 31.12.1994 */
printf("Date%+6ld days is %02d.%02d.%04d\n", -26L, dt.da_day, dt.da_mon, dt.da_year);
}
 
#endif
На Borland C можно еще так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
* Advance date to +/- N days.
* (written by KIO -- 24.01.95 19:50)
*/
 
#include <stdio.h>
#include <time.h>
#include <dos.h>
 
void main(void)
{
long days = 1802; /* Must be long ! (or cast need) */
time_t first, second;
struct tm *tblock;
 
first = time(NULL); /* Gets system time in seconds */
second = first + days*24*60*60; /* Add N days */
 
tblock = localtime(&second); /* Converts date/time to a structure */
 
printf("New date/time is: %s", asctime(tblock)); /* Print out */
}
0
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
16.03.2009, 21:30 #13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#define uint unsigned int
int count_day_in_months[13]={0,31,59,90,120,151,181,212,243,273,304,334,365};
 
    uint date_to_uint(uint day,uint month,uint year)
    {
        uint days_in_months=count_day_in_months[month-1];
        if(!(year%4)&&month>2)
            days_in_months++;   
        return (year-1)*365.25+days_in_months+day-1;
    }
 
int main()
{
    std::cout<<date_to_uint(12,3,1981)-date_to_uint(12,3,1980)<<'\n';
    system("pause");
    return 0;
}
0
Illustris
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 8
17.03.2009, 01:07 #14
Может я не правильно понял код... но мне показалось что он не считает с 100% точностью.

Добавлено через 29 минут 47 секунд
Разобрался в коде
Классное решение!
Можно только узнать зачем использовать unsigned int вместо обычного? (в этом конкретном случае)
0
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
17.03.2009, 08:23 #15
ох,в другой задаче использовал эту функцию.там это нужно было
0
17.03.2009, 08:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2009, 08:23
Привет! Вот еще темы с ответами:

Реализовать вывод массива объектов типа Student на консоль (файловый ввод/вывод) - C++
Как сделать чтобы список студентов выводился на экран в конце? #include&lt;iostream&gt; #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; ...

Поиск в массиве структур по заданному полю и вывод в алфавитном порядке (файловый ввод/вывод) - C++
Помогите с функцией void runFile() что бы с файла брал и выводил в алфавитном порядке список товаров, хранящихся больше месяца, стоимость...

Вывод суммы в файл (файловый ввод/вывод) - C++
Добрый день! Я пытался написать программу, которая должна вводить данные из файла №1, потом вычислять их сумму и полученное значение...

Как организовать ввод в консольную строку даты в виде: dd/mm/yyyy - C++
Подскажите, кто знает как организовать ввод в консольную строку даты в виде: dd/mm/yyyy. Чтобы потом можно было считать переменные day,...


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

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

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