* 'సీ' లాంగ్వేజ్లో వివిధ రకాల వేరియబుల్స్ ని ఉపయోగించి ప్రోగ్రాం రాయడం
ఇంతకు ముందు పాఠంలో సీ ప్రోగ్రాం రాయడం నేర్చుకున్నాం. అందులో integer టైపు వేరియబుల్స్ ను ఎలా వాడాలో తెలుసుకున్నాం. ఈ పాఠంలో వివిధ రకాల వేరియబుల్స్ ని ఉపయోగించి ప్రోగ్రాం ఎలా రాయాలో నేర్చుకుందాం. ఉదాహరణకు Students మార్కులను Process చేయడానికి integer Type variables ఉపయోగిస్తాం.
సాధారణంగా స్టూడెంట్ మార్కులు integer ( పూర్ణ సంఖ్యలు) రూపంలో ఉంటాయి. ఏ variable ను ఎప్పుడు వాడాలో అనేది ఆ variables లో మనం ఎంత పెద్ద నెంబరు ఇవ్వాలనుకుంటున్నామో అనే దాని మీద ఆధారపడి ఉంటుంది. Character టైపు వేరియబుల్స్ ను ఎప్పుడు వాడాలో తర్వాతి పాఠంలో తెలుసుకుందాం.
ఈ కింద ఇచ్చిన Table, సీ లాంగ్వేజిలో వున్న వేరియబుల్స్ వివరాలు.
scanf, printf లలో ఏ formats లో ఏ Variable ఉపయోగించాలో వివరించే పట్టిక
%c – Print an character
%d – Print an Integer
%i – to Print/read an Integer
%e – to Print/read float value in exponential form.
%f – to Print/read float value
%o – to Print/read octal value
%s – to Print/read a string
%x – to Print/read a hexadecimal integer (unsigned) using lower case a – F0
%X – to Print/read a hexadecimal integer (unsigned) using upper case A – F
%a – to Print/read a unsigned integer.
%p – Print a pointer value
%hx – to Print/read hex short
%lo – to Print/read octal long
%ld – to Print/read long
ఉదాహరణ:
ఒక గది పొడవు, వెడల్పు, ఎత్తులను తీసుకొని, గది పరిమాణాన్ని, సున్నం వేయాల్సిన వైశాల్యాన్ని ప్రింట్ చేసే విధంగా ప్రోగ్రాం రాయండి.
Note: గది నేలభాగానికి ఎవరూ సున్నంవేయరు.
కాబట్టి దాన్ని లెక్కలోకి తీసుకోకూడదు.
ప్రోగ్రాం రాసే విధానం:
* ముందుగా మనం డిజైన్ చేయాల్సిన Variables ఎన్నో రాసుకోవాలి
* మొత్తం ఐదు Variables ను అవసరం అవి length, breadth, height volume, area
* సాధారణంగా గది పరిమాణాలు fractionals లో ఉండే అవకాశం ఉంది. కాబట్టి float టైప్ Variable ఉపయోగించాలి.
* గది length, breadth, height లను రీడ్ చేసి volume (పరిమాణం)ను, area (వైశాల్యం)ను ప్రింట్ చేసే విధంగా ప్రోగ్రాం రాయాలి.
Program:
#include
int main()
{
float l, b, h, v, sa;
printf(“Enter length, breadth, height\n”);
scanf(“%f%f%f”, &l, &b, &h);
v = l*b*h;
sa = 2*(l+b)*h+(l*b); // surface area
printf(“Volume=%f\nSurface area to be white washed=%f\n “,v, sa);
return (0);
}
Output :
మనం విలువలను కీబొర్డ్ నుంచి ఇచ్చేటప్పుడు విలువకి, విలువకి మధ్య టాబ్ స్పేస్ ఇవ్వచ్చు. అంతే కాకుండా ఒక్కో విలువ ఒక్కో లైనులో కూడా ఇచ్చే అవకాశం ఉంది. %f format ని scanf లో వాడినా కూడా Input ఇచ్చేటప్పుడు integer విలువలను ఇచ్చినా తీసుకుంటుంది. ఎందుకంటే పూర్ణ సంఖ్యలు, సహజ సంఖ్యలోని భాగాలే కాబట్టి.మనం రాసిన ప్రోగ్రాం లో, User కు గది length, breadth, height వాల్యులను printf ద్వారా ఇస్తాం. అలా ఇస్తేనే volumeను, areaను కాలిక్యులేట్ చేసే విధంగా ప్రోగ్రాం రాశాం. ఈ ప్రోగ్రాంలో User ఇన్ పుట్ ఇవ్వడం కుదరదు .
User ఇన్పుట్ ఇచ్చే విధంగా ప్రోగ్రాం ఎలా రాయలో తెలుసుకుందాం.
Program:
#include
int main()
{
float l, b, h, v, sa;
printf(“Enter length:\n”);
scanf(“%f”, &l);
printf(“Enter width:\n”);
scanf(“%f”, &b);
printf(“Enter height:\n”);
scanf(“%f”, &h);
v = l*b*h;
sa = 2*(l+b)*h+(l*b); // surface area
printf(“VVolume=%f\nSurface area to be white washed=%f\n”,v, sa);
return(0);
}
Output :
ఉదాహరణ:
Fahrenheit temperature ను రీడ్ చేసి దానికి సమానమయిన centigrade temperature ను లెక్కించి చేసి ప్రింట్ చేసే ప్రోగ్రాం రాయండి.
ప్రోగ్రాం రాసే విధానం:
* Temperature విలువలు సాధారణంగా సహజ సంఖ్యలుగా ఉంటాయి కాబట్టి, ప్రోగ్రామర్ float టైప్ వేరియబుల్ ని తీసుకోవాలి.
* రెండు వేరియబుల్స్ అవసరం ఒక వేరియబుల్ రీడ్ చేసిన దానిని స్టోర్ చేయడానికి,మరో వేరియబుల్ లెక్కించిన దాన్ని స్టోర్ చేయడానికి.
* Fahrenheit నుంచి centigradeకు మార్చే విధంగా ప్రోగ్రాం రాయాలి.
దీని కోసం మనం physics లో ఉన్న Fahrenheit నుంచి centigradeకు మార్చే ఫార్ములా ఉపయోగించాలి
#include
int main()
{
float it, ot;
printf(“Enter Fahrenheit temperature value\n”);
scanf(“%f”, &it);
ot = 5/9*(it-32);
printf(“%f\n”, ot);
return(0);
}
Output:
Note:
మనం 98.04 ఇన్పుట్ ఇస్తే సున్నా రిజల్ట్స్ వచ్చింది. మనకు తెలిసి 36.6 రావాలి. రావడములేదు ఎందుకు?
* ఇంకో వాల్యూ 36.06 ఇచ్చి రనే చేస్తే కూడా సున్నా వచ్చింది?
* ఎందుకు? ప్రోగ్రాములో ఎక్కడా మిస్టేక్ లేదు? మరి ఎందుకిలా వస్తుంది
Integer Mode and Float Mode Arithmetic’s
అన్ని ప్రోగ్రామింగ్ లాంగ్వేజీల్లో కూడా, ఏవైనా operator ను ఎవాల్యుయేట్ చేస్తున్నప్పుడు, అన్ని operands integer టైపు అయితే రిజల్ట్ కూడా integer అవుతుంది. అంటే 10/3 అనేది 3 అవుతుంది. అలాగే 1/3 లేదా 5/9 లు 0 (సున్నా)లు అవుతాయి. ఈ కారణం వల్ల , పై ప్రోగ్రాంలో ఏ విలువ ఇచ్చినా సున్నా వస్తోంది. దీన్ని సరి చేయాలంటే operands లో ఒక్క operand అయినా float (లేక double) అవ్వాలి. అంటే 5/9 ఏమో సున్నా అవుతుంది, అదే 5/9.0 సున్నా అవ్వదు. ఇది ప్రతీ ప్రోగ్రామింగ్ లాంగ్వేజి లో ఉండే స్వభావం.
Type casting
ఒక Variable, Constant, Expression లను other టైప్ లోకి మార్చాలంటే వాటిని ముందు బ్రాకెట్ లో ఏ టైపు లోనికి మార్చాలని అనుకుంటున్నామో రాయాలి. దీనినే type casting అంటారు.
ఉదాహరణకు
(float) 5 అనేది 5.0 అవుతుంది.
(int) 5.7 అనేది 5 అవుతుంది. దీనిని వాడి పై ప్రోగ్రాంని సరి చేయవచ్చు
పై ప్రోగ్రాంలో physics లో ఉన్న equation న్నిఉన్నది ఉన్నట్టుగా మార్చినందు వల్ల సమస్య వచ్చింది. పైన ఇచ్చిన దానిలో ot=5*(it-32)/9; అని రాసి ఉంటే సమస్య వచ్చేది కాదు. ఎందుకంటే బ్రాకెట్ లోది float అవుతుంది. దాన్ని 5 తో పెంచితే కూడా float అవుతుంది. ఆ వచ్చిన దానిని 9 తో డివైడ్ చేస్తే కూడా float అవుతుంది. ఫైనల్ గా float వాల్యూ వస్తుంది.
పైన ఇచ్చిన ప్రొగ్రాములో, ot = 5/9*(it-32); అనే దాని బదులుగా ఈ కింద ఇచ్చిన వాటిని వాడి సరైన ఫలితాన్ని సాధించవచ్చు.
Output:
ఉదాహరణ
విద్యార్థి మార్కులను తీసుకొని average ప్రింట్ చేయాలి. ఫలితం integerలో కాకుండా floatలో వచ్చే విధంగా ప్రోగ్రాం రాయండి
ప్రోగ్రాం రాసే విధానం:
* ఫలితం float లో రావాలంటే, LHS(left hand side) variable float టైప్ అవ్వాలి, RHS(right hand side) expression కూడా float mode లో ఎవాల్యుయేట్ అవ్వాలి.
* ప్రోగ్రాంలో నాలుగు రిజల్ట్ వేరియబుల్స్ avg1,avg2, avg3, avg4 లను ఉపయోగించాలి.
* మూడు వేరియబుల్స్ (a, b, c) ను ఇన్పుట్ ఇచ్చిన వాటిని స్టోర్ చేయడానికి, ఇంకో Variable (s) వాటి మొత్తాన్ని స్టోర్ చేయడానికి ఉపయోగించాలి.
* avg1=s/3; అనే దాన్లో రెండూ integer టైప్ కాబట్టి ఫలితం integer లో వస్తుంది. అలాగే, avg2=s/3.0; RHS float లో ఎవాల్యుయేట్ చేసినా avg2 integer కాబట్టి అందులో integer వాల్యూ సేవ్ అవుతుంది. అలాగే, avg3=s/3; అనే దానిలో రెండూ integer టైప్ కాబట్టి ఫలితం integer లో వస్తుంది. avg4=s/3.0; RHS float లో ఎవాల్యుయేట్ చేసి వచ్చిన float దానిని avg4 లో స్టోర్ అవుతుంది.
Program
#include
int main()
{
float avg3, avg4;
int a, b, c, s, avg1, avg2;
printf(“Enter three students marks”);
scanf(“%d%d%d”, &a, &b, &c);
s = a+b+c;
avg1=s/3;
avg2=s/3.0;
avg3=s/3;
avg4=s/3.0;
printf(“%d %d %f %f\n”, avg1, avg2, avg3, avg4);
return (0);
}
Output :
ఉదాహరణ
ఒక వ్యక్తి నెల Basic Salary ,DA,TA, CCA, HRA , బోనస్ లను రీడ్ చేసి, అతని నెలవారీ మొత్తం Salary ని ప్రింట్ అయ్యే విధంగా ప్రోగ్రాం రాయండి.
ప్రోగ్రాం రాసే విధానం
* సాధారణంగా, DA,TA, CCA, HRA లను, Basic Salary మీద శాతంగా పరిగణిస్తారు. ఇక్కడ వీటన్నింటిని integersగా తీసుకోవాలి.
ఉదాహరణకు
ఈ కింది విలువలు తీసుకుంటే,
Basic TA DA CCA HRA BONUS
1000 60 110 35 75 6000
TA 600 (1000*60/100) అవుతు0ది, DA 1100 అవుతు0ది, CCA 350 అవుతుంది, మరియూ HRA 750 అవుతుంది. అలాగే, total monthly salary = 1000+600+1100+350+750=3800 అవుతుంది.
ta,da,cca, hra లను integer లాగా తీసుకొన్నాం కాబట్టి 100.0ను total calculation లో వాడాలి. లేకపొతే, ఫలితం సరిగారాదు.
Programe:
#include
int main()
{
int basic, da, ta, cca, hra, bon, tot ;
printf(“Enter basic,TA,DA, CCA, HRA, and Bonus\n”);
scanf(“%d%d%d%d%d%d”, &basic, &ta, &da, &cca, &hra, &bon);
tot =12*basic*(1+(ta+da+cca+hra)/100.0)+2*bon;
printf(“Total Salary=%d\n”, tot);
return(0);
}
Output :