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

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

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

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

Δημοσίευσηαπό M.Jackson » 20 Ιουν 2010, 15:12

Να φτιάξετε ένα πρόγραμμα το οποίο αρχικά θα ζητάει από το χρήστη έναν ακέραιο
n . Στη συνέχεια ο χρήστης θα εισάγει ακέραιους αριθμούς από το
πληκτρολόγιο και το πρόγραμμα θα βρίσκει τον μέγιστο και τον ελάχιστο από αυτούς
τους αριθμούς και θα τους εκτυπώνει (τον μέγιστο και τον ελάχιστο) στην οθόνη.


Κώδικας: Επιλογή όλων
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ex1{
public static void main (String args []) throws Exception{
BufferedReader ubuntu = new BufferedReader (new InputStreamReader(System.in));
System.out.println("Δώσε αριθμό για n");
String in=ubuntu.readLine();
int n=Integer.parseInt(in);
int max=-10;
int min=10;
for(int i=1; i<=n; i++){
System.out.println("Δώσε αριθμό για x");
String in2=ubuntu.readLine();
int x=Integer.parseInt(in2);
if(x<min){
min=x;}
if(x>max){
max=x;}
}
System.out.println("Ο μέγιστος αριθμός είναι ο " + max + " και ο μέγιστος αριθμός είναι ο " + min);
}
}
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

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

Δημοσίευσηαπό M.Jackson » 20 Ιουν 2010, 15:42

Να γράψετε ένα πρόγραμμα σε Java που θα ζητάει από το χρήστη το έτος που γεννήθηκε, θα υπολογίζει τη σημερινή ηλικία του και θα την εμφανίζει στην οθόνη με κατάλληλο μήνυμα.
Κώδικας: Επιλογή όλων
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ex2{
public static void main (String args []) throws Exception{
BufferedReader ubuntu = new BufferedReader ( new InputStreamReader (System.in));
System.out.println("Δώσε το έτος γένησης σου");
String in=ubuntu.readLine();
System.out.println("Δωσε το έτος που έχουμε σήμερα");
String in2=ubuntu.readLine();
int x=Integer.parseInt(in);
int y=Integer.parseInt(in2);
int e=y-x;
System.out.println("Είσαι " + e + " χρονών");
}
}
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

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

Δημοσίευσηαπό M.Jackson » 20 Ιουν 2010, 16:04

Να γράψετε ένα πρόγραμμα σε Java που θα ζητάει από το χρήστη την ποσότητα (κιλά ) ενός προϊόντος που αγόρασε, την τιμή ανά μονάδα ( τιμή ανά κιλό), θα υπολογίζει το ποσό πληρωμής και θα το εμφανίζει στην οθόνη με κατάλληλο μήνυμα.
Κώδικας: Επιλογή όλων
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ex3{
public static void main (String args []) throws Exception {
BufferedReader ubuntu = new BufferedReader (new InputStreamReader (System.in));
System.out.print("Δώσε κιλά προϊόντος: ");
String in=ubuntu.readLine();
int x=Integer.parseInt(in);
System.out.print("Δώσε τιμή ανά κιλό: ");
String in2=ubuntu.readLine();
int y=Integer.parseInt(in2);
int e=x*y;
System.out.println("Το ποσό που πρέπει να πληρώσης είναι: " + e);
}
}
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

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

Δημοσίευσηαπό M.Jackson » 20 Ιουν 2010, 18:34

Να γράψετε ένα πρόγραμμα σε Java που θα υπολογίζει το εμβαδόν ενός τριγώνου.
Κώδικας: Επιλογή όλων
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ex4{
public static void main (String args []) throws Exception{
BufferedReader ubuntu = new BufferedReader (new InputStreamReader(System.in));
System.out.print("Δώσε βάση: ");
String in=ubuntu.readLine();
double vasi=Double.parseDouble(in);
System.out.print("Δώσε ύψος: ");
String in1=ubuntu.readLine();
double ipsos=Double.parseDouble(in1);
double emvado=(vasi*ipsos)/2;
System.out.println("To εμβαδό του τριγώνου είναι " + emvado);
}
}
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

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

