2025(e)ko otsailaren 19(a), asteazkena

Ariketa 36 | Hainbat aukeren menu bat

ZER DAKIDAN:
switch baldintzazko egitura ikasi nuen aukera anitzak antolatzeko.



ZER IKASIKO DUDAN:
Menu bat programa batean nola egiten den ikasiko dut, erabiltzaileak gogoko duen hautapena char datu-motako aldagai batean irakurriko dut. Bide batez system("cls") errutinaren funtzionamendua ikusiko dut ere. Eta, noski, menu bat prozesu errepikakor bat izan ohi da eta bertatik irteteko propio idaztiko dut aukera bat.


Ariketa 18 | Aukera anitzen arteko hautapena artikulua gogora ekarriz, programaren fluxua bideratzeko switch agindua erabilten da aukerak hiru edo gehiago direnean.

Jarraian erakusten den menua programa nagusian kokaturik dago, baina jakin ezazu hori horrela ez dela egingo behin azpiprogramen kontzeptua gureganatuko dugunetik aurrera.

Algoritmoa:
  1. Programa osoa prozesu errepikakor bat da, eta errepikapenak mozteko menuaren aukera egokia hautatu behar da (lehen adibidean I, i edo 0 balioak, eta bigarren adibidean A edo a balioak)
  2. Begiztaren iterazio bakoitzeko, pantaila garbitu system("cls") funtzioaren bitartez eta bost aukeren deskribapenak erakutsi
  3. Begiztaren iterazio bakoitzeko, char datu-motako cAukera aldagaiari balioa teklatuz eman era kontrolatuan (teklatuaren karaktere bat irakurtzeko getche() funtzioa oso egokia da)
  4. Irakurri den karaktere horren arabera switch egiturak kudeatuko du programaren fluxoa eta aukera horri dagozkion kalkuluak burutuko dira
  5. Begiztaren iterazio bakoitzeko, programaren exekuzioa gelditu getch() funtzioaren bitartez tekla bat sakatu arte, horrela informazioa eta kalkuluen emaitzak ikusi ahal izango dira
Ondoko bi programak nahiko berdintsuak dira, batean konstanteak erakusten dira pantailan eta bestean kalkulu baten emaitza. Bi ariketetan garrantzitsuena da programa nola antolatu den.


Programa honek goiko algoritmoa aplikatzen du:

/* Ariketa-36a_MenuBat: hainbat aukeren menu bat, aukeratzailea char */

// Programa hau 'Ariketa-18_MenuBat' programaren jarraipena da,
// harekiko dituen hobekuntzak:
//    1. Aldagai aukeratzailea char datu-motakoa da
//    2. Aldagai aukeratzailea irakurtzean egokitasuna kontrolatzen da
//    3. Iterazio bakoitzean pantaila garbitzen da
//    4. Menuak irteteko aukera du

#include <stdio.h>
#include <stdlib.h>   // system() funtziorako
#include <conio.h>    // getche() eta getch() funtzioetarako

#define LAT_A -34.927499   // Adelaide
#define LON_A 138.600000
#define LAT_B -15.793889   // Brasilia
#define LON_B -47.882778
#define LAT_C 51.047500    // Calgary
#define LON_C -114.062500
#define LAT_D 48.008889    // Donetsk
#define LON_D 37.804167

