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

3. astea | ekuazio-sistema

Cramer-en metodoa egokia da ekuazio linealen sistemak ebazteko. Hona hemen ekuazio-sistema bat eta ikusi nola lortzen den bere ebazpena koefizienteen determinanteak erabiliz:


Koefiziente guztiak zenbaki errealak izanik, koefizienteak teklatuaren bitartez irakurri eta sistemaren ebazpena pantailan idatzi. 

Kontutan izan A·E - B·D = 0 baldin bada, programa konpilagarria izango dela, baina errorea gertatuko dela exekuzio-denboran.

Konpilatu izanak ez du esan nahi programa ondo dagoenik


3. astea | baldintzazko aginduen eskemak









Baldintzazko aginduak hiru dira:
  • IF-THEN
  • IF-THEN-ELSE
  • CASE-OF


IF-THEN
 
Hauxe da IF-THEN aginduaren eskema:

Eta baldintza konposatuak nola programatu irudi honetan erakusten da IF-THEN agindu bakar bat idatziz:
Irudia handitzeko bere gainean klikatu



IF-THEN-ELSE
 
Jarraian IF-THEN-ELSE aginduaren eskema erakusten da, ohartu nola ELSE markaren aurrean puntu eta komarik ez dela jarri behar:

IF-THEN agindu baten barruan beste IF-THEN agindu bat habiratu egiten denean, hurrengo ELSE blokea bigarren IF-THEN aginduarekin doa:

IF-THEN agindu baten barruan beste IF-THEN agindu bat habiratu egiten denean, hurrengo ELSE blokea lehenengo IF-THEN aginduarekin joan dadin BEGIN-END markak jarri behar dira:



CASE-OF
 
Hauxe da CASE-OF aginduaren eskema:
Irudia handitzeko bere gainean klikatu

CASE-OF baten funtsezko kontzeptua da aldagai aukeratzailean dago, aldagai aukeratzaile hori datu-mota ordinal bat izan behar da (Integer, Char edo enumeratua). CASE-OF batek END marka du baina BEGIN-ik ez dauka.

Laburbilduz, lau modutan 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 eskuratzen dira gainerako aukera guztiak
Arestian aipatutakoa era praktikoan ikasteko 3. astea | CASE-OF aginduaren adibidea eta kontraadibidea ikusi.

2024(e)ko urtarrilaren 29(a), astelehena

Zenbaki errealetik kopuru osora


Zenbaki errealetan bi atal desberdintzen dira: alde osoa eta alde dezimala. Eta zenbaki erreal bati dagokion zenbaki osoa lor dezakegu, esate baterako:
        readln(rDatua) ;
        iEmaitza1 := trunc(rDatua) ;
        iEmaitza2 := round(rDatua) ;
Zenbaki erreal bat teklatuaren bitartez irakurri eta bere dagozkion bi zenbaki oso erakutsi. Horretarako Trunc eta Round funtzio estandarrak aplikatuko dira, emaitzak zenbaki osoak izango dira. Sarrerako datua den zenbaki errealaren balioa moztuz ala biribilduz emaitza lortuko dugu:
{------------------------------------------------------------------------------
      Sarrera zenbaki erreala izanik irteera zenbaki osoa izango da
      
      round() funtzioa mugan, parametroa X.5 denean:
                 X bakoitia izatean    round(X.5)  --->  X+1
                 X bikoitia izatean    round(X.5)  --->  X
-------------------------------------------------------------------------------}
program TruncRound_funtzioak ;
var
   rZbk1, rZbk2 : real ;
begin
   writeln ;
   writeln ;
   write('Zenbaki erreala eta positiboa eman: ') ;
   readln(rZbk1) ;
   writeln ;

   writeln('Hona hemen emandako zenbakia: ', rZbk1:0:3) ;
   writeln('trunc(', rZbk1:0:3, ') = ', trunc(rZbk1)) ;
   writeln('round(', rZbk1:0:3, ') = ', round(rZbk1)) ;
   writeln ;
   writeln('Hemen emandakoaren negatiboa: ', -rZbk1:0:3) ;
   writeln('trunc(', -rZbk1:0:3, ') = ', trunc(-rZbk1)) ;
   writeln('round(', -rZbk1:0:3, ') = ', round(-rZbk1)) ;
   writeln ;
   writeln ;

   rZbk2 := rZbk1 + 0.4 ;
   writeln('Aurreko sarrerari 0.4 gehitu: ', rZbk2:0:3) ;
   writeln('trunc(', rZbk2:0:3, ') = ', trunc(rZbk2)) ;
   writeln('round(', rZbk2:0:3, ') = ', round(rZbk2)) ;
   writeln ;
   writeln('Hementxe berriaren negatiboa: ', -rZbk2:0:3) ;
   writeln('trunc(', -rZbk2:0:3, ') = ', trunc(-rZbk2)) ;
   writeln('round(', -rZbk2:0:3, ') = ', round(-rZbk2)) ;
   writeln ;
   writeln ;

   writeln('=======================') ;
   writeln('RETURN sakatu amaitzeko') ;
   write  ('_______________________') ;
   readln ;
