filip123go Δημοσ. 22 Δεκεμβρίου 2019 Δημοσ. 22 Δεκεμβρίου 2019 1 ώρα πριν, marios28 είπε Το ίδιο τμήμα έχω τελειώσει και κατάλαβα (από την εκφώνηση) ότι ενδεχομένως να παρακολουθείς το CSD. Γι' αυτό σου τα έγραψα. Παράτησε το μάθημα αν δεν προλαβαίνεις (κατά τη γνώμη μου δεν προλαβαίνεις, ούτε είσαι έτοιμος) και αν μπορέσεις λάβε υπόψιν αυτά που σου έγραψα. Η αλήθεια είναι πως αν δεν έχεις σωστές βάσεις θα δυσκολευτείς παρακάτω. Το ξέρω και εγώ το τμήμα. Στείλει ότι έχεις κάνει στον καθηγητή για να δει ότι δεν το έχεις γραμμένο το μάθημα και το παρακολουθείς το επόμενο εξάμηνο. Αν μπορέσεις να πάρεις πάντως παράταση 1 βδομάδα, θα το βγάλουμε το πρόβλημα.
eliasarximan Δημοσ. 22 Δεκεμβρίου 2019 Μέλος Δημοσ. 22 Δεκεμβρίου 2019 6 λεπτά πριν, filip123go είπε Η αλήθεια είναι πως αν δεν έχεις σωστές βάσεις θα δυσκολευτείς παρακάτω. Το ξέρω και εγώ το τμήμα. Στείλει ότι έχεις κάνει στον καθηγητή για να δει ότι δεν το έχεις γραμμένο το μάθημα και το παρακολουθείς το επόμενο εξάμηνο. Αν μπορέσεις να πάρεις πάντως παράταση 1 βδομάδα, θα το βγάλουμε το πρόβλημα. Τώρα να μου δώσει ο καθηγητής παράταση 1 εβδομάδα απίθανο. Τι να του πώ δηλαδή ; ότι αρρώστησα; ή ότι έχω τεχνικά προβλήματα; Απλός θα μου πεί , δεν πειράζει αυτά είναι τα τυχερά φίλε μου , την επόμενη φορά. Οπότε το θέμα παράτασης απίθανο. Την εξής βοήθεια θα ήθελα από εσάς αν έχετε χρόνο φυσικά. Έχω κάνει ένα 12μηνο calendar με leap year μέσα ΄, κάθε 4 χρόνια που έχει ο χρόνος 366 μέρες δηλαδή 29 μέρες τον Φεβρουάριο. Επίσης έχω βρεί τρόπο να υπολογίσω κάθε Κυριακή του Πάσχα κάθε έτους από το 2001 μέχρι το 2022. Αλλά δεν ξέρω πως να βάλω αυτό τον υπολογισμό να δουλέψει στο κάλενταρ. Αυτή είναι η βοήθεια που θα χρειαζόμουν ώστε να παραδώσω κάτι. Αν σας στείλω τους 2 κώδικες που έγραψα εδώ , υπάρχει κάποια πιθανότητα να με βοηθήσετε;
MitsarasAth Δημοσ. 22 Δεκεμβρίου 2019 Δημοσ. 22 Δεκεμβρίου 2019 προσωπική μου γνώμη η c πρέπει να συνεχίσει να υπάρχει σε πρώτο έτος να διδάσκεται. Είναι μαι ωραία εισαγωγή για τζαβα και c# με παρόμοια σύνταξη και να μαθεις να κανεις for loops να βρισκειεες μεγιστα και καποια απλα πραγματακια που ειναι εφοδια για μετα.
marios28 Δημοσ. 23 Δεκεμβρίου 2019 Δημοσ. 23 Δεκεμβρίου 2019 14 ώρες πριν, MitsarasAth είπε Είναι μαι ωραία εισαγωγή για τζαβα και c# με παρόμοια σύνταξη και να μαθεις να κανεις for loops να βρισκειεες μεγιστα και καποια απλα πραγματακια που ειναι εφοδια για μετα. Δε διδάσκεται η C στα τμήματα επιστήμης υπολογιστών, (μόνο) επειδή είναι μια ωραία εισαγωγή για Java και C# και είναι υποσύνολο της C++, ούτε διδάσκεται (προφανώς) στο επίπεδο που γράφεις (αυτά θα πρέπει κάποιος να τα έχει αφομοιώσει από το σπίτι του). Διαφορετικά δε θα πρότεινα στο φίλο να παρατήσει το μάθημα. Η καλή γνώση της C είναι προαπαιτούμενο σε μεταγενέστερα μαθήματα, όπως εργαστήριο λογισμικού, λειτουργικά συστήματα και μεταγλωττιστές, μάλλον το πιο βαρύ μάθημα (εκτός της πτυχιακής) τμημάτων επιστήμης υπολογιστών. Οπότε χωρίς καλή γνώση της C δύσκολα προχωράς, ή προχωράς με αρκετό ζόρι και άγχος. Οπότε... ή αναγκαστικά θα μάθεις, ή θα πας (αν πας) μέχρι το τέλος αγκομαχώντας.
k33theod Δημοσ. 27 Δεκεμβρίου 2019 Δημοσ. 27 Δεκεμβρίου 2019 (επεξεργασμένο) Για να βγούν πραγματικά δεδομένα με βάση αυτά που δίνει η άσκηση είναι μάλλον αδύνατο. Το ορθόδοξο πάσχα δεν υπολογίζεται τόσο απλά όσο λέει. Υπάρχουν διάφοροι αλγόριθμοι για τον υπολογισμό του που δεν είναι και το πιο απλά πράγμα. Οπότε αν ο καθηγητής περιμένει πραγματικά νούμερα θα πρέπει να ανατρέξεις και σε άλλες πηγές. Επίσης εφόσον απ' ότι φένεται δεν μπορείς να χρησιμοποιήσεις έτοιμες βιβλιοθήκες όπως time.h (αλλιώς δεν θα έλεγε για δίσεκτα έτη και ότι η 1 ιαν 1991 είναι Τρίτη, αυτά υπολογίζονται αυτόματα από τις βιβλιοθήκες) θα πρέπει να χτίσεις εσύ μια μικρή βιβλιοθήκη με όλες τις βασικές λειτουργίες. Μία λύση που έκανα εγώ με έτοιμη βιβλιοθήκη έχει 1 bug για το 2021 Spoiler //Το Πάσχα του 2021 έχει κάποιο bug και εμφανίζεται μία εβδομάδα νωρίτερα !@$@#21 #include <stdio.h> #include <time.h> const int standar_holidays [8][2] = {{1,0},{6,0}, {25,2},{1,4}, {15,7}, {28,9}, {25,11}, {26,11}}; const char * sh[8] = {"Protoxronia","Theofania","25 Martiou","Protomagia","Dekapentaugoustos","28 Οκtobriou", "Xristougenna","Deuteri mera Xristougennon"}; //The 2 matrices should be in correspodense const char * other_holidays[7]= {"Kathari Deutera","Agiou Theodorou","Savato tou Lazarou", "Kuriaki ton Baion", "Tis Anastaseos","Tou Thoma","Tvn Miroforon"}; const int diffs[7]={-48,-43,-8,-7,0,7,14}; //The 2 matrices should be in correspodense month is 0-11 0->January //Αγίου Γεωργίου 23 Απριλίου εάν το πάσχα πέφγτει πιο μετά 1 μέρα μετά το πασχα const double sex_per_day=24*60*60; void panselinos_pasxa(int year, struct tm *p); int main(int argc, char **argv) { int year=0; printf("Dose etos : "); scanf("%d",&year); struct tm pasxa = {0}; panselinos_pasxa(year, &pasxa); time_t pasxat = mktime(&pasxa);// Thanks to @imitheos pasxa.tm_mday=pasxa.tm_mday+7-pasxa.tm_wday;//posible bug pasxat = mktime(&pasxa); printf("To pasxa tou %d peftei tin %s\n",year, ctime(&pasxat)); printf("Statheres giortes tou %d\n\n",year); for (int i=0;i<8;i++) { printf("%d\t", i+1); printf("%s : ",sh[i]); struct tm h = {.tm_year=year-1900, .tm_mday =standar_holidays[i][0], .tm_mon=standar_holidays[i][1]}; time_t d = mktime(&h); printf("%s\n", ctime(&d)); } printf("Kinites giortes tou %d\n\n",year); for (int i=0;i<7;i++) { printf("%d\t", i+1); printf("%s : ",other_holidays[i]); time_t d = pasxat + diffs[i]*sex_per_day; printf("%s\n", ctime(&d)); } getchar(); return 0; } void panselinos_pasxa(int year,struct tm *p ) { //algorith is taken from http://www.eortologio.gr/arthra/paschalion.php int month=0, day=0; int p1 = year-2; int p2 = p1%19; int p3 = p2*11; int p4 = p3%30;//epakti int p5 = 44-p4; if (p4>23) month=3; else month=2; day=p5+13; p->tm_year=year-1900; if (month ==2 && day>31) { p->tm_mon = month+1; p->tm_mday=day-31; return; } if (month ==3 && day>30) { p->tm_mon = month+1; p->tm_mday=day-30; return; } p->tm_mday=day; p->tm_mon=month; } Επεξ/σία 30 Δεκεμβρίου 2019 από k33theod
imitheos Δημοσ. 28 Δεκεμβρίου 2019 Δημοσ. 28 Δεκεμβρίου 2019 15 ώρες πριν, k33theod είπε Για να βγούν πραγματικά δεδομένα με βάση αυτά που δίνει η άσκηση είναι μάλλον αδύνατο. Το ορθόδοξο πάσχα δεν υπολογίζεται τόσο απλά όσο λέει. Υπάρχουν διάφοροι αλγόριθμοι για τον υπολογισμό του που δεν είναι και το πιο απλά πράγμα. Οπότε αν ο καθηγητής περιμένει πραγματικά νούμερα θα πρέπει να ανατρέξεις και σε άλλες πηγές. Επίσης εφόσον απ' ότι φένεται δεν μπορείς να χρησιμοποιήσεις έτοιμες βιβλιοθήκες όπως time.h (αλλιώς δεν θα έλεγε για δίσεκτα έτη και ότι η 1 ιαν 1991 είναι Τρίτη, αυτά υπολογίζονται αυτόματα από τις βιβλιοθήκες) θα πρέπει να χτίσεις εσύ μια μικρή βιβλιοθήκη με όλες τις βασικές λειτουργίες. Μία λύση που έκανα εγώ με έτοιμη βιβλιοθήκη έχει 1 bug για το 2021 Απόκρυψη περιεχομένων int main(int argc, char **argv) { struct tm pasxa = {0}; panselinos_pasxa(year, &pasxa); /* εδώ δεν θέλει ακόμη ένα mktime(&pasxa);;;; */ pasxa.tm_mday=pasxa.tm_mday+7-pasxa.tm_wday;//posible bug time_t pasxat = mktime(&pasxa); printf("To pasxa tou %d peftei tin %s\n",year, ctime(&pasxat)); } Ωραίος. Παράξενο που τους έβαλε τέτοια άσκηση γιατί όπως λες είναι λίγο ιστορία να το κάνεις σωστά. Υποθέτω πως εννοούσε +- 40-50 χρόνια από το 1991 γιατί αν πάμε πολύ πίσω ή πολύ μπροστά ξεφεύγει το πράγμα. Για παράδειγμα εκεί που προσθέτεις 13 ημέρες δεν είναι λόγω των 13 ημερών που έχει διαφορά το νέο ημερολόγιο με το παλιό; Αν ναι, τότε από κάποια χρονιά και μετά (2050, 2100 δεν θυμάμαι) η διαφορά θα πάει στις 14 ημέρες. Όσον αφορά τον κώδικα, πέρα από το 2021 δεν σου βγάζει λάθος και σε πολλές άλλες χρονιές (σύγκρινε με εδώ). Όταν τρέχεις την panselinos_pasxa συμπληρώνεις τα mday, mon, year οπότε, αν δεις στον κώδικα της main που έχω κρατήσει, εκεί που αφαιρείς το wday (και αναφέρεις μάλιστα ότι είναι πιθανό bug), το wday δεν θα είναι πάντα 0; Δεν πρέπει πριν από εκείνη την γραμμή να τρέξεις ακόμη ένα mktime ώστε να συμπληρωθεί η wday; 1
k33theod Δημοσ. 28 Δεκεμβρίου 2019 Δημοσ. 28 Δεκεμβρίου 2019 (επεξεργασμένο) 7 ώρες πριν, imitheos είπε Ωραίος. Παράξενο που τους έβαλε τέτοια άσκηση γιατί όπως λες είναι λίγο ιστορία να το κάνεις σωστά. Υποθέτω πως εννοούσε +- 40-50 χρόνια από το 1991 γιατί αν πάμε πολύ πίσω ή πολύ μπροστά ξεφεύγει το πράγμα. Για παράδειγμα εκεί που προσθέτεις 13 ημέρες δεν είναι λόγω των 13 ημερών που έχει διαφορά το νέο ημερολόγιο με το παλιό; Αν ναι, τότε από κάποια χρονιά και μετά (2050, 2100 δεν θυμάμαι) η διαφορά θα πάει στις 14 ημέρες. Όσον αφορά τον κώδικα, πέρα από το 2021 δεν σου βγάζει λάθος και σε πολλές άλλες χρονιές (σύγκρινε με εδώ). Όταν τρέχεις την panselinos_pasxa συμπληρώνεις τα mday, mon, year οπότε, αν δεις στον κώδικα της main που έχω κρατήσει, εκεί που αφαιρείς το wday (και αναφέρεις μάλιστα ότι είναι πιθανό bug), το wday δεν θα είναι πάντα 0; Δεν πρέπει πριν από εκείνη την γραμμή να τρέξεις ακόμη ένα mktime ώστε να συμπληρωθεί η wday; Να σου πω την αλήθεια ακολούθησα τον αλγόριθμο του http://www.eortologio.gr/arthra/paschalion.php Είναι το βήμα 7 Το δικαιολογεί "7. Στην ημερομηνία που βρήκαμε στο 6α ή στο 6β προσθέτουμε 13 ημέρες και βρίσκουμε την ημέρα της Πασχαλινής Πανσελήνου στο Γρηγοριανό ημερολόγιο που χρησιμοποιούμε σήμερα. (source ©: www.eortologio.gr)". Δεν ξέρω αν αλλάζει κάποια στιγμή. Σε αυτό που λες για το λάθος έχεις δίκιο. Εγώ σύγκρινα την πανσέληνο και υπλολόγιζα το πάσχα στο μυαλό μου και ήταν σωστό αλλά όταν το υλοποίησα με πάσχα δεν το ξανατσέκαρα. Τα έβγαζε όλα λάθος όχι μόνο το 2021 >) . Ευχαριστώ θα χρειαζόμουνα ώρες για να το βρώ. Το διόρθωσα και έκανα δοκιμαστικό με το πίνακα που μου έδωσες. Δίνει πάλι λάθος το 2021 Ενώ για κάποιο περίεργο λόγο Το πάσχα του 2038 και 2039 είναι null OMG Ο κώδικας της main στην άλλη συνάρτηση δεν άλλαξα κάτι int main(int argc, char **argv) { for (int year = 1999;year<2040;year++) { struct tm pasxa = {0}; panselinos_pasxa(year, &pasxa); time_t pasxat = mktime(&pasxa); pasxa.tm_mday=pasxa.tm_mday+7-pasxa.tm_wday; pasxat = mktime(&pasxa); printf("Το πάσχα του %d είναι στις %s\n",year, ctime(&pasxat)); } getchar(); return 0; } Άλλαξα τον υπολογισμό του πάσχα με έναν άλλο αλγόριθμο και δεν έχει πλέον σφάλμα το 2021 από το post του void ipologismos_pasxa(int etos,struct tm *p ) { int day = 3+ (19*(etos%19)+16)%30 + (2*(etos%4)+4*(etos%7)+6*((19*(etos%19)+16)%30))%7; p->tm_year = etos-1900; p->tm_mon = 3; p->tm_mday = day; } Επεξ/σία 28 Δεκεμβρίου 2019 από k33theod
imitheos Δημοσ. 28 Δεκεμβρίου 2019 Δημοσ. 28 Δεκεμβρίου 2019 44 λεπτά πριν, k33theod είπε Να σου πω την αλήθεια ακολούθησα τον αλγόριθμο του http://www.eortologio.gr/arthra/paschalion.php Είναι το βήμα 7 Το δικαιολογεί "7. Στην ημερομηνία που βρήκαμε στο 6α ή στο 6β προσθέτουμε 13 ημέρες και βρίσκουμε την ημέρα της Πασχαλινής Πανσελήνου στο Γρηγοριανό ημερολόγιο που χρησιμοποιούμε σήμερα. (source ©: www.eortologio.gr)". Δεν ξέρω αν αλλάζει κάποια στιγμή. Το Ιουλιανό χάνει ημέρες οπότε είναι πίσω από το Γρηγοριανό. Όσο πηγαίνουμε πιο πίσω στο παρελθόν μειώνεται η διαφορά και όσο πάμε στο μέλλον αυξάνεται. Από τον μάρτιο του 2100 τελικά θα γίνουν 14 οι ημέρες. Πιθανώς όμως να μην λαμβάνεται υπόψιν αυτό στον αλγόριθμο του πάσχα γιατί το αυτόματο script στο link που δίνεις, πηγαίνει μέχρι 4099 και όταν βάζω 2101 μου το βγάζει με 13 ημέρες. Όσον αφορά τον ίδιο τον αλγόριθμο, και χειροκίνητα όταν το κάνω για το 2021 μου βγαίνει 9 Μαΐου και όχι 2 αλλά όλα τα sites δίνουν 2. Αν κοιτάξεις στο τέλος του link σου, έχει έναν άλλον αλγόριθμο για το excel ο οποίος δίνει 2 Μαΐου. 44 λεπτά πριν, k33theod είπε Ενώ για κάποιο περίεργο λόγο Το πάσχα του 2038 και 2039 είναι null OMG Ο κώδικας της main στην άλλη συνάρτηση δεν άλλαξα κάτι Ο compiler σου είναι 32bit μήπως. Αν ναι, τότε είναι λογικό να στο βγάζει null (ή βασικά θα έπρεπε να σου βγάζει την unix epoch δηλαδή 1 ιανουαρίου 1970). Αν θυμάσαι παλιά μας είχανε φάει τα αυτιά με το 2000 που σε πολλά software θα φαινόταν 00 οπότε αν πήγαινες να αφαιρέσεις 2000-1999 θα έδινε αρνητικό αποτέλεσμα λόγω του 00-99. Εκτός από αυτό το λεγόμενο Y2K πρόβλημα, υπάρχει και ένα άλλο κλασικό πρόβλημα που είναι γνωστό εδώ και πάρα πολλά χρόνια και είναι το λεγόμενο Y2038 πρόβλημα. Την μεταβλητή σου pasxat την δήλωσες ως time_t. Αν η μεταβλητή έχει μέγεθος 32bit (δηλαδή 31 χωρίς το πρόσημο), τότε ο μέγιστος χρόνος που μπορείς να αναπαραστήσεις είναι 2^31 - 1 (2147483647) δευτερόλεπτα από την 1 Ιανουαρίου 1970 δηλαδή κάποια ημερομηνία του Ιανουαρίου του 2038. Εσύ προσπαθείς να βρεις Μάρτιο / Απρίλιο / Μαΐο του 2038 και 2039 οπότε δεν σου χωράει. 3 1
k33theod Δημοσ. 29 Δεκεμβρίου 2019 Δημοσ. 29 Δεκεμβρίου 2019 Στις 28/12/2019 στις 6:07 ΜΜ, imitheos είπε Εκτός από αυτό το λεγόμενο Y2K πρόβλημα, υπάρχει και ένα άλλο κλασικό πρόβλημα που είναι γνωστό εδώ και πάρα πολλά χρόνια και είναι το λεγόμενο Y2038 πρόβλημα. Την μεταβλητή σου pasxat την δήλωσες ως time_t. Αν η μεταβλητή έχει μέγεθος 32bit (δηλαδή 31 χωρίς το πρόσημο), τότε ο μέγιστος χρόνος που μπορείς να αναπαραστήσεις είναι 2^31 - 1 (2147483647) δευτερόλεπτα από την 1 Ιανουαρίου 1970 δηλαδή κάποια ημερομηνία του Ιανουαρίου του 2038. Εσύ προσπαθείς να βρεις Μάρτιο / Απρίλιο / Μαΐο του 2038 και 2039 οπότε δεν σου χωράει. Σωστός printf("%d\n", sizeof(time_t)); //4 time_t limit = (int) (pow(2,31) -1); printf("limit date : %s\n", ctime(&limit));//19 Ian 2038 limit = limit + 1; printf("limit date : %s\n", ctime(&limit));//null
vaggelisdan Δημοσ. 7 Ιανουαρίου 2020 Δημοσ. 7 Ιανουαρίου 2020 Στις 22/12/2019 στις 12:47 ΜΜ, filip123go είπε Δεν εχω δει πουθενά να ζητάνε C σαν γλώσσα. ΠΟΥΘΕΝΑ. Απ'ότι ξέρω χρησιμοποιείται για συγγραφή driver για τα PC. Αλλά αυτό δεν ξέρω πλέον κατά πόσο ισχύει! Ο κύριος στόχος οποιουδήποτε τμήματος είναι να σε προετοιμάσει για την επαγγελματική σου σταδιοδρομία! Αλλιώς γιατί σπουδάζεις; Για να το βάλεις στον τοίχο;; Ο στόχος ενός τμήματος είναι σε 4 χρόνια να σε κάνει επιστήμονα, ενώ σαν μπόνους ΜΠΟΡΕΙ να σου προσφέρει και κάποια πράγματα που μπορεί να σε βοηθήσουν στην αγορά εργασίας. Το πανεπιστήμιο δεν είναι προετοιμασία για την εργασία, και σιγά μην μαθαίνουν στα παιδιά απο πρώτο εξάμηνο javascript και html/css για να βγουν έτοιμα ρομποτάκια για δουλειά. Με την ίδια λογική, στο μαθηματικό/φυσικό θα έπρεπε να τους μοιράζουν σημειώσεις για φροντιστήρια γυμνασίου/λυκείου αντι για προβλήματα διαφορικών εξισώσεων, αφού εκεί θα καταλήξουν !!11.. Άλλο που η C χρησιμοποιείται ακόμα, και σε πολλά πεδία είναι η μόνη γλώσσα που "υπάρχει". Χωρίς προσβολή, αλλά πριν μοιράσουμε συμβουλές σε φοιτητές πρέπει να είμαστε πολύ προσεκτικοί με το τι λέμε..
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα