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

подскажите с кодом - C++

Восстановить пароль Регистрация
 
zloyprogramist
0 / 0 / 0
Регистрация: 24.12.2009
Сообщений: 11
30.12.2009, 10:11     подскажите с кодом #1
Всем привет!!!У меня вопрос вот задание
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int main ()
{
int Month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int a1,b1,c1,a2,b2,c2, temp, i;
cout<<"a1= ";
cin>>a1;
cout<<"b1= ";
cin>>b1;
cout<<"c1= ";
cin>>c1;
cout<<"a2= ";
cin>>a2;
cout<<"b2= ";
cin>>b2;
cout<<"c2= ";
cin>>c2;
if ((c1%4 == 0) && !(( c1%400 != 0) && (c1%100 == 0)))
{
    Month[1]++;
 
}  
 
 
if  
   ((c2%4 == 0) && !(( c2%400 != 0) && (c2%100 == 0)))
{
    Month[1]++;
}
 
 
 
 
temp=(c2-c1)*365;
if(b2<b1)
{
temp-=365;
for(i=b1-1; i<12; i++)
temp+=Month[i];
for(i=0; i<b2-1; i++)
temp+=Month[i];
}
else
{
        for(i=b1-1; i<b2-1; i++)
                temp+=Month[i];
}
if(a2<a1)
{
temp-=(a1-a2);
}
else
temp+=a2-a1;
 
cout<<"Col dney= "<<temp<<endl;
_getch();
return 0; 
}
вот код но мне кажется не правильно вот задание ! Даны натуральные числа a1,b1,c1,a2,b2,c2, которые указывают две даты (число, месяц, год). Вычислить количество дней, прошедших между двумя этими датами но еще надо учесть , что При решении задач этого раздела принять во внимание, что в современном (григорианском) календаре каждый год, номер которого делится на 4, является високосным, за исключением тех номеров, которые делятся на 100 и не делятся на 400.
Прошу помогите исправьте чо не правилно!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
30.12.2009, 10:17     подскажите с кодом #2
Цитата Сообщение от zloyprogramist Посмотреть сообщение
вот код но мне кажется не правильно
А запустить и проверить сложно?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
30.12.2009, 10:54     подскажите с кодом #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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int main ()
{
int Month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int a1,b1,c1,a2,b2,c2, temp, i;
cout<<"a1= ";
cin>>a1;
cout<<"b1= ";
cin>>b1;
cout<<"c1= ";
cin>>c1;
cout<<"a2= ";
cin>>a2;
cout<<"b2= ";
cin>>b2;
cout<<"c2= ";
cin>>c2;
 
temp=(c2-c1)*365;
if(b2<b1)
{
temp-=365;
for(i=b1-1; i<12; i++)
temp+=Month[i];
for(i=0; i<b2-1; i++)
temp+=Month[i];
}
else
{
        for(i=b1-1; i<b2-1; i++)
                temp+=Month[i];
}
if(a2<a1)
{
temp-=(a1-a2);
}
else
temp+=a2-a1;
 
// ñäåëГ*ГҐГ¬ òóïîé ïåðåáîð
for(i=c1; i<=c2; i++)
if ((i%4 == 0) && !(( i%400 != 0) && (i%100 == 0)))
temp++;
if ((c1%4 == 0) && !(( c1%400 != 0) && (c1%100 == 0)) && b1>2)
temp--;
if ((c2%4 == 0) && !(( c2%400 != 0) && (c2%100 == 0)) && b2<3)
temp--;
 
cout<<"Col dney= "<<temp<<endl;
_getch();
return 0; 
}
firefox1913
 Аватар для firefox1913
27 / 27 / 2
Регистрация: 01.07.2009
Сообщений: 58
30.12.2009, 12:59     подскажите с кодом #4
вот мой вариант нахождения промежутка дней
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
#include <iostream>
#include <locale>
 
using namespace std;
 