int main()
{
   char cAukera;

   do
   {
       system("cls");
       printf("\n");
       printf("\n ======Hiri baten datuak======");
       printf("\n     A. Adelaide");
       printf("\n     B. Brasilia");
       printf("\n     C. Calgary");
       printf("\n     D. Donetsk");
       printf("\n\n     I. Programatik irten");
       printf("\n =============================");

       do
       {
           printf("\n Zure aukera: ");
           cAukera = getche();
           fflush(stdin);
       } while ((cAukera != 'A') && (cAukera != 'a') &&
                (cAukera != 'B') && (cAukera != 'b') &&
                (cAukera != 'C') && (cAukera != 'c') &&
                (cAukera != 'D') && (cAukera != 'd') &&
                (cAukera != 'I') && (cAukera != 'i'));

       printf("\n");

       switch(cAukera)
       {
           case 'A':
           case 'a':
               printf("\n Adelaide");
               printf("\n Koordenatuak: (%.6f, %.6f)", LAT_A, LON_A);
               printf("\n Hego hemisferioko ekialdea");
               break;
           case 'B':
           case 'b':
               printf("\n Brasilia");
               printf("\n Koordenatuak: (%.6f, %.6f)", LAT_B, LON_B);
               printf("\n Hego hemisferioko mendebaldea");
               break;
           case 'C':
           case 'c':
               printf("\n Calgary");
               printf("\n Koordenatuak: (%.6f, %.6f)", LAT_C, LON_C);
               printf("\n Ipar hemisferioko mendebaldea");
               break;
           case 'D':
           case 'd':
               printf("\n Donetsk");
               printf("\n Koordenatuak: (%.6f, %.6f)", LAT_D, LON_D);
               printf("\n Ipar hemisferioko ekialdea");
               break;
           default:
               printf("\n Irtetera goaz.");
       }  // switch

       if ((cAukera != 'I') && (cAukera != 'i'))
       {
           printf("\n\n Edozein tekla sakatu aurrera egiteko...");
           getch();   // pantailaratutako informazioa ikusi ahal izateko
       }
   } while ((cAukera != 'I') && (cAukera != 'i'));

   printf("\n\n");
   return 0;
}

Programa honek ere goiko algoritmoa aplikatzen du:

/* Ariketa-36a2_MenuBat: hainbat aukeren menu bat, aukeratzailea int */

// Programa hau 'Ariketa-18_MenuBat' programaren jarraipena da,
// harekiko dituen hobekuntzak:
//    1. Aldagai aukeratzailea char datu-motakoa da
//    2. Aldagai aukeratzailea irakurtzean egokitasuna kontrolatzen da
//    3. Iterazio bakoitzean pantaila garbitzen da
//    4. Menuak irteteko aukera du

#include <stdio.h>
#include <stdlib.h>   // system() funtziorako
#include <conio.h>    // getche() eta getch() funtzioetarako

#define LAT_A -34.927499   // Adelaide
#define LON_A 138.600000
#define LAT_B -15.793889   // Brasilia
#define LON_B -47.882778
#define LAT_C 51.047500    // Calgary
#define LON_C -114.062500
#define LAT_D 48.008889    // Donetsk
#define LON_D 37.804167

int main()
{
   int iAukera;

   do
   {
       system("cls");
       printf("\n");
       printf("\n ======Hiri baten datuak======");
       printf("\n     1. Adelaide");
       printf("\n     2. Brasilia");
       printf("\n     3. Calgary");
       printf("\n     4. Donetsk");
       printf("\n\n     0. Programatik irten");
       printf("\n =============================\n");

       do
       {
           printf(" Zure aukera: ");
           scanf("%d", &iAukera);
       } while ((iAukera < 0) || (iAukera > 4));

       printf("\n");

       switch(iAukera)
       {
           case 1:
               printf("\n Adelaide");
               printf("\n Koordenatuak: (%.6f, %.6f)", LAT_A, LON_A);
               printf("\n Hego hemisferioko ekialdea");
               break;
           case 2:
               printf("\n Brasilia");
               printf("\n Koordenatuak: (%.6f, %.6f)", LAT_B, LON_B);
               printf("\n Hego hemisferioko mendebaldea");
               break;
           case 3:
               printf("\n Calgary");
               printf("\n Koordenatuak: (%.6f, %.6f)", LAT_C, LON_C);
               printf("\n Ipar hemisferioko mendebaldea");
               break;
           case 4:
               printf("\n Donetsk");
               printf("\n Koordenatuak: (%.6f, %.6f)", LAT_D, LON_D);
               printf("\n Ipar hemisferioko ekialdea");
               break;
           default:
               printf("\n Irtetera goaz.");
       }  // switch

       if (iAukera != 0)
       {
           printf("\n\n Edozein tekla sakatu aurrera egiteko...");
           getch();   // pantailaratutako informazioa ikusi ahal izateko
       }
   } while (iAukera != 0);

   printf("\n\n");
   return 0;
}



