Νέα

Προγραμματισμός C με μαθηματικά πακέτα.

  • Μέλος που άνοιξε το νήμα -
  • Ημερομηνία ανοίγματος
  • Απαντήσεις 22
  • Εμφανίσεις 2K
  • Tagged users Καμία
  • Βλέπουν το thread αυτή τη στιγμή 1 άτομα (0 μέλη και 1 επισκέπτες)

Επισκέπτης
Ο κώδικας που φτιάχνω (για το ΚΙΝΟ εννοώ) αποτελείται από διάφορες φόρμες, αλλά μία από τις κυριότερες ρουτίνες είναι η επόμενη.
Δίνω ένα κομματάκι της (πετσοκομμένο προφανώς).

Κώδικας:
double modelo(int x1, int x2, int x3, int x4, int x5, int x6, int x7, int x8, int x9, int x10, int x11, int x12, int x13, int x14, int x15,
                 int x16, int x17, int x18, int x19, int x20, int x21, int x22, int x23, int x24, int x25, int x26, int x27, int x28, int x29)
    {
      double timi;

      timi=-386.346+50.5788*x1+285.939*x10+ <340 όροι παραλείφθηκαν> +0.510234*x8*x9;

      double kato_past=51, pano_past=112;        
      double kato_diakosia=201, pano_diakosia=253;
      double kato_ekatonpeninta=146, pano_ekatonpeninta=160;
      double kato_ekato=94, pano_ekato=156;
      double kato_peninta=48, pano_peninta=61;

      
      bool extrapolation=false;
      bool out_of_range=false;
      if (timi>=kato_past && timi<=pano_past)
      {
        if (x1<9 || x1>34)
          extrapolation=true;
        else if (x2<0 || x2>11)
          extrapolation=true;
        else if (x3<6 || x3>13)
          extrapolation=true;
        else if (x4<14 || x4>59)
          extrapolation=true;
        else if (x5<0 || x5>5)
          extrapolation=true;
        else if (x6<5 || x6>10)
          extrapolation=true;
        else if (x7<7 || x7>25)
          extrapolation=true;
        else if (x8<0 || x8>20)
          extrapolation=true;
        else if (x9<8 || x9>22)
          extrapolation=true;
        else if (x10<0 || x10>8)
          extrapolation=true;
        else if (x11<0 || x11>51)
          extrapolation=true;
        else if (x12<11 || x12>56)
          extrapolation=true;
        else if (x13<1 || x13>5)
          extrapolation=true;
        else if (x14<9 || x14>72)
          extrapolation=true;
        else if (x15<4 || x15>52)
          extrapolation=true;
        else if (x16<5 || x16>39)
          extrapolation=true;
        else if (x17<0 || x17>10)
          extrapolation=true;
        else if (x18<6 || x18>16)
          extrapolation=true;
        else if (x19<8 || x19>37)
          extrapolation=true;
        else if (x20<0 || x20>12)
          extrapolation=true;
        else if (x21<6 || x21>17)
          extrapolation=true;
        else if (x22<11 || x22>33)
          extrapolation=true;
        else if (x23<0 || x23>8)
          extrapolation=true;
        else if (x24<5 || x24>19)
          extrapolation=true;
        else if (x25<7 || x25>40)
          extrapolation=true;
        else if (x26<0 || x26>9)
          extrapolation=true;
        else if (x27<6 || x27>14)
          extrapolation=true;
        else if (x28<4 || x28>16)
          extrapolation=true;
        else if (x29<10 || x29>32)
          extrapolation=true;
      }
      else if (timi>=kato_diakosia && timi<=pano_diakosia)
      {
          .......
      }

Επικεντρώστε την προσοχή σας στα τεράστια if then else....


To θέμα είναι ότι κάθε φορά που θα ενημερώνεται η βάση δεδομένων θα πρέπει χειρωνακτικά να βάζω εγώ τις τιμές για να ελέγχεται αν οι τιμές των μεταβλητών (ουκ ολίγες 29) είναι εντός του πεδίου ορισμού?
Και επί 5 φορές (διότι τόσα είναι τα τμήματα της συνάρτησης) πάμε στους 145 ελέγχους.....
Τη βάψαμε άσχημα...
Ευτυχώς όμως που το Mathematica μπορεί να παράγει κώδικα για τη C. Για την ιστορία το Mathematica βασίζεται πάνω στη C.
Έτσι τούτο κομμάτι μου έλυσε τα χέρια!

Κώδικας:
For[stili=1, stili<=29, stili++,
  megistos=-1234;
  elaxistos=9876;
  For[i=1, i<=digmatapast, i++,
        megistos=Max[past[[i,stili]], megistos];
        elaxistos=Min[past[[i,stili]], elaxistos]
     ]
  Print["else if (x",stili,"<",elaxistos," || x",stili,">",megistos, ")  extrapolation=true;"]]
 

Iakwvos

Μέλος
Εγγρ.
4 Σεπ 2011
Μηνύματα
468
Κριτικές
4
Like
111
Πόντοι
1
Ο κώδικας που φτιάχνω (για το ΚΙΝΟ εννοώ) αποτελείται από διάφορες φόρμες, αλλά μία από τις κυριότερες ρουτίνες είναι η επόμενη.
Δίνω ένα κομματάκι της (πετσοκομμένο προφανώς).

Κώδικας:
double modelo(int x1, int x2, int x3, int x4, int x5, int x6, int x7, int x8, int x9, int x10, int x11, int x12, int x13, int x14, int x15,
                 int x16, int x17, int x18, int x19, int x20, int x21, int x22, int x23, int x24, int x25, int x26, int x27, int x28, int x29)
    {
      double timi;

      timi=-386.346+50.5788*x1+285.939*x10+ <340 όροι παραλείφθηκαν> +0.510234*x8*x9;

      double kato_past=51, pano_past=112;        
      double kato_diakosia=201, pano_diakosia=253;
      double kato_ekatonpeninta=146, pano_ekatonpeninta=160;
      double kato_ekato=94, pano_ekato=156;
      double kato_peninta=48, pano_peninta=61;

      
      bool extrapolation=false;
      bool out_of_range=false;
      if (timi>=kato_past && timi<=pano_past)
      {
        if (x1<9 || x1>34)
          extrapolation=true;
        else if (x2<0 || x2>11)
          extrapolation=true;
        else if (x3<6 || x3>13)
          extrapolation=true;
        else if (x4<14 || x4>59)
          extrapolation=true;
        else if (x5<0 || x5>5)
          extrapolation=true;
        else if (x6<5 || x6>10)
          extrapolation=true;
        else if (x7<7 || x7>25)
          extrapolation=true;
        else if (x8<0 || x8>20)
          extrapolation=true;
        else if (x9<8 || x9>22)
          extrapolation=true;
        else if (x10<0 || x10>8)
          extrapolation=true;
        else if (x11<0 || x11>51)
          extrapolation=true;
        else if (x12<11 || x12>56)
          extrapolation=true;
        else if (x13<1 || x13>5)
          extrapolation=true;
        else if (x14<9 || x14>72)
          extrapolation=true;
        else if (x15<4 || x15>52)
          extrapolation=true;
        else if (x16<5 || x16>39)
          extrapolation=true;
        else if (x17<0 || x17>10)
          extrapolation=true;
        else if (x18<6 || x18>16)
          extrapolation=true;
        else if (x19<8 || x19>37)
          extrapolation=true;
        else if (x20<0 || x20>12)
          extrapolation=true;
        else if (x21<6 || x21>17)
          extrapolation=true;
        else if (x22<11 || x22>33)
          extrapolation=true;
        else if (x23<0 || x23>8)
          extrapolation=true;
        else if (x24<5 || x24>19)
          extrapolation=true;
        else if (x25<7 || x25>40)
          extrapolation=true;
        else if (x26<0 || x26>9)
          extrapolation=true;
        else if (x27<6 || x27>14)
          extrapolation=true;
        else if (x28<4 || x28>16)
          extrapolation=true;
        else if (x29<10 || x29>32)
          extrapolation=true;
      }
      else if (timi>=kato_diakosia && timi<=pano_diakosia)
      {
          .......
      }

Επικεντρώστε την προσοχή σας στα τεράστια if then else....


To θέμα είναι ότι κάθε φορά που θα ενημερώνεται η βάση δεδομένων θα πρέπει χειρωνακτικά να βάζω εγώ τις τιμές για να ελέγχεται αν οι τιμές των μεταβλητών (ουκ ολίγες 29) είναι εντός του πεδίου ορισμού?
Και επί 5 φορές (διότι τόσα είναι τα τμήματα της συνάρτησης) πάμε στους 145 ελέγχους.....
Τη βάψαμε άσχημα...
Ευτυχώς όμως που το Mathematica μπορεί να παράγει κώδικα για τη C. Για την ιστορία το Mathematica βασίζεται πάνω στη C.
Έτσι τούτο κομμάτι μου έλυσε τα χέρια!

Κώδικας:
For[stili=1, stili<=29, stili++,
  megistos=-1234;
  elaxistos=9876;
  For[i=1, i<=digmatapast, i++,
        megistos=Max[past[[i,stili]], megistos];
        elaxistos=Min[past[[i,stili]], elaxistos]
     ]
  Print["else if (x",stili,"<",elaxistos," || x",stili,">",megistos, ")  extrapolation=true;"]]
Αγαπητέ μπορείτε να μας ενημερώσετε και εμάς που δεν γνωρίζουμε από προγραμματισμό τί μπορούμε να επιτύχουμε με το πρόγραμμα που γράψατε? :huh:
 

Boldemort

Σεβαστός
Εγγρ.
4 Σεπ 2009
Μηνύματα
47.532
Κριτικές
12
Like
38
Πόντοι
1.220
Καλα έκατσες και δηλωσες 29 ξεχωριστές μεταβλητες? πολυ κουραστικο και άχρηστο. Καλυτερα να δηλωνες εναν πινακα 29 θέσεων που θα αποθηκεύσει αυτες τις τιμές.

 int kino_array[29] = { 0 }; // δηλωση πινακα array 29 στοιχειων απο το 0 ως το 28 που αρχικοποιούνται ολα στο 0.

Επισης δεν υπάρχει For αλλα for η C ειναι case sensitive.

megistos=Max[past[[i,stili]], megistos];

αυτο τι ειναι? αν θές να καλέσεις μια συνάρτηση θα πρέπει να χρησιμοποιησεις τον τελεστη κλήσης που ειναι οι παρενθέσεις () και οχι οι αγκύλες []. Τα έχεις μπερδέψει λιγο.

 

Επισκέπτης
Loukianos: Υπαρχει το κουμπι της απαντησης, διαολε οσοι σερφαρουν (οπως εγω τωρα) με κινητο βλεπουν ενα τεραστιο ποστ!
To quote βλαπτει σοβαρα την αναγνωση!
Αυτος ειναι ενα μικρο τμημα απο ενα προγραμμα που φτιαχνω (για ιδια χρηση) οπου τζογαρω στο ΚΙΝΟ. Ξεκινησα πριν 3 μηνες περιπου να γραφω τα πρωτα τμηματα και σε καθημερινη βαση ασχολιεμαι. Κατι σαν επαγγελμα λογω αργιας :grin:


Boldemort: Καταρχας δεν ειμαστε το ιδιο. Πριν ξεκινησω να γραφω, ξαναπιασα καποια βιβλια γιατι ειχα ξεχασει αρκετα βασικα. Ετσι κι αλλιως χομπιστας ημουν κι οχι προγραμματιστης.
Το δευτερο τμημα που δειχνει τη For ναι ετσι ειναι στο Μathematica For κι οχι for. Max ειναι μια εσωτερικη του εντολη ωστε να βρισκει το μεγιστο αριθμο, Min αντιστοιχως. Το μπλοκ εντολων στο Mathematica ειναι σε αγκυλες κι οχι αγκιστρα.
Οσο για την παρατηρηση σου, πολυ καλη ιδεα, υποθετω οτι θα γλυτωνει πραξεις ο υπολογιστης (αρα λιγοτερος επεξεργαστικος χρονος), ομως το προβλημα ειναι οτι πως διαολο θα κωδικοποιηθουν εσωτερικα οι τιμες του πινακα γιατι στην ουσια το Mathematica υπολογιζει ενα μακροσκελες πολυωνυμο κι οχι εναν πινακα. Γιαυτο παει για μελλοντικη αναφορα.
Ασε που τρεχει ενα νημα μοναχα, ο υπολογιστης ειναι ενα μπρικι διπυρηνο 6ετιας. Που να ειχα τα νεα 8πυρηνα της AMD!
Το καλο με τον κακογραμμενο σε καποια σημεια κωδικα ειναι οτι παραλληλιζεται ευκολα.
 

Mexikanos_

Μέλος
Εγγρ.
3 Μαΐ 2011
Μηνύματα
2.929
Like
7
Πόντοι
16
Τί ακριβώς θέλεις να κάνει το πρόγραμμα;
 

DmtrsxXx

Γλομπεάρχης
Εγγρ.
5 Αυγ 2010
Μηνύματα
11.085
Κριτικές
493
Like
59.887
Πόντοι
39.662
Τί ακριβώς θέλεις να κάνει το πρόγραμμα;

θα εισαγει σε μια φορμα τα μπορδελα τις ποτανες και τις βαρδιες που δουλευουν και θα του βγαζει ποτε και σε ποια να παει για να μη φαει φολα.  :dancing:
 

Boldemort

Σεβαστός
Εγγρ.
4 Σεπ 2009
Μηνύματα
47.532
Κριτικές
12
Like
38
Πόντοι
1.220
Loukianos: Υπαρχει το κουμπι της απαντησης, διαολε οσοι σερφαρουν (οπως εγω τωρα) με κινητο βλεπουν ενα τεραστιο ποστ!
To quote βλαπτει σοβαρα την αναγνωση!
Αυτος ειναι ενα μικρο τμημα απο ενα προγραμμα που φτιαχνω (για ιδια χρηση) οπου τζογαρω στο ΚΙΝΟ. Ξεκινησα πριν 3 μηνες περιπου να γραφω τα πρωτα τμηματα και σε καθημερινη βαση ασχολιεμαι. Κατι σαν επαγγελμα λογω αργιας :grin:


Boldemort: Καταρχας δεν ειμαστε το ιδιο. Πριν ξεκινησω να γραφω, ξαναπιασα καποια βιβλια γιατι ειχα ξεχασει αρκετα βασικα. Ετσι κι αλλιως χομπιστας ημουν κι οχι προγραμματιστης.
Το δευτερο τμημα που δειχνει τη For ναι ετσι ειναι στο Μathematica For κι οχι for. Max ειναι μια εσωτερικη του εντολη ωστε να βρισκει το μεγιστο αριθμο, Min αντιστοιχως. Το μπλοκ εντολων στο Mathematica ειναι σε αγκυλες κι οχι αγκιστρα.
Οσο για την παρατηρηση σου, πολυ καλη ιδεα, υποθετω οτι θα γλυτωνει πραξεις ο υπολογιστης (αρα λιγοτερος επεξεργαστικος χρονος), ομως το προβλημα ειναι οτι πως διαολο θα κωδικοποιηθουν εσωτερικα οι τιμες του πινακα γιατι στην ουσια το Mathematica υπολογιζει ενα μακροσκελες πολυωνυμο κι οχι εναν πινακα. Γιαυτο παει για μελλοντικη αναφορα.
Ασε που τρεχει ενα νημα μοναχα, ο υπολογιστης ειναι ενα μπρικι διπυρηνο 6ετιας. Που να ειχα τα νεα 8πυρηνα της AMD!
Το καλο με τον κακογραμμενο σε καποια σημεια κωδικα ειναι οτι παραλληλιζεται ευκολα.

Αρα αυτο δεν ειναι συνταξη της C αλλα του Mathematica. Το C γιατι το έβαλες στον τιτλο?
 

Επισκέπτης
www.bourdela.com/forum/index.php?topic=33544.60]Oριστε εδω[/url] η ιστορια πως ξεκινησε. Σε καποιο ποστ ειχα ανεβασει μια πρωτη εκδοση της πλακας.


BoldemortΤο κομματακι του Μathematica παραγει αυτοματα τα μακρυναρια if else της C, βαζοντας επισης αυτοματα τα ορια των περιοχων. Αλλιως που στον αγυριστο να τα γραφεις ενα προς ενα. Ενταξει υπαρχει το κοπυ πεηστ, αλλα ολο και καποιο οριο να πληκτρολογησεις λαθος => ΤΗΝ ΕΒΑΨΕΣ!

ΦΑΚ ΑΚΑΠ!
Ειδα οτι η ΑMD εχει βγαλει και 16πυρηνους Opteron  :rockon:
Φυσικα ειναι ακριβοι (ειδα για 600 USA εκαστος), αλλα ας μην προτρεχουμε....
Η ουσια ειναι να ξεπερασω εναν μαγικο αριθμο το 12.5% ή μια στα οκτω. Σε μια τετοια περιπτωση εχω ενα μικρο κερδος. Κι οσο αυξανεται η λεγομενη πιθανοτητα ευστοχιας, τοσο περισσοτερα κερδη.
Ωρα για ξεκουραση, αυριο παλι.
 

Mexikanos_

Μέλος
Εγγρ.
3 Μαΐ 2011
Μηνύματα
2.929
Like
7
Πόντοι
16
www.bourdela.com/forum/index.php?topic=33544.60]Oριστε εδω[/url] η ιστορια πως ξεκινησε. Σε καποιο ποστ ειχα ανεβασει μια πρωτη εκδοση της πλακας.

