In aceasta lucrare vor fi acoperite
urmatoarele probleme:
· Lucrul cu fluxurile de intrare-iesire (IO) Java
· Programe ecou pentru consola standard si fisiere
· Programe care combina diferite tipuri de fluxuri IO
Programele pot avea nevoie
sa preia informatii de la surse externe, sau sa trimita
informatii catre destinatii externe.
Sursa si/sau destinatia pot fi: fisier pe disc, retea, memorie (alt
program), dispozitive IO standard (ecran, tastatura).
Tipurile informatiilor sunt diverse: caractere, obiecte, imagini, sunete.
Pentru preluarea informatiilor programul deschide un flux de la o sursa de
informatii si citeste serial
(secvential, FIFO) informatiile, astfel:
Figura 1. Fluxuri de intrare (citire)
Java
Pentru trimiterea informatiei programul deschide un flux catre o destinatie de
informatie si scrie serial (secvential,
FIFO) informatiile, astfel:
Figura 2. Fluxuri de iesire (scriere)
Java
In functie de tipul de date transferate,
clasele din pachetul java.io se impart in doua ierarhii:
- fluxurile de caractere (pe 16b),
cu radacini ale arborilor de clase derivate superclasele abstracte:
- Reader (pentru
fluxuri de intrare) si
- Writer (pentru fluxuri de iesire)
- fluxurile de octeti (pe 8b),
avand ca radacini ale arborilor de clase derivate superclasele abstracte:
- InputStream (pentru fluxuri de intrare) si
- OutputStream (pentru fluxuri de iesire)
In functie de specializarea
pe care o implementeaza, subclasele claselor de mai sus se impart in doua
categorii:
- fluxuri
terminale (data sink), care au o sursa / destinatie propriu-zisa,
nu un alt flux, avand ca rol interfatarea cu acea sursa / destinatie,
fisierele,
memoria (tablourile), reteaua (socketurile), sirurile de caractere (String),
alte programe (prin conducte - pipes).
- fluxuri
de prelucrare (processing), care au ca sursa / destinatie un alt flux,
avand ca rol prelucrarea informatiilor
care trec prin flux: buffer-are (stocare temporara), filtrare de diferite
tipuri (conversie, contorizare, etc.), tiparire.
Fluxuri terminale (data sink streams)
Tip de Terminal |
Utilizare |
Fluxuri de caractere |
Fluxuri de octeti |
Memorie |
Accesul secvential la tablouri |
CharArrayReader |
ByteArrayInputStream |
CharArrayWriter |
ByteArrayOutputStream |
||
Accesul secvential la siruri de
caractere |
StringReader |
StringBufferInputStream |
|
StringWriter |
StringBufferOutputStream |
||
Canal / conducta (pipe) |
Conducte intre programme |
PipedReader |
PipedInputStream |
PipedWriter |
PipedOutputStream |
||
Fisier |
Accesul la fisiere |
FileReader |
FileInputStream |
FileWrite |
FileOutputStream |
Fluxuri de prelucrare (processing streams)
Tip de Prelucrare |
Utilizare |
Fluxuri de Caractere |
Fluxuri de octeti |
Buffer-are |
Stocare temporară |
BufferedReader |
BufferedInputStream |
BufferedWriter |
BufferedOutputStream |
||
Filtrare |
Prelucrare |
FilterReader |
FilterInputStream |
FilterWriter |
FilterOutpuStream |
||
Conversie
octet/caracter |
Bridge byte-char |
InputStreamReader |
|
OutputStreamWriter |
|||
Concatenare |
Prelucrare |
|
SequenceInputStream |
Serializarea
obiectelor |
ObjectInputStream |
||
ObjectOutputStream |
|||
Conversia datelor |
Acces la tip date primitiv Java |
|
DataInputStream |
DataOutputStream |
|||
Numararea
(contorizarea) |
Numarare linii |
LineNumberReader |
LineNumberInputStream |
Testare |
Buffer de 1 byte/char |
PushBockReader |
PushbackInputStream |
Imprimare |
Tiparire |
PrintWriter |
PrintStream |
In continuare sunt prezentate cateva exemple de utilizare a fluxurilor
de prelucrare care pot fi utilizate de programe pentru citirea de la
consola standard de intrare sau pentru scrierea la consola standard
de iesire.
BufferedReader
si InputStreamReader
Constructorul
tipic al clasei BufferedReader
este:
|
Metoda oferita
de clasa BufferedReader
pentru citirea liniilor de text este:
|
|
Constructorul
tipic al clasei InputStreamReader
este:
|
O utilizare tipica a acestor doua fluxuri
de prelucrare, in cascada,
este cea care permite citirea sirurilor de caractere de la consola standard de intrare (tastatura,
care este incapsulata in obiectul System.in
, al carui tip este InputStream
- flux de intrare a
octetilor).
Exemplu: citirea unui nume de la tastatura:
BufferedReader in =
new BufferedReader(new
InputStreamReader(System.in));
System.out.println(“Introduceti
numele: ”);
String nume = in.readLine();
PrintStream
Metodele
oferite de clasa PrintStream
pentru afisarea sirurilor de caractere (scrierea intr-un flux de iesire a octetilor a sirurilor de caractere care cuprind si
caractere escape) sunt:
|
|
|
… (Similar pentru celelalte tipuri de
date primitive Java: char, double, float, int, …) |
|
|
|
|
|
|
|
… (Similar pentru celelalte tipuri de
date primitive Java: char, double, float, int, …) |
|
|
O utilizare tipica a acestui flux de prelucrare este cea care permite scrierea sirurilor de caractere la consola standard de iesire (monitorul,
care este incapsulat intr-un OutputStream
ce serveste ca destinatie obiectului System.out
, al carui tip este PrintStream
).
Exemplu: afisarea argumentelor programului curent:
PrintStream
ps =
System.out;
ps.println(“Argumentele
programului: ”);
for (int i=0;
i<args.length; i++) {
ps.print(args[i]
+ “ ”);
}
ps.println();
DataInputStream
Constructorul clasei DataInputStream
este:
|
Metodele
oferite de clasa DataInputStream
pentru citirea datelor formatate (ca tipuri primitive) de la fluxul de intrare a octetilor primit ca parametru in momentul constructiei
sunt:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Exemplu: citirea unui nume de la tastatura:
DataInputStream
in =
new DataInputStream
(new BufferedInputStream(System.in));
System.out.println(“Introduceti
numele: ”);
String nume = in.readLine();
DataOutputStream
Constructorul clasei DataOutputStream
este:
|
Metodele
oferite de clasa DataOutputStream
pentru scrierea datelor formatate (ca tipuri primitive) in fluxul de iesire a octetilor primit ca parametru in momentul constructiei
(din aval) sunt:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Exemplu: afisarea argumentelor programului curent:
DataOutputStream
dos
= new DataOutputStream
(System.out);
dos.writeBytes(“Argumentele programului: \n”);
for (int i=0; i<args.length;
i++) {
dos.writeBytes(args[i]
+ “ ”);
}
dos.writeChar(‘\n’);
dos.flush();
In continuare sunt ilustrate:
- citirea dintr-un fisier, caracter cu
caracter, prin intermediul unui flux
de caractere (Unicode!):
1 2 3 4 5 6 7 8 9 10 11 |
// Crearea unui obiect referinta la fisier pe baza numelui fisierului
File inputFile = new File(“nume1.txt”); // Crearea unui flux de intrare a
caracterelor dinspre fisierul dat
FileReader in = new
FileReader(inputFile); // Citirea unui caracter din fisier
int c = in.read(); // Input // Inchiderea fisierului in.close(); |
- scrierea intr-un fisier, caracter cu
caracter, prin intermediul unui flux
de caractere:
1 2 3 4 5 6 7 8 9 10 11 12 |
// Crearea unui obiect referinta la fisier pe baza numelui fisierului
File outputFile = new File(“nume2.txt”); // Crearea unui flux de iesire a
caracterelor spre fisierul dat
FileWrite out = new
FileWriter(outputFile);
char c = ‘x’; // Scrierea unui caracter in fisier out.write(c); //
Output // Inchiderea fisierului out.close(); |
In continuare sunt prezentate cateva variante de
programe Java care folosesc diferite
fluxuri de intrare-iesire pentru a lucra cu consolele standard de intrare si de iesire.
De reflectat:
Care sunt diferentele intre
urmatoarele doua programe?
Programul EcouConsola_BR_PS citeste linii de text de la tastatura (consola standard de intrare) si le afiseaza in consola standard de
iesire, folosind clasele BufferedReader si PrintStream.
(script pentru lansare)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import java.io.*; /** * Ecou
consola folosind BufferedReader si PrintStream */ public class EcouConsola_BR_PS
{ public
static void main (String
args[]) throws IOException { //
Intrare - consola prin BufferedReader (si InputStreamReader) BufferedReader inConsola = new BufferedReader(new InputStreamReader(System.in)); //
Iesire - consola prin PrintStream PrintStream outConsola= System.out; String
sirCitit; outConsola.println("\nPentru terminare introduceti '.' si
<Enter>"); while (true) { outConsola.print("\n?>
"); // Citirea unei linii de text de la consola sirCitit = inConsola.readLine(); // Conditie terminare program if
(sirCitit.equals(new String("."))) break; // Citirea unei linii de text de la consola outConsola.println("!> " +
sirCitit); } } } |
Programul EcouConsola_DIS_DOS citeste linii de text de la tastatura (consola standard de intrare) si le afiseaza in consola standard de
iesire, folosind clasele DataInputStream si DataOutputStream.
(script pentru lansare)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import java.io.*; /** * Ecou
consola folosind DataInputStream si DataOutputStream */ public class EcouConsola_DIS_DOS
{ public
static void main (String
args[]) throws IOException { // Intrare - consola prin DataInputStream
(si BufferedInputStream) DataInputStream inConsola = new DataInputStream(new BufferedInputStream(System.in)); // Iesire - consola prin DataOutputStream DataOutputStream outConsola = new DataOutputStream(System.out); String sirCitit; outConsola.writeBytes("Pentru oprire
introduceti '.' si <Enter>\n"); outConsola.flush(); while
(true) { outConsola.writeBytes("\n?>
"); outConsola.flush(); // Citirea unei linii de text de la
consola sirCitit = inConsola.readLine(); // metoda nu e recomandata!!! // Conditie terminare program if (sirCitit.equals(new String("."))) break; // Scrierea
liniei de text la consola outConsola.writeBytes("!> " + sirCitit
+ "\n"); // Fortarea
trimiterii (golirii bufferului) outConsola.flush(); } } } |
In continuare sunt prezentate cateva variante de
programe Java care folosesc diferite
fluxuri de intrare-iesire pentru a lucra cu fisiere pe disc.
De reflectat:
Care sunt diferentele intre
urmatoarele doua programe?
Programul CopiereFisier1
citeste linii de text dintr-un fisier de intrare si le scrie intr-un fisier (copie) de
iesire, folosind clasele BufferedReader si PrintWriter. (script pentru lansare)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
import java.io.*; public
class CopiereFisier1 { public
static void main(String[]
args) throws IOException {
System.out.println("\nProgramul CopiereFisier a fost
lansat...\n"); // Intrare consola BufferedReader inConsola = new BufferedReader(new
InputStreamReader(System.in)); System.out.print("Introduceti
numele fisierului de copiat: "); String numeFisier = inConsola.readLine(); //
Intrare fisier BufferedReader inFisier = null; try { inFisier = new BufferedReader(new
FileReader(numeFisier)); } catch
(FileNotFoundException ex) {
System.out.println("Fisierul nu exista in acest
director"); System.exit(0); } numeFisier = "Copie_" +
numeFisier; // Iesire fisier PrintWriter outFisier = new PrintWriter( new BufferedWriter(new
FileWriter(numeFisier))); String linieText; // Cat timp mai sunt linii de text de
citit din fisier while ((linieText = inFisier.readLine())!=null) { //
Scrierea liniei de text in fisier outFisier.println(linieText); outFisier.flush(); } //
Inchiderea fisierelor inFisier.close(); outFisier.close(); } } |
Programul CopiereFisier_BR_PS
citeste linii de text dintr-un fisier de intrare si le scrie intr-un fisier (copie) de
iesire, folosind clasele BufferedReader, InputStreamReader si PrintWriter. (script pentru lansare)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import java.io.*; /** * Copiere
fisier folosind BufferedReader si PrintStream */ public class CopiereFisier_BR_PS
{ public
static void main (String args[])
throws IOException {
BufferedReader inConsola = new BufferedReader (new InputStreamReader(System.in)); System.out.print("\nIntroduceti numele fisierului de copiat:
"); String sirCitit = inConsola.readLine(); //
Intrare -fisier prin BufferedReader,InputStreamReader,FileInputStream BufferedReader inFisier = new BufferedReader(new
InputStreamReader (new FileInputStream(sirCitit)));
System.out.print("Introduceti numele fisierului copie:
"); sirCitit
= inConsola.readLine(); //
Iesire - fisier prin PrintStream (si FileOutputStream) PrintStream outFisier = new PrintStream(new
FileOutputStream(sirCitit)); while (true) {
// Citirea unei linii de text din fisier
sirCitit = inFisier.readLine();
// Conditie terminare program if
(sirCitit == null) break; // Scrierea liniei de text in fisier outFisier.println(sirCitit); } } } |
In laborator:
1. Pornind de la programul CopiereFisier1 se va crea un program AfisareFisier1 care sa citeasca
linii de text dintr-un fisier de intrare si sa le afiseze in consola standard de iesire, folosind
clasele BufferedReader si
PrintWriter.
2. Pornind de la programul CopiereFisier1 se va crea un program ScriereInFisier1 care sa citeasca
linii de text de la tastatura (consola standard de intrare) si sa le scrie intr-un fisier de iesire,
folosind clasele BufferedReader si
PrintWriter.
3. Pornind de la programul CopiereFisier_BR_PS se va crea un program
ScriereInFisier_BR_PS care sa citeasca linii de text de la tastatura
(consola standard de intrare) si sa
le scrie intr-un fisier de iesire, folosind clasele BufferedReader, InputStreamReader si PrintWriter.
4. Se va compara efectul
utilizarii programului
ScriereInFisier1 cu efectul utilizarii programului ScriereInFisier_BR_PS.
Programul Polinom3.java reprezinta o varianta a programului Polinom2.java in care:
- initializarea
atributelor este realizata de un constructor
fara parametri, Polinom3(),
- afisarea
polinomului este realizata de o metoda
fara parametri si care nu returneaza nimic,
numita afisarePolinom(),
- obtinerea atributelor in format String este realizata de o metoda cu numele toString(), care
nu primeste parametru si returneaza
polinomul sub forma de sir de
caractere (obiect de tip
String) in formatul:
P(X) =
1 + 2*X^1 + 3*X^2 + 4*X^3 + 5*X^4
daca se presupune ca gradul este 4 iar coeficientii sunt {1, 2, 3, 4,
5}.
- returnarea
primului coeficient este realizata de o metoda fara parametri, termenLiber(),
- returnarea
sumei coeficient este realizata de o metoda fara parametri, sumaCoeficienti(),
- calculul
valorii polinomului este realizat de o metoda
fara parametri, care returneaza o valoare
de tip int, valoarePolinom().
Metoda main() a clasei UtilizarePolinom3.java contine scenariul principal (obtinere valori, calcule, afisare rezultate).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import
javax.swing.JOptionPane; public
class UtilizarePolinom3 { public
static void main(String[]
args) { System.out.println("Programul
UtilizarePolinom3 a fost lansat..."); //
Constructor - initializeaza elementele polinomului
Polinom3 pol = new Polinom3(); //
Apelul metodei care afiseaza polinomul pol.afisarePolinom(); // Obtinerea unei valori a necunoscutei
(X) int X
= Integer.parseInt(JOptionPane.showInputDialog( "Introduceti
valoarea necunoscutei")); // Afisarea
valorii necunoscutei (X) System.out.println("X
= " + X); // Apelul metodei care calculeaza
polinomul pentru necunoscuta X int P_X = pol.valoarePolinom(X); // Afisarea valorii P(X) System.out.println("P("
+ X + ") = " + P_X); // Apelul metodei care calculeaza
polinomul pentru necunoscuta = 0 int P_0 = pol.termenLiber(); // Afisarea
valorii P(0) System.out.println("P(0)
= " + P_0); // Apelul metodei care calculeaza
polinomul pentru necunoscuta = 1 int P_1 = pol.sumaCoeficienti(); // Afisarea
valorii P(1) System.out.println("P(1)
= " + P_1); System.exit(0);
// Inchiderea interfetei grafice } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
import
javax.swing.JOptionPane; public
class Polinom3 {
protected int N; //
gradul polinomului
protected int[] C; //
coeficientii polinomului //
Constructor - initializeaza elementele polinomului public Polinom3() { // Obtinerea gradului polinomului (N) N =
Integer.parseInt(JOptionPane.showInputDialog( "Introduceti gradul polinomului")); // Crearea
tabloului coeficientilor (de dimensiune N+1) C = new int[N+1]; // Obtinerea coeficientilor Ci, unde i=0,N for
(int i=0; i<=N; i++) { C[i]
= Integer.parseInt(JOptionPane.showInputDialog(
"Coeficientul de grad " + i)); System.out.println("A fost creat un obiect
Polinom..."); } } //
Metoda care afiseaza polinomul public
void afisarePolinom() { //
Termenul liber Co
System.out.print("P(X) = " + C[0]); //
Termenii Ci*X^i, unde i=1,N for
(int i=1; i<=N; i++) {
System.out.print(" + " + C[i] + "*X^" + i); }
System.out.println(); } //
Metoda care calculeaza valoarea polinomului pentru o necunoscuta public
int valoarePolinom(int X) { int
P_X = 0; int
X_i = 1; // Termenii +Ci*X^i, unde 0=1,N for (int i=0; i<=N; i++) { P_X
= P_X + C[i]*X_i; X_i
= X_i * X; } return
(P_X); } //
Metoda care calculeaza valoarea polinomului pentru necunoscuta = 0 public
int termenLiber() { return
(C[0]); } //
Metoda care calculeaza valoarea polinomului pentru necunoscuta = 1 public
int sumaCoeficienti() { int
S_C = C[0]; for
(int i=1; i<=N; i++) { S_C
= S_C + C[i]; } return
(S_C); } //
Metoda care returneaza tabloul coeficientilor polinomului public
int[] coeficienti() { int[]
coef = new int[N+1];
System.arraycopy(C, 0, coef, 0, N+1); return
(coef); } //
Metoda care returneaza coeficientii polinomului sub forma de String public
String toString() { String
polinom = "" + C[0]; //
Termenii Ci*X^i, unde i=1,N for
(int i=1; i<=N; i++) {
polinom = polinom + " + " + C[i] + "*X^" + i; } return
(polinom); } } |
Programul Polinom4.java reprezinta o varianta a programului Polinom3.java in care initializarea atributelor este realizata de:
- un constructor
cu parametru de tip String, care obtine
gradul polinomului si valorile
coeficientilor de la utilizator, initializeaza
atributele cu aceste valori, si apoi le
scrie intr-un
fisier pe disc (al carui nume este pasat ca parametru),
- un constructor
cu un parametru de tip String si un parametru de tip int[], care
foloseste tabloul primit pentru a initializa
valorile atributelor, apoi le scrie
intr-un
fisier pe disc (al carui nume este pasat ca parametru),
- un constructor
cu doi parametri de tip String, care formeaza
din ei numele unui
fisier de pe disc, din care
citeste valorile
coeficientilor si cu ele initializeaza atributele.
Metoda main() a clasei Utilizare1Polinom4 contine un scenariu de utilizare a
clasei Polinom4 bazat pe apelul primului constructor (cel care obtine valorile coeficientilor de la
utilizator). (script pentru lansare)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
import
javax.swing.JOptionPane; import java.io.*; public
class Utilizare1Polinom4 { public
static void main(String[]
args) throws IOException { System.out.println("Programul
Utilizare1Polinom4 a fost lansat..."); // Apelul constructorului care initializeaza elementele polinomului // cu valori obtinute de la utilizator,
si le scrie in fisier Polinom4 pol
= new Polinom4("coef.txt"); //
Apelul metodei care afiseaza polinomul pol.afisarePolinom(); // Obtinerea unei valori a necunoscutei
(X) int X
= Integer.parseInt(JOptionPane.showInputDialog( "Introduceti valoarea necunoscutei")); // Afisarea
valorii necunoscutei (X) System.out.println("X
= " + X); // Apelul metodei care calculeaza
polinomul pentru necunoscuta X int P_X = pol.valoarePolinom(X); // Afisarea
valorii P(X) System.out.println("P("
+ X + ") = " + P_X); // Apelul metodei care calculeaza
polinomul pentru necunoscuta = 0 int P_0 = pol.termenLiber(); // Afisarea valorii P(0) System.out.println("P(0)
= " + P_0); // Apelul metodei care calculeaza
polinomul pentru necunoscuta = 1 int P_1 = pol.sumaCoeficienti(); // Afisarea
valorii P(1) System.out.println("P(1)
= " + P_1); System.exit(0);
// Inchiderea interfetei grafice } } |
Primul constructor asigura:
- obtinerea valorii atributelor de la utilizator,
- persistenta atributelor (scrierea lor pe disc).
Al doilea constructor asigura:
- obtinerea valorii atributelor de la un alt obiect,
- persistenta atributelor (scrierea lor pe disc).
Al treilea constructor asigura:
- obtinerea valorii atributelor persistente de pe disc.
Cele trei variante pot fi utile in cazul
sistemelor client-server in care se doreste realizarea persistentei datelor (pe
disc) la server.
Metoda main() a clasei Utilizare2Polinom4 contine un scenariu de utilizare a
clasei Polinom4 bazat pe apelul celui de-al treilea constructor (cel care obtine
valorile dintr-un fisier). (script pentru lansare)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
import
javax.swing.JOptionPane; import java.io.*; public
class Utilizare2Polinom4 { public
static void main(String[]
args) throws IOException { System.out.println("Programul
Utilizare2Polinom4 a fost lansat..."); // Apelul constructorului care initializeaza elementele polinomului // cu valori citite din fisier Polinom4 pol
= new Polinom4("coef",
"txt"); //
Apelul metodei care afiseaza polinomul pol.afisarePolinom(); // Obtinerea unei valori a necunoscutei
(X) int X
= Integer.parseInt(JOptionPane.showInputDialog( "Introduceti valoarea necunoscutei")); // Afisarea
valorii necunoscutei (X) System.out.println("X
= " + X); // Apelul metodei care calculeaza
polinomul pentru necunoscuta X int P_X = pol.valoarePolinom(X); // Afisarea
valorii P(X) System.out.println("P("
+ X + ") = " + P_X); // Apelul metodei care calculeaza
polinomul pentru necunoscuta = 0 int P_0 = pol.termenLiber(); // Afisarea
valorii P(0) System.out.println("P(0)
= " + P_0); // Apelul metodei care calculeaza
polinomul pentru necunoscuta = 1 int P_1 = pol.sumaCoeficienti(); // Afisarea
valorii P(1) System.out.println("P(1)
= " + P_1); System.exit(0);
// Inchiderea interfetei grafice } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
import
javax.swing.JOptionPane; import java.io.*; public
class Polinom4 {
protected int N; //
gradul polinomului protected int[] C; // coeficientii polinomului //
Constructor - initializeaza elementele polinomului // cu valori obtinute de la utilizator, si le scrie in fisier public Polinom4(String
numeFisier) throws IOException { PrintWriter outFisier = new PrintWriter(new
BufferedWriter(new
FileWriter(numeFisier))); // Obtinerea gradului polinomului (N) N =
Integer.parseInt(JOptionPane.showInputDialog( "Introduceti gradul polinomului")); // Stocarea numarului de coeficienti outFisier.println(N+1); // Crearea
tabloului coeficientilor (de dimensiune N+1) C = new int[N+1]; // Obtinerea coeficientilor Ci, unde
i=0,N for
(int i=0; i<=N; i++) { C[i]
= Integer.parseInt(JOptionPane.showInputDialog(
"Coeficientul de grad " + i)); //
Stocarea coeficientilor outFisier.println(C[i]); } outFisier.close(); System.out.println("A
fost creat un obiect Polinom..."); } // Constructor - initializeaza elementele
polinomului // cu valori obtinute ca parametru, si le
scrie in fisier public Polinom4(String
numeFisier, int[] coeficienti) throws IOException { PrintWriter outFisier = new PrintWriter(new
BufferedWriter(new
FileWriter(numeFisier))); // Obtinerea gradului polinomului (N) N = coeficienti.length - 1; // Stocarea numarului de coeficienti outFisier.println(N+1); // Crearea
tabloului coeficientilor (de dimensiune N+1) C = new int[N+1]; // Obtinerea coeficientilor Ci, unde
i=0,N for
(int i=0; i<=N; i++) { C[i]
= coeficienti[i]; //
Stocarea coeficientilor outFisier.println(C[i]); } outFisier.close(); System.out.println("A fost creat un obiect
Polinom..."); } //
Constructor - initializeaza elementele polinomului // cu valori
citite din fisier public Polinom4(String nume, String extensie) throws IOException { String
numeFisier = nume + "." + extensie; BufferedReader inFisier = new BufferedReader(new
FileReader(numeFisier)); // Obtinerea gradului polinomului (N) N = Integer.parseInt(inFisier.readLine()) - 1; // Crearea
tabloului coeficientilor (de dimensiune N+1) C = new int[N+1]; //
Obtinerea coeficientilor Ci, unde i=0,N for
(int i=0; i<=N; i++) { C[i]
= Integer.parseInt(inFisier.readLine()); } inFisier.close(); System.out.println("A fost creat un obiect
Polinom..."); } //
Metoda care afiseaza polinomul public
void afisarePolinom() { // Termenul liber Co
System.out.print("P(X) = " + C[0]); // Termenii Ci*X^i, unde i=1,N for
(int i=1; i<=N; i++) {
System.out.print(" + " + C[i] + "*X^" + i); }
System.out.println();
} //
Metoda care calculeaza valoarea polinomului pentru o necunoscuta public
int valoarePolinom(int X) { int
P_X = 0; int
X_i = 1; // Termenii +Ci*X^i, unde 0=1,N for (int i=0; i<=N; i++) { P_X
= P_X + C[i]*X_i; X_i
= X_i * X; } return
(P_X); } //
Metoda care calculeaza valoarea polinomului pentru necunoscuta = 0 public
int termenLiber() { return
(C[0]); } //
Metoda care calculeaza valoarea polinomului pentru necunoscuta = 1 public int sumaCoeficienti() { int
S_C = C[0]; for
(int i=1; i<=N; i++) { S_C
= S_C + C[i]; } return
(S_C); } //
Metoda care returneaza tabloul coeficientilor polinomului public
int[] coeficienti() { int[]
coef = new int[N+1];
System.arraycopy(C, 0, coef, 0, N+1); return
(coef); } //
Metoda care returneaza coeficientii polinomului sub forma de String public
String toString() { String
polinom = "" + C[0]; // Termenii Ci*X^i, unde i=1,N for
(int i=1; i<=N; i++) {
polinom = polinom + " + " + C[i] + "*X^" + i; } return
(polinom); } } |