struct Date
{
  int days;
  int month;
  int year;
};
int main()
{
 
    setlocale(LC_ALL,"Rus");
    Date D1,D2;
 
    cout<<"Введите 1ю дату "; cin>>D1.days >>D1.month >>D1.year;
    cout<<"Введите 2ю дату "; cin>>D2.days >>D2.month >>D2.year;
 
    int mas_days[] = {31,28,31,30,31,30,31,31,30,31,30,31},i,d,k;
    int count = 0;
    d = D1.month - 1;
    int t = D1.days;
 
    for(int j = D1.year;   j < D2.year;   j++)
    {
       if(j % 4 == 0 && j % 100 != 0 && j % 400 != 0)
           mas_days[1] = 29;
       else
           mas_days[1] = 28;
 
       for(i = d;   i < 12;  i++)
       {
           for(k=t;   k <=mas_days[i];  k++)
           {
               if(D2.days == k && D2.month==i+1 && D2.year==j) break;
               else count++;
           }
           t=1;
           d = 0;
       }
    }
    cout<<"Количество дней "<< count << endl;
 
return 0;
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
30.12.2009, 13:11     подскажите с кодом #5
firefox1913, Я код не проверял Ваш, но так на вскидку:
Если обе даты в одном году , то count останется равным 0?
Ведь весь цикл:
C++
1
 for(int j = D1.year;   j < D2.year;   j++)
ни разу не выполнится.
firefox1913
 Аватар для firefox1913
27 / 27 / 2
Регистрация: 01.07.2009
Сообщений: 58
30.12.2009, 14:00     подскажите с кодом #6
valeriikozlov спасибо щас буду испровлять

Добавлено через 30 минут
Вот исправленый код
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
 #include <iostream>
#include <locale>
 
using namespace std;
 
struct Date
{
  int days;
  int month;
  int year;
};
int main()
{
 
    setlocale(LC_ALL,"Rus");
    Date D1,D2;
 
    cout<<"Введите 1ю дату "; cin>>D1.days >>D1.month >>D1.year;
    cout<<"Введите 2ю дату "; cin>>D2.days >>D2.month >>D2.year;
 
    int mas_days[] = {31,28,31,30,31,30,31,31,30,31,30,31},i,d,k;
    int count = 0;
    d = D1.month - 1;
    int t = D1.days;
 
    bool F = true;
   
    for(int j = D1.year;  j <= D2.year;  j++)
    {
       if(j % 4 == 0 && j % 100 != 0 && j % 400 != 0)
           mas_days[1] = 29;
       else
           mas_days[1] = 28;
 
         for(i = d;   i < 12 ;  i++)
         {
           for(k=t;   k <=mas_days[i];  k++)
           {
               if(D2.days == k && D2.month==i+1 && D2.year==j)
               {
                   F = false;
                   break;
               }
               else count++;
           }
           if(!F)break;
           t=1;
         }   
         d = 0;
     }
    cout<<"Количество дней "<< count << endl;
 
return 0;
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
30.12.2009, 14:11     подскажите с кодом #7
firefox1913, Еще одна вещь смущает (по-моему последняя):
По условию високосными не будут года: 100, 200, 300, но 400 будет високосным.
По-моему
Цитата Сообщение от firefox1913 Посмотреть сообщение
if(j % 4 == 0 && j % 100 != 0 && j % 400 != 0)
не совсем верно отражает это условие. 400 год (и все кратные 400) программа засчитает не високосным.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2009, 14:32     подскажите с кодом
Еще ссылки по теме:

подскажите пожалуйста с кодом C++
C++ что-то не то с кодом C++
C++ Подскажите что не так с кодом?

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

Или воспользуйтесь поиском по форуму:
firefox1913
 Аватар для firefox1913
27 / 27 / 2
Регистрация: 01.07.2009
Сообщений: 58
30.12.2009, 14:32     подскажите с кодом #8
Малесь не обратил внимание на условие
Yandex
Объявления
30.12.2009, 14:32     подскажите с кодом
Ответ Создать тему
Опции темы

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