redaktita: aprilon 2004

Ĉapitro 8 - Programadaj Ekzercoj


Se mi estus lernanto kaj vidus tiujn ĉi ekzercojn, mi suspektus, ke temas pri "farotaj hejmtaskoj" --- tiaj ekzercoj kies ĉefa celo konsistas en enuigo de la lernantoj. Fakte, kvankam tiuj ĉi ekzercoj estas simplaj kaj iomete tedaj, ili celas plifortigi la koncepton de primitiva datumtipo kies graveco estas decida kaj sendube indas iom da praktiko ĝuste nun. Bonvolu fari ilin.


Ekzerco 1

Jena programo uzas la primitivan datumtipon short (mallonga):

class MallongaVar
{
  public static void main ( String[] args )
  {
    short valoro = 32;
    System.out.println("Mallonga: " +  valoro);
  }
}

La vorto "valoro" en ĉi programo estas variablo --- nomo de memora sekcio kiu enhavas datumon uzanta specifan datumtipon. Tie "valoro" estos la nomo por 16 ĉefmemoraj bitoj kiujn uzas short por reprezenti entjeron. (En la venontaj ĉapitroj aperos multe pli da informoj pri variabloj). Tiu ĉi programo metas la valoron 32 en "valoro." Poste ĝi presas ĝin:

Mallonga: 32

Alivorte, la programo ekzamenas la variablon kaj presas tion kion ĝi trovis en ĝi.

Via Tasko
Kreu dosieron nomata MallongaVar.java. Tradukigu kaj rulu ĝin. Kontrolu kion la programo aperigas sur la ekrano. Nun redaktu la programon tiel, ke anstataŭ 32 aperu alia malgranda numero, ekz-e 356. Tradukigu kaj rulu la programon. Ĉio devus esti en ordo.

Poste ŝanĝu la nombron al 35000 kaj provu tradukigi kaj ruli la programon. Ĉi tiu nombro estas tro granda por la datumtipo short (alivorte, ne eblas reprezenti ĝin per la 16 bitoj de la datumtipo short). Kio okazos?

Nun redaktu la programon (sen ŝanĝi la 35000) tiel, ke la datumtipo estu int. Tradukigu kaj rulu la programon. Ĉu estas diferenco?

Alklaku!  Reen al la kursa enhavo

Ekzerco 2

Jena programo uzas la primitivan datumtipon double (duobla):

class DuoblaVar
{
  public static void main ( String[] args )
  {
    double valoro = 32;
    System.out.println("Duobla: " +  valoro);
  }
}

Tradukigu kaj rulu la programon. Ĉu ĝia eligo (t.e. kion ĝi aperigas sur la ekrano) diferencas de tiu de la unua programo en la antaŭa ekzerco? Tie, "valoro" estas la nomo por 64 ĉefmemoraj bitoj kiujn uzas la datumtipo double por reprezenti glitpunktajn nombrojn.

Tute en ordo estas uzi la saman nomon "valoro" por variablo en ambaŭ programoj. Tia uzo de nomoj estas maniero per kiu ni priskribas kion ni postulas, ke okazu en la komputilo; ĝi ne permanente rezervas parton de komputila memoro por iu ajn speciala uzo.

Nun provu "superruzi kontraŭ la sistemo". Rigardu en la tabelo de nombraj datumtipoj iliajn permesitajn ampleksojn de valoroj. Ŝanĝu 32 al valoro tro granda por double. Eble tiucele indas uzi sciencan notacion.

Alklaku!  Reen al la kursa enhavo

Ekzerco 3

Ankaŭ jena programo uzas primitivan datumtipon double. Ĝi kalkulas kaj presas la valoron de exp( 32 ). Tio estas la bazo "e" de naturaj logaritmoj je la potenco 32. (Ne tro maltrankviliĝu pro tio: la celo de la ekzerco ne estas lerni matematikon sed prilabori glitpunktajn nombrojn).

class DuoblaAkci
{
  public static void main ( String[] args )
  {
    double valoro = 32;
    System.out.println("e je la potenco de " + valoro + " = " +  Math.exp( valoro ) );
  }
}

Tradukigu kaj rulu la programon. Ĉu ĉio estas en ordo? Nun ŝanĝu 32 al ĉiam pli kaj pli grandaj nombroj ĝis kiam io misfunkcias.

Alklaku!  Reen al la kursa enhavo

Ekzerco 4

Jena programo uzas la primitivan datumtipon char (signa):

class SignaVar
{
  public static void main ( String[] args )
  {
    char signo = 'A' ;
    System.out.println("Signa: " +  signo );
  }
}

La variablo "signo" estas 16 bitoj de ĉefmemoro kiujn uzas la datumtipo char por reprezenti signojn. La signon 'A' oni enmetis en ĝin. La programo skribos:

Signa: A

Faru jenon:

Alklaku!  Reen al la kursa enhavo


Fino de la Ekzercoj