Java Programming [ΛΥΝΟΥΜΕ ΠΡΟΒΛΗΜΑΤΑ]

...ασύγχρονα μαθήματα από τους guru της κοινότητας

Συντονιστής: the_eye

Re: Java Programming [ΛΥΝΟΥΜΕ ΠΡΟΒΛΗΜΑΤΑ]

Δημοσίευσηαπό idomeneas » 02 Ιούλ 2010, 13:16

Πρακτικά για μεγάλα παραγοντικά, χρησιμοποιείται ο τύπος του Stirling. Από όσο θυμάμαι εγώ είχα αντιμετωπίσει ένα πρόβλημα με ένα πρόγραμμα CAD, σε Fortran, που έπρεπε να υπολογιστούν πολυώνυμα Bernstein για τις καμπύλες Bezier μέσω knot points. Αν έβαζες πάνω από κάποια σημεία για να ορίσεις την καμπύλη, τότε με integer δεν μπορούσες να βάλεις πάνω από 13 σημεία γιατί υπολόγιζες το 13 ! και γινόταν ανακύκλωση. Την έκανα real(8) για να αυξήσω κάπως το μέγεθος αλλά ως γνωστόν πάλι θα έβγαιναν "παππάδες" μετά από ένα όριο.
Λειτουργικό ⇛ Ubuntu 10.04 64 bit σε HP Pavilion dv7-3110ev
Προδιαγραφές φορητού ⇛ Core i3 2.13 GHz │ 3 GB │ nVidia G105M │ Broadcom 4357 │ Bluetooth ? │ Realtek HD Audio │ 17.3"
Λειτουργικό ⇛ Ubuntu 10.04 32 bit/Win XP σε desktop
Προδιαγραφές desktop ⇛ Pentium 4 3 GHz │ 2 GB DDR │ Sapphire ATi Radeon HD3450 512MB AGP │ Μητρική: Asus P5V800-MX
idomeneas
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 738
Εγγραφή: 09 Απρ 2010, 15:47
Εκτύπωση

Re: Java Programming [ΛΥΝΟΥΜΕ ΠΡΟΒΛΗΜΑΤΑ]

Δημοσίευσηαπό lostinmyworld » 02 Ιούλ 2010, 14:13

Αυτόν τον τύπο εννοείς;
http://el.wikipedia.org/wiki/%CE%A4%CF%8D%CF%80%CE%BF%CF%82_Stirling

Ναι, αλλά πώς υλοποιείται αυτός σε Java;; :? :problem:
http://lostinmyworld222.wordpress.com
http://lostinmyworld.e-science.gr/
Spoiler: show
Γνώσεις ⇛ Linux: Χαμηλό ┃ Προγραμματισμός: Ναι ┃C, Java (όσα μπορείς να μάθεις στη σχολή)┃Αγγλικά: Δεν μου χρειάζονται...
Ubuntu 10.04 σε Acer TravelMate 2492WLMi
Προδιαγραφές ⇛ Επεξεργαστής: Intel Celeron M 420 (1.60 GHz, 533 MHz FSB, 1 MB L2 cache) │
Μνήμη: 512 MB DDR2 │ Κάρτα Γραφικών: Intel Graphics Media Accelerator 950 │ Κάρτα Ασύρματη │ Κάρτα Ήχου │ Οθόνη & Ανάλυση: 15.4" WXGA wide TFT LCD
lostinmyworld
babeTUX
babeTUX
 
Δημοσιεύσεις: 107
Εγγραφή: 21 Ιούλ 2008, 14:20
Εκτύπωση

Re: Java Programming [ΛΥΝΟΥΜΕ ΠΡΟΒΛΗΜΑΤΑ]

Δημοσίευσηαπό sokoban4ever » 02 Ιούλ 2010, 16:48

lostinmyworld έγραψε:Αυτόν τον τύπο εννοείς;
http://el.wikipedia.org/wiki/%CE%A4%CF%8D%CF%80%CE%BF%CF%82_Stirling

