rafail1994 Δημοσ. 28 Απριλίου 2013 Μέλος Δημοσ. 28 Απριλίου 2013 Ευχαριστώ αλλά να πω την αλήθεια δεν κατάλαβα πως λειτούργει. Δηλαδή οι αριθμοί που έβαλες είναι κάποιο διάστημα ; ,το + τι σημαίνει (από ότι δοκίμασα μπορώ να βάλω και -,/,* ) ;
albNik Δημοσ. 28 Απριλίου 2013 Δημοσ. 28 Απριλίου 2013 Το υπόλοιπο διαίρεσης (%) με 81 είναι στο διαστημα [0,80] +10 παμε στο [10, 90]
Timonkaipumpa Δημοσ. 28 Απριλίου 2013 Δημοσ. 28 Απριλίου 2013 Για την ακρίβεια... δεν θα είναι ακριβώς τυχαίες οι τιμές.. Για να πάρεις όσο πιο δυνατό τυχαίες τιμές θα μπορούσες να γράψεις κάτι σαν: foo[i][j] = 10 + (( (rand() * 1.0) / (RAND_MAX + 1.0) )* 80);
rafail1994 Δημοσ. 28 Απριλίου 2013 Μέλος Δημοσ. 28 Απριλίου 2013 Μάλιστα .... και από θέμα προγραμματισμού νομίζω αυτός είναι και ο ποιο κάλος τρόπος
albNik Δημοσ. 28 Απριλίου 2013 Δημοσ. 28 Απριλίου 2013 Δεν κερδίζεις τίποτα με το να μετατρέψεις το [0, RAND_MAX] σε double [0.0 , 1.0]
Timonkaipumpa Δημοσ. 28 Απριλίου 2013 Δημοσ. 28 Απριλίου 2013 Δεν κερδίζεις τίποτα με το να μετατρέψεις το [0, RAND_MAX] σε double [0.0 , 1.0] Famous last words.... Μπορεί στις περισσότερες περιπτώσεις το κέρδος να μην φαίνεται, αλλά είναι πιο "τυχαίο" (από άποψη κατανομής) το αποτέλεσμα έτσι.
albNik Δημοσ. 28 Απριλίου 2013 Δημοσ. 28 Απριλίου 2013 Παιρνουμε και οι δυο ενα rand(), εγώ του κάνω την πράξη X, εσυ την Υ. (και οι δύο πράξεις είναι ντετερμινιστικες ), Γιατι το δικό σου αποτέλεσμα να είναι πιο "τυχαίο" ? 1
Timonkaipumpa Δημοσ. 28 Απριλίου 2013 Δημοσ. 28 Απριλίου 2013 Don't re-invent... re-use. Διάβασε εδώ, τα λέει ωραία.
albNik Δημοσ. 28 Απριλίου 2013 Δημοσ. 28 Απριλίου 2013 (επεξεργασμένο) Έκατσα και υπολόγισα (το pc δλδ, όχι εγώ ) τους 2 τύπους ( % και double) για όλα τα rand [0, int.MAX] για να μετρήσω τις συχνότητες των τιμών [10, 90]. Αργεί κάπου 15-20 sec (μετράει 0 εως 2^31) static void Main() { int[] countX = new int[90]; int[] countY = new int[90]; for(int rand = 0; rand < int.MaxValue; rand++) { int x = rand % 80 + 10; // X method countX[x]++; int y = (int)(10 + ((rand * 1.0 / (int.MaxValue + 1.0)) * 80)); // Y method countY[y]++; } for(int i = 10; i < 90; i++) Console.WriteLine("Freq " + i + " : " + countX[i] + " " + countY[i]); } Η συχνότητα το εμφανίσεων είναι 26843545 η 26843546 σε όλους (int.Max /80 δλδ) Επεξ/σία 29 Απριλίου 2013 από albNik
Timonkaipumpa Δημοσ. 28 Απριλίου 2013 Δημοσ. 28 Απριλίου 2013 Επειδή είναι αρκετό υλικό που θα πρέπει κανείς να αναλύσει, εάν σε ενδιαφέρει διάβασε το link που σου έδωσα. Εάν δεν, no worries. Cheers.
albNik Δημοσ. 28 Απριλίου 2013 Δημοσ. 28 Απριλίου 2013 Οκ καταλαβα , επειδη το MAX δεν διαιρείται απο το 80 ,εχει υπόλοιπο 47 , τότε με τη μέθοδό μου οι αριθμοί 10 μέχρι 10+ 47 έχουν συχνοτητα κατα ενα μεγαλύτερη απο τους αλλους [58 μεχρι 89]. Ενώ με το double είναι πιο ανακατεμένοι αυτοί μου έχουν συχνότητα +1. Η διαφορα είναι ποιους αριθμους επιλέγει η καθε μεθοδος να βάζει +1 συχνότητα. Δλδ με τι δικιά μου έχουν λιιιιιιγο μεγαλύτερη πιθανότητα η αριθμοί [10, 57] ενώ με τι δικιά σου οι αριθμοί 10, 11, 13 ...20, 23, .... Αν βάλω το rand =int.MAX τοτε και στο 89 ειναι ΟΚ η μεθοδός σου.
rafail1994 Δημοσ. 1 Μαΐου 2013 Μέλος Δημοσ. 1 Μαΐου 2013 Πρέπει να φτιάξω δυο συναρτήσεις όπου και οι δυο θα δέχονται συντεταγμένες (x,y) με τύπο float και θα επιστέφουν μετά από υπολογισμούς πάλι συντεταγμένες (x,y) η ερώτηση είναι εγώ τι τύπο συνάρτησης να χρησιμοποιήσω; Στην εκφώνηση της άσκηση λέει για void εγώ ξέρω ότι την void την χρησιμοποιούμε όταν η συνάρτηση δεν επιστέφει κάποια τιμή ,εγώ τώρα τι να βάλω ;
παπι Δημοσ. 1 Μαΐου 2013 Δημοσ. 1 Μαΐου 2013 google pass by pointer tip: Καλο ειναι να φτιαξεις μια δομη Point
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα