2024(e)ko otsailaren 7(a), asteazkena

3. astea | aukera anitzen arteko hautapena



ESKATZEN DEN PROGRAMA

Demagun lurrazaleko lau leku ditugula, bakoitza hemisferiko banakoa. Lau lekuak hauek dira: 1 Adelaide, 2 Brasilia, 3 Calgary eta 4 Donetsk. Lau leku horiek zenbaki oso baten bitartez identifikatuko ditugu. Zenbaki identifikatzailea teklatuz irakurri eta balioaren arabera, lurrazaleko lekuari dagokion informazioa pantailaratu:



  1 identifikatzailea:
Adelaide
Latitudea: -34.927499
Longitudea: 138.600000
Hego-Ekialdeko hemisferioa

  2 identifikatzailea:
Brasilia
Latitudea: -15.793889
Longitudea: -47.882778
Hego-Mendebaldeko hemisferioa

  3 identifikatzailea:
Calgary
Latitudea: 51.047500
Longitudea: -114.062500
Ipar-Mendebaldeko hemisferioa

  4 identifikatzailea:
Donetsk
Latitudea: 48.008889
Longitudea: 37.804167
Ipar-Ekialdeko hemisferioa


Exekuzioan 1 zenbakia aukeratzean lortzen dena

Exekuzioan 4 zenbakia aukeratzean lortzen dena

Esan bezala, CASE-OF batean aukeratzailea balio diskretua izango da beti, ikusi zer gertatzen den 1 eta 2 arteko balio zatigarria aukeratzen bada:



LASTER ESKATUKO DEN PROGRAMA

CHAR datu mota ikasiko dugunean, sarrerako datua zenbaki bat izan ordez karaktere bat izango da: A Adelaide, B Brasilia, C Calgary eta D Donetsk. Beraz, ataria identifikatzeko sarrerako datua A, B, C edo D letrak izango dira. Bide batez, laster eskatuko den programa horretan, clrscr prozeduraren bitartez, pantaila garbitzen ikasiko dugu ere.





 

2024(e)ko otsailaren 6(a), asteartea

3. astea | CASE-OF aginduaren adibidea eta kontraadibidea








CASE-OF aginduaren adibidea eta kontraadibidea

CASE-OF baldintzazko aginduak aldagai aukeratzaile bat darabil eta aukeratzaile hori datu-mota ordinal bat izango da (zenbaki osoa adibidez edo karakterea adibidez). Lau eratan adierazten dira CASE-OF egituraren kasuak:
  1. Konstante isolatu baten bitartez
  2. Balioak enumeratuz, horretarako balio konstanteak elkarrekiko komaz banatu behar dira
  3. Balioen azpieremu bat definituz, behemuga eta goimuga diren balio konstanteen artean puntu bi jartzen dira
  4. ELSE baten bitartez
Sintaxiari dagokiolarik, CASE-OF baldintzazko agindua END batez bakatzen da jarraian datorren hurrengo agindutik (baina kontuz, BEGIN markarik ez duen END batez bukatzen da).


CASE ADIBIDEA

Ebaluazio baten nota adierazten duen zenbaki osoa irakurri ondoren dagokion hitzezko kalifikazioa pantailaratu:
Hemen daukazu Case1.pas iturburu-programa



CASE KONTRAADIBIDEA

Ebaluazio baten nota adierazten duen zenbaki ez-osoa irakurri eta dagokion hitzezko kalifikazioa pantailaratu:

Hemen daukazu Case2.pas iturburu-programa (programari jarri diogun izena "Case2.pas" izan arren ez dago CASE-OF egitura erabiltzerik kontroleko aldagaia REAL datu-motakoa delako)

3. astea | edozein triangeluren azalera

Programa bat inkrementalki garatzen

3. astea | triangeluaren azalera  ariketa gogoratu eta osatu: XOY lehen koadranteko triangelu bat bere ABC erpinen bitartez definiturik dator (erpinen koordenatuak zenbaki errealak dira). A puntua eta B puntua lotzen dituen AB lerroa edozein izan daiteke: bertikala, horizontala edo zeiharra.

A, B eta C sarrerako datuek bete behar dituzten baldintza bakarrak hiru dira:
  • A, B eta C puntuak lehen koadrantean kokaturik daude
  • A eta B puntuak ez direla bat
  • C puntua ez dagoela kokaturik AB segmentuaren zuzenean
