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

Ariketa 4 | Erakarpen grabitatorioa

ZER DAKIDAN:
Kaixo mundua! programa egin ondoren, badakit testu bat pantailan idazten. scanf() funtzioari esker, teklatuaren bitartez, balio bat aldagai batean gordetzen ikasi dut. Esleipena operazioaren bitartez aldagai batean balio jakin bat gordetzen ikasi dut.



ZER IKASIKO DUDAN:
Badakit ere konstante osoak definitzen. Konstante erreal bat notazio zientifikoan nola deklaratzen den ikasiko dut.




ESKATZEN DEN PROGRAMA

r distantzian daudenean, m1 eta m2 masak jasaten duten erakarpen grabitatorioaren balioa idatz ezazu. Programak aurreko hiru datuak eskatuko dizkio (m1 eta m2 kilogramoetan eta r metroetan) erabiltzaileari eta F indarraren balioa pantailaratuko du.


Non G ikurrak Grabitazio Unibertsalaren Konstantea adierazten duen, eta bere balioa hau den:

G=6.674×10−11  (N⋅m2⋅kg−2)

Dakigunez, programaren exekuzio bakoitzeko, erabiltzaileak aukera izan behar duen masak eta distantzia teklatuz emateko. Horregatik, gutxienez, hiru aldagai erabili beharko dira. Aldagai bati teklatuz balio emateko scanf() funtzioa aplikatu beharko da.

Ikasi berria dugun scanf() funtzioa helburu orokorreko errutina bat da, stdin gailutik irakurtzen duena (stdin sarrerako gailu estandarra, normalean teklatua). Nolabait, scanf() funtzioa printf() funtzioaren alderantzizkoa da. Formatuaren arabera zehaztutako kontrol-kateak hiru karaktere mota izango ditu:

  • Formatu-espezifikatzaileak
  • Zuriunearen karaktereak
  • Zuriuneak ez diren karaktereak

Informazio gehiago scanf(), lehen hurbilketa izeneko artikuluan.


Programaren algoritmoak hiru urrats ditu:

  1. Datu diren hiru zenbaki errealak teklatuz irakurri scanf() funtzioaren bitartez
  2. Grabitazio Unibertsalaren Konstantea erabiliz eta irakurritako datuak erabiliz, indarra ematen duen formula aplikatu
  3. Emaitza pantailan erakutsi

Hauxe da Ariketa-03_LaukizuzenarenAzalera.cbp proiekua exekutatzean lortzen den irteera:

Azpimarratu beharra dago iAltuera aldagaiaren eta iOinarria aldagaiaren helbideak eman beharko
zaizkiola
scanf() funtzioari. Horretarako, aldagaiaren identifikadorearekin batera & sinboloa erabiliko da



Hona hemen Ariketa-04_ErakarpenGrabitatorioa.cbp proiektuaren main() funtzioa gordetzen duen main.c fitxategiaren edukia:
/* Ariketa-04_ErakarpenGrabitatorioa: datuak teklatutik hartzen */ 

// Dagoeneko printf() eta scanf() funtzioak erabili ditugu.
// Dagoeneko %s, %d eta %f formatu-espezifikatzaileak ikusi ditugu.
// Programa honetan %E (edo %e) formatu-espezifikatzailea ikasiko dugu.
// Programa honetan parentesien beharra ikasiko dugu.

#include <stdio.h>

#define GRABITAZIO_UNIBERTSALAREN_KONSTANTEA 6.674E-11  /// (N.m.m / kg.kg)

int main()
{
   float fMasa1, fMasa2, fDistantzia, fIndarra;

   printf("\n\n");
   printf("   Sartu lehen masaren balioa kiloetan: ");
   scanf("%f", &fMasa1);
   printf("Sartu bigarren masaren balioa kiloetan: ");
   scanf("%f", &fMasa2);
   printf("Eman masen arteko distantzia metroetan: ");
   scanf("%f", &fDistantzia);

   fIndarra = GRABITAZIO_UNIBERTSALAREN_KONSTANTEA*fMasa1*fMasa2/(fDistantzia*fDistantzia);

   printf("\nErakarpen indarra: %.3E Nw", fIndarra);
   printf("\nErakarpen indarra: %.20f Nw", fIndarra);
   printf("\n\n");

   return 0;
}


Demagun fZenbakia eta iKopurua bi aldagai ditugula, lehena float datu-motako zenbaki erreala eta bigarrena int datu-motako zenbaki osoa. Ikusi dugu fIndarra aldagairi balioa emateko = esleipenaren operadorea erabil daitekeela, non formulak ematen duen balio erreala fIndarra aldagai errealari esleitzen zaion.

Baina = esleipenaren alde bietako gaiak datu-mota desberdinekoak badira? Zer gertatzen da float datu-motako aldagai erreal bati int datu-motako balio oso bat esleitzean? Eta alderantziz, zer gertatzen da int datu-motako aldagai oso bati float den balio erreal bat esleitzean?

Ondoko programa honek aurreko galdera horiei erantzuten die:

/* Ariketa-04_int-float_Bateragarritasuna: esleipena ikasten. */

// float aldagai batek int balio bat hartzen du eta float bihurtzen du.
// int aldagai batek float balio bat har dezake baina hamartarrak galtzen dira.

#include <stdio.h>

int main()
{
   int iKopurua;
   float fZenbakia;

   printf("\n\n");
   printf("\tKopuru oso bat sartu (7 esate baterako): ");
   scanf("%d", &iKopurua);
   fZenbakia = iKopurua;   // gorde erreal batean osoa den balio bat
   printf("\tiKopurua=%d  \t--->\t  fZenbakia=%f", iKopurua, fZenbakia);

   printf("\n\n");
   printf("\tZenbaki erreal bat sartu (7.8 adibidez): ");
   scanf("%f", &fZenbakia);
   iKopurua = fZenbakia;   // gorde oso batean erreal baten balioa
   printf("\tfZenbakia=%f  \t--->\t  iKopurua=%d", fZenbakia, iKopurua);

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

Datu-mota desberdinen arteko bateragarritasuna aurrerago ikusiko dugu Datu-moten bihurketa automatikoa izeneko artikuluan, une honetan aski da gutxi gorabeherako ideiarekin geratzea.







  • Ariketa-04_ErakarpenGrabitatorioa.cbp | main.c  
  • Ariketa-04_int-float_Bateragarritasuna.cbp | main.c  

 

iruzkinik ez:

Argitaratu iruzkina