From 1d85f017b8337b83a3df712db88108fbe15f3bc5 Mon Sep 17 00:00:00 2001 From: KyMAN <0kyman0@gmail.com> Date: Thu, 7 Mar 2024 01:41:48 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20Terminada=20la=20documentaci=C3=B3n=20y?= =?UTF-8?q?=20establecida=20la=20configuraci=C3=B3n.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aleatorios/build/built-jar.properties | 4 +- .../build/classes/aleatorios/Aleatorios.class | Bin 1619 -> 1760 bytes Actividad1/aleatorios/dist/aleatorios.jar | Bin 2283 -> 2454 bytes .../aleatorios/src/aleatorios/Aleatorios.java | 11 +- .../ordenarNumeros/build/built-jar.properties | 4 +- .../build/classes/.netbeans_automatic_build | 0 .../build/classes/.netbeans_update_resources | 0 .../ordenarnumeros/OrdenarNumeros.class | Bin 1933 -> 1903 bytes .../ordenarNumeros/dist/ordenarNumeros.jar | Bin 2629 -> 2629 bytes .../src/ordenarnumeros/OrdenarNumeros.java | 2 +- Actividad2/colaborar/build.xml | 73 + .../colaborar/build/built-jar.properties | 4 + .../build/classes/.netbeans_automatic_build | 0 .../build/classes/.netbeans_update_resources | 0 .../build/classes/colaborar/Colaborar$1.class | Bin 0 -> 1163 bytes .../build/classes/colaborar/Colaborar$2.class | Bin 0 -> 1163 bytes .../build/classes/colaborar/Colaborar$3.class | Bin 0 -> 1492 bytes .../build/classes/colaborar/Colaborar$4.class | Bin 0 -> 1786 bytes .../build/classes/colaborar/Colaborar$5.class | Bin 0 -> 2165 bytes .../build/classes/colaborar/Colaborar$6.class | Bin 0 -> 1582 bytes .../build/classes/colaborar/Colaborar.class | Bin 0 -> 5278 bytes Actividad2/colaborar/dist/README.TXT | 32 + Actividad2/colaborar/dist/colaborar.jar | Bin 0 -> 15447 bytes Actividad2/colaborar/manifest.mf | 3 + Actividad2/colaborar/nbproject/build-impl.xml | 1771 +++++++++++++++++ .../colaborar/nbproject/genfiles.properties | 8 + .../nbproject/private/private.properties | 2 + .../colaborar/nbproject/private/private.xml | 12 + .../colaborar/nbproject/project.properties | 95 + Actividad2/colaborar/nbproject/project.xml | 15 + .../colaborar/src/colaborar/Colaborar.java | 287 +++ .../lenguaje/build/built-jar.properties | 2 +- .../build/classes/lenguaje/Lenguaje$1.class | Bin 0 -> 2474 bytes .../build/classes/lenguaje/Lenguaje$2.class | Bin 0 -> 1283 bytes .../build/classes/lenguaje/Lenguaje.class | Bin 2738 -> 4463 bytes Actividad2/lenguaje/dist/lenguaje.jar | Bin 3416 -> 9150 bytes .../lenguaje/nbproject/private/private.xml | 9 + .../lenguaje/src/lenguaje/Lenguaje.java | 144 +- README.md | 575 +++++- 39 files changed, 3023 insertions(+), 30 deletions(-) delete mode 100644 Actividad1/ordenarNumeros/build/classes/.netbeans_automatic_build delete mode 100644 Actividad1/ordenarNumeros/build/classes/.netbeans_update_resources create mode 100644 Actividad2/colaborar/build.xml create mode 100644 Actividad2/colaborar/build/built-jar.properties rename {Actividad1/aleatorios => Actividad2/colaborar}/build/classes/.netbeans_automatic_build (100%) rename {Actividad1/aleatorios => Actividad2/colaborar}/build/classes/.netbeans_update_resources (100%) create mode 100644 Actividad2/colaborar/build/classes/colaborar/Colaborar$1.class create mode 100644 Actividad2/colaborar/build/classes/colaborar/Colaborar$2.class create mode 100644 Actividad2/colaborar/build/classes/colaborar/Colaborar$3.class create mode 100644 Actividad2/colaborar/build/classes/colaborar/Colaborar$4.class create mode 100644 Actividad2/colaborar/build/classes/colaborar/Colaborar$5.class create mode 100644 Actividad2/colaborar/build/classes/colaborar/Colaborar$6.class create mode 100644 Actividad2/colaborar/build/classes/colaborar/Colaborar.class create mode 100644 Actividad2/colaborar/dist/README.TXT create mode 100644 Actividad2/colaborar/dist/colaborar.jar create mode 100644 Actividad2/colaborar/manifest.mf create mode 100644 Actividad2/colaborar/nbproject/build-impl.xml create mode 100644 Actividad2/colaborar/nbproject/genfiles.properties create mode 100644 Actividad2/colaborar/nbproject/private/private.properties create mode 100644 Actividad2/colaborar/nbproject/private/private.xml create mode 100644 Actividad2/colaborar/nbproject/project.properties create mode 100644 Actividad2/colaborar/nbproject/project.xml create mode 100644 Actividad2/colaborar/src/colaborar/Colaborar.java create mode 100644 Actividad2/lenguaje/build/classes/lenguaje/Lenguaje$1.class create mode 100644 Actividad2/lenguaje/build/classes/lenguaje/Lenguaje$2.class create mode 100644 Actividad2/lenguaje/nbproject/private/private.xml diff --git a/Actividad1/aleatorios/build/built-jar.properties b/Actividad1/aleatorios/build/built-jar.properties index 5cd0d11..2b9ead5 100644 --- a/Actividad1/aleatorios/build/built-jar.properties +++ b/Actividad1/aleatorios/build/built-jar.properties @@ -1,4 +1,4 @@ -#Mon, 26 Feb 2024 17:35:52 +0100 +#Thu, 07 Mar 2024 01:37:31 +0100 -/home/DAM2024/PSP01_Tarea/aleatorios= +/home/DAM2024/PSP01_Tarea/Actividad1/aleatorios= diff --git a/Actividad1/aleatorios/build/classes/aleatorios/Aleatorios.class b/Actividad1/aleatorios/build/classes/aleatorios/Aleatorios.class index 1dd9b4ea58f094b883277c6fb95e411cc41d88cb..ebb1fdcbdb24d80a9caa4943af140f8dc40cdfca 100644 GIT binary patch delta 744 zcmX|9OHUI~7(I7p=(N*Y+ky|kLMy(orBzWBizGa-&?d1Hy9E5@to@*r$rkh3YN=c(322Kc3wzLRqC=t+ zd+X1JTwM~~2-m+vy!+5&V!y-z98@kb;5sbPiz8}6M7%NdnTR_*2~`y1u459%(XUp; zr1vBSOq`N9jX|YpgK>eNz5FO&E@g80Of#woh?IaYS+XnDtX-YY7MJrnx5=qFZCQQP zRy^+E`^AD?sE(?d-XHY4Fl*sDZkV{~Oqx^g^>-a^Ebt&9AXB!TFDHxHN+n-0aa%n% zqQ)J8Zna``s~?7}S9YHAi7CPSi^}1;G4t9fWxQ+Sg&!mk&Zss*w9kv6aLANPjkn&8ksNpJR=-r%f Rjqg0^f-D6&E#fXZ{sJswcsu|A delta 621 zcmX|;Jxo(k6vuz}wSBL=zCsmBTU(%_BDO*mt%8Ua5v58MKd~E4Xrd8m($=|)vq^I| z7ZVm{9ZG|VgQJO)gR6ta)fqqVyh0rA`Tx&7ANPOG{Tlr2*dPCHzXvW;Y}$pOO#sIt z=+I41vytpKbH$v5!KRl!i?BmKk>;mqGv;uJxb9ZTzyO05Lk>v}>nW8rk2oCVn669c zIHMLP+@h3zt#al`hcU+WcQqe4#c7KPhclejSz|J8aZV8~t(8mlO7%&lmYMxe^(*7K zq4GND**Fj?l!6-xfOhl2BOr%4OE6lCP6j#M{r`fxj7j{i_kZ^ cGU0+)gFH6`{ZdtsbCY}G*~0GgkVnM+0k?Z%yZ`_I diff --git a/Actividad1/aleatorios/dist/aleatorios.jar b/Actividad1/aleatorios/dist/aleatorios.jar index fd4335d5c241a832351387e39ce878d9d3e0f697..bf2b13b0c44dfee0cc27a9b39c5cad0115bf5043 100644 GIT binary patch delta 880 zcmZ8gO-~a+7=C7F+ubf(X!#J(0tFRI3q@40TD}xfE5#O2prXP;n+nv{^uv=$V`AdX z#7yGFi_sVkUIY^$>d}M0z@y=yiHUa)M5FJvgoB&xydU$-%=11o?@#Bm8hdn%%Nn2p z>w5C3-NWDN$@PGfaSBD4wcE+ge(rvLXU7Wch$8c`+u{uy=L#ysSKeUPU`M5bDjg0u zg++4vZO~AoqZV}xRaqmQ%*-39gpto=mop5~Tu4Jb8Wc3@IEX_cC!;Iv98|k!Ps$ggU}2#(kqZMH_cV7FQBW`Je_LIu&%88~TNv z4_lAx=)nmw#YZbnp;tklj?)N;S3Jy__Euc1v&Ngoa5>DY#}Hb6rF&pXz6555}N}(&Aqi4rz(vIO{MGLm63 zYBS#w6`{gKFQSR`agp>b#L$i6BssGLG3k0~frc(zpz0;kpk>bkVi?6mLa3O)C0wQ= zLKK37O~~^8JPp-<5#bF~Y45l{#io?fb7| MUaP~_ho&U>2cRaIdjJ3c delta 712 zcmZ9KyH6BR6vlsdW_B(+JA)uB3+@67DgvvZ;v$O3pduoRu1_9TBw84ZYg8I7w$NA+ z6LS+Q6B8N>6AczXw6(Lx#Ky+N!vDZW^vpsiyv6y>ch6(KbLTv-`%xPdCv3-qDtNd! z`z+|RA1ux;57a7Ks41w9KyW&IU%GpCY{SlzN_4n`5LQsHCGian^cz-ZlP3~U${dXd92D<7K#|I z*u%nm1(jf|dlj`Tj>Ul3C=3Bd#QGZv9A!{goMQ~hO;r3@8rgzpKA>k-i5KjlOwIKr znsRG+_0*K-pRTceg~qAJmU{K~`(`-vj!Z7ILi-vW@5#Xmy_JM-kpQP6pgsDRB*mtv zp;6vBMTfk84{1gO$7rsI>y~_v496K3>7BH0dLoLjEUD2_gq+}{Xg(z@nr7o>RJ_x2 zQ-|{hPovdO(!WsxEi%@age>VYUTL8?E9pfp3iHIf#1*D!Do!Y?-rm~0X^C!~IOb(l aSG0-dQ`K-~6N7mFf16m0hwi$LYW@ND1au_; diff --git a/Actividad1/aleatorios/src/aleatorios/Aleatorios.java b/Actividad1/aleatorios/src/aleatorios/Aleatorios.java index 2e81f8f..1f43dea 100644 --- a/Actividad1/aleatorios/src/aleatorios/Aleatorios.java +++ b/Actividad1/aleatorios/src/aleatorios/Aleatorios.java @@ -11,6 +11,11 @@ import java.util.ArrayList; * @author kyman */ public class Aleatorios { + + // Configuración. + private static final int numero_de_numeros = 100; + private static final int[] rango_aleatorio = {0, 100}; + // Configuración. /** * @param args the command line arguments @@ -20,10 +25,10 @@ public class Aleatorios { ArrayList numeros_aleatorios = new ArrayList<>(); - for(int i = 0; i < 100; i ++) - numeros_aleatorios.add((int)(Math.random() * 101)); + for(int i = 0; i < numero_de_numeros; i ++) + numeros_aleatorios.add((int)(Math.random() * (rango_aleatorio[1] + 1 - rango_aleatorio[0])) + rango_aleatorio[0]); - for(int i = 0; i < 100; i ++) + for(int i = 0; i < numero_de_numeros; i ++) System.out.println("" + numeros_aleatorios.get(i)); } diff --git a/Actividad1/ordenarNumeros/build/built-jar.properties b/Actividad1/ordenarNumeros/build/built-jar.properties index d582268..9f0869b 100644 --- a/Actividad1/ordenarNumeros/build/built-jar.properties +++ b/Actividad1/ordenarNumeros/build/built-jar.properties @@ -1,4 +1,4 @@ -#Mon, 26 Feb 2024 17:36:30 +0100 +#Thu, 07 Mar 2024 01:37:28 +0100 -/home/DAM2024/PSP01_Tarea/ordenarNumeros= +/home/DAM2024/PSP01_Tarea/Actividad1/ordenarNumeros= diff --git a/Actividad1/ordenarNumeros/build/classes/.netbeans_automatic_build b/Actividad1/ordenarNumeros/build/classes/.netbeans_automatic_build deleted file mode 100644 index e69de29..0000000 diff --git a/Actividad1/ordenarNumeros/build/classes/.netbeans_update_resources b/Actividad1/ordenarNumeros/build/classes/.netbeans_update_resources deleted file mode 100644 index e69de29..0000000 diff --git a/Actividad1/ordenarNumeros/build/classes/ordenarnumeros/OrdenarNumeros.class b/Actividad1/ordenarNumeros/build/classes/ordenarnumeros/OrdenarNumeros.class index f7831036a2ffde6914c11b657c4e7528806ed50c..145c903c9acdadee39e0348cee836e1a8b428fa6 100644 GIT binary patch delta 139 zcmeC>f6vEt>ff$?3=9nR422uHs#zw_U@;NoXJbg=Vn}63V`oU`VQ^;1nEZt0kPHVy z79#^ABO?QkXI@@vk#kOBadB!fJ3}rbgX&}fR#i53hI~c_IUrMRG7DQIBje;aw!iAk k3<*HfnHUlol7KV^10zE+5N9%E19@CPRt`fRLji*%03_}l3;+NC delta 163 zcmaFQ*UQg!>ff$?3=9nR3`HBcs#ydDd{av@@>2p5ixP8FOHzx9CpWX0NpLWvGBPkS z^0P6db1`HvWU@14@h~_uWKTZDa!8bsfyXm1FSW=yC$YFVwV0hDkC8!jvOcT$qa#Vyjz?+$ci-CcIfnhyQ`b1t0=5;*j8!aRmnStENA&goedUGS=dUmjYF{cGc T!Q?zndoX_krxlof%NYRx7S|RO delta 78 zcmX>qa#Vyjz?+$ci-CcIfnh>V)I?ql=Kh|jjTVxO%s}qs5JoK!y}6NbJv&&yn9~BJ TU~(R(J($0N(+W(#<%|FTaDy1M diff --git a/Actividad1/ordenarNumeros/src/ordenarnumeros/OrdenarNumeros.java b/Actividad1/ordenarNumeros/src/ordenarnumeros/OrdenarNumeros.java index ffe331b..6be1a9b 100644 --- a/Actividad1/ordenarNumeros/src/ordenarnumeros/OrdenarNumeros.java +++ b/Actividad1/ordenarNumeros/src/ordenarnumeros/OrdenarNumeros.java @@ -21,7 +21,7 @@ public class OrdenarNumeros { // TODO code application logic here Scanner entrada = new Scanner(System.in); - ArrayList lista = new ArrayList(); + ArrayList lista = new ArrayList<>(); while(entrada.hasNextInt()) lista.add(entrada.nextInt()); diff --git a/Actividad2/colaborar/build.xml b/Actividad2/colaborar/build.xml new file mode 100644 index 0000000..1029e8a --- /dev/null +++ b/Actividad2/colaborar/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project colaborar. + + + diff --git a/Actividad2/colaborar/build/built-jar.properties b/Actividad2/colaborar/build/built-jar.properties new file mode 100644 index 0000000..9ed02b8 --- /dev/null +++ b/Actividad2/colaborar/build/built-jar.properties @@ -0,0 +1,4 @@ +#Thu, 07 Mar 2024 01:40:43 +0100 + + +/home/DAM2024/PSP01_Tarea/Actividad2/colaborar= diff --git a/Actividad1/aleatorios/build/classes/.netbeans_automatic_build b/Actividad2/colaborar/build/classes/.netbeans_automatic_build similarity index 100% rename from Actividad1/aleatorios/build/classes/.netbeans_automatic_build rename to Actividad2/colaborar/build/classes/.netbeans_automatic_build diff --git a/Actividad1/aleatorios/build/classes/.netbeans_update_resources b/Actividad2/colaborar/build/classes/.netbeans_update_resources similarity index 100% rename from Actividad1/aleatorios/build/classes/.netbeans_update_resources rename to Actividad2/colaborar/build/classes/.netbeans_update_resources diff --git a/Actividad2/colaborar/build/classes/colaborar/Colaborar$1.class b/Actividad2/colaborar/build/classes/colaborar/Colaborar$1.class new file mode 100644 index 0000000000000000000000000000000000000000..35217b32ff321dfac951d3ca1ef3aa39f35bed33 GIT binary patch literal 1163 zcmZuwU2hUW6g>m93v_9b7W$>7wy1n4Sgls2_KVcmgnpzL664bVQ@VATZDtpu|G z6-wv3)B?j$hnp!O9mN}*VWND*JG@|6g^l*Xfl#8cFL* zVYhZ9>JG!;vLOv;g~6ZBRKpm?h=!<+Yltx75JEBG1tTr`|U+CVWI)|zSZ;|LJOl!EV;|69JM$c9BVHmVyx5AV} zlD;e;Q`IorSGu*k`K~UG9mA4g%wb+bO2;kSCdd^AGlYZ-uM?ci?dQLsDY`Av46%Qf z?zg4nHIq!4?v-5rAekydpky@&G~yb#({9y-detq9m908At6Ujw+)DeTp3a2KxwDT3Kt?HsII>KC+(sH=#FSQ@*Yq8rAN*N77WZ^FUh2dH>d@;^> z*FmylQ`Sw(rt#^XN5?XrlUXfpkp4vaO&@7*%v>{rJHmEeS~g9Sz9pqlC6n8>urW&) zDF}u;V9}_1ndpA`=ovx=eq?F4NU@sZ9 z71vH@=|zU24!6=mDO(ALVWND%JG^Mx#ntxSo=~E(D|kbwQWRlCG(>d_L1&2jFpJA( zu~I(}hRZOxY)aEzVF+fjwJ3%$q9Ly15)urli&+`Mis;Lx6bxgTY`3`2T6L8vo23ZG zkkpXUF^-A<%2wYyu4qv;yG_NDXS#PN&!ud^TO@i4(;6=8xPlpm(Nh(D7zXXo%djMo zWX=o7)-=rZrEXT%-x=c2HEkKiJQg&hbzH-Bf?QxQLqvFRgWzOtKmQp`$t#gzNc^*O zw=E^FTV%>~FXjA!WNQqeHM>Ee5zoNwcB?Mbt8QANY#ZFFabqEp&#tv7!C0wBh9I2X3$=$Z1GC|d*O=vA49ezM@;=Eh^2hrygamT7IH{NdX z!=9K0TQv((xOKs$Q>fZ)Wr(uq2fKU3NM>?DP1a^Yh>+%o8K4LU~g2|&lzm5W$xJ5+UNZ}>DsnFUEX0Yq4m?K;SF)ZRPHD%HH8&0B+lB>4vGxXOtz{a$#5_PbpqQlD;Aeh zctc2GSc9%(1f!2cscid!XfZ@=$#AF~?zCNVLAE6zpjo&mco} z+5UX19c+gjQnD$`=$J*0k~O&BD7ke?M)WQuk!Ofoj_V7BdQQjlc!4AkH#*$$iNHQR z0|FJY>q*QJ#u6UUk;G{VRofOxoS{m@mK`MV3MC4J*Rmz|QpCbp9dpPi(TX}a#*e-P0$D3q(c9Z7H@U>%zBO=~{N(&8P4><~3Z@@dhpt>3ix9?54xFRV+uz zKUjUA&1_Y1|E7*S5*o?`+DF;xQyP{SjE9$VwIe03IYe8m$KIGyY^l?#3GYg8!6>^H zcdFd8mEWI?1r3{cJW}2_OM!^+I#j9F64K{Q3UB=X0x*nJ0&ab{$lLv>CtYtNFGWxj zT>ANn+wm+>7MsF3FQpssz;-1i9Ulm_yh&==bwL?ZJ^V#moo4jE+niU2Wf+^6>N?QH zTNFXVt?RfJ_9^wGWpnR(Usi_{UJ`zA$@NJ`eL*#4$>F{)d`#jpH95l~b$o;#YIO3J z>B}U`)XdCnuy4ZU6?&^>ppLibt@i*}MTIo7ozoh|%1=AE8~{#n5exeG6k3 z6E|^p7e*Jy%ClWecJb6LbY~YM#atKJuV@2}kLZbi{oQB3k-c!|^G`n^>wtayH`x`K zcTSMK7XRYU`()>G#&PBIpgKf zi)+Q>Us50%vpo~mJx$+_Jl~_Rwu9kaoHNdMQQGLh=q1RY&m?-bOW~@m`)}iqACOHE?lM^#{{kFmRqFr% literal 0 HcmV?d00001 diff --git a/Actividad2/colaborar/build/classes/colaborar/Colaborar$4.class b/Actividad2/colaborar/build/classes/colaborar/Colaborar$4.class new file mode 100644 index 0000000000000000000000000000000000000000..de62ab8df350ee47a6974ad09af5a728528a7643 GIT binary patch literal 1786 zcmZuyZBHCk7(JI=n6gewSzZdI)Y=x=Z7b^wtuI?!0jaDmP}vHCFZJ%s1qPNGGBZom z#1BSetk%@3(P)gRe&I8ifRV(nCjJzEgm~@@i(3oH&V6~#J@*?Tx+K?Rt|Hxq++=x4S)oAFWyf{GD*}m3cG^Hn zpd$jgD$JFXzoz_>XDzER0c;#kp&5rY*AanarjVU(21!k{B2A_s0ty@}9>|c_;C2%o z=oCnWzAVcn>Dr!vnA5~vCc1H)Jkqk%DpPCAWb2qB^1Oi)3`G2nm%HveZaCvRq4HBW ziH8lGGVusb3$*-~!d_M_3o4wfhO5=E6#7c82z1r>$y6W7r_h75y39U-?o6D+|1ojx z{U$QV3LLU3j&eg4P`(&n4V_AE$oJ)YMJEVJc^(%GJZ545xmpGHV<>6hyssiB3L5`} zi6`+C$IP6()H|lG^DpAPXyOu{CQjP6#yyD2&S~wRHSwHI)(B+9v1Oq5xNPEiX!irX zM}MYpz~Tp|47?!FS#x2yIzO*`Wlt$-E8oB{Rjb7c?!Mr0So`#%iBVh=IKsl}06aN$ zj?@KMaH3W- z3Gc6jYYa@)%+mW!j=rmprsKH=Zcyq2Zrs^H1JeTONPx(xsjBPBa)rhwM?9NNOVM%F zM0KUC{2Or~UGywjnU=nz$9t2>aM9s;I#xVzmpnc5t1jK#J9+}Gam~@qjc<#-l#$o_ z$C6dlT^f=Ihd;_HDguW~p|qCATnYmTn`$o`8opoO6Zqpnr)0>@n#SK*>(n^*=jILgP!a-@GV;M3#S z9{u6FG)KcGR1l7N0S~EJa9!n(RAdmS0H;vm8z=A@U&03d_|9=O!(NW9VB2_Z8;Ol5 z{5ro)(d37iW#5ben8OJzJbKISi*M*@B?n)N3OU>#7{*3 z9EmeX0lKk@x9~Ri?1PP)c!%=zqs+Bs?w+G?7JEr8)Sieo`x!KwyEv`?^OOvnG|(ex uM7pu7br)R_oCSsr763)GHe{Y{5)1q`U=dC<63lKTnh|i>>if%u`tM(;EwJDK literal 0 HcmV?d00001 diff --git a/Actividad2/colaborar/build/classes/colaborar/Colaborar$5.class b/Actividad2/colaborar/build/classes/colaborar/Colaborar$5.class new file mode 100644 index 0000000000000000000000000000000000000000..3d3ada706df3924cccbd230cd00ca2a1111cd4f8 GIT binary patch literal 2165 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 Xvf1z9174ma7Fg9V!!38mHhKCV2D7`S literal 0 HcmV?d00001 diff --git a/Actividad2/colaborar/manifest.mf b/Actividad2/colaborar/manifest.mf new file mode 100644 index 0000000..328e8e5 --- /dev/null +++ b/Actividad2/colaborar/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/Actividad2/colaborar/nbproject/build-impl.xml b/Actividad2/colaborar/nbproject/build-impl.xml new file mode 100644 index 0000000..956186f --- /dev/null +++ b/Actividad2/colaborar/nbproject/build-impl.xml @@ -0,0 +1,1771 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Actividad2/colaborar/nbproject/genfiles.properties b/Actividad2/colaborar/nbproject/genfiles.properties new file mode 100644 index 0000000..0dd9744 --- /dev/null +++ b/Actividad2/colaborar/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=50193e74 +build.xml.script.CRC32=cc88e93b +build.xml.stylesheet.CRC32=f85dc8f2@1.110.0.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=50193e74 +nbproject/build-impl.xml.script.CRC32=0a9661e5 +nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.110.0.48 diff --git a/Actividad2/colaborar/nbproject/private/private.properties b/Actividad2/colaborar/nbproject/private/private.properties new file mode 100644 index 0000000..9b263d1 --- /dev/null +++ b/Actividad2/colaborar/nbproject/private/private.properties @@ -0,0 +1,2 @@ +compile.on.save=true +user.properties.file=/home/kyman/snap/netbeans/93/build.properties diff --git a/Actividad2/colaborar/nbproject/private/private.xml b/Actividad2/colaborar/nbproject/private/private.xml new file mode 100644 index 0000000..f7d47a6 --- /dev/null +++ b/Actividad2/colaborar/nbproject/private/private.xml @@ -0,0 +1,12 @@ + + + + + + file:/home/DAM2024/PSP01_Tarea/Actividad2/colaborar/src/colaborar/Colaborar.java + file:/home/DAM2024/PSP01_Tarea/Actividad2/colaborar/src/colaborar/ColaborarB.java + file:/home/DAM2024/PSP01_Tarea/Actividad2/colaborar/src/colaborar/Cliente.java + file:/home/DAM2024/PSP01_Tarea/Actividad2/colaborar/src/colaborar/Servidor.java + + + diff --git a/Actividad2/colaborar/nbproject/project.properties b/Actividad2/colaborar/nbproject/project.properties new file mode 100644 index 0000000..fd94b12 --- /dev/null +++ b/Actividad2/colaborar/nbproject/project.properties @@ -0,0 +1,95 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.modulepath=\ + ${run.modulepath} +debug.test.classpath=\ + ${run.test.classpath} +debug.test.modulepath=\ + ${run.test.modulepath} +# Files in build.classes.dir which should be excluded from distribution jar +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/colaborar.jar +dist.javadoc.dir=${dist.dir}/javadoc +dist.jlink.dir=${dist.dir}/jlink +dist.jlink.output=${dist.jlink.dir}/colaborar +excludes= +includes=** +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.external.vm=true +javac.modulepath= +javac.processormodulepath= +javac.processorpath=\ + ${javac.classpath} +javac.source=19 +javac.target=19 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.modulepath=\ + ${javac.modulepath} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.html5=false +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +# The jlink additional root modules to resolve +jlink.additionalmodules= +# The jlink additional command line parameters +jlink.additionalparam= +jlink.launcher=true +jlink.launcher.name=colaborar +main.class=colaborar.Colaborar +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.modulepath=\ + ${javac.modulepath} +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +run.test.modulepath=\ + ${javac.test.modulepath} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/Actividad2/colaborar/nbproject/project.xml b/Actividad2/colaborar/nbproject/project.xml new file mode 100644 index 0000000..b8df1a3 --- /dev/null +++ b/Actividad2/colaborar/nbproject/project.xml @@ -0,0 +1,15 @@ + + + org.netbeans.modules.java.j2seproject + + + colaborar + + + + + + + + + diff --git a/Actividad2/colaborar/src/colaborar/Colaborar.java b/Actividad2/colaborar/src/colaborar/Colaborar.java new file mode 100644 index 0000000..7ac81a9 --- /dev/null +++ b/Actividad2/colaborar/src/colaborar/Colaborar.java @@ -0,0 +1,287 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template + */ +package colaborar; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.ServerSocket; +import java.net.Socket; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Scanner; + +/** + * + * @author kyman + */ +public class Colaborar { + + // Configuración. + private static final int numero_instancias = 10; + private static final String path_absoluto = "/home/DAM2024/PSP01_Tarea"; + private static final String lenguaje_path = path_absoluto + "/Actividad2/lenguaje/dist/lenguaje.jar"; + private static final int puerto = 45338; + // Configuración. + + public static boolean trabajando = true; + private static ServerSocket socket; + private static final ArrayList clientes = new ArrayList<>(); + private static final ArrayList salidas = new ArrayList<>(); + private static boolean ocupado = false; + private static int clientes_cerrados = 0; + private static Scanner entrada; + + /** + * @param args the command line arguments + */ + public static void main(String[] args) { + // TODO code application logic here + + if(iniciar_servidor()){ + + iniciar_terminal(); + + for(int i = 0; i < numero_instancias; i ++) + try { + + Process proceso = Runtime.getRuntime().exec("java -jar " + lenguaje_path + " " + ((i + 1) * 10) + " " + path_absoluto + "/diccionario.txt"); + BufferedReader entrada = new BufferedReader(new InputStreamReader(proceso.getInputStream())); + BufferedReader errores = new BufferedReader(new InputStreamReader(proceso.getErrorStream())); + + new Thread(new Runnable(){ + @Override + public void run() { + try { + + String mensaje; + + while((mensaje = entrada.readLine()) != null) + System.out.println(mensaje); + } catch (IOException excepcion) { + Colaborar.excepcion(excepcion); + } + } + }).start(); + + new Thread(new Runnable(){ + @Override + public void run() { + try { + + String mensaje; + + while((mensaje = errores.readLine()) != null) + System.out.println(mensaje); + } catch (IOException excepcion) { + Colaborar.excepcion(excepcion); + } + } + }).start(); + + } catch (IOException excepcion) { + Colaborar.excepcion(excepcion); + } + + }else + System.out.println("Hubo un error al intentar lanzar el Socket servidor en el puerto " + puerto + "."); + + } + + public static void excepcion(Exception exception){ + System.out.println(exception.getMessage()); + System.out.println(Arrays.toString(exception.getStackTrace())); + } + + private static void iniciar_terminal(){ + new Thread(new Runnable(){ + @Override + public void run() { + + entrada = new Scanner(System.in); + + while(trabajando){ + + String mensaje = entrada.nextLine(); + + if(!mensaje.trim().isEmpty()) + switch(mensaje){ + case "close", "cerrar", "bye", "exit", "terminar" -> cerrar(); + default -> System.out.println("Comando desconocido."); + } + + } + + entrada.close(); + + } + }).start(); + } + + private static boolean iniciar_servidor(){ + + boolean exito = false; + + try{ + new Thread(new Runnable(){ + @Override + public void run() { + try{ + + socket = new ServerSocket(puerto); + + while(trabajando){ + + Socket cliente = socket.accept(); + PrintWriter salida = new PrintWriter(cliente.getOutputStream()); + int i = 0; + int l = clientes.size(); + + for(; i < l; i++) + if(clientes.get(i) == null) + break; + if(i == l){ + clientes.add(cliente); + salidas.add(salida); + }else{ + clientes.set(i, cliente); + salidas.set(i, salida); + } + + escuchar(i, new BufferedReader(new InputStreamReader(cliente.getInputStream()))); + + } + + }catch(IOException excepcion){ + // ColaborarB.excepcion(excepcion); + } + } + + }).start(); + exito = true; + }catch(Exception excepcion){ + Colaborar.excepcion(excepcion); + } + + return exito; + } + + private static void escuchar(int i, BufferedReader entrada){ + new Thread(new Runnable(){ + @Override + public void run() { + + String mensaje; + + try{ + while((mensaje = entrada.readLine()) != null){ + System.out.println("SERVIDOR - REC => " + mensaje); + switch(mensaje){ + case "permiso" -> { + if(ocupado) + enviar(i, "permiso No"); + else{ + ocupado = true; + enviar(i, "permiso Sí"); + } + } + case "terminado" -> ocupado = false; + case "cerrar" -> { + if((clientes_cerrados += 1) == numero_instancias) + cerrar(); + } + } + } + entrada.close(); + }catch(IOException excepcion) { + // ColaborarB.excepcion(excepcion); + } + + cerrar_cliente(i); + + } + }).start(); + } + + private static boolean enviar(int i, String mensaje){ + + boolean estado = false; + + try{ + new Thread(new Runnable() { + @Override + public void run() { + + PrintWriter salida = salidas.get(i); + + System.out.println("SERVIDOR - ENV => " + mensaje); + salida.println(mensaje); + salida.flush(); + + } + }).start(); + estado = true; + }catch(Exception excepcion){ + Colaborar.excepcion(excepcion); + } + + return estado; + } + + private static boolean cerrar_cliente(int i){ + + boolean exito = false; + Socket cliente = clientes.get(i); + + if(cliente != null){ + try { + + PrintWriter salida = salidas.get(i); + + if(salida != null) + salida.close(); + cliente.close(); + clientes.set(i, null); + + exito = true; + + } catch (IOException excepcion) { + Colaborar.excepcion(excepcion); + } + } + + return exito; + } + + public static boolean cerrar(){ + + boolean exito = false; + + trabajando = false; + + if(entrada != null){ + System.out.println("La aplicación ha terminado. Por favor, presione \"ENTER\" para salir de la aplicación."); + entrada.close(); + } + + if(socket != null){ + + for(int i = 0, l = clientes.size(); i < l; i ++) + cerrar_cliente(i); + + try { + socket.close(); + exito = true; + } catch (IOException excepcion) { + Colaborar.excepcion(excepcion); + } + + } + + return exito; + } + +} diff --git a/Actividad2/lenguaje/build/built-jar.properties b/Actividad2/lenguaje/build/built-jar.properties index bc9cb56..2a33090 100644 --- a/Actividad2/lenguaje/build/built-jar.properties +++ b/Actividad2/lenguaje/build/built-jar.properties @@ -1,4 +1,4 @@ -#Mon, 26 Feb 2024 18:04:18 +0100 +#Thu, 07 Mar 2024 01:37:18 +0100 /home/DAM2024/PSP01_Tarea/Actividad2/lenguaje= diff --git a/Actividad2/lenguaje/build/classes/lenguaje/Lenguaje$1.class b/Actividad2/lenguaje/build/classes/lenguaje/Lenguaje$1.class new file mode 100644 index 0000000000000000000000000000000000000000..eb05903261fa2e71dabe892176363f423afbe92c GIT binary patch literal 2474 zcmZuz-*XdH6#j0KX47R$OZZtp2vQ(vEfvIqgcfLNX-Zn4sVyyHxk+x@Z8y7NcT=su z75t5&GLG`VgHJf)$XL+YsWU$4$c*^noBxV0TF*^Vnwsp)?!7sC?sx9_&Ueq|;lGPN z12~SG)$qWpz^9=KeunjiFeh?+O0>j_lZFEfYi797V2G5PvpK_-_!OVvExOgxksBWu zwnz^Mo)&ggMF7fvC35qTi7cin=RKrC) zx2k-DlTy&Ke1;HN24A>0GNj;nh8-)=F_U<)b6HoUyIxF*tgBn5B-!MK&;#t^r4`MYTJxs$roQoKwa4F{r>R6?IHIdvJSN;^lXg-TRh zi4t0*+QP{hE(wT`*H@4|2|FW9hngB?Sb|qnlibeoIV~ZCkn4&%b;eS%Vw~`65-v|o z_wj5#Aq8~$)P$9@Q=(g!WYsLU&HWORp|;DEyi=R%6Yiu%#dsZW5NjE(Q+Aue6}Br` z4fG4g?Xet!uj{ZZ*C9n_3kXiFAJ5sXb&ma5KcqfvZiy{XgNtGmQ@P}XS1S$dudwBy`mhVlN&}tcSSUS52!Sq z@mN>?U{|O)G|<%q;@FzhK~pi*KA zK3#RlR;5zpfX;J)1%&9+7@#gP307ApKaX^(J#??Z6phm~J4Bq9SlC5cW7C_;oz|av=391?f1~Ji0*u#YaS+leubJ~OuqKs$C-OLa|=5baCQTp zoxZVv;UFzgi#TV3?Z{sY!re=JX8u1*?<30wk zfFb;ZVZtA!2p8}GBX~$HSJK{2MYvCellZOdXy5fR0*YC$MM6~8TlQj3t(YAh*<{uwWrlcHG*0NEA5z!FUF$SF>-UGZjI20AdFuHC^Q*AH| zFD{iMxPX|3xQ+=V&cI7Yt`bc`*&Z291(8fU^OnLW3MP0no1n}u>X^bMhUq46h@34e zTcVCcAx z8w?WzMI`<%x6CRZ;I!|UN;p)&l%K}@-x&nY{_8Cri+*iKK3bkz*N~=0^ve9slae1; z)SXbyuF?@Jm{JtI=7Dhbf`>%Gu5hc&9n-&el_6C(saR8mfs|8gS%yf-tVymshdd5D z9u**3vOT9FwoO0Q_@5zJ^)sQMd0DY+mnP!1P<6Yi;~^dqcOly*cm7em_YC2paMh0O zQp@98wyj*{@K)f$jg5k;vyNvPHvFbmtW3t3=(-hVg=$mn-b%i+g!v z#mE=S#9N%VDY&B@99Gg z(Hg@noy#QMr_0oZtK1!BA11q%a9XX0sWaxH>)=)=xx3l}6%B1n} z#xcgzU%^f>37la17}xyk32u^ff`y*{1VV(Dh{47TTA0J9zF0;#)(F-*(e6>MAd4g( d;BiNj#1lGweotvV#}?fZT|Oithdf?k<~PniKm`B* literal 0 HcmV?d00001 diff --git a/Actividad2/lenguaje/build/classes/lenguaje/Lenguaje.class b/Actividad2/lenguaje/build/classes/lenguaje/Lenguaje.class index a25fe9b8b5923d74d89528e0a36881c872a0e330..b42465c93e8d0e0377ab451828ea2ba6d119d587 100644 GIT binary patch literal 4463 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 HiYfgA?4VZr diff --git a/Actividad2/lenguaje/nbproject/private/private.xml b/Actividad2/lenguaje/nbproject/private/private.xml new file mode 100644 index 0000000..06f0fb8 --- /dev/null +++ b/Actividad2/lenguaje/nbproject/private/private.xml @@ -0,0 +1,9 @@ + + + + + + file:/home/DAM2024/PSP01_Tarea/Actividad2/lenguaje/src/lenguaje/Lenguaje.java + + + diff --git a/Actividad2/lenguaje/src/lenguaje/Lenguaje.java b/Actividad2/lenguaje/src/lenguaje/Lenguaje.java index 5afff0d..b2658f0 100644 --- a/Actividad2/lenguaje/src/lenguaje/Lenguaje.java +++ b/Actividad2/lenguaje/src/lenguaje/Lenguaje.java @@ -4,11 +4,15 @@ */ package lenguaje; +import java.io.BufferedReader; import java.io.BufferedWriter; +import java.io.File; import java.io.FileNotFoundException; -import java.io.FileOutputStream; +import java.io.FileWriter; import java.io.IOException; -import java.io.OutputStreamWriter; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.Socket; import java.util.Arrays; /** @@ -16,6 +20,18 @@ import java.util.Arrays; * @author kyman */ public class Lenguaje { + + // Configuración. + private static final int puerto = 45338; + private static final String host = "localhost"; + private static int numero_de_palabras = 40; + private static String path = "../../diccionario.txt"; + private static final String alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + private static final float probabilidad_nueva_letra = .8f; + // Configuración. + + private static boolean trabajando = true; + private static PrintWriter salida; /** * @param args the command line arguments @@ -23,26 +39,111 @@ public class Lenguaje { public static void main(String[] args) { // TODO code application logic here - int numero_de_palabras = Integer.parseInt(args[0]); - String path = args[1]; - String alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - int l = alfabeto.length(); + System.out.println(Arrays.toString(args)); + + if(args.length == 2){ + numero_de_palabras = Integer.parseInt(args[0]); + path = args[1]; + } + + try { + + Socket socket = new Socket(host, puerto); + salida = new PrintWriter(socket.getOutputStream()); + BufferedReader lectura = new BufferedReader(new InputStreamReader(socket.getInputStream())); - try (BufferedWriter archivo = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path)))) { - for(int i = 0; i < numero_de_palabras; i ++){ - - String palabra = ""; - - while(palabra.length() < 3 || Math.random() < .8) - palabra += alfabeto.charAt((int)(Math.random() * l)); - - try { - archivo.append(palabra + "\n"); - }catch(IOException excepcion){ - Lenguaje.excepcion(excepcion); + new Thread(new Runnable(){ + @Override + public void run() { + + String mensaje; + int palabras_creadas = 0; + + try{ + while((mensaje = lectura.readLine()) != null){ + System.out.println("CLIENTE - REC => " + mensaje); + String[] resultados = mensaje.split(" "); + switch(resultados[0]){ + case "permiso" -> { + if(resultados[1].equals("Sí")){ + escribir_palabra(); + enviar("terminado"); + System.out.println("Palabra #" + palabras_creadas + " de " + numero_de_palabras + "."); + if((palabras_creadas += 1) >= numero_de_palabras){ + enviar("cerrar"); + trabajando = false; + } + } + if(trabajando) + try { + Thread.sleep((long) (Math.random() * 100)); + enviar("permiso"); + } catch (InterruptedException excepcion) { + Lenguaje.excepcion(excepcion); + } + } + } + } + lectura.close(); + } catch (IOException excepcion) { + Lenguaje.excepcion(excepcion); + } } - + }).start(); + + enviar("permiso"); + + }catch(IOException ex){ + escribir_fichero(); + } + + } + + private static boolean enviar(String mensaje){ + + boolean estado = false; + + try{ + new Thread(new Runnable(){ + @Override + public void run() { + System.out.println("CLIENTE - ENV => " + mensaje); + salida.println(mensaje); + salida.flush(); + } + }).start(); + estado = true; + }catch(Exception excepcion){ + Lenguaje.excepcion(excepcion); + } + + return estado; + } + + public static String crear_palabra(){ + + String palabra = ""; + int l = alfabeto.length(); + + while(palabra.length() < 3 || Math.random() < probabilidad_nueva_letra) + palabra += alfabeto.charAt((int)(Math.random() * l)); + + return palabra; + } + + public static void escribir_palabra(){ + + File archivo = new File(path); + + if(!archivo.exists()) + try { + archivo.createNewFile(); + } catch (IOException excepcion) { + Lenguaje.excepcion(excepcion); } + + try (BufferedWriter escritura = new BufferedWriter(new FileWriter(archivo, true))) { + escritura.append(Lenguaje.crear_palabra() + "\n"); }catch(FileNotFoundException excepcion){ Lenguaje.excepcion(excepcion); }catch(IOException excepcion){ @@ -50,6 +151,11 @@ public class Lenguaje { } } + + public static void escribir_fichero(){ + for(int i = 0; i < numero_de_palabras; i ++) + escribir_palabra(); + } private static void excepcion(Exception exception){ System.out.println(exception.getMessage()); diff --git a/README.md b/README.md index a85d797..da55659 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,576 @@ # PSP01_Tarea -PSP01_Tarea +> Este ejercicio fue hecho sin mirar el temario y entregado fuera de plazo por motivos agenos al ciclo, por lo que independientemente de resultados, agradecer al profesor a cargo de la asignatura por mirarlo igualmente pese a dichas condiciones, así por el apoyo ofrecido. También quiero que quede de aviso para otros posibles compañeros que quieran hacer uso de este contenido por posiblemente no ceñirse a lo requerido en la asignatura. Sea como sea, espero sea útil para aprender y reciclarse como lo fue para mi. -https://git.k3y.pw/DAM2024/PSP01_Tarea \ No newline at end of file +Conjunto de ejercicios para controlar entradas y salidas de una aplicación así como escritura y sincronía entre aplicaciones Java. Dicho ejercicio está publicado en la siguiente URL Git: + +https://git.k3y.pw/DAM2024/PSP01_Tarea + +> Antes de empezar, aclarar que todos los archivos de Scripts JAVA contendrán un apartado de configuración si éstos lo requieren, en el inicio de la clase, encapsulados entre dos comentarios de línea llamados "Configuración". + +## ordernarNumeros + +Esta aplicación simplemente cogerá una entrada de números dados por el usuario mediante el terminal donde una vez ponga cualquier cosa que no sea un valor numérico entero, éste detendrá el proceso de espera de más números, cogerá la lista de números dados y los ordenará de menor a mayor y los imprimirá por pantalla. + +```mermaid +flowchart TD + +S(["Solicitar número"]) +O(["Ordenar números"]) +M(["Mostrar números ordenados"]) + +S -->|"¿Es número?"| S +S -->|"¿No es número?"| O +O --> M + +``` + +La aplicación es muy sencilla y no tiene configuración alguna. El tema del ordenamiento numérico se hace a partir del método "sort" del ArrayList donde se almacenan los números, y usado el método estático "naturalOrder" de la clase nativa Comparator. También decir que se hace uso de un objeto Scanner por simplicidad de uso para la escucha de entrada del usuario. + +### Resultado de ejemplo + +```txt +run: +56 +1 +87 +9 +4 +terminar +1 +4 +9 +56 +87 +BUILD SUCCESSFUL (total time: 13 seconds) + +``` + +## aleatorios + +Esta aplicación simplemente generará 100 valores numéricos enteros aleatorios entre 0 y 100, ambos incluídos. Una vez generados, éste los imprimirá por pantalla. + +```mermaid +flowchart TD + +G(["Generar números aleatorios"]) +M(["Mostrar números aleatorios"]) + +G --> M + +``` + +No tiene más complicación, sin embargo, dejé configurable los siguientes parámetros: + +- **numero_de_numeros**: Número de números enteros aleatorios que se van a crear. +- **rango_aleatorio**: Tabla de dos valores numéricos enteros positivos que indican el rango en el que se generarán dichos números enteros aleatorios, incluyendo los dados. El primero ha de ser menor que el segundo. + +### Resultado de ejemplo + +```txt +run: +97 +5 +65 +12 +91 +2 +14 +67 +56 +52 +81 +51 +9 +46 +16 +91 +56 +52 +14 +89 +20 +23 +71 +51 +38 +69 +100 +48 +100 +66 +2 +61 +73 +53 +25 +82 +30 +54 +40 +28 +83 +47 +69 +61 +92 +28 +39 +49 +58 +68 +83 +23 +14 +100 +25 +70 +25 +68 +88 +48 +92 +60 +16 +17 +79 +81 +4 +3 +56 +19 +71 +42 +89 +87 +23 +93 +61 +20 +61 +15 +36 +68 +87 +80 +13 +3 +94 +77 +53 +34 +53 +80 +58 +24 +6 +24 +45 +42 +47 +37 +BUILD SUCCESSFUL (total time: 0 seconds) +``` + +## Tubería + +Las dos aplicaciones anteriores pueden coexistir y funcionar entre ellas mediante una tubería en un terminal o consola de comandos, mandando la salida de la aplicación *aleatorios* contra la entrada de *ordenarNumeros*. El comando sería el siguiente: + +```sh +#!/bin/bash +directorio=`dirname $(readlink -f "$0")` +java -jar $directorio/Actividad1/aleatorios/dist/aleatorios.jar | java -jar $directorio/Actividad1/ordenarNumeros/dist/ordenarNumeros.jar +``` + +En el Script, también existente en el proyecto, establece el directorio raíz donde se encuentra, que viene siendo el Path raíz del proyecto, y luego cogerá el Path relativo a cada JAR de cada aplicación. También puede llamarse directamente, como en el ejemplo siguiente, donde se usará una ruta relativa: + +```sh +#!/bin/bash +java -jar Actividad1/aleatorios/dist/aleatorios.jar | java -jar Actividad1/ordenarNumeros/dist/ordenarNumeros.jar +``` + +```mermaid +flowchart TD + +A[aleatorios] +O[ordenarNumeros] + +A --> O + +``` + +### Resultados de ejemplo + +```txt +kyman@kyman-GS75-9SE:/home/DAM2024/PSP01_Tarea$ ./tuberia.sh +0 +1 +2 +4 +5 +6 +7 +8 +11 +12 +12 +13 +14 +14 +14 +19 +20 +22 +25 +26 +27 +27 +28 +29 +29 +30 +30 +32 +33 +34 +34 +37 +37 +38 +38 +40 +41 +41 +41 +43 +44 +45 +46 +46 +46 +48 +49 +50 +50 +51 +51 +51 +51 +53 +55 +57 +58 +60 +61 +62 +64 +64 +65 +65 +67 +68 +68 +68 +68 +70 +71 +71 +71 +73 +75 +75 +77 +78 +79 +81 +82 +82 +83 +83 +84 +86 +86 +87 +88 +88 +88 +92 +92 +93 +96 +96 +97 +98 +99 +100 +kyman@kyman-GS75-9SE:/home/DAM2024/PSP01_Tarea$ java -jar Actividad1/aleatorios/dist/aleatorios.jar | java -jar Actividad1/ordenarNumeros/dist/ordenarNumeros.jar +0 +0 +2 +2 +2 +3 +4 +4 +5 +5 +5 +6 +8 +8 +8 +9 +9 +11 +12 +13 +13 +16 +16 +17 +17 +17 +21 +25 +26 +26 +26 +26 +27 +30 +31 +33 +33 +34 +34 +36 +37 +38 +38 +38 +40 +41 +43 +43 +44 +45 +45 +46 +47 +47 +48 +49 +49 +50 +50 +52 +53 +54 +55 +55 +56 +56 +61 +63 +63 +65 +65 +66 +66 +68 +68 +68 +70 +75 +77 +77 +79 +79 +82 +83 +83 +85 +87 +87 +89 +90 +90 +91 +94 +94 +95 +95 +96 +96 +100 +100 +kyman@kyman-GS75-9SE:/home/DAM2024/PSP01_Tarea$ +``` + +## lenguaje + +Esta aplicación crea un diccionario de un idioma inventado a partir de juntar, aleatoriamente, letras. Para su ejecución requiere de 2 parámetros de entrada, los cuales son: + +1. El número de palabras a crear. +2. El Path donde se almacenará el diccionario. + +> Por defecto, ambos parámetros están definidos en la configuración de la aplicación a 40 palabras y el Path del fichero diccionario en el raíz del proyecto con el nombre "diccionario.txt". + +La idea es que el programa añada al fichero diccionario cada palabra generada, recargando el fichero, añadiendo al Buffer la nueva palabra en una nueva línea, escribiendo el fichero y cerrando el Buffer. + +```mermaid +flowchart TD + +C{"Crear nueva palabra aleatoria"} +D["Archivo diccionario"] +O["Objeto File"] +A{"Crear archivo diccionario"} +B[Buffer] +P["Nueva palabra"] +E{"Escribir archivo diccionario"} + +C -->|Crear| P +C --> D +D -->|"Abrir con"| O +O -->|"Sí existe"| B +O -->|"No existe"| A +A --> B +P -->|"Añadir en"| B +B --> E + +``` + +La creación de la palabra se basa en un diccionario String que contendrá los caracteres a usar que se encuentra en la configuración. Para su creación se establecen dos condiciones: que sea al menos de 3 caracteres; y se vayan añadiendo caracteres si la condición aleatoria así lo determine. La probabilidad de nueva letra no es más que un "Math.random" condicionado a un valor decimal entre 0 y 1. A mayor sea el número más letras probables contendrá la nueva palabra. + +```mermaid +flowchart TD + +P[Palabra] +C{"length < 3 || \nRand < probabilidad"} +L["Nueva letra"] +X(["Nueva palabra creada"]) + +P -->|Mientras| C +C -->|Sí| L +C -->|No| X +L -->|"Se añade a"| P + +``` + +### Socket + +En el siguiente ejercicio a éste, se especifica literalmente *que lance al menos 10 instancias de la aplicación "lenguaje"*, donde entiendo que la aplicación es el JAR de la aplicación "lenguage". Indagué un poco sobre Java, viendo la imposibilidad de éste de analizar si un fichero está en uso o no, donde hay librerías que permiten un uso de bloqueo de ficheros o detectar un uso por bloqueo mediante Excepción, pero en ningún caso me funcionó cara la mera apertura del fichero, por lo que me vi en la obligación de crear un Socket de comunicación bidireccional entre las diferentes instancias de la aplicación "lenguaje" como clientes, sobre un servidor "colaborar", quien contendría el semáforo entre aplicaciones mediante un simple valor Booleano que determine si el archivo está siendo usado por alguna de las instancias o no, donde en caso de estar en uso, ésta espere un tiempo aleatorio para volver a intentar la petición. + +```mermaid +flowchart TD + +subgraph lenguage + + X{"Crear nueva palabra"} + S[Socket] + E{Esperar} + W{"Escribir diccionario"} + L{"Liberar diccionario"} + + E --> S + X --> S + +end +C[Colaborar] + +S -->|"¿Está en uso?"| C +C -->|Sí| E +C -->|No| W +W --> L +L -.-> C +L --> X + +``` + +> Si no fuese la ejecución de instancias de aplicación y sí de simples instancias de la clase "Lenguaje", el formato sería distinto, siendo regulado por semáforos o un simple Booleano que condicione, incluso, al estar trabajando en este caso sobre objetos, directamente con un "wait" donde se irían desbloqueando los procesos entre ellos, simplificando enormemente la aplicación. + +Mediante este sistema evitamos que la sobreescritura por parte de cualquiera de las instancias de aplicación ejecutadas exista, permitiendo un orden mediante un protocolo de semáforos a un sólo proceso. + +La aplicación entiende que si existe el servidor Socket de "colaborar", éste ha de regularse de esta forma; de lo contrario, actuará como estaba predicho anteriormente. + +> Es importante mencionar que hay una serie de salidas que determinan qué hace el Socket tanto para uso local como para uso remoto contra "colaborar". + +### Configuración + +Los parámtros de configuración para esta aplicación son los siguientes: + +- **puerto**: Puerto de red del Socket servidor "colaborar". +- **host**: Host de red del Socket servidor "colaborar". +- **numero_de_palabras**: Número de palabras por defecto a crear en caso de tener una entrada vacía. +- **path**: Path relativo al Path del JAR "lenguaje.jar" donde se almacenará el diccionario. +- **alfabeto**: String con los caracteres a usar para crear las nuevas palabras. +- **probabilidad_nueva_letra**: Valor decimal comprendido entre 0 y 1 que determina la probabilidad de añadir un nuevo caracter a la nueva palabra. + +## colaborar + +Esta aplicación ejecutará varias instancias de la aplicación "lenguage" para que éstas escriban, de forma ordenada y sincronizada, un diccionario común. Para llevar a cabo dicha tarea se hará uso de un Socket que gestione, a modo de semáforo de un único proceso, el acceso al fichero diccionario de todas las instancias ejecutadas de la aplicación. Todas estas instancias serán lanzadas por la propia aplicación "colaborar". Uba vez terminen todas las instancias de almacenar sus palabras al diccionario, la aplicación mostrará un mensaje indicando que terminó y que presiones "Enter" para poder cerrar la aplicación. + +> Si no fuese la ejecución de instancias de aplicación y sí de simples instancias de la clase "Lenguaje", el formato sería distinto, siendo regulado por semáforos o un simple Booleano que condicione, incluso, al estar trabajando en este caso sobre objetos, directamente con un "wait" donde se irían desbloqueando los procesos entre ellos, simplificando enormemente la aplicación. + +> El programa no se cierra por el hecho de que cuenta con una entrada de terminal por si se quiere cerrar la aplicación mediante una orden. Si se termina la ejecución del programa, queda el objeto Scanner abierto, el cual, al ser de interactuación humana, éste ha de ser cerrado por el usuario, y de ahí que muestr el mensaje pidiendo que se presione "Enter". + +```mermaid +flowchart TD + +subgraph colaborar + P[Permiso] + O{"Ocupar diccionario"} + OS([Sí]) + ON([No]) + D{"Desocupar diccionario"} + C{Cerrar} +end +L[lenguage] + +L -->|"¿Tiene?"| P +P --> OS +OS --> O +OS -->|"Tiene permiso"| L +P --> ON +ON -->|"No tiene permiso"| L +L -->|"Nueva palabra añadida"| D +L -->|Terminó| C + +``` + +Las instancias de la aplicación "lenguaje" son lanzadas tras haber lanzado el Socket servidor y el terminal. El caso de que el Socket servidor dé un error de inicio, éste lo mostrará y no lanzará nada más, cerrando la aplicación automáticamente. + +```mermaid +flowchart TD + +S{{"¿Inició el servidor?"}} +T{{"Inicia el terminal"}} +I{{"Ejecuta las instancias cliente"}} +E{{"Imprimir error"}} +SI([Sí]) +NO([No]) + +S --> SI +SI --> T +SI --> I +S --> NO +NO --> E + +``` + +> Si el usuario introduce en la terminal de la aplicación cualquiera de las opciones "close", "cerrar", "bye", "exit" o "terminar", la aplicación mandará orden de cierre a las aplicaciones cliente y se cerrará ella misma. + +> Hay elementos que imprimirán por la terminal indicaciones de lo que está haciendo la aplicación durante su ejecución, mayormente para controlar el correcto funcionamiento de los Socket. También imprimirá lo que impriman sobre terminal las instancias de la aplicación "lenguaje" ejecutadas. + +El cierre automático de la aplicación cuando los clientes terminan su actividad se lleva a cabo a partir de una variable de control la cual viene siendo un valor numérico entero con valor por defecto 0 pero que a medida que se traen mensajes de cierre de los clientes, éste irá incrementándose. Cuando éste sea igual al número de clientes, la aplicación entederá como que todos los clientes temrinaron y cesará su actividad. + +La configuración de esta aplicación es la siguiente: + +- **numero_instancias**: Númerom de instancias de la aplicación "lenguaje" va a ejecutar simultáneamente. +- **path_absoluto**: Path absoluto del proyecto raíz. *¡Ojo! No del proyecto Java, sino el proyecto completo del ejercicio.* +- **lenguaje_path**: Path de la aplicación JAR "lenguaje.jar". +- **puerto**: Puerto de trabajo del Socket. + +### Documentación + +En el ejercicio se establecen ciertas normas cara lo que viene siendo la documentación del ejercicio, pero por falta de tiempo y las circunstancias descritas al inicio de este documento, me vi en la decisión de montar toda documentación requerida sobre MarkDown y así integrarlo dentro del proyecto Git para facilitar tanto su acceso como su visibilidad mediante los componentes integrados en éste como gráficos o formatos de texto rápido mediante marcas por caracter. \ No newline at end of file