Triangeluaren azalera kalkulatzeko 4 urratsetan egingo dugu:
  1. Emanik A puntua eta B puntua, AB zuzena lortu eta bere izaeraren arabera (bertikala, horizontala edo zeiharra) erabaki hurrengo urratsak nola burutuko diren
  2. Emanik C puntua, AB zuzenari dagokion lerro perpendikularra C puntuan lortu
  3. AB zuzena eta bere perpendikularra C puntuan ditugula, lerro biren ebakidura kalkulatu (P puntua lortu)
  4. Erpinen arteko AB distantzia eta puntuen arteko CP distantzia kalkulatu ondoren azalera zehaztu


Programaren barne-antolaketa

Emanik A puntua eta B puntua, programak hiru atal izago ditu. Honako hiru atal hauek:
   begin
      ...
      repeat      
         readln(rAx) ;   { A puntua lehen koadrantekoa izan behar da }
         readln(rAy) ;
      until ___ ;
      repeat
         readln(rBx) ;   { B puntua lehen koadrantekoa izan behar da  eta }
         readln(rBy) ;   { B puntuak ez du bat egingo A puntuarekin }
      until ___ ;

      if rAx = rBx then  { AB segmentua bertikala denean }
      begin
         ... 1. ATALA
         repeat
            readln(rCx) ;  (* C puntua lehen koadrantekoa izango da eta }
            readln(rCy) ;  (* ez da egongo AB segmentuari dagokion zuzenean }
         until ___ ;
      end
      else  { AB segmentua bertikala EZ denean }
      begin
         if rAy = rBy then { AB segmentua horizontala denean }
         begin
            ... 2. ATALA
            repeat
               readln(rCx) ;  { C puntua lehen koadrantekoa izango da eta }
               readln(rCy) ;  { ez da egongo AB segmentuari dagokion zuzenean }
            until ___ ;
            ...
         end
         else { AB segmentua zeiharra denean, ez bertikala ez horizontala }     
         begin
            ... 3. ATALA
            repeat
               readln(rCx) ;  { C puntua lehen koadrantekoa izango da eta }
               readln(rCy) ;  { ez da egongo AB segmentuari dagokion zuzenean }    
            until ___ ;
            ...
         end ;
      end ; 
      ...
   end.



Programaren zenbait exekuzio

Hauxe izan daiteke programaren balizko exekuzio bat, AB segmentua bertikala denenan:

Hau izan daiteke programaren balizko exekuzio bat, AB segmentua horizontala denenan:

Eta hauxe izan daiteke programaren balizko beste exekuzio bat, AB segmentua zeiharra denenan:

