Колко дни

Напишете програма, която въвежда ден, месец и година и определя:

  • колко дни са изминали от началото на годината
  • колко дни остават до края на годината
  • колко дни има между първата дата и втора въведена дата
Публикувано в 11а, 11в с етикети . Постоянна връзка.

2 Responses to Колко дни

  1. maleboldjia каза:
    #include <cstdlib>
    #include <iostream>
    #include <math.h>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    int visokosna,d,d2,m,g;
    cout<<"Vavedi data, mesec i godina razdeleni s interval: ";
    cin>>d>>m>>g;
    cout<<endl;
    if (((g%4==0)&&(g%100!=0)) || (g%400==0)) //Проверява дали годината е високосна
    visokosna=1; //Ако е високосна, добавяме един ден отгоре
    else
    visokosna=0; //А ако не е високосна, не добавяме дни
    
    //Преди всичко се пресмятат дните на всички месеци до 365-ия ден
    //като имаме предвид, че месец януари съдържа в себе си 0 дни
    //и се изброяват само дните на зададената дата
    //пример 1: 17ти януари 2012 - изминали са 17 дни
    //пример 2: 17ти февруари 2012 - изминали са 48 дни
    
    switch(m){
    	case 1:if (d==1) {
    		cout<<d<<" den e izminal ot nachaloto na godinatan";
    		cout<<365+visokosna-d<<" dni ostavat do kraya na godinatan";break;
    	}
    	else if ((d<=31)&&(d>=2)) {
    		cout<<d<<" dni sa izminali ot nachaloto na godinatan";
    	cout<<365+visokosna-d<<" dni ostavat do kraya na godinatan";break;
    }
    	
        case 2:cout<<d+31<<" dni sa izminali ot nachaloto na godinatan";
        cout<<365+visokosna-(d+31)<<" dni ostavat do kraya na godinatan";break;
        
    	case 3:cout<<d+59+visokosna<<" dni sa izminali ot nachaloto na godinatan";
    	cout<<365+visokosna-(d+59+visokosna)<<" dni ostavat do kraya na godinatan";break;
    	
    	case 4:cout<<d+90+visokosna<<" dni sa izminali ot nachaloto na godinatan";
    	cout<<365+visokosna-(d+90+visokosna)<<" dni ostavat do kraya na godinatan";break;
    	
    	case 5:cout<<d+120+visokosna<<" dni sa izminali ot nachaloto na godinatan";
    	cout<<365+visokosna-(d+120+visokosna)<<" dni ostavat do kraya na godinatan";break;
    	
    	case 6:cout<<d+151+visokosna<<" dni sa izminali ot nachaloto na godinatan";
    	cout<<365+visokosna-(d+151+visokosna)<<" dni ostavat do kraya na godinatan";break;
    	
    	case 7:cout<<d+181+visokosna<<" dni sa izminali ot nachaloto na godinatan";
    	cout<<365+visokosna-(d+181+visokosna)<<" dni ostavat do kraya na godinatan";break;
    	
    	case 8:cout<<d+212+visokosna<<" dni sa izminali ot nachaloto na godinatan";
    	cout<<365+visokosna-(d+212+visokosna)<<" dni ostavat do kraya na godinatan";break;
    	
    	case 9:cout<<d+243+visokosna<<" dni sa izminali ot nachaloto na godinatan";
    	cout<<365+visokosna-(d+243+visokosna)<<" dni ostavat do kraya na godinatan";break;
    	
    	case 10:cout<<d+273+visokosna<<" dni sa izminali ot nachaloto na godinatan";
    	cout<<365+visokosna-(d+273+visokosna)<<" dni ostavat do kraya na godinatan";break;
    	
    	case 11:cout<<d+304+visokosna<<" dni sa izminali ot nachaloto na godinatan";
    	cout<<365+visokosna-(d+304+visokosna)<<" dni ostavat do kraya na godinatan";break;
    	
    	case 12:cout<<d+334+visokosna<<" dni sa izminali ot nachaloto na godinatan";
    		if (d==30){
    			d=31-d;
    		cout<<d<<" den ostava do kraya na godinatan";break;
    	}
    	else if((d<=29)&&(d>=1)) {
    		cout<<365+visokosna-(d+334+visokosna)<<" dni ostavat do kraya na godinatan";break;
    	}
    	default:cout<<"Nevaliden mesec.n";break;
    }
    if ((d<1) && (d>31)) cout<<"Nevalidna data."<<endl;
    cout<<endl;
    cout<<"Vavedi vtora data v sushtiya mesec i godina: ";
    cin>>d2>>m>>g;
    d-=d2;
    if ((d>1)&&(d<31)) cout<<"Ima "<<fabs(d)<<" dni razlika mejdu purvata i vtorata vuvedena data."<<endl;
      else if ((d==1)||(d==-1)) cout<<"Ima "<<fabs(d)<<" den razlika mejdu purvata i vtorata vuvedena data."<<endl;
    
    if (d==0) cout<<"Nyama razlika mejdu dvete dati."<<endl;
    
    
    	system("pause");
    	return 0;
    }
    
    • Данаил каза:

      Много добре – и коментарите, и структурирането на програмата! Хареса ми и как си използвал променлива visokosna за добавяне на допълнителен ден. Бих ти препоръчал само две неща – в switch оператора да пресмяташ само колко пълни месеца са минали до този и да го присвоиш на една променлива. Така всичкия код там (който е доста подобен за всеки от месеците) ще се изнесе след оператора switch и програмата ще стане по-проста и прегледна.

      Ще очаквам с интерес следващо решение :-)

Вашият коментар