Μάλιστα.

Αν θες τη γνώμη μου, δεν πρόκειται να καταφέρεις τίποτα.

Επί της διαδικασίας όμως.
Προσπάθησε να βρεις κάποιο site από το οποίο θα τραβάς αυτόματα τους αριθμούς από την κάθε κλήρωση.
Ενδεχομένως κάτι που θα κατεβαίνει σαν xml αρχείο, ή στη χειρότερη κάνε μόνος parse τη σελίδα και πάρε τους αριθμούς.
Μπορείς είτε να τα αποθηκεύεις σε μια βάση δεδομένων είτε σε κάποιο αρχείο (νομίζω αυτή η λύση είναι καλύτερη).
Και με C γίνεται γίνεται όλο αυτό... αλλά σου προτείνω να πιάσεις κάποια άλλη γλώσσα (python, Java, C# είναι καλές υποψήφιοι).

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

azazel

Τιμημένος
Εγγρ.
20 Ιουν 2008
Μηνύματα
10.379
Κριτικές
215
Like
17.172
Πόντοι
35.697
Μάλιστα.

Αν θες τη γνώμη μου, δεν πρόκειται να καταφέρεις τίποτα.

Επί της διαδικασίας όμως.
Προσπάθησε να βρεις κάποιο site από το οποίο θα τραβάς αυτόματα τους αριθμούς από την κάθε κλήρωση.
Ενδεχομένως κάτι που θα κατεβαίνει σαν xml αρχείο, ή στη χειρότερη κάνε μόνος parse τη σελίδα και πάρε τους αριθμούς.
Μπορείς είτε να τα αποθηκεύεις σε μια βάση δεδομένων είτε σε κάποιο αρχείο (νομίζω αυτή η λύση είναι καλύτερη).
Και με C γίνεται γίνεται όλο αυτό... αλλά σου προτείνω να πιάσεις κάποια άλλη γλώσσα (python, Java, C# είναι καλές υποψήφιοι).

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

Για να μη τρως τσαμπα χρονο και χρημα μπες εδω και παρε τα νουμερα που ψαχνεις
 

azazel

Τιμημένος
Εγγρ.
20 Ιουν 2008
Μηνύματα
10.379
Κριτικές
215
Like
17.172
Πόντοι
35.697
Και θα περνάει τα νούμερα κάθε κλήρωσης με το χέρι;

Ο τυπος εχει προγραμμα και σου δινει καποιες επιλογες που εχουν αρκετες πιθανοτητες,κατι αλλο πολυ καλο ειναι και αυτο ριξε μια ματια και εδω,ειναι πολυ μπροστα...
 

Mexikanos_

Μέλος
Εγγρ.
3 Μαΐ 2011
Μηνύματα
2.929
Like
7
Πόντοι
16
Ο τυπος εχει προγραμμα και σου δινει καποιες επιλογες που εχουν αρκετες πιθανοτητες,κατι αλλο πολυ καλο ειναι και αυτο ριξε μια ματια και εδω,ειναι πολυ μπροστα...

Πρόγραμμα που σου βγάζει πιθανούς αριθμούς θέλει να φτιάξει και ο Ntountaras αν κατάλαβα καλά.

Δε δουλεύουν έτσι αυτά τα πράγματα, αλλά τουλάχιστο μπορεί να τριφτεί λίγο στον προγραμματισμό.
 

Boldemort

Σεβαστός
Εγγρ.
4 Σεπ 2009
Μηνύματα
47.532
Κριτικές
12
Like
38
Πόντοι
1.220
Loukianos: Υπαρχει το κουμπι της απαντησης, διαολε οσοι σερφαρουν (οπως εγω τωρα) με κινητο βλεπουν ενα τεραστιο ποστ!
To quote βλαπτει σοβαρα την αναγνωση!
Αυτος ειναι ενα μικρο τμημα απο ενα προγραμμα που φτιαχνω (για ιδια χρηση) οπου τζογαρω στο ΚΙΝΟ. Ξεκινησα πριν 3 μηνες περιπου να γραφω τα πρωτα τμηματα και σε καθημερινη βαση ασχολιεμαι. Κατι σαν επαγγελμα λογω αργιας :grin:


Boldemort: Καταρχας δεν ειμαστε το ιδιο. Πριν ξεκινησω να γραφω, ξαναπιασα καποια βιβλια γιατι ειχα ξεχασει αρκετα βασικα. Ετσι κι αλλιως χομπιστας ημουν κι οχι προγραμματιστης.
Το δευτερο τμημα που δειχνει τη For ναι ετσι ειναι στο Μathematica For κι οχι for. Max ειναι μια εσωτερικη του εντολη ωστε να βρισκει το μεγιστο αριθμο, Min αντιστοιχως. Το μπλοκ εντολων στο Mathematica ειναι σε αγκυλες κι οχι αγκιστρα.
Οσο για την παρατηρηση σου, πολυ καλη ιδεα, υποθετω οτι θα γλυτωνει πραξεις ο υπολογιστης (αρα λιγοτερος επεξεργαστικος χρονος), ομως το προβλημα ειναι οτι πως διαολο θα κωδικοποιηθουν εσωτερικα οι τιμες του πινακα γιατι στην ουσια το Mathematica υπολογιζει ενα μακροσκελες πολυωνυμο κι οχι εναν πινακα. Γιαυτο παει για μελλοντικη αναφορα.
Ασε που τρεχει ενα νημα μοναχα, ο υπολογιστης ειναι ενα μπρικι διπυρηνο 6ετιας. Που να ειχα τα νεα 8πυρηνα της AMD!
Το καλο με τον κακογραμμενο σε καποια σημεια κωδικα ειναι οτι παραλληλιζεται ευκολα.

Επειδη δεν παιζω τυχερά παιχνιδια δεν ξέρω την θεωρια του KINO. Αμα έχεις καταλαβει τον αλγοριθμο η υλοποιηση μετα δεν ειναι δυσκολη. Το παν ειναι ο αλγοριθμος. Δεν θα γλιτώσει πράξεις απο οτι βλεπω απο τα if else γιατι θελεις να τις ελέγξεις ολες απλα αντι να περνάς σαν ορισματα 29 ακεραιες μεταβλητές περνάς απευθειας έναν πινακα στην δήλωση της συνάρτησης και στον ορισμο της και κατα την κλήση της μονο το ονομα αυτου του πινακα που στην ουσια μετατρέπεται σε δείκτη προς αυτον τον πινακα αλλα μονο μεσα στην συνάρτηση.Οι πινακες δεν ειναι δεικτες κατα τα αλλα και έχουν σημαντικές διαφορές.

Τις πράξεις που ειναι να κάνει το προγραμμα θα τις κάνει για να αλλαξει κάτι στον χρονο θα πρέπει να αλλαξεις κατι στην προσεγγιση δηλαδη στον αλγοριθμο. Ειναι δυσανάγνωστο και μη αποδοτικο να χρησιμοποιησεις 29 ξεχωριστες μεταβλητές κανεις δεν θα το εκανε αυτο γιατι αν ειχες 1000 τι θα εκανες? θα δηλωνες ολο το βραδυ?  :grin:
Για την παραγωγη τυχαιων αριθμων ψάξε για τις συναρτησεις rand και srand.  
 

Επισκέπτης
Απαντω συγκεντρωτικα:

1) Δεν παραγει ψευδοτυχαιους αριθμους το προγραμμα.
2) Ελεγχει αν καποιος συνδυασμος πληρει καποια κριτηρια.
3) Οι 29 παραμετροι ειναι ηδη αρκετες, δε νομιζω να χρειαστουν περισσοτερες, αντε 3-4 ακομη, σε καμμια περιπτωση δε θα γινουν 100!
4) Εχει εσωτερικες ρουτινες που υπολογιζει καθυστερησεις, εμφανισεις κλπ στατιστικα που ολα αυτα ειναι οι 29 παραμετροι.
5) Το αρχειο κληρωσεων το παιρνω απο τον ΟΠΑΠ και το μετατρεπω σε αρχειο κειμενου.
6) Η γλωσσα προγραμματισμου ειναι η C#.
7) Η Embarcadero Delphi εχει καλυτερη αποκριση, αλλα βαριεμαι τωρα να ξαναδιαβαζω Pascal κι αντε να μετατρεπω 6000+ γραμμες.
8) Το προγραμμα εχει πολλους ενθετους βρογχους.
Π.χ. for (i=1; i<=80; i++)
          for .......
         
