Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα, έφτιαξα ένα προγραμματάκι σήμερα το απόγευμα που είναι ένα απλό εορτολόγιο. (θα) Έχει 3 βασικές λειτουργίες:

 

1) Βρίσκει την σημερινή ημερομηνία και δείχνει ποιά ονομαστική γιορτή έχουμε σήμερα (done)

2) Δίνει την δυνατότητα στον χρήστη να δει ποιά ονομαστική γιορτή έχουμε σε μια οποιαδήποτε ημερομηνία (done)

3) Τέλος ο χρήστης μπορεί να κάνει αναζήτηση ένα όνομα και να δει σε ποιά ημερομηνία αυτό γιορτάζει (not done)

 

Linky Link: http://www.mediafire.com/?h8wbzdem97286zc (rar, 1.73Mb)

 

Τις γιορτές τις πήρα από μερικά site, και έβαλα μόνο όσα ονόματα θεώρησα "νορμάλ". Δεν ξέρω αν είναι 100% σωστά δλδ τα δεδομένα, και επίσης δεν έχω ψάξει καθόλου τι παίζει με τις γιορτές που δεν έχουν σταθερές ημερομηνίες.

 

dadadasdadd.jpg

 

Προς το παρόν έχω κάνει μία λίστα (μονοδιάστατος πίνακας) με το κάθε Index να αντιστοιχεί σε μία ημέρα του χρόνου (365 indexes δηλαδή) και στο καθένα έχω βάλει ένα string με τα ονόματα.

Ο χρήστης εισάγει τον μήνα, και στην συνέχεια την μέρα σε ακέραια μορφή, και γίνεται μια αναπροσαρμογή ώστε να βρεθεί σε ποιά μέρα από τις 365 του έτους αντιστοιχεί η ημερομηνία που εισήχθη.

 

Ποιός είναι πιστεύετε ο καλύτερος τρόπος για να υλοποιηθεί η αναζήτηση μέσω ονόματος? Έχω σκεφτεί μερικά πράγματα, αλλά θα ήθελα μερικές "κατευθυντήριες συμβουλές"...

Δημοσ.

Αν και τα ονοματα ειναι πολύ λιγα οπότε και μια γραμμική αναζήτηση θα σε βολευε ισως μπορεις να κανεις κατι που μου ρθε τωρα εντελώς εμπνευση:

 

Μπορεις να φτιαξεις καποια δομή αναζητησης για τα ονόματα και να την συνδεσεις με την δομή των ημερομηνιών(που θα ναι σε χρονολογική σειρά). Αν για παράδειγμα ειχες δυαδικό δεντρο για τα ονόματα τα φύλλα θα ηταν επιπλέον συνδεδεμένα με τις ημερομηνίες τους. Οι ημερομηνίες τους θα ηταν συνδεδεμένες μεταξυ τους με χρονολογική σειρα.(συνδεδεμένη λιστα δηλαδη)

 

edit:

Εικονα:

 

 

9U4fG.png

 

 

Δημοσ.

Πάντως τα στοιχεία είναι πολύ λίγα οπότε και έτσι όπως είναι να το αφήσεις δεν θα παίρνει πολύ χρόνο να διατρέξει τις μέρες μια-μια και να ψάχνει να βρει το ζητούμενο όνομα.

 

Αν όμως θες ντε και καλά να το βελτιστοποιήσεις ως προς την αναζήτηση των ονομάτων, μια λύση που χρησιμοποιείται πολύ συχνά είναι ένα hash table με όλα τα γράμματα της αλφαβήτου (Αγγλικά + Ελληνικά αν σκοπεύεις να το κάνεις δίγλωσσο), με το κελί του κάθε γράμματος να περιέχει τη λίστα των ονομάτων που αρχίζουν από αυτό το γράμμα.

 

Τη λίστα μπορείς να την υλοποιήσεις όπως θέλεις, συνήθως την υλοποιούν με απλή ή με διπλά συνδεδεμένη λίστα. Κάνοντας την με διπλά συνδεδεμένη λίστα με tail δείκτη, μπορείς να την διατρέξεις είτε από την αρχή της είτε από το τέλος της.

 

