Sunteți pe pagina 1din 55

TEMA 2

1.Scrieti o aplicatie Java care


defineste o variabila de tip String
care este initializata cu un text
predefinit. Aplicatia afiseaza o
statistica reprezentand numarul
de propozitii din text, numarul
totalde cuvinte, caracterele care
apar in intreg textul si procentul
pe care il reprezinta din
total.import
java.util.StringTokenizer;
public class prob1 {
public static void main(String args[]){
String sir;
sir=("Ana are mere. Maria are
pere?");
int p=0;
int i,j;
int c=1;
int l;
for(i=0;i<sir.length();i++){
if(sir.charAt(i)=='.'||
sir.charAt(i)=='?'||sir.charAt(i)=='!')
p++;
if(sir.charAt(i)==' ')
c++;
}
String alfa;
alfa=("AanreMmip");
for(i=0;i<alfa.length();i++){
l=0;
for(j=0;j<sir.length();j++)
if(alfa.charAt(i)==sir.charAt(j))
l++;
System.out.println("Caracterul
"+alfa.charAt(i)+" apare de "+l+" si
reprezinta "+
((((float)l)/sir.length())*100));
}
System.out.println("Numarul de
propozitii:"+p);
System.out.println("Numarul de
cuvinte:"+c);
}
}
2.Se defineste un sir de valori
intregi. Sa sa completeze un alt
sir format din elementele primului

sir,dupa cum urmeaza: se ia


elementul de pe prima pozitie,
apoi cel aflat la un numar
distanta, la doua numere distanta,
etc. Daca se ajunge in capatul
sirului, se continua numaratoarea
de la inceput.
public class main {
public static boolean exista0(int []
pozitii){
int i;
for (i=0;i<pozitii.length;i++)
if (pozitii[i]==0)
return true;
return false;
}
public static void main(String[]
args){
int[] vector= {1, 2, 3, 4};
int [] pozitii={0,0,0,0};
int [] sir_final;int i,v,n=0,c;
sir_final=new int[2000];
c=0;
int pas=0,ii=0;
while (exista0(pozitii)==true){
//la pasul 0 pornesc de la pozitia 0
if(pas == 0)
ii=0;
//parcurg sirul din c in c pozitii
for (i=ii;i<vector.length;i=i+c+1){
pozitii[i]=1;
//c creste la fiecare citire a unui numar
c++;
sir_final[n]=vector[i];
n++;
}
v=i;
if (v>vector.length)
{
//daca valoarea lui c este > decat
lungimea vectorului, pozitia de pe care
citesc
//trebuie reinitializata corespunzator
v=v % vector.length;
ii = v;
}
pas++;
}
System.out.print("Sirul final este: ");
for(i=0;i<sir_final.length;i++)

System.out.print( sir_final[i]+" ");


}
}
3.Scrieti o aplicatie Java care
defineste o valoare intreaga si
apoi calculeaza si afiseaza
reprezentarea ei binara.
public class prob3 {
public static void main(String args[]){
int nr=200;
int r=0;
int rest;
int i=1;
while(nr>0){
rest=nr%2;
nr=nr/2;
r=r+rest*i;
i=i*10;
}
System.out.println("Numarul
convertit in binar este: "+r);
}
}
4.Doua fete se hotarasc sa-?i scrie
bile?ele folosind un cod secret.
Codul este urmatorul: nlocuiesc
fiecare vocala cu grupul 'vocala'
p 'vocala'. Dupa ce rescriu astfel
bile?elul, l trimit. Scrie?i un
program care sa realizeze aceasta
conversie.
Exemplu: Am vazut 2 pisicute
dragute. -> Apam vapazuput 2
pipisipicuputepe drapaguputepe.
public class
Problema4Lab2Function {
public static void main(String[] args)
{
String text = new String("Am vazut 2
pisicute dragute.");
System.out.println("Sirul original
este: \""+text+"\"");
System.out.print("Sirul prelucrat
este: ");
new Problema4Lab2Function(text);
}
private char[] orig;
private String modified="";
public Problema4Lab2Function(String
getorig)

{ this.orig=getorig.toCharArray();
this.prelucrare();
this.afisare();
}
private boolean ifvowel(char v){
boolean ok=false;
char[] vocale=
{'a','A','e','E','i','I','o','O','u','U'};
for(int i=0;i<vocale.length;i++)
{
if(v == vocale[i])
{ ok=true;
}
} return ok;
}
private void prelucrare()
{
int i;
for(i=0;i<this.orig.length;i++)
{
if(this.ifvowel(this.orig[i]))
{
this.modified=this.modified+this.orig[i
]+'p'+this.orig[i];
}
else
{
this.modified=this.modified+this.orig[i
];
}
}
}
private void afisare()
{
System.out.println(this.modified);
}
}
5.Un magazin de suveniruri ofera
14 gravuri diferite cu Turnul Eiffel.
O gravura costa 25 de Eurocen?
iiar suvenirurile sunt ob?inute
aleator. De ce suma este nevoie
pentru a ob?ine cel pu?in cte o
gravura diferita de fiecare tip?
Indiciu: Folosi?i un generator de
numere aleatoare. Suma de bani
introdusa ar trebui sa varieze la
fiecare execu?ie a programului.

import java.util.Random;
public class Main {
public static boolean exista0(int []
pozitii){
int i;
for (i=0;i<pozitii.length;i++)
if (pozitii[i]==0)
return true;
return false;
}
public static void main(String []args)
{
String []
sir={"g1","g2","g3","g4","g5","g6","g7
","g8","g9","g10","g11","g12","g13","g
14"};
//in vectorul pozitii retin elementele
care au fost generate deja: 1-generat,
0-negenerat
int []pozitii =
{0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int suma=0,p=0;
Random generator = new Random();
//cat timp mai am gravuri necitite,
generez cate o pozitie a unei gravuri
while(exista0(pozitii)==true)
{
//imi generez un numar aleator intre 0
si 14 exclusiv (pozitie gravurii)
p=generator.nextInt(14);
pozitii[p]=1;
suma = suma + 25;
}
System.out.println("Suma este:
"+suma+" Eurocenti");
}
}
6.Ca sa re?ina mai u?or numerele
de telefon ale prietenilor, Alex s-a
gndit sa asocieze fiecarei cifre
un set de litere, ca mai jos:Se da
un numar de telefon de maxim 12
cifre, un numar n reprezentnd
numarul de cuvinte ce trebuie
verificate ?i apoi cele n cuvinte.
Specifica?i daca exista o combina?
ie de cuvinte care sa se
potriveasca perfect pentru
numarul de telefon. Daca nu
exista solu?ie se va afi?a: -N-

Exemplu:
7325189087 5 it your reality real
our Solution: reality our
4294967296 5 it your reality real
our Solution: -Npublic class Problema6Lab2{
public static void main(String args[])
{
StringBuffer sb = new
StringBuffer("reality our");// o noua
instanta de tip StringBuffer()
String newString = sb.toString();
//convertire StringBuffer in String
System.out.println("Cuvantul ce
trebuie verificat :\"" + newString +
"\"");
String Final= newString
//folosim functia .replaceAll() pentru
inlocuirea literelor cu cifra
corespunzatoare
.replaceAll("i", "1").replaceAll("j", "1")
.replaceAll("a", "2").replaceAll("b",
"2").replaceAll("c", "2")
.replaceAll("d", "3").replaceAll("e",
"3").replaceAll("f", "3")
.replaceAll("g", "4").replaceAll("h",
"4")
.replaceAll("k", "5").replaceAll("l",
"5")
.replaceAll("m", "6").replaceAll("n",
"6")
.replaceAll("p", "7").replaceAll("r",
"7").replaceAll("s", "7")
.replaceAll("t", "8").replaceAll("u",
"8").replaceAll("v", "8")
.replaceAll("w", "9").replaceAll("x",
"9").replaceAll("y", "9")
.replaceAll("o", "0").replaceAll("q",
"0").replaceAll("z", "0");
//afisare
System.out.println("Numar asociat
numarului este: \"" + Final + "\"");
}
}
Tema3
1.Scrieti o aplicatie Java care
defineste intr-o clasa doua
variabile intregi. Definiti metodele
care aduna variabilele, extrag
radical din diferenta lor, le

convertesc in String, le
concateneaza si inverseaza sirul
astfel obtinut. Toate metodele
returneaza valori care vor fi
afisate in functia main, prin
intermediul unei instante a clasei.
public class Test {
public static void main(String[] args)
{
System.out.println("Suma este:
"+Metode.aduna());
System.out.println("Radicalul din
diferenta este: "+Metode.radical());
System.out.println("Sirul convertit in
String este: "+Metode.convet()+"
"+Metode.convert2());
System.out.println("Sirul concatenat
si inversat este:
"+Metode.concatenare());
}
}
public class Metode {
static int x=10,y=7;
public static int aduna(){
return x+y;
}
public static float radical(){
return (float) Math.sqrt(x-y);
}
public static String convet(){
return Integer.toString(x);
//converteste un intreg in string
}
public static String convert2(){
return Integer.toString(y);
}
public static StringBuffer
concatenare(){
String sir =
Integer.toString(x).concat(Integer.toStr
ing(y)); //concateneaza
return new StringBuffer(sir).reverse();
//inversarea sirului
}
}
2.Scrieti o aplicatie Java care
defineste intr-o clasa o matrice de
valori float. Aplicatia va afisa atat
numarul de elemente nule care

sunt inconjurate de elemente


nenule cat si pozitia lor in matrice
public class Main {
public static void main(String []args){
Matrice mat = new
Matrice();//inintializam un nou obiect
mat de tipul matrice
int c;
c = mat.NrElemNule();//prin
mat.NrElemNule apelam functia iar c ii
un contor
System.out.println("Numarul de
elemente nule este: "+c);
mat.afiseazaPozitii();
}
}
import java.util.ArrayList;
import java.util.List;
public class Matrice {
private float matrice[][] = new float[]
[] {{1.78f, 2.01f, 3.90f, 4.54f },
{5.24f, 6.00f, 7.24f, 8.52f},
{1.10f, 0.00f, 4.87f, 5.45f},
{7.19f, 4.76f, 9.53f, 0.00f}};
private int n = 4;
private int m = 4;
private List<Pozitie> pozitii = new
ArrayList<Pozitie>();//formam o lista
cu pozitiile gasite
public Matrice()
{
}
public int NrElemNule()
{
int c, i, j;
c = 0;//contorul il initializa cu 0 dupa
care daca o sa gasim un 0 in matrice
crestem cu 1 contorul
for (i=0;i<n; i++)
for (j=0;j<m;j++)
{
if(i==0 && matrice[i][j]==0 && j!=0
&& j!=m-1)//verificam elementele de
pe prima linie diferite de colturi
if (matrice[i][j-1] != 0 &&
matrice[i+1][j] != 0 && matrice[i]
[j+1]!=0 && matrice[i+1][j+1]!=0 &&
matrice[i+1][j-1] !=0)
{
c++;

Pozitie p = new Pozitie(i,j);//daca am


gasit un element retinem pozitia lui
pozitii.add(p);//adauga la pozitii p
}
if(i==0 && j==m-1 && matrice[i]
[j]==0)//verificam elementul de pe
prima linie din colt dreapta
if (matrice[i][j-1] != 0 &&
matrice[i+1][j-1] != 0 && matrice[i+1]
[j]!=0)
{
c++;
Pozitie p = new Pozitie(i,j);
pozitii.add(p);
}
if(i!=0 && i!=n-1 && j==m-1 &&
matrice[i][j]==0)//verificam
elementele de pe ultima coloana
diferite de colturi
if (matrice[i-1][j] != 0 && matrice[i1][j-1] != 0 && matrice[i][j-1]!=0 &&
matrice[i+1][j-1]!=0 && matrice[i+1]
[j]!=0 )
{
c++;
Pozitie p = new Pozitie(i,j);
pozitii.add(p);
}
if(i==n-1 && j==m-1 && matrice[i]
[j]==0)//verificam elementul de pe
ultima coloana din colt jos
if (matrice[i-1][j] != 0 && matrice[i1][j-1] != 0 && matrice[i][j-1]!=0)
{
c++;
Pozitie p = new Pozitie(i,j);
pozitii.add(p);
}
if(i==n-1 && j!=0 && j!=m-1 &&
matrice[i][j]==0)//verificam
elementele de pe ultima linie diferite
de colturi
if (matrice[i][j+1] != 0 && matrice[i1][j+1] != 0 && matrice[i-1][j]!=0 &&
matrice[i-1][j-1]!=0 && matrice[i][j-1]!
=0 )
{
c++;
Pozitie p = new Pozitie(i,j);
pozitii.add(p);

}
if(i==n-1 && j==0 && matrice[i]
[j]==0)//verificam elementul de pe
prima linie din colt jos
if (matrice[i][j+1] != 0 && matrice[i1][j+1] != 0 && matrice[i-1][j]!=0)
{
c++;
Pozitie p = new Pozitie(i,j);
pozitii.add(p);
}
if(j==0 && i!=0 && i!=m-1 &&
matrice[i][j]==0)//verificam
elementele de pe prima coloana
diferite de colturi
if (matrice[i+1][j] != 0 &&
matrice[i+1][j+1] != 0 && matrice[i]
[j+1]!=0 && matrice[i-1][j+1]!=0 &&
matrice[i-1][j]!=0 )
{
c++;
Pozitie p = new Pozitie(i,j);
pozitii.add(p);
}
if(i==0 && j==0 && matrice[i]
[j]==0)//verificam primul element
if (matrice[i+1][j] != 0 &&
matrice[i+1][j+1] != 0 && matrice[i]
[j+1]!=0)
{
c++;
Pozitie p = new Pozitie(i,j);
pozitii.add(p);
}
if(i!=0 && i!=n-1 && j!=0 && j!=m-1
&& matrice[i][j]==0)//verficam
elementele din mijlocul matricii
if (matrice[i-1][j] != 0 && matrice[i1][j+1] != 0 && matrice[i][j+1]!=0 &&
matrice[i+1][j+1]!=0 && matrice[i+1]
[j]!=0 && matrice[i+1][j-1]!=0 &&
matrice[i][j-1]!=0 && matrice[i-1][j-1]!
=0)
{
c++;
Pozitie p = new Pozitie(i,j);
pozitii.add(p);
}
}
return c;

}
public void
afiseazaPozitii()//parcugem pozitiile si
le afisam
{
int i;
for (i=0;i<pozitii.size();i++)
pozitii.get(i).afiseaza();
}
}
public class Pozitie {//retine positiile
elementelor nule din matrice
private int i;
private int j;
public Pozitie(int v1,int v2)
{
i = v1;
j = v2;
}
public void afiseaza()
{
i++;
j++;
System.out.println("("+i+","+j+")");
}
}
3.Se defineste o clasa care are
drept atribut un sir de valori
intregi. Sa se scrie metodele care
creaza si afiseaza un alt sir format
din elementele din sirul initial,
luate o singura data, ordonate
crescator. Instantiati clasa si
folositi metodele create.
public class Main {
public static void main(String[] args){
Sir e;//am declarat o clasa de tip Sir
e=new Sir();//o noua instanta a clasei
Sir
e.multime();//apelam metoda
multime
e.ordonare();
e.afisare();
}
}
public class Sir {
private int sir[]=new int[]
{1,2,3,1,5,4,6};
private int sir2[]=new int[10];
public Sir(){

}
public boolean exista(int a)
{//ferificam daca mai avem in sir2
elementul din sir
boolean b;int i;
b=false;
for (i=0;i<sir2.length;i++){
if (sir2[i]==a){
b=true;
return b;
}
}
return b;
}
public void multime()//eliminam sin
sir elementele care se repeta
{
int n,i;
n=0;
for (i=0;i<sir.length;i++) {
if (exista(sir[i])==false){
sir2[n]=sir[i];
n++;
}
}
}
public void ordonare()//ordonam sirul
{
int i,aux,j;
for(i=0;i<=sir2.length/2;i+
+)//parcurgem sirul pana la jumate
for(j=sir2.length1;j>sir2.length/2;j--)//parcurgem sirul
de la sfarsit pana la jumate
if(sir2[i]>sir2[j]){
aux=sir2[i];
sir2[i]=sir2[j];
sir2[j]=aux;
}
}
public void afisare(){
int i;
for (i=0;i<sir2.length;i++)
System.out.print(sir2[i]+" ");
}
}
4.Un restaurant vrea sa-?i
pastreze mereu clien?ii mul?umi?i.
Pentru a realiza acest lucru,
fiecarecomanda este prioritizata

dupa cum urmeaza:? comanda


doar cu ceva de baut prioritate 3
? comanda cu ceva de baut ?i ceva
de mncat prioritate 2? comanda
din meniu prioritate 1 Comenzile
cu aceea?i prioritate se diferen?
iaza n plus, n func?ie de numarul
de persoane de la masa,iar apoi n
func?ie de suma totala de pe
comanda.Pentru un set de
comenzi, stabili?i ordinea n care
trebuiesc servi?i clien?ii.Exemplu:
Comanda 1: de baut, 10 persoane,
70 RON => prioritate 3
Comanda 2: de baut, 5 persoane,
80 RON => prioritate 3
Comanda 3: de baut ?i de mncat,
2 persoane, 100 RON =>
prioritate 2
Comanda 4: comanda din meniu, 1
persoana, 60 RON => prioritate 1
Comanda 5: de baut ?i de mncat,
2 persoane, 90 RON => prioritate
2
Ordinea servirii: Comanda 4,
Comanda 3 (are valoare mai mare,
acela?i nr pers), Comanda 5,
Comanda 1 (are numar mai mare
de persoane), Comanda 2.
import java.util.*;
public class Problema4 {
public static void main(String[] args)
{
Random rn=new Random();
Comanda [] comenzi=new Comanda
[16];
int nrcomenzi = 15;
System.out.println("Comenzi
nesortate:");
for(int i =1;i<=nrcomenzi;i++)
{
comenzi[i]=new Comanda();
comenzi[i].prioritate=rn.nextInt(3)
+1;
comenzi[i].nrpersoane=rn.nextInt(9)
+1;
comenzi[i].suma=
(rn.nextInt(10)+1)*10;
System.out.println("Comanda nr : "+
i+" "+ comenzi[i].afisare());

}
//sortare dupa prioritate 1 2 3
for(int i=1;i<=nrcomenzi;i++)
for(int j=i+1;j<=nrcomenzi;j++)
{
if(comenzi[i].prioritate >
comenzi[j].prioritate)
{
Comanda copie = comenzi[i];
comenzi[i]=comenzi[j];
comenzi[j]=copie;
}
}
//sortare dupa nr persoane
for(int i=1;i<=nrcomenzi;i++)
for(int j=i+1;j<=nrcomenzi;j++)
{
if(comenzi[i].prioritate ==
comenzi[j].prioritate)
if(comenzi[i].nrpersoane <
comenzi[j].nrpersoane)
{
Comanda copie = comenzi[i];
comenzi[i]=comenzi[j];
comenzi[j]=copie;
}
}
//sortare dupa suma
for(int i=1;i<=nrcomenzi;i++)
for(int j=i+1;j<=nrcomenzi;j++)
{
if(comenzi[i].prioritate ==
comenzi[j].prioritate &&
comenzi[i].nrpersoane ==
comenzi[j].nrpersoane )
if(comenzi[i].suma <
comenzi[j].suma)
{
Comanda copie = comenzi[i];
comenzi[i]=comenzi[j];
comenzi[j]=copie;
}
}
System.out.println("Sortate dupa
prioritate:");
for(int i=1;i<=nrcomenzi;i+
+)System.out.println("Comanda nr :
"+ i+" "+ comenzi[i].afisare());
}
}

public class Comanda {


int prioritate=0;
int nrpersoane=0;
int suma=0;
public String afisare()
{
return "are prioritatea "+
this.prioritate +" numar persoane:
"+this.nrpersoane + " suma
comanda :" +this.suma;
}
}
5.Sudoku: Se da o matrice 6x6, ce
poate con?ine numere de la 1 la 6.
Matricea ini?iala este mpar?ita n
6 submatrici de dimensiuni 2x3.
Pentru a matrice de intrare, gasi?i
numerele lipsa.
Reguli:? Pe fiecare linie sau
coloane trebuie sa apara o
singura data toate numerele de la
1 la 6.? n fiecare dreptunghi
trebuie sa apara toate numerele
de la 1 la 6.
Indiciu:Numerele sunt trecute
astfel nct sa existe o singura
solu?ie.
public class Sudoku {
public static void main(String[] args)
{
int[][] matrice ={
{ 0, 0, 2, 0, 0, 5 },
{ 1, 5, 3, 4, 2, 6 },
{ 0, 1, 0, 0, 3, 0 },
{ 0, 0, 6, 0, 0, 4 },
{ 4, 3, 5, 2, 6, 1 },
{ 0, 6, 0, 0, 4, 0 }};
System.out.println("Your puzzle:");
afiseazamatricea(matrice);
System.out.println();
solve(matrice, 0, 0);
}
public static void
afiseazamatricea(int[][]
array)//afiseaza matricea initiala
{
System.out.println();
for(int j=0; j<array.length;j++)
{
for(int i=0;i<array.length;i++)

{
if(i==5)
{
System.out.println(" "+array[j][i]);
}
else
{
System.out.print(" "+array[j][i]);
}
}
}
}
public static boolean
verificarand(int[][] matrice, int rand,
int num )//verifica radurile pentru
prezenta numarului nul
{
for(int col =0; col<6; col++)
if(matrice[rand][col] == num)
return false ;
return true ;
}
public static boolean
verificacoloana(int[][] grid, int col, int
num)//verifica coloanele pentru a
vedea daca avem numar pus sau
trebuie sa complectam
{
for(int rand = 0; rand < 6; rand++)
if(grid[rand][col] == num)
return false ;
return true ;
}
public static boolean
verificacutia(int[][] grid, int row, int
col, int num)//verifca daca avem in
matricea de 2x3 avem numar nul
{
row = (row / 2) * 2 ;//facem patratele
de 2x3
col = (col / 3) * 3 ;
for( int r = 0; r < 2; r++ )
{
for( int c = 0; c < 3; c++ )
{
if(grid[row+r][col+c] ==
num )//verifica coloanele si randurile
din cutie
return false ;
}

}
return true ;
}
public static void next(int[][] puzzle,
int row, int col)
{
if(col<=4)
solve(puzzle,row,col+1);//apeleaza
functia solve
else
solve(puzzle,row+1,0);
}
public static int solve(int[][] puzzle,
int rand, int col)
{
if(rand>5)
{
System.out.println("Solutia gasita:");
afiseazamatricea(puzzle);
return 0;
}
if(puzzle[rand][col] != 0)
{
next(puzzle,rand,col);//recursivitate
apeleaza functia next
}
else
{
for(int num = 1;num<7;num+
+)//parcurge numerele care trebuie
puse
{
if(verificarand(puzzle,rand,num) &&
verificacoloana(puzzle,col,num) &&
verificacutia(puzzle,rand,col,num))
{
//daca avem numar pe pozitie atunci
trecem la elementul urmator cu
functia next
//daca nu avem numar pe pozitie
atunci apelam functia solve si punem
un numar care nu a mai fots pus
puzzle[rand][col] = num;
next(puzzle,rand,col);
}
}
puzzle[rand][col] = 0;
}
return 0;

}
}
6.Toate comunica?iile ntre ora?e
au cazut. Pentru a putea
comunica, supravie?uitorii
folosesc cod morse. Scrie?i un
program care transforma o
propozi?ie n cod morse.Despar?
irea ntre litere se face cu
caracterul /. Despar?irea ntre
propozi?ii se face cu caracterul
//.
Exemplu:SOS => ... / --- /...
public class Main {
public static void main(String[] args) {
String propozitie = null;
System.out.println("Sirul initial
este: \"" +Codmorse.prop(propozitie)
+"\"");
System.out.print("Sirul convertit in
codul Morse este: \"");
Codmorse.converteste("sos . SOS");
System.out.print("\"");
}
}
public class Codmorse {
static String prop(String propozitie){
String sentence = new String("sos.
SOS");//declararea sirului
return sentence; //returneaza stringul
ce contine propozitia
}
static String converteste(String
sentence){
//declarare vector ce contine literele
convertite in codul morse
String[] morse =
{".-/","-.../","-.-./","-../","./","..-./","--./",".
.../","../",
".---/","-.- /",".-../","--/","-./","---/",".--./","
--.-/",".-./",".../","-/","..-/",
"...-/",".--/","-..-/","-.--/","--../","//"," \
//parcurgerea propozitiei
for(int x = 0; x<sentence.length();
x++){
char ch = sentence.charAt(x);//ch
reprezinta pozitia fiecarui element din
sentence

//switch case
switch(ch){//cazul in care avem in
sentence 'a' sau 'A' inlocuim litera cu
ce se afla pe prima pozitie in codul
morse
case 'a':
case 'A':
System.out.print(morse[0]); break;
case 'b':
case 'B':
System.out.print(morse[1]); break;
case 'c':
case 'C':
System.out.print(morse[2]); break
case 'd':
case 'D':
System.out.print(morse[3]); break;
case 'e':
case 'E':
System.out.print(morse[4]); break;
case 'f':
case 'F':
System.out.print(morse[5]); break;
case 'g':
case 'G':
System.out.print(morse[6]); break;
case 'h':
case 'H':
System.out.print(morse[7]); break;
case 'i':
case 'I':
System.out.print(morse[8]); break;
case 'j':
case 'J':
System.out.print(morse[9]); break;
case 'k':
case 'K':
System.out.print(morse[10]); break
case 'l':
case 'L':
System.out.print(morse[11]); break;
case 'm':
case 'M':
System.out.print(morse[12]); break;
case 'n':
case 'N':
System.out.print(morse[13]); break;
case 'o':
case 'O':
System.out.print(morse[14]); break;

case 'p':
case 'P':
System.out.print(morse[15]);
case 'q':
case 'Q':
System.out.print(morse[16]);
case 'r':
case 'R':
System.out.print(morse[17]);
case 's':
case 'S':
System.out.print(morse[18]);
case 't':
case 'T':
System.out.print(morse[19]);
case 'u':
case 'U':
System.out.print(morse[20]);
case 'v':
case 'V':
System.out.print(morse[21]);
case 'w':
case 'W':
System.out.print(morse[22]);
case 'x':
case 'X':
System.out.print(morse[23]);
case 'y':
case 'Y':
System.out.print(morse[24]);
case 'z':
case 'Z':
System.out.print(morse[25]);
case '.':
System.out.print(morse[26]);
case ' ':
System.out.print(morse[27]);
}
}
return sentence;
}

break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;

}
Tema4
1. Scrieti un program Java care defineste
o clasa numita Persoana cu urmatoarele
atribute: nume o variabila de tip String,
protected si x si y variabile intregi,
protected. Clasa contine un constructor
explicit fara parametric care initializeaza
x si y cu 0 si nume cu null. O metoda
finalize() va fi folosita pe post de

destructor in acceptiunea C++ si va afisa


un mesaj. Doua metode mutator
setNume() si setXY() vor fi definite
pentru a reinitializa variabilele din clasa.
Instantiati 2 obiecte, setati atributele
potrivit unor valori predefinite si afisati
proprietatile obiectelor.
public class Persoana {
protected String nume;
protected int x;
protected int y;
public Persoana(){
x=0;
y=0;
nume=null;
}
protected void finalize(){
x=0;
y=0;
nume=null;
System.out.println("Destructorul
ruleaza acum...");
System.gc(); //Garbace Collection
}
public void setNume(String nume){
this.nume = nume;
}
public void setXY(int x, int y){
this.x = x; //this face referire la
instanta curent
this.y = y; //this face referire la
instanta curent
}
}
public class Main {
public static void main(String[] args){
Persoana nume1 = new Persoana();
Persoana nume2 = new Persoana();
nume1.setNume("Cociota
Florentina");
nume1.setXY(2, 3);
nume2.setNume("Cociota
Florentina");
nume2.setXY(4, 4);
System.out.println("Numele este:
"+nume1.nume+" si coordonatele
sunt: "+nume1.x+" "+nume1.y);
System.out.println("Numele este:
"+nume2.nume+" si coordonatele
sunt: "+nume2.x+" "+nume2.y);
nume1.finalize();
nume2.finalize();
System.out.println("Numele este:
"+nume1.nume+" si coordonatele
sunt: "+nume1.x+" "+nume1.y);
System.out.println("Numele este:
"+nume2.nume+" si coordonatele

sunt: "+nume2.x+" "+nume2.y);


}
}
2. Definiti o clasa Circle cu 3
atribute double public numite x, y,
r. Un constructor explicit va
initializa cele 3 atribute
considerand valorile unor
parametri formali care au nume
identice cu ale atributelor
echivalente. Un alt constructor va
modifica doar variabila r si apoi va
apela primul constructor definit.
Pentru definirea unui constructor
de copiere se va folosi un obiect
Circle trimis ca parametru si un alt
constructor vid va initializa cu 0.0,
x si y cu 1.0, r. Instantiati cel putin
2 obiecte Circle folosind
constructorii definiti in clasa.
Afisati atributele obiectelor.
class Circle
{
public double x,y,r;
Circle(double x,double y, double r)
{
this.x=x;
this.y=y;
this.r=r;
}
Circle(double r)
{
this(1.0,2,r);
}
Circle(Circle ext)
{
this(ext.x,ext.y,ext.r);
}
Circle()
{
x=0;
y=0;
r=1;
}
}
public class Main
{
public static void main(String args[])
{
Circle cerc1=new Circle(3,13,23);//se
creeaza obiectul
//afisam caracteristicile obiectului
creeat
System.out.println("Constructor
explicit");
System.out.println("x="+cerc1.x);
System.out.println("y="+cerc1.y);

System.out.println("r="+cerc1.r);
Circle cerc2=new Circle(5.8);
System.out.println("Constructor cu
parametru:");
System.out.println("x="+cerc2.x);
System.out.println("y="+cerc2.y);
System.out.println("r="+cerc2.r);
Circle cerc3=new Circle();
Circle cerc4;
cerc4=cerc3;//se copiaza cerc3 in
cerc4
System.out.println("Constructor
copiere:");
System.out.println("x="+cerc4.x);
System.out.println("y="+cerc4.y);
System.out.println("r="+cerc4.r);
}
}
3. Scrieti o clasa numita
2DCoordinates care are 2 variabile
protected int x si y. Un
constructor explicit cu 2 parametri
va initializa atributele si metodele
accesor getX(), getY()vor returna
valorile lui x, respectiv y. O clasa
numita 3DCoordinates, derivata din
prima, va defini o noua variabila
protected int z. Constructorul
explicit cu 3 parametri va apela
constructorul clasei 2DCoordinates
folosind metoda super(). O noua
metoda getZ() va fi definita. In
clasa care contine metoda main()
instantiati un obiect 2DCoordinates
si doua obiecte 3DCoordinates,
folosind niste valori predefinite.
Afisati atributele obiectelor create.
class D2Coordinates
{
protected int x,y;
D2Coordinates(int x, int y)
{
this.x=x;
this.y=y;
}
void getX()
{
System.out.println("Valoare lui x
este: "+x);
}
void getY()
{
System.out.println("Valoare lui y
este: "+y);
}
}
class D3Coordinates extends
D2Coordinates

{
protected int z;
D3Coordinates(int x, int y, int z)
{
super(x,y);
this.z=z;
}
void getZ()
{
System.out.println("Val. lui z:"+z);
}
}
//clasa ce instantiaza clasa
D2Coordinates
public class Main
{
public static void main(String a[])
{
D2Coordinates ob1=new
D2Coordinates(7,4);
D3Coordinates ob2=new
D3Coordinates(4,5,8);
System.out.println("Coordonatele
obiectului 1 sunt: ");
ob1.getX();
ob1.getY();
System.out.println("Coordonatele
obiectului 2 siunt: ");
ob2.getX();
ob2.getY();
ob2.getZ();
}
}
4. Definiti o interfata numita Skills
care defineste prototipurile
functiilor int
getRunningTime(int laps), int
getSwimmingTime(int
pool_lengths) si String
getTimeFormat(int milliseconds).
Interfata mai contine constantele
int timePerLap si int
timePerPoolLength. Toate valorile
intregi mentionate mai sus
reprezinta un numar
de milisecunde. Definiti 2 clase
Runner si Swimmer care
implementeaza interfata Skills.
fiecare clasa stocheaza in niste
variabile specifice numarul de ture
de pista sau de lungimi de bazin
precum si numele sportivului.
Clasele vor oferi implementari
specifice metodelor mostenite din
interfata. Creati cateva instante ale
claselor definite si
ordonati alergatorii si inotatorii
dupa timpii obtinuti. La afisare

timpii vor respecta formatul:


mm:ss:ms.*/
public interface Skills {
public int getRunningTime(int laps);
public int getSwimmingTime(int
pool_lengths);
public String getTimeFormat(int
milliseconds);
public int timePerLap = 247050;
public int timePerPoolLength =
189305;
}
public class Runner implements Skills {
int numarul_de_ture = 0;
String sportiv_nume= null;
int timpul_total;
public int getRunningTime(int ture){
numarul_de_ture = numarul_de_ture
+ ture;
int timpul_total = number_of_laps *
timePerLap;
return timpul_total;
}
public String setName(String
nume_sportiv){
sportiv_nume = nume_sportiv;
return sportiv_nume;
}
public String getTimeFormat(int
milliseconds) {
milliseconds=getRunningTime(timpul_
total);
String format = String.format("%
%0%dd", 2);
milliseconds = milliseconds / 1000;
String ms = String.format(format,
(milliseconds /10) % 100);
String seconds =
String.format(format, milliseconds %
60);
String minutes =
String.format(format, (milliseconds %
3600) / 60);
String time = minutes + ":" +
seconds + ":" + ms;
return time;
}
public int getSwimmingTime(int
lungime_bazin) {
return 0;
}
}
public class Swimmer implements
Skills{
int numarul_de_lungime_bazin = 0;
String sportiv_nume;
int timpul_total;

public int getSwimmingTime(int


lungime_bazin){
numarul_de_lungime_bazin =
numarul_de_lungime_bazin +
lungime_bazin;
int timpul_total =
numarul_de_lungime_bazin*
timePerPoolLength;
return timpul_total;
}
public String setName(String
nume_sportiv){
sportive_name = nume_sportiv;
return sportive_name;
}
public String getTimeFormat(int
milliseconds)
{ milliseconds=getSwimmingTime(timp
ul_total);
String format = String.format("%
%0%dd", 2);
milliseconds = milliseconds / 1000;
String ms = String.format(format,
(milliseconds /10) % 100);
String seconds =
String.format(format, milliseconds %
60);
String minutes =
String.format(format, (milliseconds %
3600) / 60);
String time = minutes + ":" +
seconds + ":" + ms;
return time;
}
public int getRunningTime(int ture) {
return 0;
}
}
public class Main {
public static void main(String[] args){
Runner[] run = new Runner[4];
int nr_alergatori = 4;
for(int i=0;i<nr_alergatori;i++)
{
run[i]=new Runner();
}
System.out.println("");
System.out.println("Alergatori");
System.out.println("Sportivul
"+run[0].setName("Cociota
Florentina")+" a alergat intr-un timp de
"+run[0].getTimeFormat(run[0].getRu
nningTime(4))+" [mm:ss:ms] si a
facut "+run[0].numarul_de_ture+"
ture.");
System.out.println("Sportivul
"+run[1].setName("Marin Marius")+" a

alergat intr-un timp de


"+run[1].getTimeFormat(run[1].getRu
nningTime(4))+" [mm:ss:ms] si a
facut "+run[1].numarul_de_ture+"
ture.");
System.out.println("Sportivul
"+run[2].setName("Petresc Ovidiu")+"
a alergat intr-un timp de
"+run[2].getTimeFormat(run[2].getRu
nningTime(4))+" [mm:ss:ms] si a
facut "+run[2].numarul_de_ture+"
ture.");
System.out.println("Sportivul
"+run[3].setName("Ion Gheorghe")+"
a alergat intr-un timp de
"+run[3].getTimeFormat(run[3].getRu
nningTime(4))+" [mm:ss:ms] si a
facut "+run[3].numarul_de_ture+"
ture.");
System.out.println("");
System.out.println("Dupa
ordonare:");
for(int i=0;i<nr_alergatori;i++)
for(int j=i+1;j<nr_alergatori;j++)
{
int laps = 0;
if(run[i].getRunningTime(laps) >
run[j].getRunningTime((laps)))
{
Runner x = run[i];
run[i]=run[j];
run[j]=x;
}
System.out.println("Sportivul
"+run[i].setName(run[i].sportiv_nume)
+" a alergat intr-un timp de
"+run[i].getTimeFormat(run[i].getRun
ningTime(ture))+" [mm:ss:ms] si a
facut "+run[i].numarul_de_ture+"
ture.");
}
Swimmer[] swim = new Swimmer[3];
int nr_innotatori = 4;
for (int l=0;l<nr_innotatori;l++)
{
swim[l]=new Swimmer();
}
System.out.println("");
System.out.println("Innotatori");
System.out.println("Sportivul
"+swim[0].setName("Popovici Vasile")
+" a innotat intr-un timp de
"+swim[0].getTimeFormat(swim[0].get
SwimmingTime(2))+" [mm:ss:ms] si a
facut
"+swim[0].numarul_de_lungime_bazin
+" lungimi de bazin.");
System.out.println("Sportivul

"+swim[1].setName("Stef Stefan")+" a
innotat intr-un timp de
"+swim[1].getTimeFormat(swim[1].get
SwimmingTime(4))+" [mm:ss:ms] si a
facut
"+swim[1].numarul_de_lungime_bazin
+" lungimi de bazin.");
System.out.println("Sportivul
"+swim[2].setName("Radu Ioan")+" a
innotat intr-un timp de
"+swim[2].getTimeFormat(swim[2].get
SwimmingTime(7))+" [mm:ss:ms] si a
facut
"+swim[2].numarul_de_lungime_bazin
+" lungimi de bazin.");
System.out.println("Sportivul
"+swim[3].setName("Radu Ioan")+" a
innotat intr-un timp de
"+swim[3].getTimeFormat(swim[3].get
SwimmingTime(10))+" [mm:ss:ms] si
a facut
"+swim[3].numarul_de_lungime_bazin
+" lungimi de bazin.");
System.out.println("");
System.out.println("Dupa
ordonare:");
for(int i=0;i<nr_innotatori;i++)
for(int j=i+1;j<nr_innotatori;j++)
{
int lungime_bazin = 0;
if(swim[i].getSwimmingTime(lungime_
bazin) >
swim[j].getSwimmingTime(lungime_ba
zin))
{
Swimmer x = swim[i];
swim[i]=swim[j];
swim[j]=x;
}
System.out.println("Sportivul
"+swim[i].setName(swim[i].sportiv_nu
me)+" a innotat intr-un timp de
"+swim[i].getTimeFormat(swim[i].getS
wimmingTime(lungime_bazin))+"
[mm:ss:ms] si a facut
"+swim[i].numarul_de_lungime_bazin
+" lumgimi de bazin.");
}
}
}
5. Definiti o clasa abstracta numita
Coder care declara prototipurile
metodelor care codeaza si
decodeaza o variabila de tip String
si integer potrivit unei chei primite
ca parametru. O a doua clasa
numita ExplicitCoder este derivata
din prima si defineste metodele

abstracte. O a treia clasa numita


ExplicitCoderExtended redefineste
metodele.Instantiati ambele clase
ne-abstracte si utilizati metodele
create. Studiati mecanismele
de upcasting si downcasting.
public abstract class Coder {
abstract public String
CodareString(String key);
abstract public int CodareInteger(int
key);
abstract public String
DecodareString(String key);
abstract public int
DecodareInteger(int key);
}
public class ExplicitCoder extends
Coder {
int integer = 201;
String str = new String("Azi este
frumos afara");
public String CodareString(String
key){
String str_codat =
str.replaceAll("a",key);
return str_codat;
}
public int CodareInteger(int key){
int int_codat = integer * key;
return int_codat;
}
public String DecodareString(String
key){
String str_decodat =
str.replaceAll(key, "a");
return str_decodat;
}
public int DecodareInteger(int key){
int int_decodat = (integer * key) /
key;
return int_decodat;
}
}
public class ExplicitCoderExtended
extends Coder {
int integer = 201;
String str = new String("Azi este
frumos afara");
public String CodareString(String
key){
String str_codat =
str.replaceAll("i",key);
return str_codat;
}
public int CodareInteger(int key){
int int_codat = integer + key;
return int_codat;
}

public String DecodareString(String


key){
String str_decodat =
str.replaceAll(key, "i");
return str_decodat;
}
public int DecodareInteger(int key){
int int_decodat = (integer + key) key;
return int_decodat;
}
}
public class MainClass {
public static void main(String[]
args){
Coder a = new ExplicitCoder();
System.out.println("String-ul codat
este: [" + a.CodareString("xxx") + "],
iar string-ul decodat este ["+
a.DecodareString("xxx")+ "].");
System.out.println("Intregul codat
este: [" + a.CodareInteger(3) + "], iar
intregul decodat este [" +
a.DecodareInteger(3) + "].");
Coder b = new
ExplicitCoderExtended();
System.out.println("String-ul codat
este: [" + b.CodareString("##") + "],
iar string-ul decodat este ["+
b.DecodareString("##")+ "].");
System.out.println("Intregul codat
este: [" + b.CodareInteger(3) + "], iar
intregul decodat este [" +
b.DecodareInteger(3) + "].");
System.out.println("Upcasting...");
ExplicitCoder c = new ExplicitCoder();
ExplicitCoderExtended d = new
ExplicitCoderExtended();
System.out.println("String-ul codat
este: [" +
((Coder)c).CodareString("zzz") + "],
iar string-ul decodat este ["+
((Coder)c).DecodareString("zzz") +
"].");
System.out.println("Intregul codat
este: [" +
((Coder)c).CodareInteger(12) + "], iar
intregul decodat este [" +
((Coder)c).DecodareInteger(12) +
"].");
System.out.println("String-ul codat
este: [" +
((Coder)d).CodareString(">>>") + "],
iar string-ul decodat este ["+
((Coder)d).DecodareString(">>>") +
"].");
System.out.println("Intregul codat
este: [" + ((Coder)d).CodareInteger(9)
+ "], iar intregul decodat este [" +

((Coder)d).DecodareInteger(9) + "].");
System.out.println("Downcasting...");
Coder e = new ExplicitCoder();
Coder f = new
ExplicitCoderExtended();
System.out.println("String-ul codat
este: [" +
((ExplicitCoder)e).CodareString("<><
>") + "], iar string-ul decodat este ["+
((ExplicitCoder)e).DecodareString("<>
<>") + "].");
System.out.println("Intregul codat
este: [" +
((ExplicitCoder)e).CodareInteger(32) +
"], iar intregul decodat este [" +
((ExplicitCoder)e).DecodareInteger(32)
+ "].");
System.out.println("String-ul codat
este: [" +
((ExplicitCoderExtended)f).CodareStrin
g(":::") + "], iar string-ul decodat este
["+
((ExplicitCoderExtended)f).DecodareSt
ring(":::") + "].");
System.out.println("Intregul codat
este: [" +
((ExplicitCoderExtended)f).CodareInte
ger(87) + "], iar intregul decodat este
[" +
((ExplicitCoderExtended)f).DecodareInt
eger(87) + "].");
}
}
7. Scrieti o clasa a carei instante
reprezinta un ntreg pachet de
carti. Cartile de joc au doar 2
proprietati: rang si culoare.
Verificati daca un set 3 de arti
extrase aleator din pachet pot
rezulta n 3 carti crescatoare, 3
carti e aceeasi culoare sau 3 carti
de acelasi rang. Cartile extrase nu
se pun napoi n achet.
Daca programul gaseste astfel de
carti, acestea vor fi afisate. Daca
nu, programul afiseaza:
public class Problema7 {
public static void main(String[] args)
{
Cartejoc pachet=new Cartejoc();
for(int i=1;i<=17;i++)
{
int [] carte1=pachet.extragecarte();
int [] carte2=pachet.extragecarte();
int [] carte3=pachet.extragecarte();
/////verificare 3 carti crescatoare
//System.out.println("Carti in ordine
crescatoare dupa rang:");
if(carte1[1]<carte2[1] &&

carte2[1]<carte3[1])
{
System.out.println("3 carti in ordine
crescatoare:
"+carte1[0]+"."+carte1[1]+"~~~"+ca
rte2[0]+"."+carte2[1]+"~~~"+carte3[
0]+"."+carte3[1]);
}
else
{
System.out.println("-N-");
}
import java.util.*;
public class Cartejoc {
int count=0;
int pachet[][] =new int [5][16];
Random rand =new Random();
public int getCuloare()
{
return this.rand.nextInt(4)+1;
}
public int getRang()
{
return this.rand.nextInt(13)+2;
}
public int[] extragecarte()
{
int culoare=this.getCuloare();
int rang=this.getRang();
if( this.count < 52 )
{
while(this.pachet[culoare]
[rang]==1)
{
culoare=this.getCuloare();
rang=this.getRang();
}
this.pachet[culoare][rang]=1;
this.count++;
}
int[] carte=new int[2];
carte[0]=culoare;
carte[1]=rang;
return carte;
}
}

Tema 5
/*1.Folositi pachetul ccj pentru
a citi de la tastatura
elementele unei matrice de 3x3
numere intregi. Folosind
operatorul pe biti &,
determinate care sunt pozitiile
elementelor impare si afisati
numarul lor.*/
import java.lang.String;
import ccj.*;

class Problema1
{
public static void main(String args[])
{
int n=0,i,j;
int m[][]=new int[3][3];//declarare
matrice de 3x3
System.out.println("Introduceti
elementele matricii:");
for(i=0;i<3;i++){
for(j=0;j<3;j++)
m[i][j]=Console.in.readInt();//citire
de la tastatura
}
System.out.print("Matricea
introdusa este:");
//afisare matrice
for(i=0;i<3;i++)
{
System.out.print("\n");
for(j=0;j<3;j++)
{
System.out.print(m[i][j]+" ");
if(m[i][j]%2==1)n++;//determinare
elemente impare
}
}
if(n!=0){ {
System.out.print("\nAti introdus
"+n+" elemente impare.\n");
System.out.println();
System.out.print("Elementele impare
au urmatoarele pozitii: ");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(m[i][j]
%2==1)System.out.print("\nElementul
["+m[i][j]+"] pe linia ["+(i+1)+"] si
coloana ["+(j+1)+"];");
}
else System.out.print("\nNu ati
introdus nici un element impar!!!");
}
}
/*2. Definiti un pachet numit
UserPackage care va fi folosit
pentru citirea de la tastatura a
variabilelor de tip String.
Pachetul contine o clasa numita
Read care efectueaza

operatiunile necesare prin


intermediul metodei readKeybd.
Importati pachetul UserPackage
intr-un alt program si folositi
metoda readKeybd pentru a citi
o serie de variabile de tip
String de la tastatura. Dupa
fiecare operatiune de citire,
utilizatorul este intrebat daca
doreste sa continue sau nu.
Dupa finalizarea procesului de
citire, sirurile de caractere
introduse vor fi reafisate,
ordonate alfabetic. Modificati
pachetul UserPackage prin
adaugarea urmatoarelor metode
in clasa Read: readInt, readFloat
si readDouble. Folositi aceste
metode ca si in problema
anterioara. */
//pachetul
package UserPackage;
import java.util.Scanner;
public class Read {
static public String ReadKeybd(){
//citeste string
Scanner input_string = new
Scanner(System.in);
String option_string =
input_string.nextLine();
return option_string;
}
static public int ReadInt(){
//citeste intreg
Scanner input_int = new
Scanner(System.in);
int option_int = input_int.nextInt();
return option_int;
}
static public float ReadFloat(){
//citeste float
Scanner input_float = new
Scanner(System.in);
float option_float =
input_float.nextFloat();
return option_float;
}
static public double ReadDouble(){
//citeste double

Scanner input_double = new


Scanner(System.in);
double option_double =
input_double.nextDouble();
return option_double;
}
}
//clasa principala
import java.lang.String;
import UserPackage.*;//import
package
class Problema2
{
public static void main(String
args[])
{
String string[]=new
String[20];//declarare sir string
int intreg[]=new int[20];
float flotant[]=new float[20];
double dublu[]=new double[20];
String continua;//flag
int continua2;
float continua3;
double continua4;
int n=0;//contor stringuri
do{
System.out.print("Introduceti un sir
de la tastatura: ");
string[n]=Read.ReadKeybd();//citire
in string
n++;
System.out.print("Doriti sa mai
introduceti un sir? [Da/Nu] ");
continua=Read.ReadKeybd();//citire
in flag
}
while(continua.equalsIgnoreCase("da")
);
System.out.println("Sirurile
introduse afisate in ordine
alfabetica sunt:");
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
{
if(string[i].compareTo(string[j])>0)
{
String aux=string[i];
string[i]=string[j];
string[j]=aux;

}
}//sortarea alfabetica a sirurilor
for(int i=0;i<n;i++){
System.out.println(string[i]);//afisarea
sirurilor introduse
}
//pentru intregi
do{
System.out.print("Introduceti un
intreg de la tastatura: ");
intreg[n]=Read.ReadInt();//citire in
string
n++;
System.out.print("Doriti sa mai
introduceti un intreg? [Da/Nu] ");
continua2=Read.ReadInt();//citire in
flag
}
while(continua.equalsIgnoreCase("da")
);
System.out.println("Intregii introdusi
afisati in ordine crescatoare sunt:");
for(int i=0;i<n-1;i++)
{
if(intreg[i]>intreg[i+1])
{
int aux=intreg[i];
intreg[i]=intreg[i+1];
intreg[i+1]=aux;
}
}
for(int i=0;i<n;i++){
System.out.println(intreg[i]);//afisarea
intregilor introdusi
}
//pentru float
do{
System.out.print("Introduceti un
float de la tastatura: ");
flotant[n]=Read.ReadFloat();//citire
in string
n++;
System.out.print("Doriti sa mai
introduceti un float? [Da/Nu] ");
continua3=Read.ReadFloat();//citire
in flag
}
while(continua.equalsIgnoreCase("da")
);

System.out.println("Flotantii introdusi
afisati in ordine crescatoare sunt:");
for(int i=0;i<n-1;i++)
{
if(flotant[i]>flotant[i+1])
{
float aux=flotant[i];
flotant[i]=flotant[i+1];
flotant[i+1]=aux;
}
}
for(int i=0;i<n;i++){
System.out.println(flotant[i]);//afisarea
flotantilor introdusi
}
//pentru double
do{
System.out.print("Introduceti un
double de la tastatura: ");
dublu[n]=Read.ReadDouble();//citire
in string
n++;
System.out.print("Doriti sa mai
introduceti un float? [Da/Nu] ");
continua4=Read.ReadDouble();//citire
in flag
}
while(continua.equalsIgnoreCase("da")
);
System.out.println("Doubles introdusi
afisati in ordine crescatoare sunt:");
for(int i=0;i<n-1;i++)
{
if(dublu[i]>dublu[i+1])
{
double aux=dublu[i];
dublu[i]=dublu[i+1];
dublu[i+1]=aux;
}
}
for(int i=0;i<n;i++){
System.out.println(dublu[i]);//afisarea
doubles introdusi
} }
}
/*3. Definiti un pachet care
declara interfata Int1 (2
variabile intregi si o metoda

numita sum) si implementeaza


clasa Class1 (2 variabile
protected de tip float,
constructor, metode accesor si
mutator pentru variabilele din
clasa). Implementati un alt
fisier sursa care adauga in
acelasi pachet o noua interfata
numita Int2 (2 variabile de tip
double si o metoda numita
product). ntr-un fisier sursa
distinct, importati tot ce
contine pachetul definit anterior
si definite o clasa numita Class2
care este derivata din Class1 si
care foloseste ambele interfete
Int1 si Int2. Implementarile
metodelor din interfete
returneaza rezultatul
corespunzator prin aplicarea
asupra variabilelor din Class1 si
din ambele interfete. Instantiati
Class2 si aplicati metodele
disponibile asupra unor
variabile citite de la tastatura.*/
//Interfata Int1
package P5;
public interface Int1
{
int a=4;
int b=5;
int sum(int x,int y);
}
//clasa Class1
import P5.*;
public class Class1 implements
Int1
{
float c;
float d;
Class1()
{
c=(float)2.3432;
d=(float)7.0339;
}
public Class1(float c,float d)
{
this.c=c;
this.d=d;
}

public void display()


{
System.out.println("Ati introdus
numerele reale: "+c+" si +d);
}
public void set(float x,float y)
{
c=x;
d=y;
}
public int sum(int x,int y)
{
return a+b;
}
}
//Interfata Int2
package P5;
public interface Int2
{
double e=9.3;
double f=8.1;
double product(double x, double
y);
}
//Class2 derivara din Class1
implementeaza Int2
import java.lang.String;
import UserPackage.*;
import P5.*;
public class Class2 extends
Class1 implements Int2
{
Class2(){
super();
}
public static void main(String args[])
{
Class2 ob1= new Class2();
System.out.println("Introduceti doua
numere reale:");
float a,b;
System.out.print("a=");
a=(float)Read.ReadDouble();
System.out.print("b=");
b=(float)Read.ReadDouble();
ob1.set(a,b);
System.out.println("Prelucrare
numere float din Class1 introduse
de la tastatura!");
ob1.display();

System.out.println("Prelucrarea
numerelor "+Class1.a+" si
"+Class1.b+" de tip intreg din Int1
implementata cu Class1!");
System.out.println("Suma lor este:
"+ob1.sum(Class1.a,Class1.b));
System.out.println("Prelucrarea
numerelor "+Class2.e+" si
"+Class2.f+" de tip double din Int2
implementata cu Class2!");
System.out.println("Produsul lor
este:
"+ob1.product(Class2.e,Class2.f));
}
public double product(double x,
double y)
{
return x*y;
}}
/*5. Definiti un pachet Java
numit operator care contine
clasa Operations. In clasa
exista metode care ilustreaza
functionarea operatorilor binari
si unari +, -, *, /, &, |, <<,
>>, >>>, ++, -- atunci cand
sunt aplicati asupra unor
variabile primite ca parametri.
Metodele afiseaza operanzii si
rezultatul in binar si returneaza
rezultatul ca valoare intreaga.
Utilizati pachetul creat pentru a
prelucra doua valori intregi
predefinite. */
//pachetul
package Operator;
public class Operations {
public int Plus(int a, int b)
{
//operatorul +
System.out.println("Operanzii sunt
"+a+" si "+b);
System.out.println("Operandul este
+, iar suma lor in binar este:
"+Integer.toBinaryString(a+b));
return a+b;
}
public int Minus(int a, int b)
{

//operatorul System.out.println("Operanzii sunt


"+a+" si "+b);
System.out.println("Operandul este
-, iar diferenta lor in binar este:
"+Integer.toBinaryString(a-b));
return a-b;
}
public int Ori(int a, int b)
{
//operatorul *
System.out.println("Operanzii sunt
"+a+" si "+b);
System.out.println("Operandul este
*, iar produsul lor in binar este:
"+Integer.toBinaryString(a*b));
return a*b;
}
public float Impartire(int a, int b)
{
//operatorul /
System.out.println("Operanzii sunt
"+a+" si "+b);
System.out.println("Operandul este
/, iar catul lor in binar este: ");
return a/b;
}
public int Si(int a, int b)
{
//operatorul &
System.out.println("Operanzii sunt
"+a+" si "+b);
System.out.println("Operandul este
&, iar & lor in binar este: ");
return a&b;
}
public int Sau(int a, int b )
{
//operatorul |
System.out.println("Operanzii sunt
"+a+" si "+b);
System.out.println("Operandul este
|, iar | lor in binar este: ");
return a|b;
}
public int DeplStanga(int a, int b )
{
//operatorul <<

System.out.println("Operanzii sunt
"+a+" si "+b);
System.out.println("Operandul este
<<, iar << lor in binar este: ");
return a<<b;
}
public int DeplDreapta(int a, int b)
{
//operatorul >>
System.out.println("Operanzii sunt
"+a+" si "+b);
System.out.println("Operandul este
>>, iar >> lor in binar este: ");
return a>>b;
}
public int Shiftare(int a, int b)
{
//operatorul >>>
System.out.println("Operanzii sunt
"+a+" si "+b);
System.out.println("Operandul este
>>, iar >>> lor in binar este: ");
return a>>>b;
}
public int Inc(int a, int b)
{
//operatorul ++
System.out.println("Operanzii sunt
"+a+" si "+b);
System.out.println("Operandul este
++, iar ++ lui "+a+" in binar
este: ");
return ++a;
}
public int Dec(int a, int b)
{
//operatorul -System.out.println("Operanzii sunt
"+a+" si "+b);
System.out.println("Operandul este
--, iar -- lui "+b+" in binar este:
");
return --b;
}
}
//clasa principala
import Operator.*;
public class MainClass {
public static void main(String[]
args){

int a = 4;
int b = 6;
Operations ob = new Operations();
System.out.println("Suma in intreg:
"+ob.Plus(a, b));
System.out.println("Diferenta in
intreg: "+ob.Minus(a, b));
System.out.println("Produsul in
intreg: "+ob.Ori(a, b));
System.out.println("Impartirea in
intreg: "+ob.Impartire(a, b));
System.out.println("Si in intreg:
"+ob.Si(a, b));
System.out.println("Sau in intreg:
"+ob.Sau(a, b));
System.out.println("<< in intreg:
"+ob.DeplStanga(a, b));
System.out.println(">> in intreg:
"+ob.DeplDreapta(a, b));
System.out.println(">>> in intreg:
"+ob.Shiftare(a, b));
System.out.println("++ in intreg:
"+ob.Inc(a, b));
System.out.println("-- in intreg:
"+ob.Dec(a, b));
}
}
/*6. Definiti un pachet
anotimpuri. Creati in pachet o
noua interfata, anotimp, care
defineste metodele void
Culoare(), void Temperatura() si
void Afiseaza(). Definiti 4 clase
Primavara, Vara, Toamna si
Iarna, care sa implementeze
interfata anotimp si apoi sa
suprascrie metodele din
interfata cu metodele
Culoare(string culoare) si
Temperatura(string temperatura).
Creati un nou fisier, in pachetul
default, importati pachetul
anotimpuri si creati cate un
obiect de tipul Primavara, Vara,
Toamna si Iarna. Setati
temperatura si culoarea pentru
fiecare anotimp si
afisati rezultatele obtinute. */
//pachet
package Anotimpuri;

public interface Anotimp {


void Culoare();
void Temperatura();
void Afiseaza();
}
//clasa Primavara, implementeaza
Anotimp
package Anotimpuri;
public class Primavara
implements Anotimp {
String culoare = null;
String temperatura = null;
public void Culoare(String culoare)
{
System.out.println("Culoarea
anotimpului este: "+culoare+".");
}
public void Temperatura(String
temperatura)
{
System.out.println("Temperatura
este de: "+temperatura+" grade
Celsius.");
}
public void Afiseaza()
{
System.out.println("Anotimpul este
Primavara, cu urmatoarele
caracteristici:");
}
@Override
public void Culoare() {
// TODO Auto-generated method
stub
}
@Override
public void Temperatura() {
// TODO Auto-generated method
stub
}
//clasa Vara, implementeaza
Anotimp
package Anotimpuri;
public class Vara implements
Anotimp {
String culoare = null;
String temperatura = null;
public void Culoare(String culoare)
{

System.out.println("Culoarea
anotimpului este: "+culoare+".");
}
public void Temperatura(String
temperatura)
{
System.out.println("Temperatura
este de: "+temperatura+" grade
Celsius.");
}
public void Afiseaza()
{
System.out.println("Anotimpul este
Vara, cu urmatoarele
caracteristici:");
}
@Override
public void Culoare() {
// TODO Auto-generated method
stub
}
@Override
public void Temperatura() {
// TODO Auto-generated method
stub
}
}
//clasa Toamna, implementeaza
Anotimp
package Anotimpuri;
public class Toamna implements
Anotimp {
String culoare = null;
String temperatura = null;
public void Culoare(String culoare)
{
System.out.println("Culoarea
anotimpului este: "+culoare+".");
}
public void Temperatura(String
temperatura)
{
System.out.println("Temperatura
este de: "+temperatura+" grade
Celsius.");
}
public void Afiseaza()
{

System.out.println("Anotimpul este
Toamna, cu urmatoarele
caracteristici:");
}
@Override
public void Culoare() {
// TODO Auto-generated method
stub
}
@Override
public void Temperatura() {
// TODO Auto-generated method
stub
}
}
//clasa Iarna, implementeaza
Anotimp
package Anotimpuri;
public class Iarna implements
Anotimp {
String culoare = null;
String temperatura = null;
public void Culoare(String culoare)
{
System.out.println("Culoarea
anotimpului este: "+culoare+".");
}
public void Temperatura(String
temperatura)
{
System.out.println("Temperatura
este de: "+temperatura+" grade
Celsius.");
}
public void Afiseaza()
{
System.out.println("Anotimpul este
Iarna, cu urmatoarele
caracteristici:");
}
@Override
public void Culoare() {
// TODO Auto-generated method
stub
}
@Override
public void Temperatura() {
// TODO Auto-generated method
stub
}

}
//clasa principala
import Anotimpuri.*;
public class MainClass {
public static void main(String[]
args){
//declarare obiecte de tip
Primavara, Vara, Toamna, Iarna si
setarea lor.
Primavara ob1 = new Primavara();
ob1.Afiseaza();
ob1.Culoare("Verde deschis");
ob1.Temperatura("20");
System.out.println();
Vara ob2 = new Vara();
ob2.Afiseaza();
ob2.Culoare("Verde");
ob2.Temperatura("35");
System.out.println();
Toamna ob3 = new Toamna();
ob3.Afiseaza();
ob3.Culoare("Maro");
ob3.Temperatura("15");
System.out.println();
Iarna ob4 = new Iarna();
ob4.Afiseaza();
ob4.Culoare("Verde");
ob4.Temperatura("35");
}
}
Tema6
1. Cititi de la tastatura o serie
de perechi de numere (int,
float, etc.) si incercati sa
obtineti catul impartirii lor.
Afisati rezultatul.Tratati exceptia
de tip ArithmeticException data
de incercarea de a imparti un
numar la 0.*In modulul catch
aferent, dati impartitorului o
valoare predefinita si apoi
afisati rezultatul
impartirii.*Rescrieti codul de
mai sus folosind o metoda
numita divide() care
semnalizeaza exceptia de tip
ArithmeticException. *In functia
main(), tratati exceptia
semnalizata de metoda.
import java.io.DataInputStream;

import java.lang.String;
import java.io.IOException;
public class Tema2
{
public static void
main(String args[])
{
int n,m;
float p,q;
String numStr1=null;
String numStr2=null;
try
{
System.out.flush();
DataInputStream
dis=new
DataInputStream(System.in);
System.out.println("Introduceti doua
numere intregi:");
numStr1=dis.readLine();
numStr2=dis.readLine();
n=Integer.parseInt(numStr1);
m=Integer.parseInt(numStr2);
try
{
int rez=n/m;
System.out.println(n+" : "+m+" =
"+rez);
}
catch(ArithmeticException e)
{
System.out.println("Impartitor 0!");
}
}
catch (IOException ioe)
{
System.out.println(ioe.toString());
System.exit(1);
}
//incercare pentru float
try
{

System.out.flush();
DataInputStream
dis=new
DataInputStream(System.in);
System.out.println("Introduceti doua
numere reale:");
numStr1=dis.readLine();

main(), tratati exceptia


semnalizata de
metoda.*/
import java.io.DataInputStream;
import java.lang.String;
import java.io.IOException;
public class Tema3
{
public double Divide(double
x,int j)throws

numStr2=dis.readLine();
p=Float.parseFloat(numStr1);
q=Float.parseFloat(numStr2);
try
{
if(q==0)System.out.println("Impartitor
0!");
else
{
float
rez=p/q;
System.out.println(p+" : "+q+" =
"+rez);
}
}
catch(ArithmeticException e)
{

ArithmeticException,Exception
{
x=x/j;
if(j==0)throw new
Exception("din Divide");
return x;
}
public static void main (String[]
args)
{
double y;
Tema cls=new Tema();
int n,m;
String numStr1=null;
String numStr2=null;
try
{
for(int i=0;i<4;i++)
{
System.out.flush();
DataInputStream

System.out.println("Impartitor 0!");
}
}
catch (IOException ioe)
{

dis=new
DataInputStream(System.in);

System.out.println(ioe.toString());
System.exit(1);
}
}
}
*Rescrieti codul problemei
anterioare folosind o metoda
numita divide() care
semnalizeaza
exceptia de tip
ArithmeticException. In functia

numStr1=dis.readLine();

System.out.println("Numerele intregi
sunt :");

numStr2=dis.readLine();
n=Integer.parseInt(numStr1);
m=Integer.parseInt(numStr2);
try
{
y=cls.Divide(n,m);

System.out.println("Impartitorul este:
"+m);
System.out.println("Catul este: "+y);
}
catch(ArithmeticException e)
{
System.out.println("Impartire cu
zero!!!(geniule)");
m=1;
}
catch(Exception
e)
{
e.printStackTrace();
}
}
}
catch (IOException
{

ioe)

System.out.println(ioe.toString());
System.exit(1);
}
}
}
/*2.Definiti o clasa de tip
exceptie derivata dintr-o clasa
specifica, responsabila cu
tratarea exceptiilor *care apar
la incercarea de a converti in
valori numerice anumite
variabile de tip String care
contin date non-numerice.
*Folositi aceasta clasa pentru a
monitoriza o secventa de cod
care apartine functiei main(),
citeste de la tastatura valoarea
*non-numerica a unei variabile
de tip String si apoi incearca
sa o converteasca intr-un
numar intreg. Afisati continutul
stivei *program din zona
exceptiei aparute.
import javax.swing.JOptionPane;

class derivata_NFE extends


NumberFormatException
//clasa derivata din clasa
NumberFormatException
{
public String read() //metoda
pt citirea string-ului
{
String
s=JOptionPane.showInputDialog("Intro
duceti un string: ");
return s;
}//end read
public void convert(String s)
throws
NumberFormatException//metoda
pentru conversia din string in
numar
{
String v=new String();
v=("01234567890");
boolean b;
b=false;
for (int i=0;i<s.length();i+
+)
{
for (int
k=0;k<v.length();k++)
{
if
(s.charAt(i)==v.charAt(k)) //compara
daca un element din string este
numar
{
for (int
u=i;u<s.length();u++)
if
(((int)s.charAt(u)<47)||
((int)s.charAt(u)>=58))//compara
daca un element din string nu este
numar
break;
b=true;
}
else
if
(((int)s.charAt(i)<47)||
((int)s.charAt(i)>=58))//compara daca
un element din string nu este
numar

break;
}
}
if (b==true)
{
int
j=Integer.parseInt(s);
JOptionPane.showMessageDialog(null,
"Ati introdus numarul integer: "+j);
}
else throw new
NumberFormatException("Stringul nu
este numar, nu poate fi
convertit!");
}//end convert
}//end class derivata_NFE
class Tema4//clasa Tema4, contine
main
{
public static void main(String
args[])//metoda main
{
derivata_NFE x=new
derivata_NFE();//obiect nou al clasei
definite
String st=x.read();//apelam
metoda de citire
try//se incearca conversia
{
x.convert(st);
}
catch
(NumberFormatException e)//daca nu
a reusit conversia, se da mesaj de
exceptie
{
e.printStackTrace();//se
afiseasa stack trace
JOptionPane.showMessageDialog(null,
e.getMessage());
System.exit(0);
}
System.exit(0);
}//end main
}//end class Tema
/* 3.Scrieti o aplicatie Java care
implementeaza un bloc de cod
care poate sa genereze exceptii

* aritmetice, de tip I/O, de


depasire a indecsilor de
accesare a elementelor dintr-un
sir sau de orice * alt tip.
Afisati mesaje semnificative in
fiecare bloc catch aferent.
Atentie la ordinea in care sunt
* mentionate blocurile de
tratare a exceptiilor. Mutati
intr-o metoda blocul de cod
care poate genera * exceptii si
apoi rescrieti modalitatile de
tratare.*/
import java.io.*;
import javax.swing.JOptionPane;
import java.io.IOException;
class exc extends Exception
//clasa exc este derivata din clasa
Exception
{
public int i;
public double d,j;
public void read()//metoda
pentru citire
{
System.out.print("Introduc
eti un numar intreg: ");
try//se incearca citirea
{
DataInputStream
data=new
DataInputStream(System.in);
i=Integer.parseInt(data.readLine());
}//end try
catch(IOException
ww)//daca nu a reusit citirea, se da
mesaj de exceptie
{
System.out.print("Exceptie la citirea
numarului intreg!");
}//end catch
System.out.print("Introduceti un
double: ");
try//se incearca citirea
{

DataInputStream
data=new
DataInputStream(System.in);
d=Double.parseDouble(data.readLine(
));
}//end try
catch(IOException
ww)//daca nu a reusit citirea, se da
mesaj de exceptie
{
System.out.print("Exceptie la citirea
numarului double!");
}//end catch
}//end read
public void div() throws
Exception//metoda de divizare
{
if (d==0) throw new
Exception ("Eroare la diviziune cu
0!");//exceptie daca se incearca
diviziune cu 0
else
{
j=i/d;
System.out.print(i+" :
"+d+" = "+j);//daca diviziunea este
corecta, se afiseaza mesaj
}
}//end div
}//end class exc
class Tema5 //class Tema5, contine
main
{
public static void main(String
args[])//metoda main
{
exc b1=new exc();//se
creeaza un obiect nou ce apartine
clasei exc
b1.read();//se apeleaza
metoda de citire
try//se incearca divizarea
{
b1.div();
}//end try
catch (Exception e)//daca
divizarea nu a reusit, se afiseaza
mesaj de exceptie

{
System.out.print(e.getMessage());
System.exit(0);
}//end catch
System.exit(0);
}//end main
}//end class Tema
/*4. Scrieti o aplicatie Java
care defineste o clasa care are
ca atribut privat un sir de
*tring-uri reprezentand
numele unor studenti. Numarul
inregistrarilor este predefinit si
are valoarea 20. *Numarul real
de variabile este determinat
prin citirea lor de la tastatura,
cu confirmare. Implementati
*un algoritm de sortare
alfabetica a elementelor din sir
(20 de pozitii) si tratati
exceptiile produse de accesarea
*elementelor inexistente.
public class Testproblema4 {
public static void main(String[]
args) throws Exception {
Studenti STD =new
Studenti();
for(int i=0;i<5;i++)
{
try
{
STD.read(i);
}catch(Exception e){
System.out.print(e.getMessage());
}
}
STD.sortare();
STD.afisare();
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.String;
public class Studenti {
public int limit=20;
private String[]studenti=new
String[20];

public void read(int i)


throws Exception//metoda pentru
citire
{
String sample =
null;
BufferedReader
br = new BufferedReader(new
InputStreamReader(System.in) );

}
public void sortare(){
for(int
i=0;i<this.limit;i++)
{
for(int
j=i+1;j<this.limit;j++)
{
try{

System.out.print("Introduceti numele
celui deal "+i+" student:");
sample =
br.readLine();

this.interschimbare(i,j);

if(sample.length()==0)

System.out.println(e.getMessage());
}
}
}
}
public void afisare(){
for(int i=0;i<limit;i++)
{

{
this.studenti[i]= new String();
throw
new Exception("Numele nu a fost
setat");
}
else
{
this.studenti[i]=sample;
}
}
public void
interschimbare(int i,int j) throws
Exception
{
if(this.studenti[i].length()==0 ||
this.studenti[j].length()==0 )
throw new
Exception("Se compara cu sir null");
else
if(this.studenti[i].compareTo(this.stude
nti[j]) > 0)
{
String
copie=this.studenti[i];
this.studenti[i]=this.studenti[j];
this.studenti[j]=copie;
}

}
catch(Exception e)
{

if(this.studenti[i].length()>0)System.o
ut.println(this.studenti[i]);
}
}
}
/*7. Un dreptunghi este definit
de 2 puncte: coordonatele col?
ului din stnga, sus ?i cele ale
col?ului din dreapta, jos. *Clasa
dreptunghi implementeaza ?i o
metoda pentru calcularea ariei
sale. *Cititi de la tastatura
coordonatele unui dreptunghi ?i
verifica?i daca 10 dreptunghiuri
*generate aleator au macar
15% din arie n comun cu aria
dreptunghiului ini?ial. *Daca un
dreptunghi nu verifica aceasta
condi?ie se va declan?a
IllegalArgumentException ?i se
vor fi
*afi?ate coordonatele
dreptunghiul eronat.
Dreptunghiurile generate trebuie
plasate de la nceput doar

*ntr-o arie de 150% n jurul


dreptunghiului ini?ial.
public class Problema7test {
public static void main(String[]
args) {
Dreptunghi drept=new
Dreptunghi();
drept.citirecoordonate();
///System.out.println(drept.arie());
Dreptunghi[]
dreptunghiuri=new Dreptunghi[10];
for(int
i=0;i<dreptunghiuri.length;i++)
{
dreptunghiuri[i]= new
Dreptunghi();
dreptunghiuri[i].generare();
System.out.println(dreptunghiuri[i].ari
e());
}
}
}
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;
public class Dreptunghi {
Random rd=new Random();
private int x1;
private int y1;
private int x2;
private int y2;
static int xinitial1;
static int yinitial1;
static int xinitial2;
static int yinitial2;
public int generare150(int x){
return x*150/100;
}
public void afisarec(){
System.out.println("x1"+this.x1+"y1"
+this.y1+"x2"+this.x2+"y2"+this.y2);
}
public void generare()
{

System.out.println(Dreptunghi.xinitial1
);
this.x1=this.rd.nextInt(Dreptunghi.xini
tial1)+this.generare150(Dreptunghi.xi
nitial1);
this.y1=this.rd.nextInt(Dreptunghi.yini
tial1)+this.generare150(Dreptunghi.yi
nitial1);
this.x2=this.rd.nextInt(Dreptunghi.xini
tial2)+this.generare150(Dreptunghi.xi
nitial2);
this.y2=this.rd.nextInt(Dreptunghi.yini
tial2)+this.generare150(Dreptunghi.yi
nitial2);
}
public float arie()
{
return Math.abs((this.x2this.x1)*(this.y1-this.y2));
}
public void citirecoordonate(){
try{
System.out.print("Colt
Stanga Sus x1:");
DataInputStream
data=new
DataInputStream(System.in);
Dreptunghi.xinitial1=Integer.parseInt(
data.readLine());
}catch(IOException ww){
System.out.print("Exceptie la citire");
}
try{
System.out.print("Colt
Stanga Sus y1:");
DataInputStream
data=new
DataInputStream(System.in);
Dreptunghi.yinitial1=Integer.parseInt(
data.readLine());
}catch(IOException ww){

System.out.print("Exceptie la citire");
}
try{
System.out.print("Colt
Stanga Sus x2:");
DataInputStream
data=new
DataInputStream(System.in);
Dreptunghi.xinitial2=Integer.parseInt(
data.readLine());
}catch(IOException ww){
System.out.print("Exceptie la citire");
}
try{
System.out.print("Colt
Stanga Sus y2:");
DataInputStream
data=new
DataInputStream(System.in);
Dreptunghi.yinitial2=Integer.parseInt(
data.readLine());
}catch(IOException ww){
System.out.print("Exceptie la citire");
}
}
}
Tema 7
1. Scrieti un applet Java care
preia 4 parametri (int, float)
din fisierul HTML atasat.
Folositi acesti parametri pentrr
a desena un dreptunghi rotunjit
umplut cu o anumita culoare
(verde, albastru, etc.). Definiti
culoarea conturului si culoarea
de umplere folosind
componentele RGB.
import java.applet.*;
import java.awt.*;
import java.lang.*;
public class RoundRectangle
extends Applet
{int x,y,w,h;
public void init()

{x=Integer.parseInt(getParameter("x")
);
y=Integer.parseInt(getParameter("y"));
w=Integer.parseInt(getParameter("w")
);
h=Integer.parseInt(getParameter("h"))
;}
public void paint(Graphics g)
{Color c=new Color(190,30,70);
g.setColor(c);
g.fillRoundRect(x,y,w,h,10,10);}
}
2. Scrieti un program Java
(appletcation) care, in cazul in
care este rulat ca aplicatie
independenta, citeste un sir de
caractere de la tastatura si
inlocuieste primul si ultimul
caracter cu '*'. Daca este rulat
ca applet, programul afiseaza
un mesaj.
import java.applet.*;
import java.awt.*;
import java.io.*;
public class Appletcation
extends Applet {
public void paint(Graphics g)
{g.drawString("mesaj...",25,25);}
public static void main(String[] args)
{String s=new String();
DataInputStream in=new
DataInputStream(System.in);
System.out.println("Introduceti sirul
de caractere: ");
try{s=in.readLine();
}
catch(IOException e){}
String a="*";
System.out.println("Noul sir este: ");
System.out.println(a+s.substring(1,s.l
ength()-1)+a);
}
}
3. Scrieti un applet Java care
afiseaza pe ecran o imagine (se
folosesc metodele getImage() si
drawImage()). Completati
fisierul sursa cu liniile de cod
care redau o secventa sonora
(getAudioClip()).

import java.applet.*;
import java.awt.*;
public class image extends
Applet {
Image img;
AudioClip aud;
public void init()
{img=getImage(getCodeBase(),"winte
r.gif");
aud=getAudioClip(getCodeBase(),"lala
.au");
}
public void paint(Graphics g)
{g.drawImage(img,0,0,this);
aud.loop();}
}
4. Scrieti un applet Java care
preia din fisierul HTML un
numar intreg numit n. Aplicatia
deseneaza o tabla de joc cu
nxn patrate colorate alternativ
in doua culori preluate tot ca
intreg din fisierul HTML
import java . awt .*;
import java.applet.Applet;
public class p4 extends Applet{
int n,r,v,b;
String s;
public void start()
{s=getParameter("n");
n=Integer.parseInt(s);
s=getParameter("r");
r=Integer.parseInt(s);
s=getParameter("v");
v=Integer.parseInt(s);
s=getParameter("b");
b=Integer.parseInt(s);
}
public void paint(Graphics g)
{
Color col1=new
Color(r,v,b);
Color col2=new
Color(22,100,50);
int i,j;
for( i=0;i<n;i++)
for(j=0;j<n;j++)
if(i%2==0)

if(j%2==0)
{g.setColor(col1);
g.fillRect(i*10,j*10,10,10);
}
else
{g.setColor(col2);
g.fillRect(i*10,j*10,10,10);
}
else
if(j%2==0)
{g.setColor(col2);
g.fillRect(i*10,j*10,10,10);
}
else
{g.setColor(col1);
g.fillRect(i*10,j*10,10,10);
}
}
}
5. Scrieti un applet Java care
deseneaza o banda colorata in
toate culorile posibile. Banda
incepe de la culoarea rosie iar
tranzitiile dintre culori trebuie
facute lin. Aplicatia deseneaza
(redeseneaza) banda pe masura
ce culorile sunt generate.
import java . awt .*;
import java.applet.Applet;
public class rainbow extends
Applet
{int i,x;
public void paint(Graphics g)
{
for(i=0;i<256;i++)
{
Color col =new Color(255,i,0);
g.setColor(col);
g.fillRect(i,0,1,10);
}
for(i=255;i>=0;i--)
{Color col1 =new Color(i,255,0);

g.setColor(col1);
g.fillRect((511-i),0,1,10);
}
for(i=0;i<256;i++)
{Color col =new Color(0,255,i);
g.setColor(col);
g.fillRect((512+i),0,1,10);
}
for(i=255;i>=0;i--)
{Color col1 =new Color(0,i,255);
g.setColor(col1);
g.fillRect((1023-i),0,1,10);
}
for(i=0;i<256;i++)
{Color col =new
Color(i,0,255);
g.setColor(col);
g.fillRect((1024+i),0,1,10);
}
}
}
6. Realiza?i un appletcation
care, atunci cnd este rulat ca
aplica?ie va afi?a mesajul:
Ruleaza-m ca applet. Cnd
este rulat ca applet va citi ca
parametru HTML raza unui cerc.
Desena?i un ptrat ?i un
triunghi nscrise n
interiorulacestui cerc.
import java.applet.*;
import java.awt.*;
public class cerc extends
Applet{
int r;
public static void main(String[]
args)
{System.out.println("Ruleaza-ma
ca Applet.");}
public void init()
{r=Integer.parseInt(getParameter("r"))
;
}
public void paint(Graphics g)
{g.drawOval(0,0,r,r);
g.drawRect(29,29,140,140);
int[] x={13,100,187};
int[] y={150,0,150};
int n=3;

g.drawPolygon(x,y,n);}
}
7. Desena?i primele n poligoane
care au numrul de diagonale
cel pu?in de x ori mai mare
dect numrul de laturi. n ?i x
sunt citi?i ca parametrii din
pagina HTML. Poligoanele sunt
umplute cu culori aleatorii.
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Polygon;
import
java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class pol extends JPanel
{
public void
paintComponent(Graphics g) {
super.paintComponent(g);
int n=5;
int x=2;
int j=5;
int k=1;
while(n>0){
if((j-3)/2>=x)
{ Polygon p = new
Polygon();
for (int i = 0; i < j; i++)
p.addPoint((int) (k*100+ 50 *
Math.cos(i * 2 * Math.PI / j)),
(int) (100 + 50 *
Math.sin(i * 2 * Math.PI / j)));
Color c=new Color(j*12,j*2,0);
g.setColor(c);
g.fillPolygon(p);
k++;
j++;
n--;
}
else
{j++;}
}
}
public static void main(String[]
args) {
JFrame frame = new JFrame();

frame.setTitle("DrawPoly");
frame.setSize(350, 250);
frame.addWindowListener(new
WindowAdapter() {
public void
windowClosing(WindowEvent e) {
System.exit(0);
}
});
Container contentPane =
frame.getContentPane();
contentPane.add(new pol());
frame.show();
}
}
Tema8
1. Scrieti un applet Java care
are 3 componente de tip
Checkbox si un buton la
apasarea caruia se afiseaza,
prin intermediul unei
component de tip Label, un
text care contine o informare
asupra selectiei facute.
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class CheckboxTest
extends Applet {
Button btnchoice;
Checkbox chk1;
Checkbox chk2;
Checkbox chk3;
Label selection;
public void init(){
btnchoice=new Button
("Alege");
add(btnchoice);
chk1=new Checkbox ("Suc
de mere");
chk2=new Checkbox
("Ceai");
chk3=new Checkbox
("Cafea");
selection= new Label("Ati ales:
");
add(chk1);
add(chk2);
add(chk3);
add(selection);

}
public boolean action (Event
evt, Object arg){
String sel=new String("Ati
ales: ");
if(evt.target==btnchoice){
if(chk1.getState())
sel+=chk1.getLabel()+'*';
if(chk2.getState())
sel+=chk2.getLabel()+'*';
if(chk3.getState())
sel+=chk3.getLabel()+'*';
}
selection.setText(sel);
return true;
}
}
2. Scrieti un applet Java care
contine 2 componente de tip
TextField, o componenta de tip
TextArea si 4 butoane cu
etichetele "+", "-", "*" si "/". La
apasarea unui buton se
calculeaza rezultatul operatiei
aritmetice corespunzatoare,
efectuate intre numerele scrise
in cele 2 componente de tip
TextField. Rezultatul se adauga,
pe un rand nou, la sfarsitul
textului deja existent in
componenta de tip TextArea.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Calculator extends
Applet{
Button btnplus;
Button btnminus;
Button btndivide;
Button btnmultiply;
TextField txt1;
TextField txt2;
TextArea txt3;
Double a;
Double b;
public void init(){
btnplus= new Button("+");

btnminus= new
Button("-");
btndivide= new
Button("/");
btnmultiply= new
Button("*");
txt1= new TextField(5);
txt2= new TextField(5);
txt3= new TextArea(8,10);
add(txt1);
add(btnplus);
add(btnminus);
add(btndivide);
add(btnmultiply);
add(txt2);
add(txt3);
}
public boolean action (Event
evt, Object arg){

si eticheta butonului este


schimbata in "Verde", s.a.m.d.
import java.awt.*;
import java.awt.event.*;
public class ColoredRectangle
extends Applet implements
ActionListener{
Button btncolor;
int x=100;
int y=100;
int w=100;
int h=50;
public void init(){
btncolor= new
Button("rosu");
btncolor.addActionListener(this);
add(btncolor);
}
public void
actionPerformed(ActionEvent e){

a=Double.parseDouble(txt1.getText());
if(btncolor.getLabel().equals("rosu")){
b=Double.parseDouble(txt2.getText());
if(evt.target==btnplus)
txt3.append(Double.toString(a+b)
+"\n");
if(evt.target==btnminus)
txt3.append(Double.toString(a-b)
+"\n");
if(evt.target==btnmultiply)
txt3.append(Double.toString(a*b)
+"\n");
if(evt.target==btndivide)
txt3.append(Double.toString(a/b)
+"\n");
return true;
}
}
3. Scrieti un applet Java care
care deseneaza la pozitia
(100,100) un dreptunghi verde
cu laturile de 100 si 50. La
apasarea unui buton cu
eticheta "Rosu",dreptunghiul
este redesenat cu noua culoare

btncolor.setLabel("verde");
}
else{
btncolor.setLabel("rosu");
repaint();
}
}
public void paint(Graphics g){
if(btncolor.getLabel().equals("rosu"))
g.setColor(Color.GREEN);
else
g.setColor(Color.RED);
g.drawRect(x, y, w, h);
}
}
4. Scrieti un applet Java care
detecteaza click-ul butonului
stanga al mouse-ului si
deseneaza la pozitia respectiva
un dreptunghi plin. Culoarea
dreptunghiului este schimbata la
fiecare click, fiind generata
aleator.

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import
java.awt.event.MouseMotionListener;
import java.applet.*;
public class P4 extends Applet
implements MouseListener,
MouseMotionListener{
int mouseX=0,mouseY=0;
public void init(){
addMouseListener(this);
addMouseMotionListener(this);
}
public void
mousePressed(MouseEvent me){
mouseX=me.getX();
mouseY=me.getY();
repaint();
}
public void paint(Graphics g){
int R=(int) (Math.random()
* 255 );
int G=(int) (Math.random()
* 255 );
int B=(int) (Math.random()
* 255 );
Color myColor=new
Color(R,G,B);
g.setColor(myColor);
g.fillRect(
mouseX,
mouseY,40,40);
}
public void
mouseDragged(MouseEvent e) {}
public void
mouseMoved(MouseEvent e) {}
public void
mouseClicked(MouseEvent e) {}
public void
mouseEntered(MouseEvent e) {}
public void
mouseExited(MouseEvent e) {}
public void
mouseReleased(MouseEvent e) {}
}
5. Scrieti un applet Java care
deseneaza pe ecran o tabla de
joc (problema 4 din lab. 7).

Cand se face click cu mouse-ul


pe unul din patrate, culoarea
acestuia este schimbata in rosu.
Pe ecran sunt afisate in
permanenta numarul de click-uri
efectuate in patrate si in afara
tablei de joc si numarul de
patrate disponibile.
import java.awt.*;
import java.applet.Applet;
public class P5 extends
Applet{
private static final int n =
4;
private Rectangle
rectangles[][] = new Rectangle[n]
[n];
private boolean inRect[][]=
new boolean[n][n];
public void init()
{
int x = 20;
int y = 20;
int width = 30;
int height =30;
for (int i = 0;i<n;i++){
for (int j = 0; j <
n; j++)
{
inRect[i][j] = false;
rectangles[i][j] =
new Rectangle(x, y, width, height);
x +=width;
}
x=20;
y +=height;
}
}
public boolean
mouseMove(Event event, int x, int
y)
{
boolean change = false;
for (int i = 0; i < n;
i++)
for (int j = 0; j <
n; j++)
{

if (!inRect[i][j] &&
rectangles[i][j].inside(x, y))
{
inRect[i][j] =
true;
change = true;
}
if (inRect[i][j]&& !
rectangles[i][j].inside(x, y))
{
inRect[i][j] =
false;
change = true;
}
}
if (change)
repaint();
return true;
}
public void paint(Graphics
g){
for (int i = 0; i < n;
i++)
for (int j = 0; j <
n; j++)
{
if (inRect[i][j]
== true){
g.setColor(Color.red);
g.fillRect(rectangles[i][j].x,
rectangles[i][j] .y,
rectangles[i][j] .width, rectangles[i][j]
.height);
}
else{
if(((i+j)
%2==1))
g.setColor(Color.BLACK);
else
g.setColor(Color.YELLOW);
g.fillRect(rectangles[i][j] .x,
rectangles[i][j] .y,

rectangles[i][j] .width, rectangles[i][j]


.height);
}
}
}
}
Tema10
1. Considerand algoritmul
bubble-sort, verificati
functionalitatea lui introducand
date folosind :- un obiect
DataInputStream si citirea unui
String cu readLine() -eprecatedpachetul CCJ sau un pachet
propriu care permite I/E- un
obiect BufferedReader conectat
la un InputStreamReader prin
System.in*/
//DataInputStream
import
java.io.DataInputStream;
import java.io.IOException;
public class
BubbleSortAlgDataInputStream
{
public static void
main(String args[]) throws
IOException
{
int vector[]=new
int[10];
int n,aux;
String str=null;
DataInputStream
dis=new
DataInputStream(System.in);
System.out.print("Dati numarul de
elemente n:");
str=dis.readLine();
n=Integer.parseInt(str);
for(int i=0;i<n;i++)
{
System.out.print("Element["+i+"]:");
str=dis.readLine();
vector[i]=Integer.parseInt(str);
boolean ok =
true;
while (ok)
{
ok = false;

for(int

i=0;i<n-

do{

1;i++)

ok=true;
for(int i=0;i<n-

for(int
j=0;j<n-i-1;j++)

1;i++)
{

if(

vector[j+1]

<

vector[j]

if( vector[i]
{

> vector[i+1] )

aux=vector[j];
vector[j]=vector[j+1];

{
ok=false;

vector[j+1]=aux;

aux=vector[i];
ok

true;

}
}
System.out.print("Sirul
ordonat este: ");
for(int i=0;i<n;i++)
{
System.out.print(vector[i]+" ");
}
}
}
//CCJ
import java.util.*;
import java.io.Console;
import java.io.DataInputStream;
import java.lang.System;
import java.io.IOException;
import ccj.Console;
class BubbleSortAlgCCJ {
public static void
main(String args[]) throws
IOException
{
boolean ok;
int n,aux;
int vector[]=new
int[10];
System.out.print("Dati numarul
de elemente n=");
n=Console.in.readInt();
System.out.print("Dati
elementele: ");
for(int i=0;i<n;i++)
{
vector[i]=Console.in.readInt();
}

vector[i]=vector[i+1];
vector[i+1]=aux;
}
}
}
while(!ok);
System.out.print("Sirul
oradonat crescator este: ");
for(int i=0;i<n;i+
+)
System.out.println(vector[i]+" ");
}
}
//BufferedReader
import java.io.*;
import java.lang.System;
public class
BubbleSortAlgBufferReader
{
public static void
main(String args[]) throws
IOException
{
BufferedReader
scanner=new BufferedReader(new
InputStreamReader(System.in));
String str=null;
int n,aux;
int vector[]=new int[10];
System.out.print("Dati
numarul de elemente n:");
str=scanner.readLine();
n=Integer.parseInt(str);
//Citirea sirului
for(int i=0;i<n;i++)
{

System.out.print("Elem["+i+"]:");
str=scanner.readLine();
vector[i]=Integer.parseInt(str);
}
//BubbleSort
boolean ok = true;
while (ok)
{
ok = false;
for(int i=0;i<n-1;i++)
for(int j=0;j<n-i1;j++)
if(

vector[j+1]

<

vector[j]
{

aux=vector[j];
vector[j]=vector[j+1];
vector[j+1]=aux;
ok

true;
}
}
System.out.print("Sirul ordonat
este: )
for(int i=0;i<n;i++)
{
System.out.print(vector[i]+" ");
}
}
}
/*2. Scrieti o aplicatie Java care
concateneaza datele angajatilor
unei firme considerand mai
multe departamente (Maxd departamente) avand nume de
tip String. Datele angajatilor
fiecarui departament sunt
stocate in fisiere distincte. Se
va genera o secventa cu toti
angajatii companiei
folosind clasa
SequenceInputStream.
Afisati angajatii din fiecare
departament in parte si apoi
angajatii care au salariul mai

mare decat un anumit prag citit


de la tastatura.*/
import java.io.*;
import java.util.*;
class DateAngajati
{
public static void main(String
args[])
{
departamentClass
[]departament;//se creeaza un sir
de departamente
String []den=new String[2];//se
creeaza un sir de denumiri
den[0]="departament1.txt";
den[1]="departament2.txt";
departament=new
departamentClass[2];
departament[0]=new
departamentClass("dep1",den[0]);
departament[1]=new
departamentClass("dep2",den[1]);
}
}
class departamentClass
{
String name,text;
String []nume=new String[3];
String []prenume=new
String[3];
int []salariu=new int[3];
int lim;
departamentClass(String
nm,String file)
{
name=nm;
try
{
FileInputStream
fstream = new FileInputStream(file);
DataInputStream in =
new DataInputStream(fstream);
BufferedReader br =
new BufferedReader(new
InputStreamReader(in));
for(int i=0;i<3;i++)
{
text=
br.readLine();

StringTokenizer
stk=new StringTokenizer (text," ");
nume[i]=stk.nextToken();
prenume[i]=stk.nextToken();
salariu[i]=Integer.parseInt(stk.nextTok
en());
}
}
catch(IOException e)
{
System.exit(1);
}
System.out.println("Angajatii
departamentului "+name+" sunt:");
for(int i=0;i<3;i++)
{
System.out.println(nume[i]+"
"+prenume[i]);
}
System.out.println("Dati o
limita inferioara pt salariu:");
try
{
DataInputStream
data=new
DataInputStream(System.in);
lim=Integer.parseInt(data.readLine());
}
catch(IOException ww)
{
System.exit(1);
}
System.out.println("Angajatii
departamentului "+name+" care au
salariu mai mare decat "+lim+"
sunt:");
for(int i=0;i<3;i++)
{
if(salariu[i]>lim)
System.out.println(nume[i]+"
"+prenume[i]+" "+salariu[i]);
}
}
}
//*3. Realizati o aplicatie Java
care primeste de la intrarea

standard siruri de caractere sub


formatul"dd.MM.yyyy.HH:mmautor-subiect", care extrage si
tipareste datele pe ecran sub
formatul "ddmm-yyyy
tor:subiect". Aplicatia iese din
executie la apasarea tastei
"X".Recomandare : utilizati clasa
StringTokenizer.*/
import java.util.StringTokenizer;
import java.io.*;
import java.util.*;
public class DayMonthYear
{
@SuppressWarnings("deprecation")
public static void
main(String args[]) throws
IOException
{
String str;
String
zi,luna,an,ora,minute,autor,subiect;
DataInputStream din=
new DataInputStream(System.in);
boolean t = true;
String s;
do {
System.out.println("Dati data in
format: dd.MM.yyyy.HH:mm-authorsubject.");
str=din.readLine();
StringTokenizer
s1=new StringTokenizer(str,".");
zi=s1.nextToken();//zi=dd
luna=s1.nextToken();//luna=mm
an=s1.nextToken();//an=yyyy
ora=s1.nextToken(":");
minute=s1.nextToken("-");
autor=s1.nextToken("-");
subiect=s1.nextToken("-");
System.out.println("Data

in

format: dd-MM-yyyy
author:subject.");
System.out.println("Data:"+zi+"-"+lun
a+"-"+an+" "+autor+":"+subiect);
System.out.println("Doriti sa mai
continuati?(Y/N)");
s=din.readLine();
s=s.toUpperCase();
if (s.charAt(0)=='N')
t=false;
else t=true;
}while(t==true);
}
}//class
/*4. Implementati aplicatia
anterioara folosind un fisier de
intrare care contine un anumit
numar de inregistrari cu
formatul specificat mai sus.*/
import java.io.*;
import java .util .* ;
import javax.swing.JOptionPane;
public class DayMonthYearFisier
{
public static void main(String
args[])
{
String auth,sub;
String d,m,y;
String text;
String yn = null;
try
{
//se creeaza stream
pt a citi din fiserul cu denumirea
specificata
FileInputStream
fstream = new
FileInputStream("problema4.txt");
DataInputStream in =
new DataInputStream(fstream);
BufferedReader br =
new BufferedReader(new
InputStreamReader(in));
text= br.readLine();//se
citeste prima linie din fisier
do
{

System.out.println("text= "+text);
StringTokenizer
stk=new StringTokenizer
(text,".");//se seteaza separatorul
//se preiau datele
separate de catre separatorul setat
anterior
d=stk.nextToken();
m=stk.nextToken();
y=stk.nextToken();
stk=new
StringTokenizer (text,"-");//se seteaza
separatorul
//se preiau datele
separate de catre separatorul setat
anterior
stk.nextToken();
auth=stk.nextToken();
sub=stk.nextToken();
//se afiseaza
datele in formatul cerut
JOptionPane.showMessageDialog(null,
d+"-"+m+"-"+y+" "+auth+":"+sub);
//se cere
confirmarea pt a continua cu
preluarea si afisarea datelor
yn=JOptionPane.showInputDialog("Dor
iti sa continuati? (Y/N)");
}
while((yn.equalsIgnoreCase("Y"))&&(te
xt = br.readLine()) != null) ;
}
catch(IOException e)
{
System.exit(1);
}
}
}
/*5. Creati un fisier de tip CSV
care contine pe linii distincte
urmatoarele informatii, separate
prin caracterul #:
- nume student
- an

- nota_1
- ...
- nota_5
Cititi informatia din fisier si
apoi afisati toate datele
studentilor care au media mai
mare ca 8.Obs.: lista de
studenti trebuie ordonata
alfabetic.*/
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
public class Studenti
@SuppressWarnings("deprecation")
public static void main(String[] args)
throws IOException {
String fName =
"C:\\Java\\Workspace\\Lab10\\Prob5\\da
te.csv";
String thisLine;
int i = 0;
float media;
FileInputStream fis = new
FileInputStream(fName);
DataInputStream myInput
= new DataInputStream(fis);
while ((thisLine =
myInput.readLine()) != null)
{
String strar[] =
thisLine.split("#");
for(int j=0;j<strar.length;j+
+)
{
media
=((Float.parseFloat(strar[2])
+Float.parseFloat(strar[3])
+Float.parseFloat(strar[4])
+Float.parseFloat(strar[5])
+Float.parseFloat(strar[6]))/5);
if(i==0){
if(j==0 &&
media>=8)
{
String[] names =
{strar[j]};
Arrays.sort(names);
System.out.print("Studentul:

"+names[j]+" din anul de studiu:


"+strar[1]+" are media: ");
System.out.print(media);
System.out.println();
}
}
}
}
}
}
Mihnea Andreea#2#5#8#6#4#7
Ion Pitt#2#7#6#5#9#10
Ulici Ion#3#8#8#9#10#9
Puicar Izabela#4#2#2#10#10#6
Covaci Iulian#1#6#6#6#10#7
CSV
/*7. Cititi dintr-un fisier text o
imagine grayscale reprezentata
ca o matrice de intregi.
Imaginea este urmata de mai
multe filtre de convolutie.
Aplicati aceste filtre pe
imaginea originala si afisati atat
imaginea originala cat si
imaginile rezultate.*/
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import
java.awt.image.BufferedImage;
import
java.awt.image.BufferedImageOp;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import
java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ImageProcessing
extends JPanel {
private static final long
serialVersionUID = 1L;
public String getName() {
return "Image Processing";
}

Image image;
public ImageProcessing() {
image =
Toolkit.getDefaultToolkit().getImage("C
:\\Java\\Workspace\Lab10Pb7\\Poza.jpg
");
}
static String[] filterNames =
new String[] { "Original","Blur",
"Sharpen", "Edge Detect"};
static BufferedImageOp[] filters
= new BufferedImageOp[] {
null,
new ConvolveOp(new Kernel(3,
3, new float[] { 1f, 2f, 1f, 2f, 4f,
2f, 1f, 2f, 1f})),
new ConvolveOp(new Kernel(3,
3, new float[] { -1f, -1f, -1f, -1f,
9f, -1f, -1f, -1f, -1f })),
new ConvolveOp(new Kernel(3,
3, new float[] {-1f, -1f, -1f, -1f, 8f,
-1f, -1f, -1f, -1f}))};
public void paint(Graphics g1)
{
Graphics2D g =
(Graphics2D) g1;
BufferedImage bimage =
new
BufferedImage(image.getWidth(this),
image.getHeight(this),
BufferedImage.TYPE_INT_RGB);
Graphics2D ig =
bimage.createGraphics();
ig.drawImage(image, 0, 0,
this);
g.setFont(new
Font("SansSerif", Font.BOLD, 12));
g.setColor(Color.red);
g.translate(10, 10);
for (int i = 0; i <
filters.length; i++) {
if (filters[i] == null)
g.drawImage(bimage, 0, 0, this);
else
g.drawImage(filters[i].filter(bimage,
null), 0, 0, this);
g.drawString(filterNames[i], 0, 205);

g.translate(137, 0);
}
}
public static void main(String[]
a) {
JFrame f = new JFrame();
f.addWindowListener(new
WindowAdapter() {
public void
windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setContentPane(new
ImageProcessing());
f.pack();
f.setVisible(true);
}
}
Tema 11

1. Sa se scrie o aplicatie Java distribuita


folosind o conexiune fara confirmare
(datagrame) care permite autentificarea
utilizatorilor. Utilizatorul va trimite numele
ca si datagrama iar aplicatia server asculta
pentru mesaje de autentificare timp de 25
secunde, la finalul carora trimite clientului un
mesaj de notificare. Aplicatia returneaza un
mesaj personalizat numelui utilizatorului in
caz de autentificare reusita, clientul afisand
mesajul. (se va folosi metoda etSoTimeout(ss)
pentru stabilirea timpului de ascultare la
socketul serverului)
import java.io.*;
import java.net.*;
public class UDPClient {
public static void main(String[] args)
{try{
DatagramSocket socket=new
DatagramSocket();
System.out.println("Socket
initializat.client");
String toSend="anca";
byte[] buff=toSend.getBytes();
DatagramPacket pt=new
DatagramPacket(buff,buff.length,InetAddress.ge
tByName("127.0.0.1"),1234);
socket.send(pt);
byte[] buffer=new byte[256];

DatagramPacket pp=new
DatagramPacket(buffer,buffer.length,InetAddres
s.getByName("127.0.0.1"),1234);
socket.receive(pp);
System.out.println("Client:Am primit
mesajul: "+new String(buffer));
}
catch(SocketException e){}
catch(UnknownHostException er){}
catch(IOException ioe){}
}
}
import java.io.*;
import java.net.*;
public class UDPServer {
public static void main(String[] args)
{try{
DatagramSocket socket=new
DatagramSocket(1234);
System.out.println("Socket
initializat.server");
byte[] buff=new byte[256];
DatagramPacket mp=new
DatagramPacket(buff,buff.length);
socket.setSoTimeout(25000);
socket.receive(mp);
String nume="anca";
String mesaj=new String(buff);
System.out.println("Server: Am primit mesajul:
"+mesaj);
if(mesaj.contentEquals(nume))
{String toSend="Buna!";
byte[] buffer=toSend.getBytes();
DatagramPacket mt = new
DatagramPacket(buffer, buffer.length,
mp.getAddress(), mp.getPort());
socket.send(mt);
}
else
{String toSend="Neautorizat";
byte[] buffer=toSend.getBytes();
DatagramPacket mt = new
DatagramPacket(buffer, buffer.length,
mp.getAddress(), mp.getPort());
socket.send(mt);
}
}
catch(SocketException e){}
catch(IOException ioe){}
}
}

3. Sa se scrie o aplicatie Java distribuita care


foloseste o conexiune fara confirmare
(datagrame). Aplicatia server primeste de la
client numele unui fisier text existent pe
server (intr-un director prestabilit numit
"root" initializat cu o adresa valida intr-un
String), pe care il transmite clientului in
format text (datele se citesc sub format text).
Clientul regenereaza fisierul cerut.
import java.io.*;
import java.net.*;
public class FileClient {
public static void main(String[] args)
{
try{
InetAddress
adresa=InetAddress.getLocalHost();
DatagramSocket socket=new
DatagramSocket(2006);
byte[]
buff="acesta.txt".getBytes();
DatagramPacket pacht=new
DatagramPacket(buff,buff.length,adresa ,2005);
socket.send(pachet);
byte[] buff2=new byte[15];
DatagramPacket primim=new
DatagramPacket(buff2,buff2.length);
socket.receive(primim);
String str=new String(buff2);
System.out.println(str);
FileOutputStream out=new
FileOutputStream("final.txt");
out.write(buff2,0,buff2.length);
out.close();
socket.close();
}
catch(SocketException e){}
catch(IOException ioe){}}
}
import java.io.*;
import java.net.*;
public class FileServer {
public static void main(String[] args)
{
String root="";
try{
DatagramSocket socket=new
DatagramSocket(2005);
byte[] buff=new byte[256];

DatagramPacket cerere=new
DatagramPacket(buff,buff.length);
socket.receive(cerere);
String cale=new String(buff);
String path=root+cale;
System.out.println("calea este:
"+path);
File f=new File(path);
FileInputStream trimite=new
FileInputStream(f);
byte[] fisier=new
byte[(int)f.length()];
trimite.read(fisier);
InetAddress
adresa=InetAddress.getLocalHost();
DatagramPacket raspuns=new
DatagramPacket(fisier,fisier.length,adresa,2006)
socket.send(raspuns);
socket.close();
trimite.close();
}
catch(SocketException e){}
catch(IOException ioe){}
}
}
4. Sa se realizeze o aplicatie Java distribuita
folosind o conexiune cu confirmare (TCP/IP)
care reprezinta un server de raspuns
automat. La receptia mesajului
"/getProperties" serverul trimite un raspuns
clientului continand proprietatile
sistemului, la receptia mesajului "/getTime"
serverul raspunde cu un mesaj continand ora
serverului. Conexiunea este
inchisa de aparitia mesajului "#exit".
(Serverul transmite ca String datele folosind
metodele System.getProperties().toString()
si new Date().toString())
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class TCPClient {
//portul folosit pentru conexiune
public int port = 1234;
//hostul destinatie
private String destinatie;

//socketul client
private Socket client;
//stream-uri pentru comunicarea cu
serverul
private BufferedReader fromServer;
private PrintStream toServer;
/**
* Seteaza hostul destinatie.
* @param destinatie numele hostului.
*/
public void setHostName(String destinatie){
this.destinatie = destinatie;
}
/**
* Initializeaza aplicatia client si se conecteaza la
server.
*/
public void conecteaza_te(){
if(destinatie == null){
System.out.println("Hostul destinatie nu este
specificat !");
return;
}
try {
System.out.println("Incerc conexiunea la
server...");
//initializeaza clientul
client = new Socket(destinatie, port);
System.out.println("M-am conectat la serverul :
" + destinatie);
//creez stream-urile pentru scriere/citire mesaje
fromServer = new BufferedReader(new
InputStreamReader(client.getInputStream()));
toServer = new
PrintStream(client.getOutputStream());
} catch (UnknownHostException e) {
System.out.println("Host necunoscut !");
e.printStackTrace();
} catch (IOException e) {
System.out.println("Conectiunea nu poate fi
realizata !");
e.printStackTrace();
}
}
/**
* Trimite un mesaj la Server.
* @param mesaj mesajul de trimis la server.
*/
public void trimiteMesaj(String mesaj){
if(toServer == null){

System.out.println("Conexiune cu serverul
indisponibila !");
return;
}
//scrie mesajul
toServer.println(mesaj);
}
/**
* Asculta, citeste si afiseaza mesajul de la
server.
*/
public String citesteMesaj(){
String mesaj=new String();
if(fromServer == null){
String msg="Conexiune cu serverul
indisponibila !";
return msg;
}
try {
//citeste mesaj
mesaj = fromServer.readLine();
} catch (IOException e) {
System.out.println("Nu am putut citi mesajul de
la server!");
e.printStackTrace();
}
return mesaj;
}
/**
* Inchide conexiunea cu serverul.
*/
public void inchideConexiunea(){
try {
client.close();
fromServer.close();
toServer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class ClientStarter {
public static void main(String[] args) {
String mes=new String();
int nr;
//creez aplicatia client
TCPClient client = new TCPClient();
//seteaza hostul destinatie
client.setHostName("localhost");
//realizeaza conexiunea la server
client.conecteaza_te();

String mesaj1="getProperties";
String mesaj2="getTime";
String mesaj3="exit";
client.trimiteMesaj(mesaj1);
mes=client.citesteMesaj();
System.out.println("Mesajul receptionat este:
"+mes);
client.trimiteMesaj(mesaj2);
mes=client.citesteMesaj();
System.out.println("Mesajul receptionat este:
"+mes);
client.trimiteMesaj(mesaj3);
//inchid conexiunea cu serverul
client.inchideConexiunea();
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Date;
/**
* Exemplu de aplicatie distribuita care foloseste
o conexiune tcp/ip
* pentru schimbul de mesaje de tip String.
* * Clasa implementeaza aplicatia server, care
permite
* conectarea si schimbul de mesaje cu
aplicatiile client.
* * @author Calin-Gligor Loghin
*/
public class TCPServer {
//portul folosit pentru conexiune
public int port = 1234;
//socketul server
private ServerSocket server;
//socketul client
private Socket client;
//stream-uri pentru comunicarea cu clientul
private BufferedReader fromClient;
private PrintStream toClient;
//**
* Creeaza serverul si asculta cererile pentru
conexiune ale clientilor.
*/
public void startServer(){
System.out.println("Initializez aplicatia
server ...");
try {

//initializeaza serverul
server = new ServerSocket(port);
System.out.println("Ascult pentru conexiunea
clientului ...");
//asculta pentru conexiunile clientilor
client = server.accept();
System.out.println("Clientul " +
client.getInetAddress().getHostName() + "
conectat !");
//creez stream-urile pentru scriere/citire mesaje
fromClient = new BufferedReader(new
InputStreamReader(client.getInputStream()));
toClient = new
PrintStream(client.getOutputStream());
} catch (IOException e) {
System.out.println("Serverul nu a putut fi
creat !");
e.printStackTrace();
}
}
//**
* Trimite un mesaj la client.
* @param mesaj mesajul de trimis la client. */
public void trimiteMesaj(String mesaj){
if(toClient == null){
System.out.println("Conexiune cu clientul
indisponibila !");
return;
}
//scrie mesajul
toClient.println(mesaj);
}
/**
* Asculta, citeste si afiseaza mesajul de la
client.
*/
public String citesteMesaj(){
String mesaj=new String();
if(fromClient == null){
String msg="Conexiune cu clientul
indisponibila !";
return msg;
}
try {
//citeste mesaj
mesaj = fromClient.readLine();
} catch (IOException e) {
System.out.println("Nu am putut citi mesajul de
la client!");
e.printStackTrace();

}
return mesaj;
}
/**
* Inchide conexiunea cu clientul.
*/
public void inchideConexiunea(){
try {
client.close();
server.close();
fromClient.close();
toClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Date;
public class ServerStarter {
public static void main(String[] args) {
//intializez serverul
TCPServer server = new TCPServer();
//pornesc serverul
server.startServer();
//citesc mesaj de la clientul conectat
String mesaj1 = new String();
String crtMsg=new String();
mesaj1=server.citesteMesaj();
if(mesaj1.compareTo("getProperties")==0)
{crtMsg=System.getProperties().toString();
server.trimiteMesaj(crtMsg);}
mesaj1=server.citesteMesaj();
if(mesaj1.compareTo("getTime")==0)
{crtMsg=new Date(0).toString();
server.trimiteMesaj(crtMsg);}
//inchid conexiunea cu clientul
server.inchideConexiunea();
}
}
5. Sa se implementeze o aplicatie distribuita
care permite trimiterea catre server a unui
nume de director/fisier sau a comenzii
#exit pentru inchiderea conexiunii. Daca
directorul cerut exista, serverul trimite
clientului continutul acestuia. Daca locatia

specificata este un fisier, se trimit clientului


marimea acestuia si data crearii. Daca
fisierul/directorul nu exista se trimite
clientului un mesaj corespunzator.
Conexiunea este folosita atat timp
cat clientul doreste acest lucru.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Date;
/**
* Exemplu de aplicatie distribuita care foloseste
o conexiune tcp/ip
* pentru schimbul de mesaje de tip String.
*
* Clasa implementeaza aplicatia server, care
permite
* conectarea si schimbul de mesaje cu
aplicatiile client.
*
* @author Calin-Gligor Loghin
*/
public class TCPServer {
//portul folosit pentru conexiune
public int port = 2014;
//socketul server
private ServerSocket server;
//socketul client
private Socket client;
//stream-uri pentru comunicarea cu clientul
private BufferedReader fromClient;
private PrintStream toClient;
/**
* Creeaza serverul si asculta cererile pentru
conexiune ale clientilor.
*/
public void startServer(){
System.out.println("Initializez aplicatia
server ...");
try {
//initializeaza serverul
server = new ServerSocket(port);
System.out.println("Ascult pentru conexiunea
clientului ...");
//asculta pentru conexiunile clientilor
client = server.accept();

System.out.println("Clientul " +
client.getInetAddress().getHostName() + "
conectat !");
//creez stream-urile pentru scriere/citire mesaje
fromClient = new BufferedReader(new
InputStreamReader(client.getInputStream()));
toClient = new
PrintStream(client.getOutputStream());
} catch (IOException e) {
System.out.println("Serverul nu a putut fi
creat !");
e.printStackTrace();
}
}
/**
* Trimite un mesaj la client.
* @param mesaj mesajul de trimis la client.
*/
public void trimiteMesaj(String mesaj){
if(toClient == null){
System.out.println("Conexiune cu clientul
indisponibila !");
return;
}
//scrie mesajul
toClient.println(mesaj);
}
public void trimiteMesaj(long mesaj){
if(toClient == null){
System.out.println("Conexiune cu clientul
indisponibila !");
return;
}
//scrie mesajul
toClient.println(mesaj);
}
/**
* Asculta, citeste si afiseaza mesajul de la
client.

*/
public String citesteMesaj(){
String mesaj=new String();
if(fromClient == null){
String msg="Conexiune cu clientul
indisponibila !";
return msg;
}
try {
//citeste mesaj
mesaj = fromClient.readLine();
} catch (IOException e) {
System.out.println("Nu am putut citi mesajul de
la client!");
e.printStackTrace();
}
return mesaj;
}
/**
* Inchide conexiunea cu clientul.
*/
public void inchideConexiunea(){
try {
client.close();
server.close();
fromClient.close();
toClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Date;

server.startServer();
//citesc mesaj de la clientul conectat
String mesaj1 = new String();
mesaj1=server.citesteMesaj();
boolean exists = (new File(mesaj1)).exists();
if (exists) { server.trimiteMesaj("Directorul
exista.");
File dir=new File(mesaj1);
File[] files = dir.listFiles();
server.trimiteMesaj(files[0].getName());
server.trimiteMesaj(files[1].getName());
server.trimiteMesaj(files[2].getName());
}
else { System.out.println("Directorul nu
exista.");
}
mesaj1=server.citesteMesaj();
File fis=new File(mesaj1);
long l=fis.length();
server.trimiteMesaj(l);
//inchid conexiunea cu clientul
server.inchideConexiunea();
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

//intializez serverul
TCPServer server = new TCPServer();

/**
* Exemplu de aplicatie distribuita care foloseste
o conexiune tcp/ip
* pentru schimbul de mesaje de tip String.
*
* Clasa implementeaza aplicatia client, care
permite
* conectarea si schimbul de mesaje cu aplicatia
server.
*
* @author Calin-Gligor Loghin
*
*/
public class TCPClient {

//pornesc serverul

//portul folosit pentru conexiune

public class ServerStarter {


public static void main(String[] args) {

public int port = 2014;


//hostul destinatie
private String destinatie;
//socketul client
private Socket client;
//stream-uri pentru comunicarea cu
serverul
private BufferedReader fromServer;
private PrintStream toServer;
/**
* Seteaza hostul destinatie.
* @param destinatie numele hostului.
*/
public void setHostName(String destinatie){
this.destinatie = destinatie;
}
/**
* Initializeaza aplicatia client si se conecteaza la
server.
*/
public void conecteaza_te(){
if(destinatie == null){
System.out.println("Hostul destinatie nu este
specificat !");
return;
}
try {

System.out.println("Host necunoscut !");


e.printStackTrace();
} catch (IOException e) {
System.out.println("Conectiunea nu poate fi
realizata !");
e.printStackTrace();
}
}
/**
* Trimite un mesaj la Server.
* @param mesaj mesajul de trimis la server.
*/
public void trimiteMesaj(String mesaj){
if(toServer == null){
System.out.println("Conexiune cu serverul
indisponibila !");
return;
}
//scrie mesajul
toServer.println(mesaj);
}

//initializeaza clientul
client = new Socket(destinatie, port);

/**
* Asculta, citeste si afiseaza mesajul de la
server.
*/
public String citesteMesaj(){
String mesaj=new String();
if(fromServer == null){
String msg="Conexiune cu serverul
indisponibila !";
return msg;
}
try {

System.out.println("M-am conectat la serverul :


" + destinatie);

//citeste mesaj
mesaj = fromServer.readLine();

//creez stream-urile pentru scriere/citire mesaje


fromServer = new BufferedReader(new
InputStreamReader(client.getInputStream()));
toServer = new
PrintStream(client.getOutputStream());

} catch (IOException e) {

System.out.println("Incerc conexiunea la
server...");

} catch (UnknownHostException e) {

System.out.println("Nu am putut citi mesajul de


la server!");
e.printStackTrace();
}
return mesaj;

}
public long citesteMesajL(){
long mesaj=0;
if(fromServer == null){
String msg="Conexiune cu serverul
indisponibila !";
return mesaj;
}
try {
//citeste mesaj
mesaj = fromServer.read();
} catch (IOException e) {
System.out.println("Nu am putut citi mesajul de
la server!");
e.printStackTrace();
}
return mesaj;
}
/**
* Inchide conexiunea cu serverul.
*/
public void inchideConexiunea(){
try {
client.close();
fromServer.close();
toServer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
*
* Exemplu de utilizare a aplicatiei client.
*
* @author Calin-Gligor Loghin
*
*/
public class ClientStarter {

//seteaza hostul destinatie


client.setHostName("localhost");
//realizeaza conexiunea la server
client.conecteaza_te();
String mesaj1="E:\\doc\\An III\\Sem
I\\info\\workspace\\ex4_server\\src\\director";
String mesaj2="E:\\doc\\An III\\Sem
I\\info\\workspace\\ex4_server\\src\\alina.txt";
String mesaj3="exit";
client.trimiteMesaj(mesaj1);
mes=client.citesteMesaj();
System.out.println("Mesajul receptionat este:
"+mes);
mes=client.citesteMesaj();
System.out.println("Numele fisierului este:
"+mes);
mes=client.citesteMesaj();
System.out.println("Numele fisierului este:
"+mes);
mes=client.citesteMesaj();
System.out.println("Numele fisierului este:
"+mes);
client.trimiteMesaj(mesaj2);
long mess=0;
mess=client.citesteMesajL();
System.out.println("Lungimea fisierului este:
"+mess);
client.trimiteMesaj(mesaj3);
//inchid conexiunea cu serverul
client.inchideConexiunea();
}
}

public static void main(String[] args) {

6. Sa se scrie o aplicatie client-server in care,


odata conectat, clientul cere si primeste o
serie de numere generate aleator
de catre server. Procesul este intrerupt de
catre client cand suma numerelor primite
depaseste un anumit prag citit de la tastatura

String mes=new String();


int nr;
//creez aplicatia client
TCPClient client = new TCPClient();

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;

import java.net.ServerSocket;
import java.net.Socket;
/**
* Exemplu de aplicatie distribuita care foloseste
o conexiune tcp/ip
* pentru schimbul de mesaje de tip String.
*
* Clasa implementeaza aplicatia server, care
permite
* conectarea si schimbul de mesaje cu
aplicatiile client.
*
* @author Calin-Gligor Loghin
*/
public class TCPServer {
//portul folosit pentru conexiune
public int port = 1234;
//socketul server
private ServerSocket server;
//socketul client
private Socket client;

System.out.println("Clientul " +
client.getInetAddress().getHostName() + "
conectat !");
//creez stream-urile pentru scriere/citire mesaje
fromClient = new BufferedReader(new
InputStreamReader(client.getInputStream()));
toClient = new
PrintStream(client.getOutputStream());
} catch (IOException e) {
System.out.println("Serverul nu a putut fi
creat !");
e.printStackTrace();
}
}
/**
* Trimite un mesaj la client.
* @param mesaj mesajul de trimis la client.
*/
public void trimiteMesaj(int mesaj){

//stream-uri pentru comunicarea cu clientul


private BufferedReader fromClient;
private PrintStream toClient;

if(toClient == null){
System.out.println("Conexiune cu clientul
indisponibila !");
return;
}

/**
* Creeaza serverul si asculta cererile pentru
conexiune ale clientilor.
*/
public void startServer(){

//scrie mesajul
toClient.println(mesaj);
}

System.out.println("Initializez aplicatia
server ...");
try {
//initializeaza serverul
server = new ServerSocket(port);
System.out.println("Ascult pentru conexiunea
clientului ...");
//asculta pentru conexiunile clientilor
client = server.accept();

/**
* Asculta, citeste si afiseaza mesajul de la
client.
*/
public String citesteMesaj(){
String mesaj=new String();
if(fromClient == null){
String msg="Conexiune cu clientul
indisponibila !";
return msg;
}
try {
//citeste mesaj
mesaj = fromClient.readLine();

} catch (IOException e) {
System.out.println("Nu am putut citi mesajul de
la client!");
e.printStackTrace();
}
return mesaj;
}
/**
* Inchide conexiunea cu clientul.
*/
public void inchideConexiunea(){
try {
client.close();
server.close();
fromClient.close();
toClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* Exemplu de utilizare a aplicatiei server.
* @author Calin-Gligor Loghin
*/
import java.util.Random;
public class ServerStarter {
public static void main(String[] args) {
Random r=new Random();
int nr;
//intializez serverul
TCPServer server = new TCPServer();
//pornesc serverul
server.startServer();
//citesc mesaj de la clientul conectat
String mesaj1 = new String();
mesaj1=server.citesteMesaj();
while(mesaj1!=null)
{
if(mesaj1.equals("nr"))
{ nr=r.nextInt(20);
server.trimiteMesaj(nr);}
else
server.inchideConexiunea();

mesaj1=server.citesteMesaj();
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* Exemplu de aplicatie distribuita care foloseste
o conexiune tcp/ip
* pentru schimbul de mesaje de tip String.
* Clasa implementeaza aplicatia client, care
permite
* conectarea si schimbul de mesaje cu aplicatia
server.
* @author Calin-Gligor Loghin
*/
public class TCPClient {
//portul folosit pentru conexiune
public int port = 1234;
//hostul destinatie
private String destinatie;
//socketul client
private Socket client;
//stream-uri pentru comunicarea cu
serverul
private BufferedReader fromServer;
private PrintStream toServer;
/**
* Seteaza hostul destinatie.
* @param destinatie numele hostului.
*/
public void setHostName(String destinatie){
this.destinatie = destinatie;
}
/**
* Initializeaza aplicatia client si se conecteaza la
server.
*/
public void conecteaza_te(){
if(destinatie == null){
System.out.println("Hostul destinatie nu este
specificat !");
return;
}

try {
System.out.println("Incerc conexiunea la
server...");
//initializeaza clientul
client = new Socket(destinatie, port);
System.out.println("M-am conectat la serverul :
" + destinatie);
//creez stream-urile pentru scriere/citire mesaje
fromServer = new BufferedReader(new
InputStreamReader(client.getInputStream()));
toServer = new
PrintStream(client.getOutputStream());
} catch (UnknownHostException e) {
System.out.println("Host necunoscut !");
e.printStackTrace();
} catch (IOException e) {
System.out.println("Conectiunea nu poate fi
realizata !");
e.printStackTrace();
}
}
/**
* Trimite un mesaj la Server.
* @param mesaj mesajul de trimis la server.
*/
public void trimiteMesaj(String mesaj){
if(toServer == null){
System.out.println("Conexiune cu serverul
indisponibila !");
return;
}
//scrie mesajul
toServer.println(mesaj);
}
/**
* Asculta, citeste si afiseaza mesajul de la
server.
*/
public String citesteMesaj(){
String mesaj=new String();
if(fromServer == null){
String msg="Conexiune cu serverul
indisponibila !";

return msg;
}
try {
//citeste mesaj
mesaj = fromServer.readLine();
} catch (IOException e) {
System.out.println("Nu am putut citi mesajul de
la server!");
e.printStackTrace();
}
return mesaj;
}
/**
* Inchide conexiunea cu serverul.
*/
public void inchideConexiunea(){
try {
client.close();
fromServer.close();
toServer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
*
* Exemplu de utilizare a aplicatiei client.
*
* @author Calin-Gligor Loghin
*
*/
public class ClientStarter {
public static void main(String[] args) {
int suma=0;
int prag= 30;
String mes=new String();
int nr;
//creez aplicatia client
TCPClient client = new TCPClient();
//seteaza hostul destinatie
client.setHostName("localhost");
//realizeaza conexiunea la server
client.conecteaza_te();

String mesaj1 = "nr";


while(suma<prag)
{client.trimiteMesaj(mesaj1);
mes=client.citesteMesaj();
System.out.println("numarul trimis este:
"+mes);
nr=Integer.parseInt(mes);
suma=suma+nr;

}
System.out.println("Suma citita este: "+suma);
//inchid conexiunea cu serverul
client.inchideConexiunea();
}
}

S-ar putea să vă placă și