Δημοσίευσηαπό xaris2335 » 20 Ιουν 2010, 19:19

H java είναι μια πολύ δύσκολη και δυνατή γλώσσα με μέλλον λαμπρό μπροστά της.
Μπορεί να χρησιμοποιηθεί και για προγραμματισμό ρομποτικής ιδού και η απόδειξη
Spoiler: show
Γνώσεις ⇛ Linux: | Προγραμματισμός:
Αγγλικά: καλά
Λειτουργικό ⇛ Ubuntu 10.04 LTS (32bit) ΕΛ σε Intel core 2 quad core Q9300
Προδιαγραφές ⇛INTEL CORE 2 QUAD CORE Q9300 2.50 GHZ LGA|WESTERN DIGITAL 750GB SATA2|ASUS 2GB DDR3 1333MHZ|GIGABYTE|ASUS EN9800GTX/HTDP 512MB PCI-E|Quickcam logitech E2500|Optiarc DVD RW AD-7173A

Κανάλι για Λίνουξ και όχι μόνο :lol: Διανομές Λίνουξ :lol:Συμβατότητα περιφ/κών με ubuntu :lol:
Άβαταρ μέλους
xaris2335
powerTUX
powerTUX
 
Δημοσιεύσεις: 1962
Εγγραφή: 10 Οκτ 2008, 16:16
Εκτύπωση

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

Δημοσίευσηαπό M.Jackson » 20 Ιουν 2010, 19:35

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

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

Δημοσίευσηαπό M.Jackson » 21 Ιουν 2010, 22:45

Να γράψετε ένα πρόγραμμα στην java το οποίο θα ορίζει 3 άκαιρες σταθερές τιμές (7,77,777) και θα τυπώνει το άθροισμα, διαφορά και το γινόμενο τους.

Κώδικας: Επιλογή όλων
public class pro1{
public static void main (String args []){
final int x1=7;
final int x2=77;
final int x3=777;
System.out.println("");
System.out.println("<<<  R_E_S_U_L_T  >>>");
System.out.println("");
System.out.println("Sum: " + (x1+x2+x3));
System.out.println("Diafora: " + (x1-x2-x3));
System.out.println("Ginomeno: " + (x1*x2*x3));
}
}


=======================
Να γράψετε ένα πρόγραμμα στην java το οποίο θα ζητά από τον χρήστη να δώσει μια συμβολοσειρά και μετά αυτό να τυπώνει το μήκος της συμβολοσειράς.

Κώδικας: Επιλογή όλων
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class pro2{
public static void main (String args []) throws Exception{
BufferedReader input = new BufferedReader (new InputStreamReader(System.in));
System.out.println("Insert your text");
System.out.print(">> ");
String in=input.readLine();
System.out.println("");
System.out.println("<<< [ RESULT ] >>>");
System.out.println("");
System.out.println("The length of your text is: " + in.length());
}
}


=========================
Να γράψετε ένα πρόγραμμα στην java το οποίο θα διαβάζει 5 ονόματα και θα εμφανίζει δίπλα από το όνομα το μήκος (length).

Κώδικας: Επιλογή όλων
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class pro3{
public static void main (String args []) throws Exception{
BufferedReader win = new BufferedReader (new InputStreamReader(System.in));
String x;
for(int i=1; i<=5; i++){
System.out.println("Using your keyboard insert your text.");
System.out.print(">> ");
x=win.readLine();
System.out.println(x + " is " + x.length() + " length.");
System.out.println("");}

}
}


===================
Να γράψετε ένα πρόγραμμα στην java το οποίο θα ζητά 10 ακαίρεους αριθμούς και θα αθροίζει αριθμούς που διαιρούνται ακριβός με το 3.

