Forumi
Home Pravila i pomoć Članovi Kalendar Današnji postovi


Povratak   PC Ekspert Forum > Računala > Software > Web dizajn, programiranje i ostalo
Ime
Lozinka

Odgovori
 
Uređivanje
Staro 12.01.2005., 17:29   #1
manezic
Registered User
 
Datum registracije: Mar 2004
Lokacija: Zagreb
Postovi: 26
Pomoć oko programa!!

Javlja mi puno grešaka, a ja ne znam kako ih se riješiti. Nadam se da netko zna!!!!


//////////////////////////////////////////////////////////////////////////////////////////////
// console gregorian calender app.
// uses zeller's algorithm for finding the day for the date
//////////////////////////////////////////////////////////////////////////////////////////////
// details of algorithm are :-
//
// [x] = floor (x)
//
// f=k+[((13*m)-1)/5]+d+[d/4]+[c/4]-(2*c)
//
// where k=day of the month
// m=month number march=1 jan=11 feb=12 etc.
// d=last two digits of year.... if m=1 or m=2 d=d-1 (jan,feb treated as previous
//year)
// c=first two digits of year i.e. number of centuries.
//
// once we have f we divide by 7 and take remainder.If negative add 7. remainder = day of the week
// 0=sunday 1=monday 6=saturday etc.
//////////////////////////////////////////////////////////////////////////////////////////////
// includes
#include <iostream>
#include <iomanip>
#include <cmath>
#include <windows.h>
#include <cstdlib>
// using statements
using namespace std;
// function prototypes
void clrscr();
void gotoxy(int,int);
// classes
class calender
{
public:
calender(int d=1,int m=1,int y=2001); //defaults to 1/1/2001 (uk format dd/mm/yy)
virtual ~calender() {} // do nothing destructor virtual in case of use of inheritance
void printcalender();

private:
bool isleapyear(); // returns true if year is leap
int checkday(int); // checks legality of date
int whatdayisfirstofmonth(); // returns 0 to 6 sunday to saturday
int howmanydays(); // returns number of days in month
int day;
int month;
int year;
};
//////////////////////////////////////////////////////////////////////////////////////////////
// constructor
//
// checks validity of date and sets members
//
//////////////////////////////////////////////////////////////////////////////////////////////
calender::calender(int d,int m,int y)
{

if (y<1582) // church accepted gregorian calender in 1582
{
cout<<endl<<"The year "<<y<<" is before the gregorian calender was accepted by the church."
<<"Setting to 2001."<<endl;
year=2001; // invalid year so set to 2001
}
else
{
year=y; // y is valid so use it to set year
}
if ((m>=1) && (m<=12)) // check month between 1 and 12
{
month=m; // if it is set month
}

else
{
cout<<endl<<"The month "<<m<<" is invalid. Setting to month 1"<<endl;
month=1;
}
day=checkday(d); // validate the day
}
//////////////////////////////////////////////////////////////////////////////////////////////
//
// isleapyear()
//
// checks whether year is a leap year in the gregorian calender
// a year is leap if it is divisable by four but not if divisible by 100
// unless it is divisible by 400
//
// returns true if leap and false if not
//
//////////////////////////////////////////////////////////////////////////////////////////////
bool calender::isleapyear()
{
if ((year@0==0) || ((year %4==0) && (year.0 !=0)))
{
return true; // its a leap year
}

else
{
return false; // its not a leap year
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
//
// checkday(int)
//
// checks day is legal for month
//
// in:- day to be tested
//
// returns day if legal and 1 if not legal
//
//////////////////////////////////////////////////////////////////////////////////////////////
int calender::checkday(int testday)
{

if ((testday>0) && (testday<= howmanydays()))
{
return testday; // day is valid for month
}
cout<<endl<<"Invalid day entered "<<testday<<"/"<<month<<"/"<<year
<<". Setting to the first of the month."<<endl;
return 1; // hopefully wont get here but if invalid day entered day is set to 1
}
//////////////////////////////////////////////////////////////////////////////////////////////
//
// int howmanydays()
//
// returns number of days in month
//
//////////////////////////////////////////////////////////////////////////////////////////////
int calender::howmanydays()
{
if((month==2)&& isleapyear())
{
return 29; // feb has 29 days in a leap year
}
static const int daysinmonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
return daysinmonth[month-1];
}
//////////////////////////////////////////////////////////////////////////////////////////////
//
// int whatdayisfirstofmonth()
//
// uses zeller's algorithm to find out what day the first of the month falls on falls on.
//
// returns 0 to 6 corresponding to sunday to saturday.
//
//////////////////////////////////////////////////////////////////////////////////////////////
int calender::whatdayisfirstofmonth()
{
int c=year/100; // # of centuries
int d=year.0; // # of years through century
int m=(month+10).; // # of month march is 1,feb is 12
int k=1; // set the day part to 1 so we get back the day for first of month
if ((month==1)||(month==2))// treat jan and feb as if they were in previous year
{
if (d==0) // if d is 0 then to go back a year d becomes 99 and c become c-1
{
d=99;
c-=1;
}
else
{
d-=1; // jan and feb are treated as previous year
}
}
float g=(k + (floor(((13*m)-1)/5)) + d + (floor(d/4)) + (floor(c/4)) - (2*c));
int f=static_cast<int>(g)%7; // cast result of algorithm to int to take modulus
if (f<0) // if negative add 7
{
f+=7;
}
return f; // returns 0 to 6 corresponding to sunday to saturday
}
//////////////////////////////////////////////////////////////////////////////////////////////
//
// void printcalender()
//
// prints the calender for the entered date
//
//////////////////////////////////////////////////////////////////////////////////////////////
void calender:rintcalender()
{
clrscr();
cout<<"Date entered was :- "<<day<<"/"<<month<<"/"<<year<<endl;
cout<<endl<<setw(8)<<"SUNDAY"<<setw(8)<<"MONDAY"<<setw(9)<<"TUESDAY"<<setw(11)<<"WEDNESDAY"<<setw(10)
<<"THURSDAY"<<setw(8)<<"FRIDAY"<<setw(10)<<"SATURDAY"<<endl;
int startday=whatdayisfirstofmonth();
int endday=howmanydays();
for (int i=0;i<startday;i++)
{
if (i==0)
{
gotoxy(4,4);
cout<<"-";
}
if (i==1)
{
gotoxy(12,4);
cout<<"-";
}
if (i==2)
{
gotoxy(21,4);
cout<<"-";
}
if (i==3)
{
gotoxy(31,4);
cout<<"-";
}
if (i==4)
{
gotoxy(42,4);
cout<<"-";
}
if (i==5)
{
gotoxy(50,4);
cout<<"-";
}
} // end of for loop


int rows=4;
int count=1;
for(int j=startday;j<(startday+endday);j++)
{
if(j%7==0)
{
rows+=2;
gotoxy(4,rows);
}
if(j%7==1) gotoxy(12,rows);
if(j%7==2) gotoxy(21,rows);
if(j%7==3) gotoxy(31,rows);
if(j%7==4) gotoxy(42,rows);
if(j%7==5) gotoxy(50,rows);
if(j%7==6) gotoxy(60,rows);
if(count==day) // set text to bright red if count is the day entered
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN);
}
cout<<count;
count ++;
} // end of for loop
cout<<endl<<endl<<endl;
}
//////////////////////////////////////////////////////////////////////////////////////////////
//
// void clrscr()
//
// clears the console window
//
//
//
//////////////////////////////////////////////////////////////////////////////////////////////
void clrscr()
{
COORD coordScreen = { 0, 0 };
DWORD cCharsWritten;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD dwConSize;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsole, &csbi);
dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten);
GetConsoleScreenBufferInfo(hConsole, &csbi);
FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
SetConsoleCursorPosition(hConsole, coordScreen);
}
//////////////////////////////////////////////////////////////////////////////////////////////
//
// void gotoxy(int x,int y)
//
// moves cursor to x,y in windows console
//
//////////////////////////////////////////////////////////////////////////////////////////////
void gotoxy(int x, int y)
{
COORD point;
point.X = x; point.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),point);
}
//////////////////////////////////////////////////////////////////////////////////////////////
//
// int main()
//
// entry point for program
//
// returns 0 back to the OS
//
//////////////////////////////////////////////////////////////////////////////////////////////
int main()
{

while (1)
{
clrscr();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN);
cout<<"Welcome to the gregorian calender calculator. v.1.00"<<endl<<endl
<<"Use UK format.... day/month/full year. Use the '/' char to delimit your entry..."
<<endl<<endl;
cout<<"Please enter the date you would like to see the calender for :- ";
char input_day[4];
char input_month[4];
char input_year[6];
cin.getline(input_day,3,'/'); // get the input as strings
cin.getline(input_month,3,'/');
cin.getline(input_year,5,'\n');
cout<<endl;
int d=atoi(input_day); // convert input to integer
int m=atoi(input_month);
int y=atoi(input_year);
calender date(d,m,y); // instantiate the calender object
system("PAUSE"); // wait for a keypress
date.printcalender(); // print the calender
cout<<"Another calender (Y/N) ? ";
char input[5];
cin.getline(input,4);
if ((input[0]=='N') || (input[0]=='n'))
{
break; // drop out of while loop
}
} // end of while loop

return 0;
}
__________________
Bloody
manezic je offline   Reply With Quote
Staro 13.01.2005., 11:58   #2
manezic
Registered User
 
Datum registracije: Mar 2004
Lokacija: Zagreb
Postovi: 26
Uspio sam riješit problem!
__________________
Bloody
manezic je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Odgovori



Pravila postanja
Vi ne možete otvarati nove teme
Vi ne možete pisati odgovore
Vi ne možete uploadati priloge
Vi ne možete uređivati svoje poruke

BB code je Uključeno
Smajlići su Uključeno
[IMG] kod je Uključeno
HTML je Isključeno

Idi na