2024(e)ko martxoaren 14(a), osteguna

8. astea | menu bat azpiprogramekin






Karaktere-kateak lantzen

Programa bakar batek eginkizun desberdinak bildu behar dituenean menu bat erabil daiteke. Adibide honetan hiru aukerako menu bat erakusten da, non hirugarren aukerari esker programa bukaraziko da.

{
   Menuaren aukerak hautatzeko funtzio bat.
   Aukera bakoitzaren eginkizuna burutzeko prozedura bana.
}
program MenuaAzpiprogramaz;
uses
   crt;

{ Menuaren aukera erakutsi eta hautapena aukeratu }
function fncMenua: char;
var
   cHautapena: char;
begin
   writeln('===============MENUA================');
   writeln(' A) alfabeto zatia diagonalean');
   writeln(' B) biderkatzeko taula pantailaratu');
   writeln;
   writeln(' I) irten');
   writeln('====================================');
   repeat
      write('    Zure aukera: '); 
      cHautapena := readkey;
      writeln(cHautapena);
      cHautapena := upcase(cHautapena);
   until (cHautapena = 'A') or (cHautapena = 'B') or (cHautapena = 'I');

   fncMenua := cHautapena;
end;

{ A-tik hasita alfabetoa diagonalki pantailaratu }
procedure DiagonalaPantailanIdatzi(cLetra: char);
var
   cKont: char;
   iNon: integer;
begin
   writeln;
   iNon := 5;
   for cKont:='A' to cLetra do
   begin
      writeln(cKont:iNon);
      iNon := iNon + 2;
   end;
end;

procedure TaulaPantailaratu(iZbk: integer);
var
   k: integer;
begin
   writeln(iZbk,' zenbakiaren biderkatzeko taula:');
   for k:=1 to 10 do
   begin
      writeln(k:10, ' x ', iZbk:2, '  = ', k*iZbk:3);
   end;
   writeln; 
end;


{ ----------------------PROGRAMA NAGUSIA---------------------- }
var
   cAukera, cLetra, cItxoin: char;
   iZbk: integer;
begin
   repeat
      clrscr;
       
      cAukera := fncMenua;
      writeln;
      
      case cAukera of 
         'A': begin
                 repeat
                    write('Azken letra eman: ');
                    cLetra := readkey;
                    writeln(cLetra);
                    cLetra := upcase(cLetra);
                 until (cLetra >= 'A') and (cLetra <= 'Z');
                 DiagonalaPantailanIdatzi(cLetra);
              end;
         'B': begin
                 repeat
                    write('1 eta 10 arteko zenbaki osoa eman:  ');
                    readln(iZbk);
                 until (iZbk >= 1) and (iZbk <= 10);
                 TaulaPantailaratu(iZbk);
              end;
         'I': begin             
                 writeln('Programa amaitzera doa.');
              end              ;
      end;         (* case-rena *)

      writeln;
      write('Edozein tekla sakatu aurrera egiteko...');
      cItxoin := readkey;     (* emaitzak ikusi ahal izateko itxaron *)
      writeln(cItxoin);       (* konpilazio abisua kentzeko *)
   until cAukera='I';
end.
 
 





{ KateakLantzekoBaliabideak programan delete(), insert(), copy() }
{ eta pos() azpiprogramen alternatibak kodetu dira.              }

program KateakLantzekoBaliabideak;
uses
   crt;
   
function fncAukeraHautatu: char;
var
   cHautapena: char;
begin
   writeln('===========================Menua============================');
   writeln('  A   delete() prozeduraren bezalako fnsEzabatu() funtzioa');
   writeln('  B   insert() prozeduraren bezalako fnsTxertatu() funtzioa');
   writeln('  C   copy() funtzioaren bezalako kopiatu() prozedura');
   writeln('  D   pos() funtzioaren bezalako kokatu() prozedura');
   writeln;
   writeln('  I   Programatik irten');
   writeln('============================================================');
   write('                                Zure aukera: ');
    
   repeat
      cHautapena := readkey;
      cHautapena := upcase(cHautapena);
      writeln(cHautapena);
       
      if (cHautapena < 'A') or (cHautapena > 'D') and (cHautapena <> 'I') then
      begin
         write('Aukera ez da ondo hautatu. Berriro aukeratu: ');   
      end;   
   until (cHautapena >= 'A') and (cHautapena <= 'D') or (cHautapena = 'I');
    
   fncAukeraHautatu := cHautapena;
end;


function fnsEzabatu(sDatua: string; iNondik, iZenbat: integer): string;
var
   sEmaitza: string;
   iKont: integer;
