Σελίδα 2 από 4 ΑρχήΑρχή 1234 ΤέλοςΤέλος
Αποτελέσματα 11 μέχρι 20 από 32

Θέμα: Java problems

  1. #11

    Προεπιλογή

    LOL.... Δε πέρασε ούτε μια ώρα απ την τελευταία μου απορία κ τώρα έχω κ άλλη... Βασικά δεν είναι ακριβώς απορία.
    Λοιπόν στο προγραμματάκι που έπρεπε να φτιάξω για να μου δίνει τον μεσαίο αριθμό, θα έπρεπε να κάνω κ μια διάταξη στους αριθμούς.
    Γι αυτή την διάταξη έχει κάποιον κώδικα το βιβλίο μου και είχαμε πει και στο μάθημα μερικές παραλλαγές. Αλλά επειδή δεν μου άρεσε κανένας τρόπος θέλησα να φτιάξω ένα δικό μου. Κ έφτιαξα.

    Code:
    // Θα πρέπει καταρχάς να τα διατάξω. Στην συνέχεια θα του πω απλά να μου τυπώσει το μεσαίο στοιχείο
    
    public class Median
    {
    
       public static void med(double m[])
       {
           int len = m.length;
           double min=m[0];
           double temp;
           
           // Καταρχάς να φτιάξουμε τη συνθήκη για το πιο στοιχείο να επιστρέφει
           int p;
           if (len%2==0)
           {
               p=len/2-1;
            }
            else
            {
                p=(len+1)/2-1;     // Τα -1 τα βάζουμε επειδή το πρώτο στοιχέιο του πίνακα έχει δείκτη 0
            }
           
           
           // Και τώρα στην διάταξη
           
           int j=0;
           while(j<len)
           {
           for (int i=1 ; i<len ; i++)
           {
               if(m[i] < m[i-1])
               {
                   temp = m[i];        // Εδώ γίνεται η μετάθεση
                   m[i] = m[i-1];
                   m[i-1] = temp;
                }
            }
            j++;
        }
    
        for(int k=0 ; k<len ; k++)
        {
            System.out.print(m[k]+" ");
        }
            System.out.println(" ");
            System.out.println("O μεσαίος αριθμός είναι το " + m[p]);
            System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            System.out.println(" ");
        }
    }
    Το προγραμματάκι δουλεύει άψογα. Επειδή όμως είμαι άπειρος στον προγραμματισμό θα ήθελα να μου πείτε αν έχει κάποια ατέλεια το κομμάτι του κώδικα που μου κάνει την διάταξη (κόκκινο).
    Ο λόγος που έχω αμφιβολίες είναι επειδή μου φαίνεται πραγματικά ο πιο απλός κώδικας για να κάνει κάποιος διάταξη και δεν τον έχω δει πουθενά αλλού.

    ΥΓ: Σε άλλες κώδικες που έχω δει, κανείς δεν χρησιμοποιεί while... Υπάρχει πρόβλημα με αυτό?
    Τελευταία επεξεργασία από lunatic. 03-08-2010 στις 17:31.
    Αυτοι που νομιζουν οτι τα ξερουν ολα ενοχλουν εμας που τα ξερουμε.....

  2. #12

    Προεπιλογή

    Εντάξει μου φαίνεται με βάση τη λογική. Δεν είναι και το πιο αποδοτικό αλλά εντάξει θα κάνει τη δουλειά του.

  3. #13

    Προεπιλογή

    Βρε να κανει δουλειά να περάσουμε το μάθημα... Δεν παμε για benchmark...χαχαχαχαχαχα
    Αυτοι που νομιζουν οτι τα ξερουν ολα ενοχλουν εμας που τα ξερουμε.....

  4. #14

    Προεπιλογή

    Ε τότε οκ μην ανησυχείς!

  5. #15

    Προεπιλογή

    EDIT: Άλλαξα λίιιιγο το προγραμματάκι

    Λοιπόν έφτιαξα ένα προγραμματάκι για να ελεγχει αν ο αριθμός που του δίνω είναι πρώτος ή όχι κ να μου το λέει.

    Code:
    public class Prime     // Την εφτιαξα να επιστρέφει και true αν είναι πρωτος και false αν δεν ειναι.
    {
    
      public static boolean isPrime(int num)
      {
        int i;
        boolean a=false;
        
        for (i=2; i < num ;i++ )
        {
          int n = num%i;
          if (n==0)                        
          {
              a=false;
            System.out.println("not a Prime");
            break;
          }
        }
        if (i==num)         
        {
            a=true;
          System.out.println("~*~*~*~*~*~*~*~*~*~*~*~*~*~* Prime number ~*~*~*~*~*~*~*~*~*~*~*~*~*~*");
        }
        
        return a;
      }
    }
    Τώρα θέλω να φτιάξω ένα προγραμματάκι στο οποίο να του δίνω εναν αριθμό κ να μου δείχνει όλους τους πρώτους αριθμούς μέχρι αυτόν.
    Η ερώτηση λοιπον είναι η εξής.
    Μπορώ να χρησιμοποιήσω κάπως στην καινούρια κλάση μου το παραπάνω προγραμματάκι?

    Δεν εννοώ να κάνω copy paste τον κωδικα. Εννοώ να βάζω σαν όρισμα στο καινουριο προγραμματάκι τον αριθμό n κ μετα να γραφω μια συνθηκη για το Prime.isPrime(n) κ να τρεχει.

    Για να το κάνω αυτό όμως δεν πρέπει να επιστρέφει κάτι η κλάση Prime?
    Τελευταία επεξεργασία από lunatic. 05-08-2010 στις 14:18.
    Αυτοι που νομιζουν οτι τα ξερουν ολα ενοχλουν εμας που τα ξερουμε.....

  6. #16

    Προεπιλογή

    Ακριβώς όπως τα λες αν και προτείνω να κάνεις τον κώδικα ως εξής...

    Code:
    public class Prime     // Την εφτιαξα να επιστρέφει και true αν είναι πρωτος και false αν δεν ειναι.
    {
    
      public static boolean isPrime(int num)
      {
        int i;
        boolean a=true;
        
        for (i=2; i < num ;i++ )
        {
          int n = num%i;
          if (n==0)                        
          {
            a=false;
            System.out.println("not a Prime");
            break;
          }
        }
        if (a==true)         
        {
            a=true;
          System.out.println("~*~*~*~*~*~*~*~*~*~*~*~*~*~* Prime number ~*~*~*~*~*~*~*~*~*~*~*~*~*~*");
        }
        
        return a;
      }
    }
    Όπως βλέπεις ξεκινάς με την πεποίθηση ότι ο αριθμός είναι prime number και για αυτό έχεις το a=true. Αν τελικά βρεθεί ότι δεν είναι prime τότε θα γίνει false και παρακάτω θα ελέγξεις με βάση το a τι είναι τελικά ο αριθμός ώστε να εμφανίσεις το κατάλληλο μήνυμα.

    Για να ελέγξεις πάλι prime numbers μέχρι ένα αριθμό θα βάλεις ένα βρόγχο που θα τρέχει από το 2 μέχρι τον αριθμό και θα καλεί την isPrime με όρισμα τον κάθε αριθμό. Θα ελέγχει την επιστροφή της isPrime αν είναι true η false και θα εκτυπώνει ανάλογα για τον κάθε αριθμό. Δηλαδή θα έχεις κάτι σαν αυτό

    Code:
    int x;
    int limit_arithmos = 50;
    for (x= 2; x < limit_arithmos + 1; x++)
    {
       boolean isprime = Prime.isPrime(x);
       if (isprime == true) 
         System.out.println (x + " = Prime Number!");
       else
         System.out.println (x + " = Not a Prime Number");
    }
    limit_arithmos θα είναι αυτός μέχρι τον οποίο θες να ψάξεις. Πάρε τον κώδικα, κάνε τις απαραίτητες διορθώσεις γιατί δεν ξέρω java και πες μας.

  7. #17

    Προεπιλογή

    Code:
    public class PrintPrimeUpTo
    {
    
    
      public static void primeTo(int n)
      {
          for (int i=2 ; i<= n ; i++)
          {
              boolean a = Prime.isPrime(i);
              if(a==true)
              {
                  System.out.println(i);
                }
            }
        }
    }
    Ωραία δουλεύει κομπλέ.

    Στον κωδικα της κλάσης Prime αντί για false που το είχα βάλει εγώ, το έβαλες true. Το να ορίζουμε μια boolean τιμή true είναι κάποιο είδος άτυπης συνθήκης μεταξύ προγραμματιστών ή υπάρχει πρακτικό πρόβλημα με το false?
    Αυτοι που νομιζουν οτι τα ξερουν ολα ενοχλουν εμας που τα ξερουμε.....

  8. #18

    Προεπιλογή

    Κοίτα δεν υπάρχει πρόβλημα γενικά ούτε κάποιο standard. Ότι θέλεις κάνεις. Και ο δικός σου τρόπος δούλευε. Απλά νομίζω ότι με τον τρόπο που έγινε τώρα (με το true) είναι πιο καθαρό και εύκολο προς κατανόηση από τον προγραμματιστή.

  9. #19

    Προεπιλογή

    Quote Αρχικό μήνυμα από lunatic View Post
    LOL.... Δε πέρασε ούτε μια ώρα απ την τελευταία μου απορία κ τώρα έχω κ άλλη... Βασικά δεν είναι ακριβώς απορία.
    Λοιπόν στο προγραμματάκι που έπρεπε να φτιάξω για να μου δίνει τον μεσαίο αριθμό, θα έπρεπε να κάνω κ μια διάταξη στους αριθμούς.
    Γι αυτή την διάταξη έχει κάποιον κώδικα το βιβλίο μου και είχαμε πει και στο μάθημα μερικές παραλλαγές. Αλλά επειδή δεν μου άρεσε κανένας τρόπος θέλησα να φτιάξω ένα δικό μου. Κ έφτιαξα.

    Code:
    // Θα πρέπει καταρχάς να τα διατάξω. Στην συνέχεια θα του πω απλά να μου τυπώσει το μεσαίο στοιχείο
    
    public class Median
    {
    
       public static void med(double m[])
       {
           int len = m.length;
           double min=m[0];
           double temp;
           
           // Καταρχάς να φτιάξουμε τη συνθήκη για το πιο στοιχείο να επιστρέφει
           int p;
           if (len%2==0)
           {
               p=len/2-1;
            }
            else
            {
                p=(len+1)/2-1;     // Τα -1 τα βάζουμε επειδή το πρώτο στοιχέιο του πίνακα έχει δείκτη 0
            }
           
           
           // Και τώρα στην διάταξη
           
           int j=0;
           while(j<len)
           {
           for (int i=1 ; i<len ; i++)
           {
               if(m[i] < m[i-1])
               {
                   temp = m[i];        // Εδώ γίνεται η μετάθεση
                   m[i] = m[i-1];
                   m[i-1] = temp;
                }
            }
            j++;
        }
    
        for(int k=0 ; k<len ; k++)
        {
            System.out.print(m[k]+" ");
        }
            System.out.println(" ");
            System.out.println("O μεσαίος αριθμός είναι το " + m[p]);
            System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            System.out.println(" ");
        }
    }
    Το προγραμματάκι δουλεύει άψογα. Επειδή όμως είμαι άπειρος στον προγραμματισμό θα ήθελα να μου πείτε αν έχει κάποια ατέλεια το κομμάτι του κώδικα που μου κάνει την διάταξη (κόκκινο).
    Ο λόγος που έχω αμφιβολίες είναι επειδή μου φαίνεται πραγματικά ο πιο απλός κώδικας για να κάνει κάποιος διάταξη και δεν τον έχω δει πουθενά αλλού.

    ΥΓ: Σε άλλες κώδικες που έχω δει, κανείς δεν χρησιμοποιεί while... Υπάρχει πρόβλημα με αυτό?
    Δεν ξέρω java, αλλά είδα το κομμάτι της ταξινόμησης και ήθελα να κάνω ένα σχόλιο. Αφενός, όσον αφορά τη while, δεν υπάρχει πρόβλημα, αλλά δεν έχεις και λόγο να αποφύγεις την for. Αυτό που θες να κάνεις δηλαδή είναι χαρακτηριστικό παράδειγμα για χρήση for και γίνεται προφανώς έτσι: for(j=0; j<len; j++).
    Στο ζουμί τώρα, αυτό που έχεις κάνει είναι πρακτικά μια bubblesort η οποία κάνει κάποια βήματα περισσότερα από αυτά που χρειάζεται. Η εσωτερική for αυτό που κάνει είναι να ωθεί το μεγαλύτερο στοιχείο του πίνακα στην τελευταία θέση(j=0). Οπότε χρησιμοποιείται η εξωτερική for(while στην περίπτωσή σου) για να γίνει το ίδιο και να γεμίσει η προτελευταία θέση του πίνακα με το αμέσως μικρότερο στοιχείο(για j=1) και η αμέσως προηγούμενη με το αμέσως μικρότερο στοιχείο(για j=2) κ.ο.κ. Η ουσιαστική διαφορά τώρα με την bubblesort είναι ότι μετά το πρώτο πέρασμα έχει ήδη εξασφαλιστεί η τελευταία θέση του πίνακα οπότε δεν χρειάζεται να γίνει κάποια σύγκριση στο δεύτερο πέρασμα για την τελευταία θέση. Και αντίστοιχα με το δεύτερο πέρασμα έχει εξασφαλιστεί και η προτελευταία θέση και πάει λέγοντας. Η bubblesort λοιπόν αποφεύγει αυτές τις άσκοπες συγκρίσεις ώς εξής:

    for(j=len-1; j>0; j--)
    for(i=0; i<j; i++)
    if(....)
    {....}

    Οπότε χρησιμοποιεί το j για να ορίσει τη θέση του πίνακα που θέλουμε να γεμίσουμε με κάθε πέρασμα μετρώντας αντίστροφα και κόβει την δεύτερη for όταν το i συναντήσει το j και όχι το len. Επίσης αν προσέξεις η εξωτερική for μετράει μια επανάληψη λιγότερη(από len-1 ως 1 και όχι ως 0), αυτό γίνεται γιατί όταν θα έχει τακτοποιηθεί το προτελευταίο στοιχειο m[1] τότε σίγουρα θα είναι τακτοποιημένο και το τελευταίο στοιχείο m[0].

    Καλή συνέχεια στο διάβασμά σου.
    Quote Αρχικό μήνυμα από Manuel Calavera
    Viva la Revolucion!

  10. #20

    Προεπιλογή

    Quote Αρχικό μήνυμα από lunatic View Post
    Στον κωδικα της κλάσης Prime αντί για false που το είχα βάλει εγώ, το έβαλες true. Το να ορίζουμε μια boolean τιμή true είναι κάποιο είδος άτυπης συνθήκης μεταξύ προγραμματιστών ή υπάρχει πρακτικό πρόβλημα με το false?
    Η διαφορά μεταξύ σας πρακτικά είναι ότι στον δικό σου κώδικα δεν χρειαζόταν το a=false; μέσα στην if(n==0) και στου NGF ότι δεν χρειαζόταν το a=true; στην if(a==true). Εσυ ξεκινάς με false και θεωρείς ότι αν τελειώσεις όλες τις επαναλήψεις έχεις πρώτο αριθμό, ενώ ο NGF ξεκινάει με true και θεωρεί πως αν δεν μπει ποτέ στην if(n==0) έχει πρώτο αριθμό. Όπως είπε και ο NGF δεν υπάρχει διαφορά ουσιαστικά, απλά είναι λίγο πιο ευανάγνωστος ο κώδικας του NGF.
    Quote Αρχικό μήνυμα από Manuel Calavera
    Viva la Revolucion!

