2024(e)ko abenduaren 1(a), igandea

Ariketa 10 | Kopuru handiegiak

ZER DAKIDAN:
Datu-moten taula gogoratuz, badakit datu-mota jakin bateko aldagaian ezin daitekeela edozein balio gorde.



ZER IKASIKO DUDAN:
Ikasi baino gehiago ikusiko dut prgramak emaitza desegokiak eskainiko dituela aldagai baten muga gainditzen denean.




ESKATZEN DEN PROGRAMA

Ariketa honetan interesatzen zaigu short int datu-motarekin lan egitea 2 byte hartzen dituelako memorian eta, ondorioz, bere balio maximoa nahiko txikia delako: 32.767

Teklatutik zenbaki osoa sartu (shZbk aldagaian gorde) eta zenbakiari dagozkion hurrengo bost zenbakien karratuak eta kuboak kalkulatu eta pantailaratu (karratuak eta kuboak kalkulatzean shKarratu eta shKubo aldagaietan gorde).

Pantailaratzean honako taula honen moduan agertuko da:

ZENBAKIA          KARRATUA          KUBOA
----------------------------------------------------------

Hauek izan daitezke Ariketa-10_KopuruHandiegiak.cbp proiektua exekutatzean lortzen diren bi irteera. Programaren exekuzio bietan emaitzak ikustean, uler daiteke zenbaki osoen mugak gainditu direla eta horregatik erroreak pantailaratzen direla. Lehen exekuzioan, datua 28 denean, erroreak kuboak kalkulatzean ematen dira. Bigarren exekuzioan, datua 179 denean, erroreak karratuetan eta kuboetan ematen dira:

Datua 28 denean kuboak kalkulatzean SHRT_MAX=32767 konstantea gainditzen da
Datua 179 denean karratuak eta kuboak kalkulatzean SHRT_MAX=32767 konstantea gainditzen da



Hona hemen Ariketa-10_KopuruHandiegiak.cbp proiektuaren main() funtzioa gordetzen duen main.c fitxategiaren edukia:

/* Ariketa-10_KopuruHandiegiak: ordenadorearen mugak */
// Programa honetan "limits.h" fitxategia derrigorrezkoa da bere barruan definiturik
// dauden hainbat konstanteen balioak pantailaratu nahi direlako.
// Ikusi erabilitako formatu-zehaztatzaileen zerrenda:
//   %d, %u (edo %ui), %li, %lu, %hd

/*
Teklatutik zenbaki osoa sartu (shZbk aldagaian gorde) eta zenbakiari dagozkion hurrengo
bost zenbakien karratuak eta kuboak kalkulatu eta pantailaratu (karratuak eta kuboak
kalkulatzean shKarratu eta shKubo aldagaietan gorde).
*/

#include <stdio.h>
#include <limits.h>

int main()
{
   short shZbk, shKarratu, shKubo;

   printf("\n");
   printf("\n   ------------------------------------------------------------------");
   printf("\n      'limits.h' fitxategian definitutako konstante osoak:");
   printf("\n \t - CHAR_MAX  =  %d", CHAR_MAX);
   printf("\n \t - CAHR_MIN  = %d", CHAR_MIN);
   printf("\n \t - SHRT_MAX  =  %d", SHRT_MAX);
   printf("\n \t - SHRT_MIN  = %d", SHRT_MIN);
   printf("\n \t - USHRT_MAX =  %d", USHRT_MAX);
   printf("\n \t - INT_MAX   =  %d", INT_MAX);
   printf("\n \t - INT_MIN   = %d", INT_MIN);
   printf("\n \t - UINT_MAX  =  %u", UINT_MAX);
   printf("\n \t - LONG_MAX  =  %li", LONG_MAX);
   printf("\n \t - LONG_MIN  = %li", LONG_MIN);
   printf("\n \t - ULONG_MAX =  %lu", ULONG_MAX);
   printf("\n   ------------------------------------------------------------------");
   printf("\n\n");

   printf("\nEdozein ordenagailutan 'char'  batek %d byte hartzen du memorian", (int)sizeof(char));
   printf("\nEdozein ordenagailutan 'short' batek %d byte hartzen ditu memorian", (int)sizeof(short));
   printf("\n   Ordenagailu honetan 'int'   batek %d byte hartzen ditu memorian", (int)sizeof(int));
   printf("\nEdozein ordenagailutan 'long'  batek %d byte hartzen ditu memorian", (int)sizeof(long));

   printf("\n");
   printf("\n 'char' datu-motako zenbakietan handiena %d da", CHAR_MAX);
   printf("\n'short' datu-motako zenbakietan handiena %d da", SHRT_MAX);
   printf("\n  'int' datu-motako zenbakietan handiena %d da", INT_MAX);
   printf("\n 'long' datu-motako zenbakietan handiena %li da", LONG_MAX);

   printf("\n\n\nKopuru osoa eman (28 adibidez): ");
   scanf("%hd", &shZbk);

   printf("\n       ZENBAKIA            KARRATUA                         KUBOA");
   printf("\n   ------------------------------------------------------------------");

   shZbk++;
   shKarratu =shZbk*shZbk;
   shKubo = shKarratu*shZbk;
   printf("\n%15hd%20hd%30hd", shZbk, shKarratu, shKubo);

   shZbk++;
   shKarratu =shZbk*shZbk;
   shKubo = shKarratu*shZbk;
   printf("\n%15hd%20hd%30hd", shZbk, shKarratu, shKubo);

   shZbk++;
   shKarratu =shZbk*shZbk;
   shKubo = shKarratu*shZbk;
   printf("\n%15hd%20hd%30hd", shZbk, shKarratu, shKubo);

   shZbk++;
   shKarratu =shZbk*shZbk;
   shKubo = shKarratu*shZbk;
   printf("\n%15hd%20hd%30hd", shZbk, shKarratu, shKubo);

   shZbk++;
   shKarratu =shZbk*shZbk;
   shKubo = shKarratu*shZbk;
   printf("\n%15hd%20hd%30hd", shZbk, shKarratu, shKubo);

   printf("\n\n");

   return 0;
}


  • Ariketa-10_KopuruHandiegiak.cbp | main.c  

 

iruzkinik ez:

Argitaratu iruzkina