Κώδικας: Επιλογή όλων
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class pro4{
public static void main (String args []) throws Exception{
BufferedReader win = new BufferedReader (new InputStreamReader(System.in));
int sum=0;
String in;
for(int i=1; i<=10; i++){
System.out.println("Insert Number.");
System.out.print(">> ");
in=win.readLine();
int x=Integer.parseInt(in);
if (x%3==0){
sum=sum+x;}
}

System.out.println("Result: "+sum);
}
}


====================
Να γράψετε ένα πρόγραμμα στην java το οποίο θα διαβάζει 5 ακαίρεους αριθμούς να τους καταχωρεί σε μονοδιάστατο πίνακα 5 θέσεων και να βρίσκει και να τυπώνει τα εξής:
α)το άθροισμα.
β)τον max.
γ)τον min.
δ)τον μέσο όρο.


Κώδικας: Επιλογή όλων
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class pro5{
public static void main (String args []) throws Exception{
BufferedReader win = new BufferedReader(new InputStreamReader(System.in));
int a[] = new int [5];
String in;
int x;
int sum=0;
for(int i=0; i<=4; i++){
System.out.println("Insert your number using keyboard.");
System.out.print(">> ");
in=win.readLine();
x=Integer.parseInt(in);
a[i]=x;
sum=sum+a[i];}

int max=a[0];
int min=a[0];

for(int i=1; i<=4; i++){
if (a[i]>max){
max=a[i];}
if (a[i]<min){
min=a[i];}
}

double mo=sum/5;

System.out.println("");
System.out.println("=R=E=S=U=L=T=");
System.out.println("");
System.out.println("Sum: "+sum);
System.out.println("Max: "+ max );
System.out.println("Min: "+ min);
System.out.println("Average: "+mo );
}
}
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

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

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

Αυτό υπολογίζει την ακολουθία fibonacci κι όχι το παραγοντικό.. :geek:
Αν προσέξεις θα δεις ότι κάνει πρόσθεση κι όχι πολλαπλασιασμό...Πώς όμως μπορείς να υπολογίσεις πραγματικά (κι όχι εσφαλμένα) παραγοντικό μεγάλου αριθμού; :?
Ξέρω να βγάλω πρόγραμμα για παραγοντικό αλλά αν ισχύει μόνο για μικρούς αριθμούς.... :?: :problem: :crazy:


Dimitris έγραψε:Χα, σε έπιασα απρόσεκτο Ιδομενέα. Η λέξη κλειδί είναι metaprogramming και decorators (σε python ξέρω πώς γίνεται αλλά γίνεται και σε άλλες γλώσσες) Δες αυτό:


Κώδικας: Επιλογή όλων
import sys

sys.setrecursionlimit(10000000)

class Memo(object):
    __cache={}
    def __init__(self, func):
        self.__func = func
    def __call__(self,*args):
        try:
            return self.__cache[args]
        except KeyError:
            value = self.__func(*args)
            Memo.__cache[args] = value
            return value

@Memo
def fibonacci(n):
    if n in (0,1): return n
    return fibonacci(n-1)  + fibonacci(n-2)

print fibonacci(2800)
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, 05:51

Dimitris έγραψε:Γράψε εσύ τώρα σε java ένα πρόγραμμα που να υπολογιζει το 2800 παραγοντικό (όχι προσεγγιστικά) σε 1-2 δευτερόλεπτα.

τελικά το fibonacci ζητάς ή το factorial ;
@lostinmyworld
Τι εννοείς ; σου βγαίνουν εσφαλμένα αποτελέσματα; μήπως χρησιμοποιείς λάθος data type (και δεν χωράνε) :problem: ;
Σημειώση :δεν ξέρω java προς το παρών πέρα από κάτι λίγα...

Για την ακολουθία fibonacci σε python


πάντως σε python με memoization όντως μπορείς να πετύχεις μεγαλύτερη ταχύτητα :thumbup: ;)
πχ
Κώδικας: Επιλογή όλων
memo = {0:0, 1:1}
def fib(n):
    if not n in memo:
        memo[n] = fib(n-1) + fib(n-2)
    return memo[n]