Ναι, αλλά πώς υλοποιείται αυτός σε Java;; :? :problem:

@Dimitris
Σαφέστατα ,επίσης όλες οι ακολουθίες που ορίζουν τα στοιχεία τους με βάση προηγούμενα (αναδρομικά), έχουν την ίδια υλοποιήση :thumbup: ;)

@lostinmyworld
σε python είναι έτσι ( πιστεύω γίνεται και καλύτερα )
Κώδικας: Επιλογή όλων
import math
def StirlingFactorial(n):
     return math.sqrt(2 * math.pi * n)*(n/math.e)**n


κάπως έτσι θα είναι και στην java... μάλλον...
Κώδικας: Επιλογή όλων
public class Stirling {

    public static double Factorial (int n) {
        return Math.sqrt(2 * Math.pi * n) * Math.pow( (n/Math.e),n)
    }
}


πηγή
http://en.wikipedia.org/wiki/Stirling's_approximation

Υ.Σ
Δοκιμάστε τον αλγόριθμο του Dijkstra στην java (δεν έχετε περιέργια) ;
:)
Θέλουμε και μπορούμε να έχουμε μια καλύτερη ζωή και όσο θα ζούμε θα προσπαθούμε να την αποκτήσουμε ακόμα και αν πεθάνουμε προσπαθώντας, και αν κάποια στιγμή λιγίσουμε έχουμε το επίπεδο να πούμε κουράστηκα λίγο να ,να ξαποστάσουμε , ώστε να συνεχίσουμε πάλι δυνατοί ξανά.

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση

Re: Java Programming [ΛΥΝΟΥΜΕ ΠΡΟΒΛΗΜΑΤΑ]

Δημοσίευσηαπό idomeneas » 02 Ιούλ 2010, 17:29

Υπάρχει και μια τροποποίηση όσον αφορά τον τύπο αυτό. Πολλαπλασιάζεις με (1 + 1/12n) και δίνει πιο καλή σύγκλιση στην τιμή. (Μειώνεται πιο γρήγορα το σφάλμα)
Λειτουργικό ⇛ Ubuntu 10.04 64 bit σε HP Pavilion dv7-3110ev
Προδιαγραφές φορητού ⇛ Core i3 2.13 GHz │ 3 GB │ nVidia G105M │ Broadcom 4357 │ Bluetooth ? │ Realtek HD Audio │ 17.3"
Λειτουργικό ⇛ Ubuntu 10.04 32 bit/Win XP σε desktop
Προδιαγραφές desktop ⇛ Pentium 4 3 GHz │ 2 GB DDR │ Sapphire ATi Radeon HD3450 512MB AGP │ Μητρική: Asus P5V800-MX
idomeneas
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 738
Εγγραφή: 09 Απρ 2010, 15:47
Εκτύπωση

Re: Java Programming [ΛΥΝΟΥΜΕ ΠΡΟΒΛΗΜΑΤΑ]

Δημοσίευσηαπό Dimitris » 02 Ιούλ 2010, 19:30

idomeneas έγραψε:Από όσο θυμάμαι εγώ είχα αντιμετωπίσει ένα πρόβλημα με ένα πρόγραμμα CAD, σε Fortran, που έπρεπε να υπολογιστούν πολυώνυμα Bernstein για τις καμπύλες Bezier μέσω knot points. Αν έβαζες πάνω από κάποια σημεία για να ορίσεις την καμπύλη, τότε με integer δεν μπορούσες να βάλεις πάνω από 13 σημεία γιατί υπολόγιζες το 13 ! και γινόταν ανακύκλωση. Την έκανα real(8) για να αυξήσω κάπως το μέγεθος αλλά ως γνωστόν πάλι θα έβγαιναν "παππάδες" μετά από ένα όριο.