begin
   sEmaitza := '';
   for iKont:=1 to iNondik-1 do
   begin
      sEmaitza := sEmaitza + sDatua[iKont];
      writeln(iKont:10, sDatua[iKont]:10);
   end;
   for iKont:=iNondik+iZenbat to length(sDatua) do
   begin
      sEmaitza := sEmaitza + sDatua[iKont];
      writeln(iKont:14, sDatua[iKont]:10);
   end;
   fnsEzabatu := sEmaitza;
end; 


function fnsTxertatu(sAzpikatea, sDatua: string; iNondik: integer): string;
var
   sEmaitza: string;
   iKont: integer;
begin
   sEmaitza := '';
   for iKont:=1 to iNondik-1 do
   begin
      sEmaitza := sEmaitza + sDatua[iKont];
      writeln(iKont:10, sDatua[iKont]:10);
   end;
   for iKont:=1 to length(sAzpikatea) do
   begin
      sEmaitza := sEmaitza + sAzpikatea[iKont];
      writeln(iKont:12, sAzpikatea[iKont]:10);
   end;
   for iKont:=iNondik to length(sDatua) do
   begin
      sEmaitza := sEmaitza + sDatua[iKont];
      writeln(iKont:14, sDatua[iKont]:10);
   end;
   fnsTxertatu := sEmaitza;
end; 


procedure kopiatu(sDatua: string; iNondik, iZenbat: integer; var sEmaitza: string);
var
   iKont: integer;
begin
   sEmaitza := '';
   for iKont:=iNondik to iNondik+iZenbat-1 do
   begin
      sEmaitza := sEmaitza + sDatua[iKont];
      writeln(iKont:10, sDatua[iKont]:10);
   end;
end;


procedure kokatu(sAzpikatea, sDatua: string; var iNon: integer);
var
   iKont, k, i: integer;
   boAurkitua, boDesberdinak: boolean;
begin
   boAurkitua := FALSE;
   iKont := 1;
   while (iKont <= length(sDatua)) and not boAurkitua do
   begin
      boDesberdinak := FALSE;
      k := iKont;
      i := 1;
      while (k < iKont+length(sAzpikatea)) and not boDesberdinak do
      begin
         writeln('iKont=', iKont:2, 'k=':6, k:2, sDatua[k]:6, 'i=':6, i:2, sAzpikatea[i]:6, 'boDesberdinak=':18, boDesberdinak:5);
         if sDatua[k] <> sAzpikatea[i] then
            boDesberdinak := TRUE
         else
         begin
            k := k +1;
            i := i +1;
         end;
      end;
      if boDesberdinak = FALSE then
         boAurkitua := TRUE
      else
         iKont := iKont +1;  
   end;
   if boAurkitua then
   begin
      iNon := iKont;
      writeln('boAurkitua=', boAurkitua:5, 'iNon=Kont=':15, iNon:2);
   end
   else
   begin
      iNon := 0;
      writeln('boAurkitua=', boAurkitua:5, 'iNon=':10, iNon:2);
   end;
   writeln;
end;


{ ----------------------PROGRAMA NAGUSIA---------------------- }
var
   cAukera, cItxoin: char;
   iNon: integer;
   sDatua, sEmaitza: string;
   sAzpikatea: string;
   iNondik, iZenbat: integer;