AB eta CP bi segmentuen luzera ezagutzean, triangeluaren azalera berehala lor daiteke. Ariketa osatuago honen programa exekutagarria Triangelu_5.exe hartu eta hura exekutatuz programaren logika zein den ulertu.


    Iturburu-programa

    Autoebaluazioa dela eta, edozein triangeluaren azalera kalkulatzeko ariketan, hauxe da ... lau urratseko goiko algoritmoari dagokion iturburu-programa: Triangelu_5.pas.






     

    3. astea | triangeluaren azalera

    Programa bat inkrementalki garatzen

    XOY lehen koadranteko triangelu bat bere ABC erpinen bitartez definiturik dator (erpinen koordenatuak zenbaki errealak dira). ABC triangeluaren azalera kalkula dezagun jakinik A, B eta C sarrerako datuek ondoko baldintzak betetzen dituztela:
    • A, B eta C puntuak lehen koadrantean kokaturik daude
    • A eta B puntuak ez direla bat
    • AB segmentua zeiharra dela, horregatik:
      • AB segmentua ez da bertikala eta...
      • ...AB segmentua ez da horizontala.
    • C puntua ez dagoela kokaturik AB segmentuaren zuzenean
    A, B eta C puntuen koordenatu kartesiarrak teklatuz irakurri ondoren triangeluaren azalera kalkulatzeko 4 urratsetan egingo dugu:
    1. Emanik A puntua eta B puntua, AB zuzena lortu
    2. Emanik C puntua, AB zuzenari dagokion lerro perpendikularra C puntuan lortu
    3. AB zuzena eta bere perpendikularra C puntuan ditugula, lerro biren ebakidura kalkulatu (P puntua lortu)
    4. Erpinen arteko AB distantzia eta puntuen arteko CP distantzia kalkulatu ondoren azalera zehaztu   
    Hauxe izan daiteke azken programaren balizko exekuzio bat:

    Ariketa honek 4 urrats dituenez, goian enuntziatu diren 4 urratsak, zatika eta inkrementalki egin dezagun urrats bakoitzeko programa bana garatuz:
    1. Triangelu_1_4.pas programaren bitartez AB zuzena lor daiteke
    2. Triangelu_2_4.pas programaren bitartez AB zuzenekoa ez den C puntua irakur daiteke
    3. Triangelu_3_4.pas programaren bitartez P puntuaren koordenatuak kalkula daitezke
    4. Triangelu_4_4.pas programaren bitartez AB distantzia eta CP distantzia lor daitezke eta ondorioz triangeluaren azalera zehaz daiteke



    Triangelu_1_4.pas
    Lehen programa honek A puntua eta B puntua (lau zenbaki erreal) teklatuz irakurtzen ditu eta lerro zuzenaren ekuazioa zehazten du, hots, AB lerroaren m malda eta bere desplazamendu bertikala n. Ariketaren programa exekutagarria Triangelu_1_4.exe hartu eta exekutatu nola dabilen ikusteko edo bestela hartu  3. astea | triangeluaren azalera (hasiera) artikuluan eskaintzen den kodea.
    Lehen programa hau ebazteko bi algoritmo daude behintzat. Bat, goiko irudian adierazten dena, non zuzenaren P(x,y) edozein hirugarren puntu hartuz bi triangelu angeluzuzeni esker malda eta desplazamendua kalkulatzen diren. Bigarren algoritmoarekin bat egiten duen irudia behean erakusten da, non y = m·x + n ekuazioan m eta n inkognitak diren.




    Triangelu_2_4.pas
    Bigarren programa hau aurrekoaren jarraipena da. Bigarren programa honek C puntua (bi zenbaki erreal) teklatuz irakurtzen du AB lerroan ez dagoela zainduz. Gero, C puntutik igarotzen den AB lerroaren perpendikularra kalkulatzen du. Ariketaren programa exekutagarria Triangelu_2_4.exe hartu eta exekutatu nola dabilen ikusteko.



    Triangelu_3_4.pas
    Hirugarren programa hau aurreko bien jarraipena da. AB lerroa dugula eta bere perpendikularra C puntutik dugula, lerro biak elkartzen dituen P puntua kalkulatzen du programa honek. P puntuaren koordenatuak kalkulatzeko Cramer-en metodoa erabil daiteke 3. astea | ekuazio-sistema ariketan egiten den bezala, ondoko irudia ikusi:
    Hirugarren urrats honen programa exekutagarria Triangelu_3_4.exe hartu eta hura exekutatuz programaren logika nolakoa den asmatu.



    Triangelu_4_4.pas
    Laugarren programa hau aurrekoen jarraipena da. Laugarren programa honek ABC triangeluaren azalera kalkulatzen du, horretarako AB distantzia eta CP distantzia zehaztuko ditu. Bi segmentuen luzera ezagutzean, triangeluaren azalera berehala lor daiteke. Ariketaren programa exekutagarria Triangelu_4_4.exe hartu eta hura exekutatuz programaren logika zein den ulertu.



    Iturburu-programak
    Autoebaluazioa dela eta, hauek dira lau urratsei dagozkien iturburu-programak:
     (laster ikusgai) 



    AB segmentua edozein delarik
    3. astea | edozein triangeluren azalera izenburuko artikuluan ariketa honen hedapena garatzen da. XOY lehen koadranteko triangeluekin jarraituz, A puntua eta B puntua lotzen dituen AB lerroa edozein izan daiteke: bertikala, horizontala edo zeiharra. Sarrerako datuek bete behar dituzten baldintzak hauexek dira:
    • A, B eta C puntuak lehen koadrantean kokaturik daudela
    • A eta B puntuak ez direla bat
    • C puntua ez dagoela kokaturik AB segmentuari dagokion zuzenean






     

    3. astea | triangeluaren azalera (hasiera)

    XOY lehen koadranteko triangelu bat bere ABC erpinen bitartez definiturik dator (erpinen koordenatuak zenbaki errealak dira). A puntua eta B puntua lotzen dituen AB lerroa ez da bertikala ezta horizontala, eta C puntua ez dago kokaturik AB lerroan. Datuak:
    • A eta B puntuak AB zuzena lortzeko, AB zuzena zeiharra izango da (ez bertikala, ez horizontala)
    • C puntua AB segmentuaren zuzenetik kanpo dago

    Algoritmoa: 
    1. Emanik A puntua eta B puntua, AB zuzena lortu
    2. Emanik C puntua, AB zuzenaren perpendikularra C puntuan lortu
    3. AB zuzena eta bere perpendikularra C puntuan ditugula, lerro biren ebakidura kalkulatu (P puntua lortu)
    4. Erpinen arteko AB distantzia eta puntuen arteko CP distantzia kalkulatu ondoren azalera zehaztu  
    Ariketaren urratsak ikusteko 3. astea | triangeluaren azalera artikulua aztertu.

    Zure programaren hasiera:
    program Triangelu_1_4 ;
    var
       rAx, rAy, rBx, rBy : real ;   
    begin
       { A puntua lehen koadrantekoa da }
       repeat
          writeln('OXY lehen koadrantean lan eginez') ;
          write('Eman A puntuaren x koordenatua: ') ;
          readln(rAx) ;
          write('Eman A puntuaren y koordenatua: ') ;
          readln(rAy) ;
          if (rAx < 0.0) or (rAy < 0.0) then   { A-ren bi koordenatuak positiboak izan behar dira }
          begin
             writeln('A puntuaren bi koordenatuak positiboak izan behar dira') ;
             if rAx < 0.0 then
                writeln('A puntuaren x koordenatua ezin daiteke negatiboa izan') ;
             if rAy < 0.0 then
                writeln('A puntuaren y koordenatua ezin daiteke negatiboa izan') ; 
          end ;   
       until (rAx >= 0.0) and (rAy >= 0.0) ;
       writeln ;
    
       { B puntua ere lehen koadrantekoa izango da eta horrez gain }
       { B puntua eta A puntua "diagonal" batean egongo dira kokaturik }
       repeat
          writeln('OXY lehen koadrantean jarraituz ') ;
          write('Eman B puntuaren x koordenatua: ') ;
          readln(rBx) ;
          write('Eman B puntuaren y koordenatua: ') ;
          readln(rBy) ;
          if (rBx < 0.0) or (rBy < 0.0) then
             writeln('B puntuaren bi koordenatuak positiboak izan behar dira') ;
          if (rAx = rBx) or (rAy = rBy) then
          begin
             writeln('AB segmentua zeiharra izan behar da') ;
             if rAx = rBx then
                writeln('AB segmentua ezin daiteke bertikala izan') ;
             if rAy = rBy then
                writeln('AB segmentua ezin daiteke horizontala izan') ;   
          end ;   
       until ((rBx >= 0.0) and (rBy >= 0.0)) and
             ((rAx <> rBx) and (rAy <> rBy)) ;
       writeln ;
    
       { A eta B ezagunak direla, AB segmentuari dagokion r zuzenaren bi   }
       { parametroak kalkulatu:                                            }
       {                          rMalda := ___________;                   }
       {                          rDesplazamendua := ___________;          }
       
       { ALGORITMO OSOA:
           1.  Emanik A puntua eta B puntua, AB zuzena lortu
           2.  Emanik C puntua, AB zuzenaren perpendikularra C puntuan lortu
           3.  AB zuzena eta bere perpendikularra C puntuan ditugula, lerro
               biren ebakidura kalkulatu (P puntua lortu)
           4.  Erpinen arteko AB distantzia eta puntuen arteko CP distantzia 
               kalkulatu ondoren azalera zehaztu                             }
       
    end. { PROGRAMAREN BUKAERA }
    
     

    3. astea | zirkulua eta koadranteak

    P puntuaren koordenatu kartesiarrak teklatutik irakurri. R=4 erradioa duen zirkunferentzia bat aintzat hartuta, P puntuaren kokapenaren araberako testu bat pantailaratu. Honela:
    • P puntuaren koadrantea (edo ardatza, hala balitz)
    • P puntua zirkuluaren barruan ala kanpoan dago (edo zirkunferentzian bertan, hala balitz)

    Hona hemen eskatzen den programaren hiru irteera:


    3. astea | bigarren graduko ekuazioa

    Matematikan, aldagai bakarreko bigarren mailako ekuazioa edo ekuazio koadratikoa honela adierazten den aldagai bakarreko ekuazio polinomiko bat da:   a x2 + b x + c = 0

    Bigarren mailako ekuazioaren soluzioari erro esaten zaio eta ondoko irudiko formula honek ematen du:
    Formula horren b2-4ac zatiari diskriminatzaile esaten zaio eta Δ bitartez adierazten da (Δ, delta izeneko letra maiuskula grekoaz). Diskriminatzailearen arabera, bigarren mailako ekuazio batek, koefizienteak zenbaki errealak izanik, soluzio desberdinak izan ditzake:
    • Δ > 0, diskriminatzailea positiboa bada, bi soluzioak zenbaki erreal dira.
    • Δ = 0, diskriminatzailea 0 bada, soluzioa bakarra da eta gainera zenbaki erreala.
    • Δ < 0, diskriminatzailea negatiboa bada, ez dago erro errealik eta bi soluzioak zenbaki konplexuak dira eta bata bestearen zenbaki konplexu konjugatu dira.

    ARIKETA:
    Bigarren mailako ekuazio baten rA, rB eta rC koefizienteak teklatuaren bitartez irakurri eta ekuazio koadratiko horren soluzioa nolakoa den pantailaratu, hau da, erroak nolakoak diren pantailan idatzi. Ariketa honek begi bistako hedapena du, hots, erroak nolakoak diren zehazteaz gain erroak kalkulatzea.




    Aldagai boolearrak erabiliz

    Orain arte ikasitakoa gogoratuz, hiru aldagai boolear deklaratu eta diskrimanatzailearen arabera balioak esleituko genizkioke, bukatzeko aldagai boolear horien edukiak pantailaratuko genituzke. Honela:
                rDiskr := rB*rB - 4*rA*rC ;
    boErrealBi := rDiskr > 0 ;
    boErrealBakarra := rDiskr = 0 ;
    boIrudikariBi := rDiskr < 0 ;

    Hemen daukazu Erroak0.pas iturburu-programa, non koefizienteak teklatuz irakurri ondoren, hiru aldagai boolearrentzat balioak kalkulatzen diren eta ostean balio horiek pantailara kanporatzen diren:
    program NolakoErroakDiren_AldagaiBoolearrekin;
    var
        rA, rB, rC, rDiskr: real;
        boErrealBi, boErrealBakarra, boIrudikariBi: Boolean;
    begin
       write('A koefizientearen balioa eman: ');
       readln(rA);
       write('B koefizientearen balioa eman: ');
       readln(rB);
       write('C koefizientearen balioa eman: ');
       readln(rC);
    
       rDiskr := sqr(rB) - 4*rA*rC;
    
       boErrealBi      := rDiskr > 0;
       boErrealBakarra := rDiskr = 0;
       boIrudikariBi   := rDiskr < 0;
    
       writeln;
       writeln('Erroak bi erreal dira:   ', boErrealBi);
       writeln('Erroa erreal bakarra da: ', boErrealBakarra);
       writeln('Erroak irudikariak dira: ', boIrudikariBi);
    	
       writeln;
       writeln;
       writeln('=======================');
       writeln('RETURN sakatu amaitzeko');
       writeln('=======================');
       readln;
    end. { PROGRAMAREN BUKAERA }



    IF-THEN kontrol-egitura erabiliz

    Aldagai boolearrak erabili ordez adierazpen logikoak erabil ditzagun IF-THEN kontrol-egitura batekin batera. Programa bakar bat izango da eta programa beraren irteera posibleak hauek izan daitezke rA, rB eta rC koefizienteen balioen arabera:

    Bigarren graduko ekuazio baten erroak nolakoak diren jakiteko algoritmo hau erabil daiteke:

    Algoritmo hori jarraitzen duen iturburu-programa Erroak1.pas da, non IF-THEN sententziak isolaturik dauden elkarrekiko. Programa hobeto ulertzeko ikusi bere algoritmoaren fluxu-diagrama:




    IF-THEN-ELSE kontrol-egitura erabiliz

    IF-THEN kontrol-egitura erabili ordez bere hedapena den IF-THEN-ELSE kontrol-egitura bitartez ekin diozaiogun ariketa berari. Oraingoak erroak nolakoak diren zehazteaz gain, erroak kalkulatu egingo ditugu.

    rA, rB eta rC koefizienteak dituen bigarren graduko ekuazio baten erroak nolakoak eta zeintzuk diren jakiteko Erroak2.pas iturburu-programa idatzi da. Programa horrek erroak kalkulatzen ditu eta oraingoan IF-THEN-ELSE bi erabili dira, ikusi nola kontrol-sententzia bat bestearen barruan kabiatuta dagoen. Hauek dira programaren algoritmoa eta fluxu-diagrama: