Izpitno vprašanje RAČ2PRA 5000

Iz MaFiRaWiki

GFDL Avtor tega članka je študent/ka Marjetaselak.

Pripravil/a ga je pri predmetu Računalništvo 2 (FMF PRA).


Kljub temu ste vsi vabljeni k urejanju in popravkom, saj je bistvo wikija ravno v sodelovalnem delu.

Vprašanje

Sestavi metodo static String oznaciGnezdenePare(String niz, char zacetni, char koncni), ki vrne niz tako, da v pravilno gnezdenem izrazu v nizu niz oznake znaka zacetni in koncni nadomesti z ustreznimi števili, ki označujejo kateri zaklepaj in oklepaj se ujemata. Tako klic metode oznaciGnezdenePare((a)(x)((xx)), (, )) vrne niz '1'a'12'x'234'xx'43'.

Odgovor

Napisati moramo metodo, tako da v pravilno gnezdenem izrazu v nizu, oznake začetni in končni (začetni in končni predstavljata oklepaj in zaklepaj), nadomestimo z ustreznimi števili, ki bosta označevali kateri oklepaj in zaklepaj se ujemata. Tako bo npr. program za niz "((a))(x)" moral izpisati '12'a'123'x'3'. To pomeni, da namesto prvega oklepaja pišemo 1 in 1 pišemo tudi tam ko se prvi oklepaj zaključi. Začetek drugega oklepaja označimo s številom 2 in ravno tako tudi konec drugega zaklepaja; itn. Vsa števila damo v enojne narekovaje, zato da predstavljajo znake, ker imamo v metodi tudi parametre, ki jih sprejmemo definirane kot začetni in končni tipa char.

Kako napišemo kodo?

Na začetku moramo definirati končni niz in mu damo kot vrednost prazen niz. Definiramo tudi st_oklepajev kot celo število, kateremu začetno vrednost damo 1. Ustvarimo nov sklad, v katerega bomo shranjevali število oklepajev. Sprehodimo se čez cel niz in preverjamo, če je znak na i-tem mestu enak začetni in če je potem število oklepajev shranimo v sklad. Število oklepajev povečamo. V končni niz pa dodamo ustrezno številko. Sicer preverjamo, če je i-ti znak enak končni, in če je damo v končni niz ustrezno številko in jo iz sklada odstranimo. Na koncu vrnemo končni niz, v katerem so namesto oklepajev in zaklepajev ustrezne številke v enojnih narekovajih, predstavljene kot znaki.

  1.  
  2. public class Naloga5000 {
  3. public static String oznaciGnezdenePare(String niz, char zacetni, char koncni) {
  4. String koncni_niz = "";
  5. int st_oklepajev = 1;
  6. Sklad<String> s = new Sklad<String>();
  7. // z zanko se sprehodimo čez cel niz
  8. for(int i = 0; i < niz.length(); i++) {
  9. // preverjamo i-ti znak niza niz
  10. if(niz.charAt(i) == zacetni) {
  11. // če ta znak enak znaku zacetni damo v sklad vrednost spremenljivke st_oklepajev
  12. s.vstavi("" + st_oklepajev);
  13. koncni_niz = koncni_niz + "'" + st_oklepajev + "'"; // v koncni niz dodamo ustrezno stevilko
  14. st_oklepajev ++; // povecamo stevilo oklepajev
  15. }
  16. else if(niz.charAt(i) == koncni) {
  17. // ce ta znak enak znaku koncni, damo v končni niz ustrezno številko in jo iz sklada odstranimo
  18. koncni_niz = koncni_niz + "'" + s.vrh() + "'"; // v koncni niz dodamo ustrezno stevilko
  19. s.odstrani();
  20. }
  21. else {
  22. koncni_niz = koncni_niz + niz.charAt(i);
  23. }
  24. }
  25. return koncni_niz;
  26. }
  27. // test za oklepaje
  28. public static void main (String[] args) {
  29. String niz = "(a)(x)((xx))";
  30. System.out.println(oznaciGnezdenePare(niz, '(' , ')'));
  31. String niz1 = "(a)(x)((xx)), (, )";
  32. System.out.println(oznaciGnezdenePare(niz1, '(' , ')'));
  33. String niz2 = "((a)(x)((xx)), (, ))";
  34. System.out.println(oznaciGnezdenePare(niz2, '(' , ')'));
  35. }
  36. }

Primer izpisa

Za niz "(a)(x)((xx))" nam program izpiše "'1'a'12'x'234'xx'43'".

Za ta niz "(a)(x)((xx)), (, )" pa "'1'a'12'x'234'xx'43', '5', '5'".

In še za niz "((a)(x)((xx)), (, ))" izpiše "'12'a'23'x'345'xx'54', '6', '61'".

Osebna orodja