Π.χ. αν το όνομα που ψάχνεις αρχίζει με το γράμμα Α κάνεις index απευθείας το κελί hashtable['A'] από το οποίο ξεκινάει η διπλα συνδεδεμένη λίστα των ονομάτων από Α. Αν τώρα το 2ο γράμμα του ονόματος είναι μεγαλύτερο από το μεσαίο γράμμα της αλφαβήτου (π.χ μεγαλύτερο του Μ στην Ελληνικό αλφάβητο) τότε ξεκινάς να ψάχνεις από το τέλος της λίστας με τα ονόματα, με την προϋπόθεση πως τα ονόματα τα έχεις ήδη ταξινομημένα κατά αύξουσα αλφαβητική σειρά στη λίστα.

 

Αντί για διπλές λίστες μπορείς να χρησιμοποιήσεις πίνακες (με τις λίστες είναι πιο εύκολο να εισαγάγεις ταξινομημένα τα ονόματα απευθείας όταν πρωτο-μπαίνουν στη λίστα, αλλά με πίνακες είναι πιο εύκολο να εφαρμόσεις binary search στα ταξινομημένα ονόματα). Ή μπορείς να χρησιμοποιήσεις binary search trees αντί για λίστες ή πίνακες.

 

post-38307-0-91575900-1323732487_thumb.jpg

 

Κατι σαν B+ tree που έχει ολα τα στοιχεία του στα φύλλα;

 

Δεν είναι overkill; ( βασικά όλα είναι overkill για πρόγραμμα με τόσο λίγα δεδομένα ).

Δημοσ.

Καθώς έχω γράψει ένα ημερολόγιο εδώ και μερικά χρόνια, αυτό το θέμα το είχα λύσει με αλφαβητική ταξινόμηση (qsort) των εορτών και ύστερα binary search (bsearch) αφού όμως φρόντισα να μην υπάρχουν διπλοτυπίες στο εορτολόγιο.

Υπό φυσιολογικές συνθήκες δεν υπήρχε ιδιαίτερος λόγος να ασχοληθώ, αλλά καθώς υπολόγιζα πολύ περισσότερα πράματα από ένα απλό εορτολόγιο κάθε βελτιστοποίηση καλή ήταν.

 

Όσον αφορά το θέμα με τις κινητές εορτές (Πασχάλιος κύκλος) δες εδώ.

Δημοσ.

Συμφωνω κι εγω για Hashing with Chaining κι απο 'κει και περα οτι chain θες (αν και σε τοσα λιγα αντικειμενα δεν υπαρχει διαφορα)

  • 2 εβδομάδες αργότερα...
Δημοσ.

καταρχάς σόρρυ που έφτιαξα το νήμα και το άφησα έτσι, αλλά είχα να logάρω πάνω από 2 βδομάδες στο ινσόμνια.

 

Επί του θέματος τώρα, δεν έχω πανεπιστιμιακή εκπαίδευση στον προγραμματισμό και δεν καταλαβαίνω καν τι λέτε περί hash tables, B+tree κτλπ... Δούλεψα λίγο ακόμη την αναζήτηση με ημερομηνία και της έφτιαξα ένα Interface με κουμπιά αντί για το κλασσικό "εισήγαγε ακέραιο"¨κτλπ... Μιας λοιπόν και τα ονόματα είναι πεπερασμένα σε αριθμό, σκεφτόμουν να κάνω κάτι τέτοιο και εκεί... Δλδ πατώντας στην αναζήτηση με όνομα, να εμφανίζονται σαν κουμπιά τα γράμματα του αλφάβητου, και στην συνέχεια επιλέγοντας π.χ. το γράμμα "Ν", να εμφανίζονται ως κουμπιά από κάτω όλα τα ονόματα που αρχίζουν από "Ν", και αφού διελέξει ο χρήστης το όνομα της αρεσκείας του, να εμφανίζεται το σχετικό αποτέλεσμα. Θέλει περισσότερη δουλειά έτσι, αλλά πιστεύω θα είναι πιο βολικό και εύκολο στην χρήση, και δεν θα υπάρχει το πρόβλημα του "πως έχω καταχωρήση εγώ ένα όνομα, και πως θα το ψάχνει ο χρήστης" (π.χ. Μιχάλης - Μιχαήλ).

 

Ρίξτε αν θέλετε μια ματιά αν σας αρέσει το interface ως έχει:

 

Download: http://www.mediafire.com/?ige9zguceydivul

 

Υ.Γ. μίκρυνα και το μέγεθος του κατά 100kb παρά το ότι πρόσθεσα και άλλα πράγματα... Χεχ... :P

Δημοσ.

