Treceți la conținutul principal

clasa data cpp

// clasa DATA.cpp 
//operatii privind data calendaristica



#include "stdafx.h"
#include <stdio.h>
#include <iostream.h>
#include <time.h>




class data
{
 int zi;
 int luna;
 int an;
 static int nrzile[12];
 static char *denluna[12];
 static char *zisapt[7];

public:
 
 data (int,int,int); //constructor pornind de la trei intregi
 data()
  //constructor pornind de la data furnizata de sistem
 {
 time_t ltime;
 time( &ltime );
 zi=localtime(&ltime)->tm_mday;
 luna=localtime(&ltime)->tm_mon+1;
 an=localtime(&ltime)->tm_year+1900;
 }
 void zile_data(long);
 int isAnBisect()
  //functie test daca un an este sau nu bisect
 {
  if (an%400==0||an%100!=0 &&an%4==0)  
   return 1;
  return 0;
 };
 long data_zile();
 int retzi();
 int retluna();
 int retan();
 char* ziua_din_sapt();
 int zi_din_an();
 int isSfarsitLuna ()
  //functie test daca o zi este sau nu ultima din luna
 {
  if(zi==(nrzile[luna-1]+(luna==2&&isAnBisect())))
   return 1;
  else return 0;
 }
 int isInceputLuna ()
  //functie test daca o zi este sau nu prima din luna
 {
  if(zi==1)
   return 1;
  else
   return 0;
 }
 int isSarbatoare ()
  //functie test de sarbatoare legala (sambata, duminica,
  //1 mai, 1, 25, 26 decembrie)
 {
  int z=zi_din_an();
  if( z==121||z==335||z==359||z==360||(ziua_din_sapt()==zisapt[0])
   ||(ziua_din_sapt()==zisapt[6]))
   return 1;
  else
   return 0;
 }
 void afisare ();
 int validare(int,int,int);
 void afisare (char);
 data & operator + (int );
 data & operator - (int );
 data & operator ++ ();
 data & operator ++ (int);
 data & operator -- ();
 data & operator -- (int);
 long  operator - (data);
 friend ostream & operator << (ostream &,data );
 friend istream & operator >> (istream &,data&);
 
};

int data::nrzile[12]={31,28,31,30,31,30, 31,31,30,31,30,31};
  //vector ce contine numarul zilelor lunilor din an

char *data::denluna[12]={ "ianuarie","februarie","martie",
       "aprilie","mai","iunie","iulie",
       "august","septembrie","octombrie",
       "noiembrie","decembrie" };
  //vector ce contine denumirile lunilor din an

char *data::zisapt[7]={  "duminica","luni","marti",
       "miercuri","joi","vineri",
       "sambata" };
  //vector ce contine denumirile zolelor din saptamana


data::data (int z, int l, int a)
//constructor pornind de la 3 intregi,validand incadrarea
//in intervale posibile (1-28/29/30/31 pentru zi,
//1-12 pentru luna, 1900-2100 pentru an)
{
 if(validare(z,l,a))
 {
  zi=z;
  luna=l;
  an=a;
 }
 else 
 { 
  zi=1;
  luna=1;
  an=1900;
 }
};

int data ::validare(int z,int l,int a)
//functie ce valideaza incadrarea in intervale posibile
{
int b=data::isAnBisect(); 
if (a<1900 || a>2100) 
  return 0;
if (l<1 || l>12)
   return 0;
if (z<1 || z>nrzile[l-1]+(l==2&&b))
  return 0;
 return 1;
}


long data::data_zile ()

//functie ce transforma data curenta in numar de zile
// fata de 1 ianuarie 1900

{
 int b=data::isAnBisect();
 long totzile=0;
 totzile=(an-1900)*365 + (int)((an-1900-1)/4) + 1;
 for (int l=1;l<luna;l++)
  totzile+=data::nrzile[l-1]+(((l==2)&&b)?1:0);
 totzile+=zi-1;
 return totzile; 
}



void data::zile_data(long z)
//functie ce transforma un numar de zile in data valida

{
 int b;
 for (an=1900;z>365+b;an++)
 {
  b=data::isAnBisect();
  z-=(365+b);
 }
 b=data::isAnBisect();
 for (luna=1;z>data::nrzile[luna-1]+(((luna==2)&&b)?1:0);luna++)
  z-=(data::nrzile[luna-1]+(((luna==2)&&b)?1:0));
 zi=z;
}


