Практика программирования (Бейсик, Си, Паскаль)


         

Задачи, советы и ответы - часть 11


DECLARE SUB MonthDay(Y%,OrdDay%,M%,D%)

RЕМ Восстановление даты по порядковому дню года

CLS

INPUT "Задайте год : ",Y%

INPUT "Задайте порядковый номер дня в году : ",OrdDay%

MonthDay Y%,OrdDay%,М%,D%

PRINT "Ему соответствует месяц = ",М%;" и день = ";D%

END

SUB MonthDay(Y%,OrdDay%,M%,D%)

' Восстановление месяца и дня в году Y%

' по порядковому номеру дня ord_day%

' М% - сюда засылается номер месяца

' D% - сюда засылается номер дня месяца

DIM A AS INTEGER, В AS INTEGER, С AS INTEGER, E AS INTEGER

A=1889

IF (Y% MOD 400=0)OR((Y% MOD 4=0)AND(Y% MOD l00<>0) ) THEN A=1523

B=INT((OrdDay%+A-122.1)/365.25)

C=OrdDay%+A-INT(365.25*B)

E=INT(C/30.6001)

IF E<13.5 THEN M%=E-1 ELSE M%=E-13'

D%=C-INT(30.6001*E)

END SUB

Программа 9_06.с

#include <stdio.h> ,

#include <conio.h>

#include <math.h>

void month_day(int Y,int ord_day,int *M,int *D);

main() {

int Y,M, D,ord_day;

clrscr();

printf("\n Задайте год : ");

scanf("%d",&Y);

printf("\n Задайте порядковый номер дня в году : ");

scanf("%d",&ord_day);

month_day(Y,ord_day,&M, &D);

printf("\nЕму соответствует месяц = %d и день = %d",M,D);

getch();

}

/*-------------------------------------*/

void month_day(int Y,int ord_day,int *M,int *D)

/*************************************/

/* Восстановление месяца и дня в году Y */

/* по порядковому номеру дня ord_day */

/* М - сюда засылается номер месяца */

/* D - сюда засылается номер дня месяца */

/****************************************/

{

int A=1889,B,C,E;

if((Y%400==0)||((Y%4==0)&&(Y%100!=0))) A=1523;

B=(ord_day+A-122.1)/365.25;

C=ord_da>y+A-floor (365. 25*B) ;

E=C/30.6001;

if(E<13.5) *M=E-1; else *M=E-13;

*D=C-floor(30.6001*E); }

Программа 9_06.pas

program ord_to_dat;

uses Crt;

var

Y,M,D,ord_day:integer;

procedure month_day(Y,ord_day:integer;var M,D:integer);




Содержание  Назад  Вперед