Ιδομενέα, στην περιπτωση αυτή δε χρησιμοποιείς τις Bezier στη Bernstein form, οπου χρειάζεσαι τους δυωνυμικούς συντελεστές και κατ' επεκταση το παραγοντικό, αλλά τον αλγοριθμο de Casteljau o οποίος είναι ΠΟΛΥ πιο αποτελεσματικός (βλ. πχ. Curves and surfaces for CAGD, G. Farin). Συγγνώμη για το offtopic, αλλά το θέμα πήγε λιγάκι προς αριθμητική αναλύση που έχει άμεση σχέση με προγραμματισμο.

ΥΓ. Αν όντως χρειάζεσαι τους δυωνυμικούς συντελεστές τότε χρησιμοποιείς τον αριθμητικό υπολογισμό της συνάρτηση Γ, μοιαζει με το τύπο του Stirling αλλά περιέχει και μια επιπλέον διορθωση, βλ. για παράδειγμα Numerical Recipes in Fortran κεφ. 6.1.
Άβαταρ μέλους
Dimitris
saintTUX
saintTUX
 
Δημοσιεύσεις: 1357
Εγγραφή: 13 Μάιος 2008, 13:57
Τοποθεσία: Θεσσαλονίκη
Εκτύπωση

Re: Java Programming [ΛΥΝΟΥΜΕ ΠΡΟΒΛΗΜΑΤΑ]

Δημοσίευσηαπό M.Jackson » 13 Ιούλ 2010, 11:40

κάποιο δωρεάν βιβλίο (pdf) για δημιουργία γραφικού περιβάλλοντος αλλά με κώδικά όχι με κάποιο πρόγραμμα. παίζει τίποτα;
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

Re: Java Programming [ΛΥΝΟΥΜΕ ΠΡΟΒΛΗΜΑΤΑ]

Δημοσίευσηαπό sokoban4ever » 13 Ιούλ 2010, 14:05

Off topic:
M.Jackson έγραψε:κάποιο δωρεάν βιβλίο (pdf) για δημιουργία γραφικού περιβάλλοντος αλλά με κώδικά όχι με κάποιο πρόγραμμα. παίζει τίποτα;

To internet είναι γεμάτο...
ορίστε να σε βοηθήσω...
http://lmgtfy.com/?q=free+book+gui+java
:P
Θέλουμε και μπορούμε να έχουμε μια καλύτερη ζωή και όσο θα ζούμε θα προσπαθούμε να την αποκτήσουμε ακόμα και αν πεθάνουμε προσπαθώντας, και αν κάποια στιγμή λιγίσουμε έχουμε το επίπεδο να πούμε κουράστηκα λίγο να ,να ξαποστάσουμε , ώστε να συνεχίσουμε πάλι δυνατοί ξανά.

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση

Re: Java Programming [ΛΥΝΟΥΜΕ ΠΡΟΒΛΗΜΑΤΑ]

Δημοσίευσηαπό sokoban4ever » 16 Ιούλ 2010, 21:34

Off topic:
επίσης για το παραγοντικό ,ενδιαφέρον :problem: έχει ότι και η iterative version κάνει τον ίδιο σχεδόν χρόνο
Spoiler: show
Κώδικας: Επιλογή όλων
def FAC(N):
        x=1
        for i in xrange(1,N+1):
                x = x * i
        return x

def FAC2(N):

        i = 1
        x = 1
        while  i <= N :
                x *= i
                i +=1
        return x
Θέλουμε και μπορούμε να έχουμε μια καλύτερη ζωή και όσο θα ζούμε θα προσπαθούμε να την αποκτήσουμε ακόμα και αν πεθάνουμε προσπαθώντας, και αν κάποια στιγμή λιγίσουμε έχουμε το επίπεδο να πούμε κουράστηκα λίγο να ,να ξαποστάσουμε , ώστε να συνεχίσουμε πάλι δυνατοί ξανά.

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση

Re: Java Programming [ΛΥΝΟΥΜΕ ΠΡΟΒΛΗΜΑΤΑ]