int data::zi_din_an()
//functie ce determina a cata zi din an este data curenta
{
 int b=data::isAnBisect();
 int z=zi;
 int l=luna;
 int zile=0;
 for (l=1;l<luna;l++)
  zile+=data::nrzile[l-1]+(((l==2)&&b)?1:0);
 zile+=zi;
 return zile;
}

char* data ::ziua_din_sapt()
//functie ce returneaza ce zi din saptamana este
{
 return zisapt[data_zile()%7];
}

inline int data::retzi()

{
 return zi;
}

inline int data::retluna()
{
 return luna;
}

inline int data::retan()
{
 return an;
}

void data::afisare(char separator)
//functie de afisare a datei prin intermediul separatorilor
//ex.12/01/99,05-12-2000 
{

 cout<<"\nData este:";
 if (zi<10) 
  cout<<'0';
 cout<<zi<<separator;
 if (luna<10) 
  cout<<'0';
 cout<<luna<<separator; 
 if (an<2000)
 {
  if (an<1910) cout<<'0';
  cout<<(an%100)<<endl;
 }
 else
  cout<<an<<endl; 
}


void data::afisare()
//functie de afisare a datei sub forma: luni 4 februarie 2002
{
 cout<<"\nData este:"<<zisapt[data_zile()%7]<<" "<<zi<<" "<<denluna[luna-1]<<" "<<an<<endl;

}



//supraincarcari pentru operatori:

ostream& operator<<(ostream &ies,data d)
//supraincarcarea operatorului <<
{
 d.afisare();
 return ies;
}

istream& operator>>(istream &intr,data &d)
{
 cout<<"Ziua:";
 intr>>d.zi;
 cout<<"Luna:";
 intr>>d.luna;
 cout<<"Anul:";
 intr>>d.an;
 while (!d.validare(d.zi,d.luna,d.an))
 {
  cout<<"Eroare!!!"<<endl;
  cout<<"Ziua:";
  intr>>d.zi;
  cout<<"Luna:";
  intr>>d.luna;
  cout<<"Anul:";
  intr>>d.an;
 }
 return intr;
}

data &data:: operator + (int t)
 {
 long z;
 data d1(zi,luna,an);
 z=d1.data_zile();
 z+=t;
 d1.zile_data(z);
 return d1;
 
 }


data& data :: operator - (int t)
 {
 long z;
 data d1(zi,luna,an);
 z=d1.data_zile();
 z-=t;
 d1.zile_data(z);
 return d1;
 
 }



data & data :: operator ++ ()
//++d, pentru preincrementare
//operatia de preincrementare determina marirea datei
//cu o zi
 {
 long z;
 z=data_zile();
    z++;
 zile_data(z);
 return *this;
 }

data & data :: operator ++ (int a)
//d++ pentru postincrementare
//primeste un parametru intreg ce nu va fi utilizat 
//in functie
//operatia de postincrementare determina marirea datei 
//cu o saptamana
 {
 
 long z=data_zile();
    z+=7;
 zile_data(z);
 return *this;
 }

data & data :: operator -- ()
//--d, pentru predecrementare
 {
 long z;
 z=data_zile();
    z--;
 zile_data(z);
 return *this;
 }

data & data :: operator -- (int a)
//d--, pentru postdecrementare
 { 
 long z=data_zile();
    z-=7;
 zile_data(z);
 return *this;
 }

long data ::operator -(data d)
//d1-d2 , pentru determinarea numarului de zile cuprinse 
//intre doua date
{
 return (data_zile()-d.data_zile()>0)?data_zile()-d.data_zile():0;
}


///end clasa data



//functii externe pentru testarea clasei:


data & concediu(data &d,int zile_conc)
//functie pentru aflarea datei de intoarcere din concediu
//( dat in zile lucratoare)
{ 
 data d1(d.retzi(),d.retluna(),d.retan());
 data d2(d.retzi(),d.retluna(),d.retan());
 int zile=0;
 while (zile_conc>0)
 {
  d2=(d1+zile);
  if (d2.isSarbatoare()==0) { zile_conc--;}
  zile++;
 }
 d2=d1+zile;
 return d2;
}


int prima_zi(int l,int a)
//functie pentru aflarea datei bonificarii lunare
//a unei dobanzi - prima zi lucratoare dupa trecerea lunii 
{ 
 data d1(1,l,a);
 int i=0;
 int sw=0;
 while (!sw)
 {
  if (d1.isSarbatoare()==0) { sw=1; } 
  else ++d1;
 }
 return (d1.retzi());
}