Αρα βαζεις ενα νημα να τρεχει απο το 1 ως το 40 και το δευτερο απο 41 ως 80 κι εχεις διπυρηνο κ.ο.κ.
 

drclaw

Μέλος
Εγγρ.
18 Ιουλ 2014
Μηνύματα
1.106
Like
9
Πόντοι
16
Για βοήθεια στο φίλο, αν και όπως έχω γράψει παλιότερα αν ακολουθείται πραγματικά τυχαία κατανομή στους αριθμούς του ΚΙΝΟ δε πρόκειται να κερδίσει τίποτα όσους αλγόριθμους και αν βγάλει, ο ίδιος ο ΟΠΑΠ δίνει τα νούμερα του ΚΙΝΟ σε rss feed


Οπότε απλώς κατεβάζεις το xml και τραβάς τα στοιχεία που θες (αρ. κλήρωσης, ημ/νια και αριθμοί)

<td style="border-right: 1px solid;">482420</td>
<td style="border-right: 1px solid;">01/02/2015 12:45</td>
<td>6, 7, 8, 9, 12, 21, 22, 29, 34, 39, 40, 44, 45, 49, 51, 63, 66, 68, 71, 77</td>
 

Επισκέπτης
Ο κώδικας που φτιάχνω (για το ΚΙΝΟ εννοώ) αποτελείται από διάφορες φόρμες, αλλά μία από τις κυριότερες ρουτίνες είναι η επόμενη.
Δίνω ένα κομματάκι της (πετσοκομμένο προφανώς).

