mantiz Δημοσ. 15 Σεπτεμβρίου 2006 Δημοσ. 15 Σεπτεμβρίου 2006 Paidia mporei kapios na mou kanei auto to programmataki? einai thema stin exetastiki mou kai den exw idea pws ginete... thanks Χρησιμοποιώντας την κλάση για την ημερομηνία να γίνει το εξής πρόγραμμα;. Δυο παίκτες βάζουν ημερομηνίες ο ένας μετά των άλλον αν είναι η ημερομηνία είναι λάθος παίρνουν -10 πόντος αν είναι σωστή παίρνουν 5 πόντους αν είναι δίσεκτο το έτος τότε παίρνουν 15 πόντους. Νικητής είναι αυτός που θα συμπληρώσει 100 πόντους Καλή τύχη ΥΓ μόνο το πρόγραμμα. Όποιος αντιγράψει μέρος της κλάσης ή ολόκληρη την κλάση το γραπτό του μηδενίζεται.
georgemarios Δημοσ. 15 Σεπτεμβρίου 2006 Δημοσ. 15 Σεπτεμβρίου 2006 εεε..... καποιες διευκρινισεις ποια κλαση για ημερομηνια; ο ενας παιχτης σκεφτεται μια ημερομηνια και ο αλλος προσπαθει να μαντεψει ποια είναι; και αν αυτη ειναι σε δισεκτο ετος και την μαντεψει σωστα παιρνει 15; ετσι απλα;
mantiz Δημοσ. 15 Σεπτεμβρίου 2006 Μέλος Δημοσ. 15 Σεπτεμβρίου 2006 Den xerw pia class gia date, poses iparxoun diladi? Einai eina loop pou rwtaei prwta mia imerominia apo ton 1 paixti, kanei ta aparetita check, bathmologi, meta rwtaei mia imerominia apo ton 2 paixi, kanei pali ta checks kai bathmologi, kai pali apo tin arxi, rwtaei ton 1 paixti... mexri kapios paixtis piasei 100 pontous kai nikisi.
Directx Δημοσ. 15 Σεπτεμβρίου 2006 Δημοσ. 15 Σεπτεμβρίου 2006 Ο παρακάτω κώδικας (γραμμένος σε Borland C/C++ Builder 6.0) ζητά από τον πρώτο παίκτη μια ημερομηνία, ύστερα ζητά από τον δεύτερο παίκτη να μαντέψει την ημερομηνία που έδωσε ο πρώτος παίκτης. Εάν ο δεύτερος παίκτης μαντέψει σωστά κερδίζει 5 πόντους ή 15 πόντους εάν η ημερομηνία που έθεσε ο πρώτος παίκτης ήταν δίσεκτη. Εάν ο δεύτερος παίκτης μαντέψει λάθος τότε ο πρώτος παίκτης κερδίζει ανάλογα, 5 πόντους ή 15 πόντους εάν η ημερομηνία που έθεσε ήταν δίσεκτη ή όχι. Το παιχνίδι ολοκληρώνεται όταν ένας από τους δυο παίκτες κερδίσει από 100 και πάνω πόντους ενώ προβλέπει την πιθανότητα ισοπαλίας μεταξύ τους. Η εισαγωγή ημερομηνιών γίνεται ως κείμενο (gets) Ημέρα/Μήνας/Έτος για κάθε παίκτη μετατρεπόμενη στην δομή - τύπο μας TMyDate (_ToDate). Κλειδί στην μετατροπή παίζει η ρουτίνα strtok η οποία χωρίζει το κείμενο σε μπλοκ (token) ανά / και ύστερα η atoi που μετατρέπει το κάθε μπλοκ σε αριθμητική τιμή αποθηκεύοντας την στην υποδεικνυόμενη από την nTokenIdx μεταβλητή του τύπου TMyDate. Η _ToDate δεν κάνει επισταμένο ημερολογιακό έλεγχο στα δεδομένα, πράγμα που μπορείς να προσθέσεις μόνος σου αργότερα αρκετά απλά. Το παιχνίδι μπορεί να διακοπεί με την ολοκλήρωση κάθε γύρου πατώντας το πλήκτρο Q ή δίδοντας κενό Enter στην εισαγωγή ημερομηνίας. Ο έλεγχος και η απόδοση πόντων γίνεται από την ρουτίνα _DatePoints η οποία συγκρίνει τις ημερομηνίες - δομές των δυο παικτών (memcmp) και κρίνει εάν πρόκειται για δίσεκτο έτος. Ο έλεγχος του δίσεκτου έτους γίνεται κατά τις υποδείξεις της Wikipedia http://en.wikipedia.org/wiki/Leap_year. Ο καθαρισμός της οθόνης γίνεται με την εντολή clrscr() την οποία προσφέρει η βιβλιοθήκη conio.h της Borland C/C++ και ενδεχομένως να μην υπάρχει σε άλλους compiler τουλάχιστον με την ίδια ονομασία. Υ.Γ. Σφάλματα φυσικά μπορεί να υπάρχουν, άλλωστε ο κώδικας λόγο περιορισμένου χρόνου γράφθηκε «εν τάχυ», συνεπώς κάθε διόρθωση ευπρόσδεκτη. Καλή τύχη. > //--------------------------------------------------------------------------- #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> //--------------------------------------------------------------------------- typedef struct tagMyDate { int Year,Month,Day; }TMyDate; TMyDate UserDateA,UserDateB; char szDateA[128], szDateB[128]; int nUser2Quit, nUser1Score = 0, nUser2Score = 0, nUser2Point, nQuitKey = 0; //--------------------------------------------------------------------------- int _DatePoints(TMyDate *ptrDateA, TMyDate *ptrDateB) { int nLeapYear; // Are both ptrDatA & ptrDateB the same? if(memcmp(ptrDateA,ptrDateB,sizeof(TMyDate))!=0) return -10; // Yup, Is a leap year? if((nLeapYear=ptrDateA->Year%100)==0) nLeapYear=ptrDateA->Year%400; return (!nLeapYear)?15:5; } //--------------------------------------------------------------------------- int _ToDate(char *pszDate,TMyDate &NewDate) { char *pszToken = NULL; int nTokenIdx = 0; memset(&NewDate,-1,sizeof(NewDate)); if((pszToken=strtok(pszDate,"/"))!=NULL) { do{ switch(nTokenIdx) { case 0: // Day NewDate.Day = atoi(pszToken); break; case 1: // Month NewDate.Month= atoi(pszToken); break; case 2: // Year NewDate.Year = atoi(pszToken); break; } nTokenIdx++; }while((pszToken=strtok(NULL,"/"))!=NULL && nTokenIdx<3); // Check date for nonsense - invalid - date if(NewDate.Year==-1 || NewDate.Month==-1 || NewDate.Day==-1 || NewDate.Year==0 || NewDate.Month==0 || NewDate.Day==0) return 0; return 1; } // Invalid input return 0; } //--------------------------------------------------------------------------- int main(int argc, char* argv[]) { // Clear Screen clrscr(); while(nQuitKey!='Q' && nQuitKey!='q') { nUser2Quit = 0; // Get Player 1 Date printf(" Player 1 Date [DD/MM/YEAR] ?"); gets(szDateA); // On empty string - quit game if(!strlen(szDateA)) break; // Covert Player 1 string to TMyDate type if possible if(!_ToDate(szDateA,UserDateA)) { printf(" Invalid date - %s\n",szDateA); continue; } // Clear Screen clrscr(); for(; { // Get Player 2 Date printf(" Player 2 Date [DD/MM/YEAR] ?"); gets(szDateB); // On empty string - quit game if(!strlen(szDateB)) { nUser2Quit=1; break; } // Covert Player 2 string to TMyDate type if possible if(!_ToDate(szDateB,UserDateB)) { printf(" Invalid date - %s\n",szDateB); continue; } // Ok valid date let's continue break; } // Did Player 2 ask to quit? if(nUser2Quit) break; // Make checks nUser2Point = _DatePoints(&UserDateA,&UserDateB); if(nUser2Point==-10) nUser1Score += _DatePoints(&UserDateA,&UserDateA); else { nUser2Score += nUser2Point; nUser1Score -= 10; } // Clear Screen clrscr(); // End of game? if(nUser1Score>=100) { printf(" GAME OVER - USER 1 WON - SCORE: %d\n",nUser1Score); printf(" Press any key to quit.."); getch(); break; } if(nUser2Score>=100) { printf(" GAME OVER - USER 2 WON - SCORE: %d\n",nUser2Score); printf(" Press any key to quit.."); getch(); break; } if(nUser1Score>=100 && nUser2Score>=100 && nUser2Score==nUser1Score) { printf(" GAME OVER - DRAW - USER 1: %d USER 2: %d\n",nUser1Score,nUser2Score); printf(" Press any key to quit.."); getch(); break; } printf("\n User 1 Date: %d-%d-%d\n",UserDateA.Day, UserDateA.Month, UserDateA.Year); printf(" User 2 Date: %d-%d-%d\n",UserDateB.Day, UserDateB.Month, UserDateB.Year); printf("\n User 1 Score: %d \n User 2 Score: %d\n\n",nUser1Score,nUser2Score); printf("Press Q to Quit other key to continue..\n"); nQuitKey=getch(); // Clear Screen clrscr(); } return 0; } //---------------------------------------------------------------------------
activex Δημοσ. 15 Σεπτεμβρίου 2006 Δημοσ. 15 Σεπτεμβρίου 2006 elpizw o filos mantiz na mhn doulepsi sti microsoft kamia mera!!!
kostasplak1986 Δημοσ. 15 Σεπτεμβρίου 2006 Δημοσ. 15 Σεπτεμβρίου 2006 mprabo ston directx pou kathise kai egrapse olo ayto gia na voithisei!
Bspus Δημοσ. 15 Σεπτεμβρίου 2006 Δημοσ. 15 Σεπτεμβρίου 2006 Nomizo, apo tin deuteri perigrafi tou mantiz oti to thema den zitaei apo kanenan na mantepsei. Thelei aplos nomimes imerominies. Px, an o protos paikths dosei 29/02/1999 enai lathos imerominia giati den itan disekto to 1999 An dosei 31/04/2006 pali lathos giati o aprilios exei 30. Genikos an dosei 32 opoioudipote mina, mines pano apo 12 klp i arnitikous, dekadikous otidipote na xanei pontous. An einai sosti kai to etos disekto, px 14/06/2000 pairnei 15 pontous Fysika o protos exei probadisma etsi opos to perigrafeis. Einai poly aplo, dystixos den xero c++ na sto grapso
Directx Δημοσ. 15 Σεπτεμβρίου 2006 Δημοσ. 15 Σεπτεμβρίου 2006 Παρακάτω ακολουθεί κώδικας σε C/C++ που υλοποιεί την δεύτερη εκδοχή, τόσο η TMyDate class όσο και το υπόλοιπο πρόγραμμα έχει επαρκεί σχολιασμό και δανείζεται στα κρίσιμα σημεία κώδικα από την προηγούμενη C λύση - ελπίζω να φανεί εξίσου χρήσιμος. > //-DIRECTX------------------------------------------------------------------- #include <iostream> #include <stdlib.h> #pragma hdrstop //--------------------------------------------------------------------------- class TMyDate { private: bool IsLeapYear (int Year); public: TMyDate (void); ~TMyDate (void); bool IsValidDate (int Day,int Month,int Year); bool IsValidDate (char *pszDate,bool bParseCheck); bool IsValidDate (char *pszDate); bool IsValidParse(char *pszDate); bool bLeapYear; }; TMyDate::TMyDate(void) { /* Nothing to initialize */ } TMyDate::~TMyDate(void) { /* Nothing to delete */ } bool TMyDate::IsValidDate(char *pszDate,bool bParseCheck) { char *pszToken = NULL, *pszDateTMP = NULL; int nTokenIdx = 0, nDay = -1, nMonth = -1, nYear = -1; bool bSuccess = false; // Since strtok is destructive for pszDate we duplicate it into pszDateTMP pszDateTMP = new char[strlen(pszDate)+1]; strcpy(pszDateTMP,pszDate); if((pszToken=strtok(pszDateTMP,"/"))!=NULL) { do{ switch(nTokenIdx) { case 0: // Day nDay = atoi(pszToken); break; case 1: // Month nMonth= atoi(pszToken); break; case 2: // Year nYear = atoi(pszToken); break; } nTokenIdx++; }while((pszToken=strtok(NULL,"/"))!=NULL && nTokenIdx<3); // Just check if the date was parsed (not checked) if(bParseCheck) { delete[] pszDateTMP; return (nDay==-1 || nMonth==-1 || nYear==-1)?false:true; } // Check date for nonsense - invalid - date if((bSuccess=IsValidDate(nDay,nMonth,nYear))==true) bLeapYear=IsLeapYear(nYear); } delete[] pszDateTMP; return bSuccess; } bool TMyDate::IsValidDate (char *pszDate) { return IsValidDate(pszDate,false); } bool TMyDate::IsValidDate(int Day,int Month,int Year) { // Is our date valid? // 0 1 2 static int nMaxDay[12] = { 31,00,31, // Jan - Mar 30,31,30, // Apr - Jun 31,31,30, // Jul - Sep 31,30,31 // Oct - Dec };// 9 10 11 if(Year<1900 || Year>2100) return false; nMaxDay[1] = (IsLeapYear(Year))?29:28; if(Month<1 || Month>12) return false; if(Day<1 || Day>nMaxDay[Month-1]) return false; return true; } bool TMyDate::IsValidParse(char *pszDate) { return IsValidDate(pszDate,true); } bool TMyDate::IsLeapYear(int Year) { // Is Year leap? if(!(Year%100)) if(!(Year%400)) return true; return false; } //--------------------------------------------------------------------------- TMyDate mydateUser1,mydateUser2; char szUser1Date[128], szUser2Date[128]; int nUser1Score = 0, nUser2Score = 0, nUser1Point, nUser2Point; bool bFirstPlayerInput = true; //--------------------------------------------------------------------------- using namespace std; #pragma argsused int main(int argc, char* argv[]) { for(; { cout << ((bFirstPlayerInput)? "Player 1 Enter a Date (DD/MM/YEAR)?" : "Player 2 Enter a Date (DD/MM/YEAR)?"); cin.getline((bFirstPlayerInput)?szUser1Date:szUser2Date,127); if(!strlen((bFirstPlayerInput)?szUser1Date:szUser2Date)) break; if(!((bFirstPlayerInput)?mydateUser1.IsValidParse(szUser1Date): mydateUser1.IsValidParse(szUser2Date))) { cout << " Invalid date - " << ((bFirstPlayerInput)?szUser1Date:szUser2Date) << endl; continue; } if(!bFirstPlayerInput) { if(mydateUser1.IsValidDate(szUser1Date)) nUser1Point=(mydateUser1.bLeapYear)?15:5; else nUser1Point=-10; if(mydateUser2.IsValidDate(szUser2Date)) nUser2Point=(mydateUser2.bLeapYear)?15:5; else nUser2Point=-10; nUser1Score+=nUser1Point; nUser2Score+=nUser2Point; if(nUser1Score>=100 && nUser2Score>=100 && nUser1Score==nUser2Score) { cout << " Users Draw ! " << endl; break; } if(nUser1Score>=100) { cout << " User 1 Won with " << nUser1Score << " points" << endl; break; } if(nUser2Score>=100) { cout << " User 2 Won with " << nUser1Score << " points" << endl; break; } cout << " User 1 Score : " << nUser1Score << endl; cout << " User 2 Score : " << nUser2Score << endl; bFirstPlayerInput=true; } else bFirstPlayerInput = false; } return 0; } //--------------------------------------------------------------------------- Υ.Γ. Για λόγους συμβατότητας απέφυγα την χρήση exception handling, ο κώδικας έχει αναπτυχθεί σε Borland Builder C/C++ 6 ενώ είναι συμβατός και με τον Borland Turbo C++ Explorer, επίσης μπορεί να υπάρχουν Bugs. Καλή συνέχεια.
activex Δημοσ. 16 Σεπτεμβρίου 2006 Δημοσ. 16 Σεπτεμβρίου 2006 oraios o direct! re file to resident evil to 4 pou to psaxnw gia pc kai olo argoune na to vgaloune! den mporoume na to kanoume kapos! ?
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.