Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2012, 15:01   #1
Azart11
 
Регистрация: 30.09.2012
Сообщений: 8
По умолчанию число часов между двумя датами

помогите пожалуйста...
Разработать программу, определяющую число часов, прошедших между двумя датами, введенными пользователем.

Последний раз редактировалось Azart11; 30.09.2012 в 18:00.
Azart11 вне форума Ответить с цитированием
Старый 01.10.2012, 00:14   #2
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Присылайте наработки, покажите что вы сами то пытались что то сделать. Мало кто согласится решать задачи просто так, хотя для новичков не плохая практика)))
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 03.10.2012, 17:30   #3
Azart11
 
Регистрация: 30.09.2012
Сообщений: 8
По умолчанию

Код:
#include<iostream.h>
#include<conio.h>
int v(int year,int mes,int day)
{int mm[]={31,28,31,30,31,30,31,31,30,31,30,31};
if ((year/4)&&(!(year/100)||(year/400)))
{mm[1]=29;
year=year*366;}
else year=year*365;
int i=0;
int sm=0;
while (i<mes)
{sm=sm+mm[i];
i=i+1;}
int res=(year+sm+day)*24;
return res;
}
int main()
{
clrscr();
char s;
int day1,mes1,year1,day2,mes2,year2;
cout<<"vvedite pervuy datu:";
cin>>day1>>s>>mes1>>s>>year1;
cout<<"vvedite vtoruy datu:";
cin>>day2>>s>>mes2>>s>>year2;
int ch1,ch2;
ch1=v(day1,mes1,year1);
ch2=v(day2,mes2,year2);
int raz=ch1-ch2;
cout<<"interval "<<raz<<"chasov";
getch();
return 0;
}
Подскажите пожалуйста как исправить..

Последний раз редактировалось Stilet; 06.10.2012 в 12:49.
Azart11 вне форума Ответить с цитированием
Старый 03.10.2012, 20:51   #4
MadHamster
Пользователь
 
Аватар для MadHamster
 
Регистрация: 13.01.2011
Сообщений: 28
По умолчанию

Код:
#include <iostream>
#include <conio.h>

using namespace std;

int v(int year, int mes, int day)
{
	int mm[] = {31,28,31,30,31,30,31,31,30,31,30,31};
	if ((year/4)&&(!(year/100)||(year/400)))
	{
		mm[1] = 29;
		year = year * 366;
	}
	else year =year * 365;
	int i = 0;
	int sm = 0;
	while (i<mes)
	{
		sm = sm + mm[i];
		i++;
	}
	int res=(year+sm+day)*24;
return res;
}

int main()
{
	char s;
	int day1, mes1, year1, day2, mes2, year2;
	cout << "vvedite pervuy datu:";
	cin >> day1 >> s >> mes1 >> s >> year1;
	cout << "vvedite vtoruy datu:";
	cin >> day2 >> s >> mes2 >> s >> year2;
	int ch1,ch2;
	ch1 = v(year1, mes1, day1);
	ch2 = v(year2, mes2, day2);
	double raz = ch1 - ch2;
	cout<<"interval "<< fabs(raz) <<" chasov";
	getch();
return 0;
}
Как-то так.
MadHamster вне форума Ответить с цитированием
Старый 04.10.2012, 12:36   #5
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
По умолчанию

Прошу прощения, но для функции fabs() вначале инклудим <math.h>
Код:
#include <math.h>
Тогда ошибки не будет

Абсолютно неверно!

Никто

мой блог

Последний раз редактировалось Stilet; 06.10.2012 в 12:50.
three_cats вне форума Ответить с цитированием
Старый 04.10.2012, 13:27   #6
MadHamster
Пользователь
 
Аватар для MadHamster
 
Регистрация: 13.01.2011
Сообщений: 28
По умолчанию