Κώδικας:
double modelo(int x1, int x2, int x3, int x4, int x5, int x6, int x7, int x8, int x9, int x10, int x11, int x12, int x13, int x14, int x15,
                 int x16, int x17, int x18, int x19, int x20, int x21, int x22, int x23, int x24, int x25, int x26, int x27, int x28, int x29)
    {
      double timi;

      timi=-386.346+50.5788*x1+285.939*x10+ <340 όροι παραλείφθηκαν> +0.510234*x8*x9;

      double kato_past=51, pano_past=112;        
      double kato_diakosia=201, pano_diakosia=253;
      double kato_ekatonpeninta=146, pano_ekatonpeninta=160;
      double kato_ekato=94, pano_ekato=156;
      double kato_peninta=48, pano_peninta=61;

      
      bool extrapolation=false;
      bool out_of_range=false;
      if (timi>=kato_past && timi<=pano_past)
      {
        if (x1<9 || x1>34)
          extrapolation=true;
        else if (x2<0 || x2>11)
          extrapolation=true;
        else if (x3<6 || x3>13)
          extrapolation=true;
        else if (x4<14 || x4>59)
          extrapolation=true;
        else if (x5<0 || x5>5)
          extrapolation=true;
        else if (x6<5 || x6>10)
          extrapolation=true;
        else if (x7<7 || x7>25)
          extrapolation=true;
        else if (x8<0 || x8>20)
          extrapolation=true;
        else if (x9<8 || x9>22)
          extrapolation=true;
        else if (x10<0 || x10>8)
          extrapolation=true;
        else if (x11<0 || x11>51)
          extrapolation=true;
        else if (x12<11 || x12>56)
          extrapolation=true;
        else if (x13<1 || x13>5)
          extrapolation=true;
        else if (x14<9 || x14>72)
          extrapolation=true;
        else if (x15<4 || x15>52)
          extrapolation=true;
        else if (x16<5 || x16>39)
          extrapolation=true;
        else if (x17<0 || x17>10)
          extrapolation=true;
        else if (x18<6 || x18>16)
          extrapolation=true;
        else if (x19<8 || x19>37)
          extrapolation=true;
        else if (x20<0 || x20>12)
          extrapolation=true;
        else if (x21<6 || x21>17)
          extrapolation=true;
        else if (x22<11 || x22>33)
          extrapolation=true;
        else if (x23<0 || x23>8)
          extrapolation=true;
        else if (x24<5 || x24>19)
          extrapolation=true;
        else if (x25<7 || x25>40)
          extrapolation=true;
        else if (x26<0 || x26>9)
          extrapolation=true;
        else if (x27<6 || x27>14)
          extrapolation=true;
        else if (x28<4 || x28>16)
          extrapolation=true;
        else if (x29<10 || x29>32)
          extrapolation=true;
      }
      else if (timi>=kato_diakosia && timi<=pano_diakosia)
      {
          .......
      }

Επικεντρώστε την προσοχή σας στα τεράστια if then else....


To θέμα είναι ότι κάθε φορά που θα ενημερώνεται η βάση δεδομένων θα πρέπει χειρωνακτικά να βάζω εγώ τις τιμές για να ελέγχεται αν οι τιμές των μεταβλητών (ουκ ολίγες 29) είναι εντός του πεδίου ορισμού?
Και επί 5 φορές (διότι τόσα είναι τα τμήματα της συνάρτησης) πάμε στους 145 ελέγχους.....
Τη βάψαμε άσχημα...
Ευτυχώς όμως που το Mathematica μπορεί να παράγει κώδικα για τη C. Για την ιστορία το Mathematica βασίζεται πάνω στη C.
Έτσι τούτο κομμάτι μου έλυσε τα χέρια!

Κώδικας:
For[stili=1, stili<=29, stili++,
  megistos=-1234;
  elaxistos=9876;
  For[i=1, i<=digmatapast, i++,
        megistos=Max[past[[i,stili]], megistos];
        elaxistos=Min[past[[i,stili]], elaxistos]
     ]
  Print["else if (x",stili,"<",elaxistos," || x",stili,">",megistos, ")  extrapolation=true;"]]
και σε τι θα μας χρησίμευσει?
 

Επισκέπτης
drclaw το ξέρω περί των πόρων του ΟΠΑΠ, αλλά δεν με καίει επί του παρόντος. Κατεβάζω μια φορά το αρχείο κληρώσεων κι αν θέλω να κάνω ανανέωση πηγαίνω στον MG-Analysis.
To πρόβλημα είναι αλλού, ο υπολογισμός των πιθανοτήτων. Άρχισα λίγο σήμερα να γράφω κάτι ψιλά....


και σε τι θα μας χρησίμευσει?
:offtopic: ερώτηση, νομίζω ότι είναι προφανές τι θέλω να κάνω.  :rolleyes:
Και προφανέστερα, θα χρησιμεύσει (καλώς εχόντων των αποτελεσμάτων) σε εμένα. Απλά το θέμα, δείχνει πώς μπορείς να παράγεις ένα μικρό κομμάτι κώδικα για να γλυτώσεις πληκτρολόγηση.

Πάτησε το γαμημένο το κουμπί της απάντησης, μου γαμείς το κωλοκινητό να κάνω σκρολλ ένα τεράστιο ποστ
 

Stories

Νέο!

Stories

Top Bottom