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

Ariketa 11 | Segundoen kopuruak

ZER DAKIDAN:
Erakarpen grabitatorioa programa egin ondoren, badakit testu bat pantailan idazten. Badakit ere balioak aldagaietan gordetzen eta era desberdineko konstanteak definitzen.



ZER IKASIKO DUDAN:
Zenbaki osoen arteko zatiketari zatiketa osoa esaten zaio eta bere operadorea % sinboloa da.




ZATIKETA OSOAREN HONDARRA

Zenbaki osoekin lan eginez, zatiketa osoaren hondarra kalkulatzeko % operadorea aplikatu beharra dago. Ondoko programaren kodea eta pantailako irteera ikusi:

/* Ariketa-11_ZatiketaOsoa: % operadorea */

#include <stdio.h>

int main()
{
    printf("\n");
    printf("\n 7.0/2 = %.2f     eragigai bat erreala (bietariko edozein)", 7.0/2);
    printf("\n 7.0/2.0 = %.2f   bi eragigaiak errealak", 7.0/2.0);
    printf("\n 7/2 = %d          bi eragigaiak osoak", 7/2);
    printf("\n 7%%2 = %d          bi eragigaiak osoak", 7%2);

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




ESKATZEN DEN PROGRAMA

Datu-motaFormatua Balio kopurua 2N  Balioen heina edo barrutia
 char 
8 bit (+ eta -)
256
-128..127
unsigned char
8 bit (+)
256
0..255
short int
16 bit (+ eta -)
65536
-32768..32767
 short 
16 bit (+ eta -)
65536
-32768..32767
unsigned short
16 bit (+)
65536
0..65535
 int 
 int 
16 bit (+ eta -)
 32 bit (+ eta -)
65536
4294967296
-32768..32767
-2147483648..2147483647
unsigned int
32 bit (+)
4294967296
0..4294967295
long int
32 bit (+ eta -)
4294967296
 -2147483648..2147483647 
long
32 bit (+ eta -)
4294967296
 -2147483648..2147483647 

Goiko taula aintzakotzat harturik ondoko bi ariketak egin:

Ariketa 11a:
long int datu-motak (edo laburrago esanez long datu-motak) 4 byte hartzen ditu beti eta int datu-motak ordenadore gehienetan 4 byte hartzen ditu. Datutzat liSegundoKopurua kopuru erraldoi bat teklatuz irakurri, non liSegundoKopurua aldagaia long int (edo long) datu-motakoa den. Irakurritako denbora pantailaratu egunak-orduak-minutuak-segundoak bezala (emaitzak diren lau aldagaiak int datu-motakoak izan daitezela).

Ariketa 11b:
short int datu-motak (edo laburrago esanez short datu-motak) 2 byte hartzen ditu beti eta int datu-motak ordenadore gehienetan 4 byte hartzen ditu. Datutzat shSegundoKopurua segundoen kopuru handi bat teklatuz irakurri. Non teklatuz irakurritako shSegundoKopurua aldagaia short int datu-motakoa izanik, positiboa eta SHRT_MAX=32767 baino txikiagoa den. Irakurritako denbora pantailaratu orduak-minutuak-segundoak bezala, non shOrduak, shMinutuak eta shSegundoak aldagaiak short datu-motakoak diren.

Hauxe izan daiteke Ariketa-11b_SegundoenKopuruak.cbp proiektua exekutatzean lortzen den irteeraren bat:

Zatiketa osoaren operadorea % da. Adibidez, honela aplikatzen da:     shHondarra = shSegundoKopurua % 3;



Ariketa-11a_SegundoenKopuruak.cbp proiektuaren, Ariketa-11b_SegundoenKopuruak.cbp proiektuaren eta Ariketa-11_ZatiketaOsoa.cbp proiektuaren main() funtzioek gordetzen duten kodea:

/* Ariketa-11a_SegundoenKopuruak: zatiketa osoa */

// Programa honetan "limits.h" fitxategia derrigorrezkoa da bere barruan definiturik
// dagoden LONG_MAX konstantea erabiltzen delako.
// Zatiketa osoa kalkulatu beharko dugu, horrretarako '%' operadorea aplikatzen da.

// liSegundoKop kopuru erraldoi bat teklatuz irakurri, non liSegundoKop aldagaia long datu-
// motakoa den. Irakurritako denbora pantailaratu egunak-orduak-minutuak-segundoak bezala.


#include <stdio.h>
#include <limits.h>   // LONG_MAX erabiltzen delako

int main()
{
   long liSegundoKop;   // segundoen kopurua modu kontrolatuan irakurri
   int iEgunak, iOrduak, iMinutuak, iSegundoak, iHondarra;

   printf("\n");

   printf("\n\t Datuaren behemuga 0 eta goimuga LONG_MAX=%ld", LONG_MAX);
   printf("\n\t ---------------------------------------------------\n");
   do
   {
        printf("\n\t Segundoen kopuru osoa eman (2100000000 adibidez): ");
        scanf("%ld", &liSegundoKop);

        if ((liSegundoKop < 0) || (liSegundoKop > LONG_MAX))
            printf("\a\t Positiboa izateaz gain, baliorik handiena %ld izan daiteke", LONG_MAX);
   } while (liSegundoKop < 0 || liSegundoKop > LONG_MAX);

   iEgunak = liSegundoKop / (3600*24);
   iHondarra = liSegundoKop % (3600*24);  // iHondarra = liSegundoKop - iEgunak*3600*24;
   iOrduak = iHondarra / 3600;
   iHondarra = iHondarra % 3600;          // iHondarra = iHondarra - iOrduak*3600;
   iMinutuak = iHondarra / 60;
   iSegundoak = iHondarra % 60;           // iSegundoak = iHondarra - iMinutuak*60;

   printf("\n\t Egunak=%d \t Orduak=%d \t Minutuak=%d \t Segundoak=%d", iEgunak, iOrduak, iMinutuak, iSegundoak);
   printf("\n\t Hasierako datua berkonposatuta ----> %ld segundo", (long)iEgunak*3600*24 + iOrduak*3600 + iMinutuak*60 + iSegundoak);
   printf("\n\n");

   return 0;
}


  • Ariketa-11_ZatiketaOsoa.cbp | main.c  
  • Ariketa-11a_SegundoenKopuruak.cbp | main.c  
  • Ariketa-11b_SegundoenKopuruak.cbp | main.c  

 

iruzkinik ez:

Argitaratu iruzkina