Programa honek ere goiko algoritmoa aplikatzen du:

/* Ariketa-36b_MenuBat: hainbat aukeren menu bat */

// Programa hau 'Ariketa-18_MenuBat' programaren antzekoa da,
// harekiko dituen hobekuntzak:
//    1. Aldagai aukeratzailea char datu-motakoa da
//    2. Aldagai aukeratzailea irakurtzean egokitasuna kontrolatzen da
//    3. Iterazio bakoitzean pantaila garbitzen da
//    4. Menuak irteteko aukera du

#include <stdio.h>
#include <stdlib.h>   // system() funtziorako
#include <conio.h>    // getche() eta getch() funtzioetarako

int main()
{
   char cAukera;
   float fEragigai1, fEragigai2;

   do
   {
       system("cls");
       printf("\n");
       printf("\n ============Menua============");
       printf("\n   +   Batura lortzeko");
       printf("\n   -   Kendura lortzeko");
       printf("\n   *   Biderkadura lortzeko");
       printf("\n   /   Zatiketa burutzeko");
       printf("\n\n   A   Amaitu programa");
       printf("\n =============================");

       do
       {
           printf("\n Zure aukera: ");
           cAukera = getche() ;
           fflush(stdin) ;
       } while ((cAukera != '+') &&
                (cAukera != '-') &&
                (cAukera != '*') &&
                (cAukera != 'x') &&
                (cAukera != 'X') &&
                (cAukera != '/') &&
                (cAukera != 'A') && (cAukera != 'a'));

       printf("\n\n");

       switch(cAukera)
       {
           case '+':
               printf(" Zenbaki errealekin lan eginez, lehenengo batugaiaren balioa eman: ");
               scanf("%f", &fEragigai1);
               printf(" Zenbaki errealekin lan eginez, bigarren batugaiaren balioa eman:  ");
               scanf("%f", &fEragigai2);
               printf(" %.2f + %.2f = %.2f", fEragigai1, fEragigai2, fEragigai1+fEragigai2);
               break;
           case '-':
               printf(" Zenbaki errealekin lan eginez, kenkizunaaren balioa eman: ");
               scanf("%f", &fEragigai1);
               printf(" Zenbaki errealekin lan eginez, kentzailearen balioa eman: ");
               scanf("%f", &fEragigai2);
               printf(" %.2f - %.2f = %.2f", fEragigai1, fEragigai2, fEragigai1-fEragigai2);
               break;
           case '*':
           case 'x':
           case 'X':
               printf(" Zenbaki errealekin lan eginez, lehenengo biderkagaiaren balioa eman: ");
               scanf("%f", &fEragigai1);
               printf(" Zenbaki errealekin lan eginez, bigarren biderkagaiaren balioa eman:  ");
               scanf("%f", &fEragigai2);
               printf(" %.2f * %.2f = %.2f", fEragigai1, fEragigai2, fEragigai1*fEragigai2);
               break;
           case '/':
               printf(" Zenbaki errealekin lan eginez, zatikizunaren balioa eman:  ");
               scanf("%f", &fEragigai1);
               do
               {
                   printf(" Zenbaki errealekin lan eginez, zatitzailearen balioa eman: ");
                   scanf("%f", &fEragigai2);
               } while (fEragigai2 == 0.0);
               printf(" %.2f / %.2f = %.2f", fEragigai1, fEragigai2, fEragigai1/fEragigai2);
               break;
           default:
               printf("\n Amaitzera goaz.");
       }  // switch

       if ((cAukera != 'A') && (cAukera != 'a'))
       {
           printf("\n\n Edozein tekla sakatu aurrera egiteko...");
           getch();   // kalkuluaren emaitza ikusi ahal izateko
       }
   } while ((cAukera != 'A') && (cAukera != 'a'));

   printf("\n\n");
   return 0;
} 






  • Ariketa-36a1_MenuBat.cbp | main.c       [aukeratzailea char]
  • Ariketa-36a2_MenuBat.cbp | main.c       [aukeratzailea int]
  • Ariketa-36b_MenuBat.cbp | main.c         [aukeratzailea char]


 

iruzkinik ez:

Argitaratu iruzkina