Цитата:
Сообщение от three_cats Посмотреть сообщение
Прошу прощения, но для функции fabs() вначале инклудим <math.h>
Код:
#include <math.h>
Тогда ошибки не будет
У меня без math.h все отлично работает.
Цитата:
Сообщение от three_cats
Абсолютно неверно!
Проверку ввода я думаю ТС в состоянии сам сделать, я лишь ошибки исправил в его коде.
MadHamster вне форума Ответить с цитированием
Старый 04.10.2012, 13:38   #7
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
По умолчанию

Сколько сижу, тестирую, все равно считает неверно.



Рабочая программа вот такая:

Код:
/* Разработать программу, определяющую число часов, прошедших между двумя датами, введенными пользователем. */

#include <iostream>
#include <conio.h>
#include <math.h>
#include <locale>

using namespace std;

int v(int& year, int& mes, int& day)
{
	int mm[] = {31,28,31,30,31,30,31,31,30,31,30,31};
	if (!(year % 4))
	{
		mm[1] = 29;
		year = year * 366;
	}
	else year = year * 365;

bool chflag = true;

	if (day>mm[mes-1]) { 
		cout << "Дата неверна!" << endl;
		chflag = false;
	}
	if (mes<=0||mes>12) {
		cout << "Месяц неверен!" << endl;
		chflag = false;
	}

	if (year<0) {
		cout << "Год неверен!" << endl;
		chflag = false;
	}


	if (chflag) {
	int i = 0;
	int sm = 0;
	while (i < mes - 1)
	{
		sm = sm + mm[i];
		i++;
	}
	int res = (year + sm + day) * 24;
	return res;
	}
	return -1;
}

int main()
{
	setlocale(LC_ALL, "Russian");
	char s;
	int day1, mes1, year1, day2, mes2, year2;
	cout << "Введите перую дату:";
	cin >> day1 >> s >> mes1 >> s >> year1;
	cout << "Введите вторую дату:";
	cin >> day2 >> s >> mes2 >> s >> year2;
	int ch1,ch2;
	ch1 = v(year1, mes1, day1);
	ch2 = v(year2, mes2, day2);
	double raz = ch2 - ch1;
	if (raz>0) cout << "Интервал между датами - " << fabs(raz) << " часов.";
	cout << endl;
	getch();
return 0;
}
Только единственная ошибка. Уже мозг не работает



Считает все равно как 28 февраля, хотя год - високосный.

Поправил!

Вот теперь правильно!
Никто

мой блог

Последний раз редактировалось Stilet; 06.10.2012 в 12:51.
three_cats вне форума Ответить с цитированием
Старый 04.10.2012, 15:21   #8
MadHamster
Пользователь
 
Аватар для MadHamster
 
Регистрация: 13.01.2011
Сообщений: 28
По умолчанию

Цитата:
Сообщение от three_cats Посмотреть сообщение
Считает все равно как 28 февраля, хотя год - високосный.
Код:
int i = 0;
int sm = 0;
while (i < mes-1)
{
        sm = sm + mm[i];
	i++;
}
MadHamster вне форума Ответить с цитированием
Старый 04.10.2012, 18:33   #9
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
По умолчанию

MadHamster, а почему он считал тогда все остальные даты правильно?
Никто

мой блог
three_cats вне форума Ответить с цитированием
Старый 04.10.2012, 19:10   #10
MadHamster
Пользователь
 
Аватар для MadHamster
 
Регистрация: 13.01.2011
Сообщений: 28
По умолчанию

Это была видимость того что считывало правильно на самом деле брались месяцы начиная с m[1] и к ним прибавлялся целый месяц, дни которого были введены. Т.е. вводя 29.02.2012 мы получаем 29+31+29=89 дней от месяцев, а 01.03.2012 29+31+30+1=91 дней, вот и 2ое суток разницы.
MadHamster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбрать даты в StringGrid находящиеся между двумя другими датами Serebah Общие вопросы Delphi 7 03.02.2011 14:51
Как между двумя датами определить время бодрствования? Dux Общие вопросы Delphi 14 16.09.2010 14:41
Разница между двумя датами (целые дни) Droid Общие вопросы Delphi 15 03.11.2009 23:36
выборка между двумя датами UnChanter БД в Delphi 1 30.03.2009 21:09