begin
   repeat
      clrscr;
      cAukera := fncAukeraHautatu;
 
      writeln;
      case cAukera of
         'A' : begin
                  writeln('sDatua emanik, fnsEzabatu() funtzioa kodetu delete() prozedurarena betetzeko');
                  writeln;
                  writeln('    procedure delete(var sKatea: string;');
                  writeln('                        iNondik: integer;');
                  writeln('                        iZenbat: integer);');
                  writeln;
                  writeln('    function fnsEzabatu( sDatua: string;');
                  writeln('                        iNondik: integer;');
                  writeln('                        iZenbat: integer): string;');
                  writeln;
                  write('sDatua eman: ');
                  readln(sDatua);
                  writeln('sDatua  |', sDatua, '|');
                  repeat
                     write('Ezabaketa zein karakteretan hasiko da? ');
                     readln(iNondik);
                     if iNondik < 1 then
                        writeln('Posizioa gutxienez 1 izan behar da');
                     if iNondik > length(sDatua) then
                        writeln('Posizioa gehinez ', length(sDatua), ' izan behar da');
                  until (iNondik >= 1) and (iNondik <= length(sDatua));
                  repeat
                     write('Zenbat karaktere ezabatuko dira? ');
                     readln(iZenbat);
                     if iZenbat < 1 then
                        writeln('Gutxienez karaktere 1 kendu behar da');
                     if iZenbat > length(sDatua)-iNondik+1 then
                        writeln('Kopurua gehinez ', length(sDatua)-iNondik+1, ' izan behar da');
                  until (iZenbat >= 1) and (iZenbat <= length(sDatua)-iNondik+1);
                  sEmaitza := fnsEzabatu(sDatua, iNondik, iZenbat);
                  writeln('|', sDatua, '|');
                  writeln('|', sEmaitza, '|');
               end;
         'B' : begin
                  writeln('sDatua emanik, fnsTxertatu() funtzioa kodetu insert() prozeduraren lana betez');
                  writeln;
                  writeln('   procedure insert(sSartukoDenKatea: string;');
                  writeln('                    var sKateNagusia: string;');
                  writeln('                                iNon: integer);');
                  writeln;
                  writeln('     function fnsTxertatu(sAzpikatea: string;');
                  writeln('                              sDatua: string; ');
                  writeln('                             iNondik: integer): string;');
                  writeln;
                  write('sDatua eman: ');
                  readln(sDatua);
                  writeln('sDatua  |', sDatua, '|');
                  write('sAzpikatea eman: ');
                  readln(sAzpikatea);
                  writeln('sAzpikatea  |', sAzpikatea, '|');
                  repeat
                     write('Txertaketa zein karakteretan hasiko da? ');
                     readln(iNondik);
                     if iNondik < 1 then
                        writeln('Posizioa gutxienez 1 izan behar da');
                     if iNondik > length(sDatua) then
                        writeln('Posizioa gehinez ', length(sDatua), ' izan behar da');
                  until (iNondik >= 1) and (iNondik <= length(sDatua));
                  sEmaitza := fnsTxertatu(sAzpikatea, sDatua, iNondik);
                  writeln('|', sDatua, '|');
                  writeln('|', sEmaitza, '|');
               end;
         'C' : begin
                  writeln('sDatua emanik, kopiatu() prozedura kodetu copy() funtzioaren lana betetzeko');
                  writeln;
                  writeln('      function copy(sDatuaDenKatea: string;');
                  writeln('                          iNonHasi: integer;');
                  writeln('                           iZenbat: integer): string;');
                  writeln;
                  writeln('    procedure kopiatu(      sDatua: string;');
                  writeln('                           iNondik: integer;');
                  writeln('                           iZenbat: integer;');
                  writeln('                      var sEmaitza: string);');
                  writeln;
                  write('sDatua eman: ');
                  readln(sDatua);
                  writeln('sDatua  |', sDatua, '|');
                  repeat
                     write('Kopiaketa zein karakteretan hasiko da? ');
                     readln(iNondik);
                     if iNondik < 1 then
                        writeln('Posizioa gutxienez 1 izan behar da');
                     if iNondik > length(sDatua) then
                        writeln('Posizioa gehinez ', length(sDatua), ' izan behar da');
                  until (iNondik >= 1) and (iNondik <= length(sDatua));
                  repeat
                     write('Zenbat karaktere kopiatuko dira? ');
                     readln(iZenbat);
                     if iZenbat < 1 then
                        writeln('Gutxienez karaktere 1 kendu behar da');
                     if iZenbat > length(sDatua)-iNondik+1 then
                        writeln('Kopurua gehinez ', length(sDatua)-iNondik+1, ' izan behar da');
                  until (iZenbat >= 1) and (iZenbat <= length(sDatua)-iNondik+1);

                  kopiatu(sDatua, iNondik, iZenbat, sEmaitza);
                  writeln('|', sDatua, '|');
                  writeln('|', sEmaitza, '|');
               end;    
         'D' : begin
                  writeln('sDatua emanik, kokatu() prozedura kodetu pos() funtzioaren lana betetzeko');
                  writeln;
                  writeln('    function pos(sBilatukoDenAzpikatea: string;');
                  writeln('                          sKateNagusia: string): integer;');
                  writeln;
                  writeln('    procedure kokatu(sAzpikatea: string;');
                  writeln('                         sDatua: string;');
                  writeln('                       var iNon: integer);');
                  writeln;
                  write('Kate nagusia den sDatua eman: ');
                  readln(sDatua);
                  writeln('sDatua  |', sDatua, '|');
                  write('Bilatuko den sAzpikatea eman: ');
                  readln(sAzpikatea);
                  writeln('sAzpikatea  |', sAzpikatea, '|');

                  kokatu(sAzpikatea, sDatua, iNon);
                  if iNon = 0 then
                     writeln('|', sAzpikatea, '| ez dago |', sDatua, '| katean')
                  else
                     writeln('|', sAzpikatea, '| |', sDatua, '| katearen ', iNon, ' posizioan dago');
               end;               
         'I' : begin            
                  writeln('Programa amaitzera doa. Edozein tekla sakatu.');
               end;    
      end;
 
      cItxoin := readkey;         (* emaitzak ikusi ahal izateko itxaron *)
      writeln(cItxoin);           (* konpilazio abisua kentzeko *)
   until cAukera='I';
end.
 

iruzkinik ez:

Argitaratu iruzkina

Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.