int main(int argc, char* argv[])
{
 /*data d(14,1,2002);
 cout<<d<<endl;*/
//Citire data de la tastatura
 data d;
 cin>>d;
 cout<<d;

 d.afisare('/');
 ++d; //preincrementare cu o zi
 cout<<"Preincrementare cu o zi "<<d<<endl;
 d--; //postdecrementare cu o saptamana
 cout<<"Postdecrementare cu o saptamana"<<d<<endl;
 d=d-2;
 cout<<"Scadere doua zile"<<d<<endl;
 d=d+5;
 cout <<"Adunare cinci zile"<<d<<endl;
 d++;
 cout<<"Postincrementare cu o saptamana:"<<d<<endl;

 
//Determinare nr zile intre doua date
 //data d1(27,12,2001),d2(1,1,2000);
 //cout<<d1<<endl;
 //cout<<d2<<endl;
    //cout<<"Diferenta dintre date "<<d1-d2<<endl;

//Data intoarcerii din concediu
  cout<<"Data intoarcerii din concediu"<<concediu(d,23)<<endl;

//Data bonificarii lunare a dobanzii
 // cout<<"Data bonificarii lunare"<<prima_zi(6,2002)<<endl;
 return 0;
}

Comentarii

Postări populare de pe acest blog

program principal cpp

#include "clasa.h" #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define DELAY 9000000 void delay() { for(long i=0;i<DELAY;i++); } //constructor cu initializare de la tastatura BigInt::BigInt() {char x; signed char t[400]; int i; printf("\nNumarul cu semn "); do s=getche(); while((s!='+')&&(s!='-')); n=0; do {x=getche(); t[n]=x-'0'; n++; } while((x>='0')&&(x<='9')); n--; for(i=0;i<n;i++) nr[i]=t[n-i-1]; } //constructor cu initializare prin parametri BigInt::BigInt(char semn,signed char numar[],int dim) {int i; s=semn; n=dim; for(i=0;i<n;i++) nr[i]=numar[n-i-1]; } //transform un int negativ in pozitiv int BigInt::Pozitiv(int x) {int a,vb; a=0; vb=0; while(vb==0) if((x+a)==0) vb=1; else a=a+1; x=a; return x; } //constructor dintr-un nr int obisnuit BigInt::BigInt(int x) {int i; if(x>=0) s='+'…

NUMERE PRIME ALGORITM C++

// NUMERE PRIME ALGORITM C++//  reediting from scratch //on this page is just the study for a next algoritm for generating the parime nr series like Fibonnaci or ....if possibile
BPN = 2 POW 74207281 -1

odd impar
even par

!!! any even number is a sum of two even numbers or two odd numbers or two prime numbers
!!! any odd number is a sum of a odd number and a even numbers
!!!  prime numbers can not be a sum of two prime numbers but will be a sum of a prime number and an even number 
!!! any prime numbers will be odd too but not all odd number are primes
!!! all the numbers formed by same digit  1,3,7,9 are not prime numbers except 11


0, 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 
37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 
79, 83, 89, 97

1 = 1 + 0+ 0              0
2 = 1 + 1+ 0              1
3 = 2 + 1+ 0              1

small numbers 

5 = 3 + 2+ 0              2
7 = 5 + 2 + 0              2
11 = 7 + 3 + 1            4
13 = 11+2 + 0            2
17 = 13 + 3 + 1 4
19 = 17 + 2+ 0 2
23 = 19 + 3 + 1 4
29 = 23 + 5 + …

o aplicatie php localitati romania

//APLICATIA SE REFERA LA BAZA DE DATE SIRUTA

//dragtable.js


/* dragtable v1.0 June 26, 2008 Dan Vanderkam, http://danvk.org/dragtable/ http://code.google.com/p/dragtable/ \Bsortabledraggable\B Instructions: - Download this file - Add <script src="dragtable.js"></script> to your HTML. - Add class="draggable" to any table you might like to reorder. - Drag the headers around to reorder them. This is code was based on: - Stuart Langridge's SortTable (kryogenix.org/code/browser/sorttable) - Mike Hall's draggable class (http://www.brainjar.com/dhtml/drag/) - A discussion of permuting table columns on comp.lang.javascript Licensed under the MIT license. */ // Here's the notice from Mike Hall's draggable script: //***************************************************************************** // Do not remove this notice. // // Copyright 2001 by Mike Hall. // See http…