Σελίδα 2 από 4 ΑρχήΑρχή 1234 ΤέλοςΤέλος

Παρόμοια θέματα

  1. internet problems-SP2
    Από dominator στο φόρουμ Windows
    Απαντήσεις: 3
    Τελευταία δημοσίευση: 07-09-2009, 01:02
  2. iPhone clone 2 SIM Ελληνικά, Java, shake control (56k warning)
    Από kailor στο φόρουμ Laptop, pda, ppc & κινητή τηλεφωνία κ.α.
    Απαντήσεις: 9
    Τελευταία δημοσίευση: 26-02-2009, 19:50
  3. New PC problems...
    Από dhead στο φόρουμ Περιφερειακά-Γενικά-Προβλήματα για τα συστήματα
    Απαντήσεις: 14
    Τελευταία δημοσίευση: 09-11-2008, 00:53

Bookmarks

Δικαιώματα δημοσίευσης

  • Δεν μπορείτε να δημοσιεύσετε νέα θέματα.
  • Δεν μπορείτε να δημοσιεύσετε νέες απαντήσεις.
  • Δεν μπορείτε να δημοσιεύσετε νέα συνημμένα.
  • Δεν μπορείτε να επεξεργαστείτε τις δημοσιεύσεις σας
  •  
  • BB code is Σε λειτουργία
  • Smilies are Σε λειτουργία
  • [IMG] code is Σε λειτουργία
  • [VIDEO] code is Σε λειτουργία
  • Ο κώδικας HTML είναι Εκτός λειτουργίας