source: tol/TolJava/TOLJava/src/com/hcarralero/toljava/TOLPolyn.java @ 9887b93

1941-docker-image-to-testdevel
Last change on this file since 9887b93 was 9887b93, checked in by Humberto Carralero <hacarralero@…>, 15 years ago

Importing TolJava

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@3900 be4846ae-f051-483a-831f-b64e7d08527f

  • Property mode set to 100644
File size: 6.3 KB
Line 
1package com.hcarralero.toljava;
2
3import java.util.Iterator;
4import java.util.Vector;
5
6/**
7 * Representa a un objeto TOL de tipo Polyn.
8 *
9 * @author Humberto Andrés Carralero López (hcarralero@gmail.com)
10 * @version 1.0
11 */
12public class TOLPolyn extends TOLLObject {
13
14    /**
15     * Variable B de un término.
16     */
17    public static int B= 0;
18
19    /**
20     * Variable F de un término.
21     */
22    public static int F= 1;
23
24    private Vector<TOLPolynTerm> vterms;
25
26    /**
27     * Obtiene una copia exacta de todos los términos del polinomio.
28     *
29     * @return un arreglo con una copia de todos los términos del polinomio.
30     */
31    public TOLPolynTerm[] getTerms() {
32        TOLPolynTerm[] terms= new TOLPolynTerm[vterms.size()];
33        return vterms.toArray(terms);
34    }
35
36    /**
37     * Construye un polinomio sin términos, para añadir términos debe usar el método
38     * addTerm.
39     */
40    public TOLPolyn() {
41        vterms= new Vector<TOLPolynTerm>();
42    }
43
44    /**
45     * Añade un nuevo término al polinomio.
46     *
47     * @param var variable del término (B o F).
48     * @param coef coeficiente del término.
49     * @param grade grado del término.
50     */
51    public synchronized void addTerm(int var, double coef, int grade) {
52        if (coef!=0) {
53            if (grade<0) {
54                grade= -grade;
55                if (var==TOLPolyn.B) {
56                    var= TOLPolyn.F;
57                } else {
58                    var= TOLPolyn.B;
59                }
60            }
61            int pos= 0;
62            Iterator<TOLPolynTerm> itp= vterms.iterator();
63            while (itp.hasNext()) {
64                TOLPolynTerm t= itp.next();
65                if (t.var==TOLPolyn.B) {
66                    if (var==TOLPolyn.B) {
67                        if (t.grade==grade) {
68                            t.coef+= coef;
69                            if (t.coef==0) {
70                                itp.remove();
71                            }
72                            pos= -1;
73                            break;
74                        } else {
75                            if (t.grade>grade) {
76                                vterms.add(pos, new TOLPolynTerm(var, coef, grade));
77                                pos= -1;
78                                break;
79                            }
80                        }
81
82                    } else {
83                        vterms.add(pos, new TOLPolynTerm(var, coef, grade));
84                        pos= -1;
85                        break;
86                    }
87                } else {
88                    if (var==TOLPolyn.F) {
89                        if (t.grade==grade) {
90                            t.coef+= coef;
91                            pos= -1;
92                            break;
93                        } else {
94                            if (grade>t.grade) {
95                                vterms.add(pos, new TOLPolynTerm(var, coef, grade));
96                                pos= -1;
97                                break;
98                            }
99                        }
100
101                    } else {
102                        vterms.add(pos, new TOLPolynTerm(var, coef, grade));
103                        pos= -1;
104                        break;
105                    }
106                }
107                ++pos;
108            }
109            if (pos!=-1) {
110                vterms.add(pos, new TOLPolynTerm(var, coef, grade));
111            }
112        }
113    }
114
115    /**
116     * Elimina el término de la posición <code>index</code> del polinomio.
117     *
118     * @param index posición del téremino en el polinomio.
119     * @return una copia del término eliminado del polinomio.
120     */
121    public synchronized TOLPolynTerm removeTerm(int index) {
122        return vterms.remove(index);
123    }
124
125    /**
126     * Obtiene el número de términos del polinomio.
127     *
128     * @return el número de términos del polinomio.
129     */
130    public synchronized int getNterms() {
131        return vterms.size();
132    }
133
134    /**
135     * Obtiene el término ubicado en la posición <code>index</code> del polinomio.
136     *
137     * @param index posición del término dentro del polinomio.
138     * @return el término ubicado en la posición <code>index</code> del polinomio.
139     */
140    public synchronized TOLPolynTerm getTerm(int index) {
141        return vterms.get(index);
142    }
143
144    /**
145     * Obtiene un iterador que puede ser usado para moverse entre los términos del polinomio.
146     *
147     * @return el iterador sobre los términos.
148     */
149    public Iterator<TOLPolynTerm> getIterator() {
150        return vterms.iterator();
151    }
152
153    /**
154     * Determina si el objeto corresponde al tipo Polyn de TOL.
155     *
156     * @return <code>true</code> ya que el objeto corresponde al tipo Polyn de TOL.
157     */
158    @Override
159    public boolean isPolyn() {
160        return true;
161    }
162
163    /**
164     * Compara a este objeto con otro.
165     *
166     * @param obj el objeto con el que se comparará.
167     * @return <code>true</code> si el objeto pasado como parámetro es de tipo <code>TOLPolyn</code>
168     * y contiene los mismos términos.
169     */
170    @Override
171    public boolean equals(Object obj) {
172        if (obj == null) {
173            return false;
174        }
175        if (getClass() != obj.getClass()) {
176            return false;
177        }
178        final TOLPolyn other = (TOLPolyn) obj;
179        if (this.vterms != other.vterms && (this.vterms == null || !this.vterms.equals(other.vterms))) {
180            return false;
181        }
182        return true;
183    }
184
185    /**
186     * Calcula el código hash asignado al objeto.
187     *
188     * @return el código hash asignado al objeto.
189     */
190    @Override
191    public int hashCode() {
192        int hash = 7;
193        hash = 47 * hash + (this.vterms != null ? this.vterms.hashCode() : 0);
194        return hash;
195    }
196
197    /**
198     * Obtiene una representación como cadena de texto del polinomio usando la sintaxis de TOL.
199     *
200     * @return la representación como cadena de texto del polinomio.
201     */
202    @Override
203    public String toString() {
204        String res= "";
205        boolean mas= false;
206        Iterator<TOLPolynTerm> it= this.vterms.iterator();
207        while (it.hasNext()) {
208            TOLPolynTerm t= it.next();
209            if (mas) {
210                if (t.coef>=0) {
211                    res+= "+";
212                }
213            } else {
214                mas= true;
215            }
216            res+= t.toString();
217        }
218        return res;
219    }
220
221}
Note: See TracBrowser for help on using the repository browser.