Δεν ξερω τι εργαλεια σου προσφερει το framework στο οποιο δουλευεις, αλλα αυτο που θελεις ειναι αρκετα απλο ( τουλαχιστον στη λογικη).

 

Εχεις το πινκα/λιστα/ξερω γω με τις εγγραφες, το μονο που εχει να κανεις ειναι να σκαναρεις το πινακα και οτι αρχιζει με το X να το κανει copy σε αλλο πινακα. Ετσι τωρα ο "αλλος πινακας" εχει τις εγγραφες που αρχιζουν με χ happy.gif

 

 

Πρακτικα το παραπανω εξαρταται απο τα εργαλεια που εχεις. πχ σε C θα ειναι καμια 20 γραμμες σε c++ κανα 4-5 γραμμες σε c# 1 γραμμη

Δημοσ.

...

Ρίξτε αν θέλετε μια ματιά αν σας αρέσει το interface ως έχει:

...

 

Για να είμαι απόλυτα ειλικρινής, δεν μου αρέσει :( ... χωρίς παρεξήγηση.

 

Το 1ο που δεν μου αρέσει είναι τα χτυπητά χρώματα και οι... εχμ... κιτς γραμματοσειρές :lol:

 

Το βασικότερο από όλα όμως είναι η δυσχρηστία του gui σου, πρέπει να πατήσει κάποιος ένα κάρο κουμπιά για να φτάσει στο επιθυμητό αποτέλεσμα.

 

Εγώ θα εμφάνιζα απευθείας μέσα στο παράθυρο το μηνιαίο ημερολόγιο του τρέχοντος μηνός (διαβάζοντας την ημερομηνία από το σύστημα) και θα είχα ένα combo-box με βέλη αριστερά και δεξιά για μετακίνηση ανά μήνα, ενώ με κλικ επάνω του θα άνοιγε μια λίστα επιλογών με όλους τους μήνες για άμεση μετακίνηση.

 

Στα κελιά του μηνιαίου ημερολογίου θα αναγράφονταν τα ονόματα των εορτών, ενώ αν δεν χωρούσαν όλα είτε θα είχα γραμμές κύλισης, είτε με κλικ στο κελί θα άνοιγε νέο modal παράθυρο με όλες τις γιορτές.

 

Τέλος, για την αναζήτηση ανά όνομα, θα έβαζα ένα text-entry box (με ή χωρίς auto-completion) κι ένα search button.

 

EDIT:

 

Με ένα πρόχειρο googling βρήκα κι αυτό: http://www.eortologio.net/ (επίσης εξυπηρετικό ως interface).

Δημοσ.
[..]

Ρίξτε αν θέλετε μια ματιά αν σας αρέσει το interface ως έχει[..]

 

Θα συμφωνήσω με τον φίλο migf1, το UI θέλει βελτιώσεις, παρόλα αυτά είναι μια καλή προσπάθεια δεδομένου ότι δεν έχεις ξανά ασχοληθεί με αυτό τον τομέα (αν κατάλαβα καλά τις αρχικές σου αναρτήσεις).

 

Πριν μερικά χρόνια, είχα γράψει (από περιέργεια) ένα ημερολόγιο. Το UI που επέλεξα ήταν βασισμένο στην λογική του πλέγματος (Grid) και της λίστας για τα γεγονότα:

 

post-41640-0-55213600-1325353567_thumb.png

 

Σήμερα το στυλ αυτό έχει μάλλον ξεπεραστεί από εκείνο του Google Calendar..

 

Χρόνια πολλά σε όλους:)

Δημοσ.

...

Πριν μερικά χρόνια, είχα γράψει (από περιέργεια) ένα ημερολόγιο. Το UI που επέλεξα ήταν βασισμένο στην λογική του πλέγματος (Grid) και της λίστας για τα γεγονότα:

 

post-41640-0-55213600-1325353567_thumb.png

 

Πολύ-πολύ ωραίο !!!!! :)

 

Το έχεις free;

Δημοσ.

Πολύ-πολύ ωραίο !!!!! :)

 

Το έχεις free;

Σε ευχαριστώ πάρα πολύ! :)

 

Στην παρούσα φάση δεν είναι άμεσα διαθέσιμο καθώς πρέπει να κάνω κάποιες απαραίτητες ανανεώσεις στο Project(τελευταία φορά που ασχολήθηκα ήταν το 2008). Με την πρώτη ευκαιρία όμως ... ;)

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...