Ο Dijkstra έχει κάνει ένα πολύ γρήγορο αλγόριθμο (υπάρχουν και γρηγορότεροι γιατί αυτός έχει το overhead από τις πολαπλές συναρτήσεις αλλά
παρά τ' αυτα
http://en.wikipedia.org/wiki/Fibonacci_ ... kstra78-15
σε python είναι κάπως έτσι
Κώδικας: Επιλογή όλων
fibs = {0: 0, 1: 1}
def fib(n):
    if n in fibs: return fibs[n]
    if n % 2 == 0:
        fibs[n] = ((2 * fib((n / 2) - 1)) + fib(n / 2)) * fib(n / 2)
        return fibs[n]
    else:
        fibs[n] = (fib((n - 1) / 2) ** 2) + (fib((n+1) / 2) ** 2)
        return fibs[n]

Πηγή

Στο μηχάνημα μου ( hp laptop 2.13 Ghz)
η συνάρτηση fib(2800000) κάνει κάτι λιγότερο από 3 δευτερόλεπτα (2.756 sec)
μιλάμε για την θέση 2 εκατομμύρια οχτακόσιες χιλιάδες στην ακολουθία Fibonacci :crazy:

Έχω περιέργια να δώ πόσο χρόνο θα κάνει στην java αυτός ο αλγόριθμος
ψήνεται κανείς να δοκιμάσει ;
(αντε να δούμε θα γκαζώσει η java :P )
:)

Για το παραγοντικό σε Python (Με memoization)


Κώδικας: Επιλογή όλων
import sys
sys.setrecursionlimit(1000000)

def factorial(n,memo={}):
  def ClassicFac(n):
      if n == 0:
           return 1
      else:
           return n * ClassicFac(n-1)
  if n not in memo:
      memo[n] = ClassicFac(n)
  return memo[n]

print factorial(2800)

στο laptop μου κάνει ~82 miliseconds (ενώ η έκδοση από το math module κάνει ~75 miliseconds)
αυτά :)
Περιμένω java εκδόσεις :P
Θέλουμε και μπορούμε να έχουμε μια καλύτερη ζωή και όσο θα ζούμε θα προσπαθούμε να την αποκτήσουμε ακόμα και αν πεθάνουμε προσπαθώντας, και αν κάποια στιγμή λιγίσουμε έχουμε το επίπεδο να πούμε κουράστηκα λίγο να ,να ξαποστάσουμε , ώστε να συνεχίσουμε πάλι δυνατοί ξανά.

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

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

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

Πολύ ωραίος!! factorial, fibonacci το ίδιο πρόβλημα είναι με την ίδια λύση (κατ'ουσίαν ειναι ίδια, φυσικά και είναι διαφορετικά προβληματα). Aν αντι για fibonacci βάλεις παραγοντικό θα έχεις τη λύση για το παραγοντικό.

lostinmyworld έγραψε:Πώς όμως μπορείς να υπολογίσεις πραγματικά (κι όχι εσφαλμένα) παραγοντικό μεγάλου αριθμού;

Χρησιμοποιώντας συμβολικά μαθηματικά. Δηλ για παραδειγμα, ορίζεις μια class που έχει strings, και υπερφορτώνεις τους τελεστές της πρόσθεσης και του πολλαπλασιασμού ώστε να κάνεις τις πράξεις όπως αν τις έκανες με το χέρι. Αλλά όλα τα αντικειμενά σου είναι strings. (Φυσικά υπάρχουν και άλλοι τρόποι να βελτιώσεις την απόδοση)

Η προσεγγιστική μέθοδος είναι με τον τύπο του Stirling.
Άβαταρ μέλους
Dimitris
saintTUX
saintTUX
 
Δημοσιεύσεις: 1357
Εγγραφή: 13 Μάιος 2008, 13:57
Τοποθεσία: Θεσσαλονίκη
Εκτύπωση

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

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