end. { PROGRAMAREN BUKAERA }

Ikusi ere zenbaki erreal baten bi atalak nola eskuratzen diren (Zenbaki erreal baten atalak).

Round() funtzioaren muga X.5 kopurua da eta bere emaitza X araberakoa da, jakin dezagun Round() funtzioaren biribiltze emaitza zenbaki bikoitia dela ondoko irudian erakusten den bezala:


Noiz Trunc() funtzioa eta noiz Round() funtzioa? Adibide batekin erantzungo dugu, baina lehenik gogoratuz zenbaki erreal guztiak ezin direla errepresentatu memorian gordetzeko.

Zenbaki erreal baten atalak


Zenbaki errealetan bi atal desberdintzen dira: alde osoa eta alde dezimala.
        readln(rDatua);
        rAldeOsoa := int(rDatua);
        rAldeDezimala := frac(rDatua);
Zenbaki erreal bat teklatuaren bitartez irakurri eta bere atalak banatzeko funtzioak ikusten dira hemen. Sarrerako zenbaki errealaren atalak Int eta Frac funtzioek eskainiko dituzte eta zenbaki errealak izango dira ere, hots, bilatzen ditugun emaitzak zenbaki errealak izango dira:
{------------------------------------------------------------------------------
      Sarrera zenbaki erreala izanik irteera zenbaki erreala izango da
-------------------------------------------------------------------------------}
program IntFrac_funtzioak;
var
   rZbk1: real;
   rAldeOsoa: real;          { real datu-mota derrigorrez }
   rAldeDezimala: real;      { real datu-mota derrigorrez }
begin
   writeln;
   writeln;
   write('Zenbaki erreala eta positiboa eman: ');
   readln(rZbk1);
   writeln;

   rAldeOsoa := int(rZbk1);
   rAldeDezimala := frac(rZbk1);
   
   writeln('Hona hemen emandako zenbakia: ', rZbk1:0:3);
   writeln('  int(', rZbk1:0:3, ') = ', rAldeOsoa:0:3);
   writeln(' frac(', rZbk1:0:3, ') = ', rAldeDezimala:0:3);
   writeln;
   
   rAldeOsoa := int(-rZbk1);
   rAldeDezimala := frac(-rZbk1);
   
   writeln('Hemen emandakoaren negatiboa: ', -rZbk1:0:3);
   writeln('  int(', -rZbk1:0:3, ') = ', rAldeOsoa:0:3);
   writeln(' frac(', -rZbk1:0:3, ') = ', rAldeDezimala:0:3);
   writeln;
   writeln;

   writeln('=======================');
   writeln('RETURN sakatu amaitzeko');
   write  ('_______________________');
   readln;
end. { PROGRAMAREN BUKAERA }

Ikusi ere zenbaki erreal bat nola bihurtzen den zenbaki oso (Zenbaki errealetik kopuru osora).

2. ASTEA | etxerako lana

 2. astea (2024/01/31) etxean egitekoa

Aste honetako laborategitik irtetean jarraian aipatzen diren ariketa guzti hauek programatuta eta ulertuta egon daitezela:
Zuk ikusi lana eta denbora nola banatzen dituzun, bai etxean zein laborategian. Baina aurrera egiteko programa hauek menperatu behar dira, hurrengo gaia baldintzazko aginduak delako eta gai berri hori kontzeptu hauen gainean eraikitzen delako.

Datorren asterako:


