| 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-mota | Formatua | 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;
}
|


iruzkinik ez:
Argitaratu iruzkina