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

Εργασία στην C


rafail1994

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

  • Απαντ. 130
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

Δημοσιευμένες Εικόνες

Ευχαριστώ αλλά να πω την αλήθεια δεν κατάλαβα πως λειτούργει. Δηλαδή οι αριθμοί που έβαλες είναι κάποιο διάστημα ; ,το + τι σημαίνει (από ότι δοκίμασα μπορώ να βάλω και -,/,* ) ;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Για την ακρίβεια... δεν θα είναι ακριβώς τυχαίες οι τιμές..

 

Για να πάρεις όσο πιο δυνατό τυχαίες τιμές θα μπορούσες να γράψεις κάτι σαν:

 

 

foo[i][j] = 10 + (( (rand() * 1.0) / (RAND_MAX + 1.0) )* 80); 
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν κερδίζεις τίποτα με το να μετατρέψεις το [0, RAND_MAX]  σε double [0.0 , 1.0]

 

Famous last words....

 

 

 

Μπορεί στις περισσότερες περιπτώσεις το κέρδος να μην φαίνεται, αλλά είναι πιο "τυχαίο" (από άποψη κατανομής) το αποτέλεσμα έτσι. 

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Παιρνουμε και οι δυο ενα rand(), εγώ του κάνω την πράξη X, εσυ την Υ. (και οι δύο πράξεις είναι ντετερμινιστικες ),

Γιατι το δικό σου αποτέλεσμα να είναι πιο "τυχαίο" ?

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Έκατσα και υπολόγισα (το 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 δλδ)

Επεξ/σία από albNik
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Οκ καταλαβα , επειδη το MAX δεν διαιρείται απο το 80 ,εχει υπόλοιπο 47 , τότε με τη μέθοδό μου οι αριθμοί 10 μέχρι 10+ 47 έχουν συχνοτητα κατα ενα μεγαλύτερη απο τους αλλους  [58 μεχρι 89]. 

Ενώ με το double είναι πιο ανακατεμένοι αυτοί μου έχουν συχνότητα +1.

 

Η διαφορα είναι ποιους αριθμους επιλέγει η καθε μεθοδος να βάζει +1 συχνότητα.

Δλδ με τι δικιά μου έχουν λιιιιιιγο μεγαλύτερη πιθανότητα η αριθμοί [10, 57] ενώ με τι δικιά σου οι αριθμοί 10, 11, 13 ...20, 23, ....

 

 

 

 

Αν βάλω το rand =int.MAX τοτε και στο 89 ειναι ΟΚ η μεθοδός σου.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Πρέπει να φτιάξω δυο συναρτήσεις όπου και οι δυο θα δέχονται συντεταγμένες (x,y) με τύπο float και θα επιστέφουν μετά από υπολογισμούς πάλι συντεταγμένες (x,y) η ερώτηση είναι εγώ τι τύπο συνάρτησης να χρησιμοποιήσω;

 

Στην εκφώνηση της άσκηση λέει για void εγώ ξέρω ότι την void την χρησιμοποιούμε όταν η συνάρτηση δεν επιστέφει κάποια τιμή ,εγώ τώρα τι να βάλω ;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα

  • Δημιουργία νέου...