2. ASTEA | laborategi/mintegian egin dena

 2. astea (2024/01/31) laborategi/mintegian egindakoa

  • Zerrenda pasatu dugu, deitutakoen 18 ikasleetatik 7 etorri dira (zehaztapen gehiago eGela zerbitzuan)
  • 1. astea | erakarpen grabitatorioa izeneko programa egina duzue, eta gaurkoan kontzeptu hauek birpasatu ditugu:
    • Konstanteak eta aldagaiak
    • Zatiketa erreala (/)
    • Zenbaki errealen adierazpen zientifikoa
  • 2. astea | triangelu berezi baten azalera izeneko programa egin dugu. Bide batez ondokoak ikusi ditugu:
    • WriteLn prozedurari datuak (parametroak) nola pasatu
    • Testuen formatua WriteLn('Testua':n);
    • Zenbaki errealen formatua WriteLn(rAzalera:m:n);
    • ABS() funtzio estandarra erabil daiteke triangeluaren oinarria beti positiboa izan dadin
    • Zatiketa erreala (/)
  • 2. astea | kopuru handiegiak izeneko programa honi esker ondoko hauek ikasten dira:
    • WriteLn prozedurari datuak (parametroak) nola pasatu
    • Testuen formatua WriteLn('Testua':n);
    • Zenbaki osoen formatua WriteLn(iZbk:n);
    • SQR() funtzio estandarra: zenbaki bat onartzen duen funtzioa da, eta datua den zenbaki horri dagokion karratua itzultzen du
    • Datu-moten mugak (INTEGER eta LONGINT)
    • MAXINT konstantea eta MAXLONGINT konstantea
  • 2. astea | segundoen kopuruak ariketari esker ondoko hauek ikasten dira:
    • Zatiketa osoaren DIV eta MOD operadoreak
    • Integer datu-motak 2 byte edo 4 byte har ditzakeela memorian (ordenagailuaren arabera)
    • LongInt datu-motak 4 byte hartzen dituela memorian
    • MAXINT konstantea da Integer datu-motaren goimuga
    • MAXLONGINT konstantea da LongInt datu-motaren goimuga
  • 2. astea | kartesiar-polar izeneko programa egin dugu baina rAng emaitza radianetan emanik (aurrerago ikasiko dugu radianak gradu-minutu-segundo moduan nola pantailaratu). Programa honi esker ondoko hauek ikasten dira:
    • Sqrt() funtzio estandarra
    • ArcTan() funtzio estandarra
    • Radianetan emandako angelu bat gradu-minutu-segundo moduan pantailan erakusteko, teoriako klasean aipatuko diren Trunc() eta Frac() funtzio estandarrak erabili beharko dituzue


HAU EGIN GABE GERATU DA 
  • 2. astea | zenbakia pantailaren erdian izeneko programa ez dugu egin baina aurrekoen bezalakoa da. Programa honi esker ondoko hauek ikasten dira
    • WriteLn prozedurari datuak (parametroak) nola pasatu
    • Testuen formatua WriteLn('Testua':n);
    • Zenbaki osoen formatua WriteLn(iZbk:n);
    • Zatiketa osoa (DIV)
 

2. astea | radianak bihurtu gradu-minutu-segundo

ADI!
2. astea | radianak bihurtu gradu-minutu-segundo ariketa hau eta 2. astea | segundoen kopuruak desberdinak dira, batean abiapuntuko datua Real datu-motakoa delako eta bestean Integer/LongInt datu-motakoa delako.


Zergatik angeluak neurtzeko gradu-minutu-segundo unitateak erabiltzen dira? Orduak banatzerakoan minutuak eta segundoak darabilkigun formatuaren arrazoi historiko beragatik.




Sarrerako angelua positiboa izanik

rRadianak aldagaiak angelu baten radianak gordeko ditu, teklatuaren bitartez irakurriko den angelua hain zuzen ere. Radianetan datutzat aukeratu den angeluari dagozkion gradu, minutu eta segundo kalkulatuko dituen programa idatzi.

Sarrerako datua zenbaki erreala izango da, erreala eta positiboa. Graduak eta minutuak zenbaki osoak izango dira, eta segundoak zenbaki erreala izango da.

Sarrerako datua eta azken emaitza, bitarteko kalkuluak erakutsi gabe

Goiko irudiko programa hori gogoan duzula, hurrengo irudian erakusten da Radianak1.exe programa exekutagarriaren irteera bat. Bertan ikusten dira sarrerako datua, azken emaitzak eta bitarteko kalkuluak. Zure lana: irudiko irteera emanten duen Radianak1.pas iturburu-programa idaztea.
Sarrerako datua negatiboa denean emaitza ez da zuzena


Sarrerako angelua negatiboa izanik

Aurrekoaren ariketa berbera da baina orain rRadianak angeluaren aldagaia zenbaki erreala eta negatiboa izango da. Lehen bezala, graduak eta minutuak zenbaki osoak izango dira eta segundoak zenbaki erreala izango da.

Hartu hemendik Radianak2.exe programa exekutagarria eta ikusi nola dabilen sarrerako kopuru negatiboekin:
Sarrerako datua positiboa denean emaitza ez da zuzena

Zergatik angeluak neurtzeko gradu-minutu-segundo unitateak erabiltzen dira? Orduak neurtzeko arrazoi historiko beragatik.



Sarrerako angelua positiboa edo negatiboa izanik

Aurreko ariketa biak paretsuak dira eta zentzuduna izan daiteke programa bakar batean batzea. Horrek esan nahi du rRadianak sarrerako datua positiboa izatean agindu batzuk exekutatuko liratekeela, eta sarrerako angelua negatiboa izatean beste agindu batzuk exekutatuko liratekeela.

Oraindik ez dakigu nahikorik programa hori idazteko, baina hartu hemendik Radianak3.exe programa exekutagarria eta ikusi nola dabilen edozein sarrerako angeluarekin:
Sarrerako datua positiboa edo negatiboa onartzeaz gain segundoen
hamarrenak, ehunenak eta milarenak banaturik erakusten ditu