Δημοσίευσηαπό M.Jackson » 21 Αύγ 2010, 11:55

Ενα απλο παιχνιδακι στην java

Κώδικας: Επιλογή όλων
import javax.swing.JOptionPane;
import java.util.Random;

public class pro{
public static void main (String args []) throws Exception{

Random rnd = new Random();

int x=0;
String get;
int geted;

do{
for(int i=1; i<=10; i++){
x=rnd.nextInt(10);}

get = JOptionPane.showInputDialog("Dose ton arithmo sou");

geted = Integer.parseInt(get);

if(geted == x){
JOptionPane.showMessageDialog(null,"Well Done!");
}else{
JOptionPane.showMessageDialog(null,"Game Over! o arithmos sou ine: " + geted + " kai o randomize arithmos ine: " + x);}
}while(geted!=x);
}}
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

Re: Java Programming [ΛΥΝΟΥΜΕ ΠΡΟΒΛΗΜΑΤΑ]

Δημοσίευσηαπό M.Jackson » 23 Αύγ 2010, 22:08

Ο τελκος βαθμος ενος μαθητη σε ενα μαθημα υπολογιζεται με βαση την προφορικη και γραπτη του βαθμολογια. Η διαδικασια που ακολουθειται είναι: Αν η διαφορά των δυο βαθμων ειναι μεγαλυτερη απο 3 μοναδες, τοτε ο προφορικος βαθμος αυξανετε ή μειωνεται ωστε η διαφορα να παει στην μια μοναδα. Διαφορετικά ο προφορικος βαθμος μενει αμεταβλητος. Ο τελικος βαθμος ειναι ο μεσος ορος των δυο βαθμων. Να φτιαξετε προγραμμα το οποιο να διαβασζει δυο αριθμους απο το πληκτρολογιο.
Α) Να υπολογιζει και να τυπωνει στην οθονη τον τελικο βαθμο με βαση τον παραπανω αλγοριθμο
Β) Αν ο τελικοσ βαθμος ειναι μεγαλυτερος ή ισος του 10, τοτε να εμφανιζει το μηνυμα ΠΡΟΑΓΕΤΑΙ διαφορετικα ΣΤΑΣΙΜΟΣ.

Κώδικας: Επιλογή όλων
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class pro extends JFrame implements ActionListener {

   JButton b;
   String in1;
   String in2;
   int pr,gr,d;
   int max=-999;
   int min=999;
   double mo;

   public pro(){

      this.setSize(150,80);
      this.setTitle("A Java Program");
      this.setVisible(true);
      this.setLocationRelativeTo(null);
      this.setLayout(new FlowLayout());

      Container content = getContentPane();

      b = new JButton("Start");
      b.setActionCommand("Start");

      b.addActionListener(this);

      content.add(b, BorderLayout.NORTH);

      }

   public void actionPerformed(ActionEvent e){

      if(e.getActionCommand().equals("Start")){

         in1 = JOptionPane.showInputDialog("Dose proforiko vathmo");
         in2 = JOptionPane.showInputDialog("Dose grapto vathmo");

         pr = Integer.parseInt(in1);
         gr = Integer.parseInt(in2);

         if(pr>max){
            max=pr;
            min=gr;
         }else{
            min=pr;
            max=gr;}

            d=max-min;

            if(d>3){
               if(max==pr){
                  pr=pr-(d--);
                  }else{
                     if(min==pr){
                        pr=pr-(d++);}
                        }
               }

            mo = (pr+gr)/2;

            JOptionPane.showMessageDialog(null, "Result: " + mo);

            if(mo>=10){
               JOptionPane.showMessageDialog(null, "PROAGETE");
                  }else{
                  JOptionPane.showMessageDialog(null, "STASIMOS");}

         }

      }

    public static void main(String[] args) {
      new pro();
    }
}
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Το Σχολείο του Φόρουμ - Ασύγχρονα Μαθήματα