Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   программа на с++ (http://forum.oszone.net/showthread.php?t=73424)

gh6 24-10-2006 11:48 501980

программа на с++
 
кто знает>> Помогите пожалуйста с написанием проги на с++

Программе №5 оформить задачу как функцию
/* Подсчет количества дней между двумя датами */
/***************************************************************/
#include <stdio.h>
//вспомогательный массив количества дней от начала до текущего
//месяца
int mes[12]={0, 31, 59, 90, 120, 151, 181,
212, 243, 273, 304, 334 };
main()
{
int d,m,g; //начальная дата (день, месяц, год)
int d2,m2,g2; //конечная дата (день, месяц, год)
int c;
//подсчет количества дней между двумя датами
c=mes[m-1]-d2+365*(g2-g1)+mes[m2-1]+d2;
//учет високосности для начальной даты
if(!g%4) if(m<3) c++;
//учет високосности для конечной даты
if(!g2%4) if(m>2) c++;
//учет високосности для годов попавших в интервал
//между двумя датами
c=c+(g2-g)/4;
printf("%d",c);
}

Greyman 24-10-2006 13:11 502026

Перенес из ХВЗ в Программирование

mrcnn 24-10-2006 14:17 502055

Код:


/* Ïîäñ÷åò êîëè÷åñòâà äíåé ìåæäó äâóìÿ äàòàìè */
#include <stdio.h>

int compare(int d, int m,int g,int d2,int m2,int g2);
int beginning(int day, int month, int year);
int ending(int day, int month, int year);
int days(int d,int d2);

int mes[]={31,28,31,30,31,30,31,31,30,31,30,31};

void main()
{
        int d=1,m=1,g=2004; //íà÷àëüíàÿ äàòà (äåíü, ìåñÿö, ãîä)
        int d2=31,m2=12,g2=2006; //êîíå÷íàÿ äàòà (äåíü, ìåñÿö, ãîä)
        int c;
               

        c=compare(d,m,g,d2,m2,g2);
        printf("%d\n",c);
}

int compare(int d, int m,int g,int d2,int m2,int g2){
       
int from,to,sum,year,dd,month;


sum=0;
if (g2>g)
{
        from=beginning(d2,m2,g2);//îò íà÷àëà ãîäà
        to=ending(d,m,g); // äî êîíöà ãîäà

        sum=from+to;
        for (year=g+1;year<g2;year++)
                {               
                if (year%4!=0){
                        sum=sum+365;}
                else {
                        sum=sum+366;}
                }
        return sum;
}
else if (g2<g)
{
        from=beginning(d,m,g);//îò íà÷àëà ãîäà
        to=ending(d2,m2,g2); // äî êîíöà ãîäà
        sum=from+to;
        for (year=g2+1;year<g;year++)
                {if (year%4!=0){
                        sum=sum+365;}
                else {
                        sum=sum+366;}
                }
        return sum;
}
else if (g2==g){
        if (g%4!=0){
                mes[1]=28;}
        else {
                mes[1]=29;}
                if (m>m2){
                        for (month=m2+1;month<m;month++){
                                sum=sum+mes[month-1];
                        }
                        sum=sum+mes[m2-1]-d2;
                        sum=sum+d;
                        return sum;

                }
                else if (m<m2){
                        for (month=m+1;month<m2;month++){
                                sum=sum+mes[month-1];
                        }
                        sum=sum+mes[m-1]-d;
                        sum=sum+d2;
                        return sum;
                }
                else if (m==m2){
                        dd=days(d,d2);
                        return dd;
                }
        }
}

int days(int d,int d2){
        int sum;
        if (d2<d){
                        sum=d-d2;}
                else if(d2>d){
                        sum=d2-d;}
                else if (d2==d){
                        sum=0;}
        return sum;
}

/*
if (g2<g){
ending(g);//îò íà÷àëà ãîäà
beginning(g2);// äî êîíöà

sum();
}

if (g2==g)

*/
/* Ñëó÷àé 1: íà÷àëüíàÿ äàòà ìåíüøå êîíå÷íîé
Òîãäà íàì íóæíî çíàòü, ñêîëüêî â 1 äàòå, äî êîíöà ãîäà
è ñêîëüêî âî 2 äàòå îò íà÷àëà ãîäà*/




int beginning(int day, int month,int year){
        int ms=0;

        if (year%4!=0){
                mes[1]=28;}
        else {
                mes[1]=29;}

        if (month!=1){
                for (int j=0; j<month-1;j++){
                                ms=ms+mes[j];
                }
                ms=ms+day;
        }
        else {
                ms=day;
        }
        return ms;
}

int ending(int day, int month, int year){
        int ms=0;
       
        if (year%4!=0){
                mes[1]=28;}
        else {
                mes[1]=29;}

        if (month!=12){
                for (int j=11; j>=month;j--){                       
                                ms=ms+mes[j];
                }
                ms=ms+mes[j]-day;               
        }
        else {
                ms=mes[11]-day;
        }
        return ms;
}


mrcnn 24-10-2006 15:42 502109

После vbs опять начал путать == и =. Код отредактирован.

pva 24-10-2006 20:43 502227

а у gh6 и впрямь неплохая програмка. Почему-то я раньше никогда не догадывался месяцы то сложить.
Код:

int daysBetween(int d, int m, int g, int d2, int m2, int g2)
{
 static const int mes[12]={0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};

 int c;
 c=mes[m-1]-d2+365*(g2-g1)+mes[m2-1]+d2;
 if(!(g%4) && m<3) ++c;
 if(!(g2%4) && m>2) ++c;
 c+=(g2-g)/4;

 return c;
}



Время: 22:52.

Время: 22:52.
© OSzone.net 2001-