παιδιά καλησπέρα...χρειάζομαι τη πολύτιμη βοήθεια σας.μας έχει βάλει ο καθηγητής την παρακάτω άσκηση και δεν μπορώ να την κάνω.την παιδεύω μια βδομάδα και πρέπει να τη παραδώσω μέχρι αύριο το βράδυ....άμα μπορούσε κάποιος να βοηθήσει θα ήμουν ευγνώμον..!
Κατασκευάστε ψευδοκώδικα και πρόγραμμα σε C που να τυπώνει επαναληπτικά όλες τις ημέρες ενός ημερολογιακού έτους στην εξής μορφή “Thursday 01 November 2012”. Το πρόγραμμα θα πρέπει αρχικά να ζητάει από τον χρήστη να εισάγει το ημερολογιακό έτος. Στον μήνα Φεβρουάριο θα πρέπει να ερωτάται ο χρήστης για το αν ο μήνας έχει 28 ή 29 ημέρες (εναλλακτικά μπορείτε να κάνετε αυτόματα τον υπολογισμό με βάση το έτος). Η κάθε ημέρα πρέπει να τυπώνεται σε ξεχωριστή γραμμή. Πριν ξεκινήσει η εκτύπωση των ημερών ενός μήνα πρέπει να τυπώνεται το όνομα του μήνα σε ξεχωριστή γραμμή. Η γραμμή αυτή πρέπει να διαχωρίζεται με μια κενή γραμμή από την προηγούμενη και από την επόμενη γραμμή. Επίσης, πριν ξεκινήσει η εκτύπωση των ημερών μιας εβδομάδας ενός μήνα πρέπει να τυπώνεται ένα μήνυμα (σε ξεχωριστή γραμμή) όπως “Week 1 of November”. Αφού τυπωθεί το όνομα του μήνα, το πρόγραμμα πρέπει να ρωτάει τον χρήστη αν θέλει να συνεχιστεί η εκτύπωση. Σε περίπτωση που η απάντηση είναι αρνητική το πρόγραμμα πρέπει να τερματίζει.
ευχαριστώ εκ των προτέρων...
το πρόβλημα μου μοιάζει με αυτό:
https://projecteuler.net/problem=19
θα τα εξηγήσω λίγο βιαστικά επειδή δεν έχω πολύ χρόνο, ελπίζω να είσαι εξικοιωμένος/η με την C/C++
αρχικά ας έχουμε κάποιους πίνακες για να μπορούμε να παίρνουμε στοιχεία απο εκεί
Spoiler
int months[2][12]={ {31,28,31,30,31,30,31,31,30,31,30,31} , { 31,29,31,30,31,30,31,31,30,31,30,31} } ;
string days[7]={"MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"};
string month[12]={"JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"};
και ας έχουμε και μία boolean συνάρτηση που να μας λέει αν το έτος κ είναι δίσεκτο
Spoiler
int leap(int year)
{
if(year%100==0 && year%400==0)
return true;
else if(year%4==0 && year%100)
return true;
else return false;
}
καθώς και μία συνάρτηση που να της περνάμε σαν όρισμα array index και να μας πετάει μέρα
Spoiler
string today(int day)
{
return days[day];
}
}
και μία για μήνα αντίστοιχα:
Spoiler
string tomonth(int mymonth)
{
return months[mymonth];
}
έχουμε τελείωσει με τις συναρτήσεις που θα χρειαστεί να φτιάξουμε ας μπούμε στο κυρίως πρόγραμμα:
Spoiler
int main(void)
{
int year;
cin >> year;
...................
return 0;
}
αρχίζουμε να μετράμε από τις 1 Ιανουαρίου 1900, η οποία ήταν Δευτέρα, μπορείς να αρχίσεις να μετράς απ' όπου θες, αλλά εγώ αυτό θυμάμαι καθαρά, οπότε απο εκεί ξεκινάω, μπορείς να μεταβάλεις τον κώδικα μετά ούτως ώστε να ανταπεξέρχεται στις ανάγκες της εργασίας:
έχουμε έναν μετρητή έστω tick, ο οποίος αρχικά είναι 1900 και το έτος μας που είναι 1900 (i=1900) .Κρατάμε μία boolean μεταβλητή με τιμή δίσεκτο-> i , δηλαδή, η μεταβλητή μας είναι 0 αν το έτος μας δεν είναι δίσεκτο και 1 διαφορετικά:
Spoiler
int tick=0;
for(int i=N; i<=year; i++) {
int mod=0,theyear=0;
mod= ( leap( i ) );
theyear=(i==year);
...................
}
τώρα αρχίζουμε νέο έτος, αν το έτος μας είναι το έτος που μας ενδιαφέρει, το theyear γίνεται true,μετά αρχίζοντας από τον μηδενικό μήνα κρατάμε έναν μετρητή ο οποίος συνεχώς αυξάνει μέχρι να γίνει ίσο με months[j] οπού j -> το index του μήνα που είμαστε τώρα.
Ας έχουμε και έναν μετρητή που να μετράει τις βδομάδες μας
Spoiler
for(int j=0; j<12; j++) {
cout << tomonth(j) << endl;
int weekcnt=0;
for(int k=0; k<months[j]; k++) {
int day = tick mod 7 // το index της μέρας που μας ενδιαφέρει
if(day==0) {
weekcnt++;
cout << "starting week " << weekcnt << " of " << tomonth(j) << endl;
}
if( theyear ) {
cout << today(day) << " " << k+1 << " " << tomonth( k ) << endl; // το cout τυπώνει πράγματα στην κονσόλα
}
}
}
καταλαβαίνεις προφανώς ότι το indexing στην c++ ξεκινάει από το 0, γι' αυτό προσθαφαιρώ 1 κάποιες φορές.
Τα loops με μετρητές i,j,k είναι εμφωλιασμένα προφανώς, μην χάσεις την άσκηση από τέτοια λάθη
Επειδή τον κώδικα τον έγραφα επι τόπου ενδεχομένως να έχει λάθη, αλλα η λογική είναι αυτή. Εσύ μπορείς να προσθέσεις την όλη αλληλεπίδραση με τον χρήστη και τα λοιπά.
Μπορείς επίσης να δοκιμάσεις την ορθότητα του αλγορίθμου σου στο project euler.
Καλή επιτυχία.