Está en la página 1de 72

Tavi 1.

ras warmoadgens C ra aris programireba

kompiuterTan urTierToba advili ar aris. misTvis gasagebia mxolod zusti da detalizebuli instruqciebi. kargi iqneboda, adamians rom SeeZlos kompiuterTan urTierToba Cveulebriv salaparako enaze, magaliTad rom uTxras: Sekribe Cemi angariSebi da depozitebi da miTxari, mTlianad ra gamova. magram nebismieri salaparako ena, iqneba is qarTuli Tu inglisuri, gajerebulia sinonimebiT, xatovani gamoTqmebiT da orazrovnebiT. amitom kompiuterTan urTierTobisTvis saWiroa specialuri ena, romelsac bevri saerTo aqvs Cveulebriv salaparako enebTan, magram ukiduresad racionaluria (anu Seicavs mxolod aucilebel leqsikur erTeulebs) da Tavisufalia orazrovnebisgan. pirveli Taobis kompiuterebis dros programisti iZulebuli iyo emuSava e.w. manqanuri enis (kodebis) meSveobiT, romlis yoveli instruqcia warmoadgenda cifrebis (0 da 1) mimdevrobas. swored aseTi instruqciebi miewodeboda kompiuters, radgan igi iyo misTvis gasagebi. manqanur enaze daweril tipur programas hqonda saxe: 1010 1111 0011 0111 0111 0110 . . . da ase Semdeg, aseulobiT amgvari instruqcia. manqanisTvis bunebrivia ricxvebiT azrovneba, adamianebisTvis ki ara. radgan Zalze rTuli da Sromatevadi iyo pirdapir manqanur enaze programis, anu instruqciebis krebulis (assembly) dawera, amitom moiqcnen Semdegnairad: manqanisTvis gasageb TiToeul instruqcias, misi Sinaarsidan gamomdinare, Seusabames salaparako enidan aRebuli sityva. aseTi sityvebis krebuli (da maTi erTmaneTTan dakavSirebis wesebi anu gramatika) qmnida e.w. instruqciebis krebulis enas (assembly language), rac SedarebiT maRali done iyo uSualod manqanur enasTan SedarebiT. Semdeg, aseTi enidan programists yoveli striqoni sakuTari xeliT unda eTargmna da daematebina (assemble) manqanisTvis gasagebi kodisTvis. tipur programas SesaZloa hqonoda saxe: programa Targmani (assembly) MOV A,47 1 010 1111 ADD A,B 0011 0111 HALT 0111 0110 . . . da ase Semdeg, aseulobiT amgvari instruqcia. xolo daprogramebis process ki Semdegi saxe:
Targmna programa (assembly language) igive programa manqanur enaze

MOV A,47 1ADD A,BHALT . . .

010 11110011 01110111 0110 . . .

programis Targmnac Zalze Sromatevadi, erTferovani da mosawyeni saqme iyo. garkveul etapze programistebi mixvdnen, rom aseTi erTferovani saqme kompiuterisTvis ufro Sesaferisi iqneboda da Seiqmna kidec programa, saxelad asembleri, romelic am saqmes avtomaturad (adamianis Carevis gareSe) asrulebda. amboben, rom pirvel programists, romelmac aseTi programa Seqmna, misces SeniSvna, rom aseTi ZviradRirebuli mowyobilobis aseT umniSvnelo saqmeze gacdena ar Rirda, radgan im dros kompiuteris erTi samuSao saaTi gacilebiT Zviri Rirda, vidre programistisa.

sabednierod, rac dro gadis, programistis drois Rirebuleba matulobs, kompiuterisa klebulobs. amitom, raRac momentidan dawyebuli momgebiani aRmoCnda asemblerebis gamoyeneba. Semdeg es midgoma kidev ufro ganviTarda da Seiqmna e. w. maRali donis enebi, romelic kidev ufro daSorebulia manqanur enas. maRali donis enaze Seqmnili programa (specialuri programis saSualebiT) jer iTargmneba instruqciebis krebulis enaze (assembly language), Semdeg gadis im gzas, razec zemoT iyo saubari. amJamad mravali maRali donis ena arsebobs. maTgan SedarebiT popularuli sul ramdenimea. erT erTi saukeTeso maT Soris aris C.

rogor muSaobs C
1970 wels programistma denis riCim Seqmna axali ena da uwoda mas C (radgan ena, romelzec igi manamde aprogramebda, iyo B). mas hqonda konkretuli mizani _ Seeqmna operaciuli sistemebis dasawerad yvelaze moxerxebuli ena. Tumca aRmoCnda, rom mis mier Seqmnili uaRresad moqnili da martivi ena kidev mraval funqcias asrulebda warmatebiT. garkveuli saxecvlilebis Semdeg C swrafad gaxda erT-erTi yvelaze popularuli ena. Cs popularobas ori mTavari faqtori ganapirobebda: programists, praqtikulad yvelafris gakeTeba SeeZlo Cdan Sesaferisi konstruqciebis SerCevis xarjze (Cven SemdegSi davrwmundebiT, rom moqniloba am enisTvis garkveul naklsac warmoadgens). Cze dawerili programebi advilad gadatanadi iyo erTi platformidan meoreze. C warmoadgens xids programistsa da kompiuters Soris. igi saSualebas aZlevs programists, rom Seadginos maqsimalurad advilad aRsaqmeli programa. Semdeg sxva programa, saxelad kompileri Targmnis mas iseT instruqciebze romelic aRqmadia kompiuteris mier. kompiuteruli programebi Sedgeba ori mTavari nawilisagan: monacemebi (data) da instruqciebi (instructions). umciresi monacemebi, romlis aRqmac SeuZlia kompiuters, aris 0 an 1. mizezi martivia, radgan jerjerobiT mxolod iseTi eleqtronuli sqemebi mzaddeba, romlebsac SeuZliaT mxlod or mdgrad mdgomareobaSi yofna _ erTi aseTi mdgomareobaa + anu 1, xolo meore _ anu 0. monacemTa am umcires erTeuls ewodeba biti (inglisuri termini bit warmoadgens binary digitis Semoklebas, rac niSnavs orobiT cifrs). nebismieri monacemi, romelic muSavdeba kompiuteris mier, warmoidgineba nulebis da erTebis kombinaciiT. nebismieri monacemi, romelsac programa amuSavebs, warmoadgens maTematikur an raime sxva saxis sidides. erTis mxriv, TiToeuli maTgani Sedgeba bitebis garkveuli raodenobisagan (rac konkretul sistemazea damokidebuli), xolo meores mxriv isini TviTon warmoadgenen monacemTa sxva, ufro rTuli konstruqciebis safuZvels. konkretul operaciul sistemaSi ricxvebis warmodgenisTvis gankuTvnilia bitebis garkveuli raodenoba. Sesabamisad, mTeli ricxvebis diapazoni, romlis uzrunvelyofac SeuZlia sistemas, damokidebulia mTeli ricxvis warmodgenisTvis gankuTvnili bitebis raodenobaze. analogiurad, aTwiladi ricxvebis warmodgenisTvis gankuTvnili bitebis raodenobaze aris damokidebuli namdvili ricxvebis warmodgenis sizuste. orobiTi ariTmetikis specifikidan gamomdinare, praqtikulad efeqturi aRmoCnda 8 bitisgan Sedgenili mexsierebis erTeulis _ baitis gamoyeneba. monacemi kompiuterSi inaxeba rogorc baitebis mimdevroba. sxvadasxva Sinaarsis monacemisTvis sxvadasxva moculobis mexsierebaa saWiro da sxvadasxva operaciebia nebadarTuli. erTi da igive operaciebi sxvadasxva tipis monacemze sxvadasxva Sedegs iZleva. magaliTad, Tu mTeli ricxvebis simravleSi vaxdenT gayofas, Sedegic mTelia, anu 5 is 2-ze gayofis Sedegad miviRebT ganayofis mTel nawils, 2-s. amitom programistma unda aRweros TiToeuli monacemi manam, sanam C misTvis mexsierebis gamoyofas daiwyebs. magaliTad,
int total;

/* angariSebis jami */

auwyebs C-s rom saWiroa kompiuteris mexsierebis monakveTi, romelic Seinaxavs erT mTel ricxvs, romelsac vuwodeT total. amasTan, kompiuteri TviTon gaarkvevs, Tu konkretulad

mexsierebis romeli baitebi gamoyos am mizniT. maRali donis enebSi programisti Tavisufalia aseT wvrilmanebze zrunvisgan. Cvens mier aRwerili total cvladi aris martivi cvladi im azriT, rom drois konkretul momentSi man SeiZleba miiRos mxolod erTi mTeli mniSvneloba. Tu Cven gvWirdeba mTeli ricxvebis mimdevroba, unda visargebloT masiviT:
int balance[100]; /* balansi centebSi asi angariSisTvis */

C kvlav TviTon moagvarebs detalebs da gaanawilebs kompiuteris mexsierebas. analogiurad, Sesabamisi aRwerebis pirobebSi, C avtomaturad axdens mexsierebis gamoyofas sxva tipis martivi cvladebis da masivebisTvis. cxadia, yvelaferi mzamzareuli saxiT ar arsebobs, magram aucileblobis SemTxvevaSi C saSualebas aZlevs programists, rom TviTon Seqmnas saWiro tipis monacemi. magaliTad, Tu gvinda aRvweroT marTkuTxedi, unda aRvweroT misi sigrZe, sigane, konturis da fonis feri. C saSualebas gvaZlevs, rom es oTxi parametri gavaerTianoT erT jgufSi, romelsac struqtura ewodeba:
struct rectangle { int width; int height; color_type color fill_type fill; }; /* marTkuTxedis sigane piqselebSi */ /* marTkuTxedis simaRle piqselebSi */ /* marTkuTxedis feri */ /* Sevsebis wesi */

struqtura Zalian moqnili instrumentia da did SesaZleblobebs uqmnis programists imisda miuxedavad, ramdenad martivia an rTuli struqturaSi Semavali monacemebi. magram monacemebi aris programis mxolod erTi mxare. meore mxares warmoadgens instruqciebi. C aris maRali donis ena. is saSualebas gvaZlevs davweroT maRali donis (salaparako enasTan miaxloebuli) instruqciebi. magaliTad:
area = (base * height) / 2.0; /*samkuTxedis farTobis gamoTvla*/

kompileri (funqciurad asemblerismagvari programa) am instruqcias gadaiyvans dabali donis manqanur instruqciebSi. am tipis instruqcias miniWebis Setyobineba (assignment statement) ewodeba. igi gamoiyeneba gamosaxulebis mniSvnelobis Sesanaxad. SegviZlia gamoviyenoT marTvis instruqciebi, romlebic programis Sesrulebis process marTavs. zogierTi instruqcia, magaliTad iseTi, romelic Seicavs enis if an switch momsaxure, anu rezervirebul sityvebs, martivi gadawyvetilebebis miRebis saSualebas iZleva. magram SesaZlebelia erTi da igive instruqciis (an instruqciebis) mravaljer Sesruleba (da am gziT monacemebis cvlilebis marTva) ganmeorebis, anu maryuJis tipis instruqciis gamoyenebiT (while an for). instruqciebis jgufebi SesaZloa ise dajgufdes da gaformdes, rom mTlianobaSi Seqmnan funqcia. magaliTad, Cven SegviZlia marTkuTxedis dasaxatad erTxel SevqmnaT zogadi daniSnulebis funqcia, romelsac gamoviyenebT yovelTvis, rodesac dagvWirdeba marTkuTxedebis daxatva. Cs gaaCnia zogadi daniSnulebis funqciebis mdidari biblioTeka (magaliTad, Setanagamotanis, Zebnis, daxarisxebis, maTematikuri funqciebis da a.S), romelic xelmisawvdomia programistisTvis. erTmaneTTan Sinaarsobrivad dakavSirebuli funqciebis jgufi SesaZloa gaerTiandes erT sawyis failad (source file). erTi an ramdenime sawyisi faili SesaZloa erTad aikinZos (linked together) da erTdroulad dakompildes, rogorc erTi mTliani programa. programis Seqmna gacilebiT swrafad da iolad xdeba, rodesac gvaqvs saSualeba visesxoT programuli kodis umetesi nawili (standartuli biblioTekebidan an sxvadasxva saitze ganTavsebuli arqivebidan). TviTon biblioTekebi Sedgeba mravaljeradi gamoyenebis funqciebisgan. Tu raRac momentSi dagvWirdeba monacemebis daxarisxeba zrdadobis mixedviT, SegviZlia aviRoT biblioTekidan funqcia qsort da mivaerToT igi Cvens programasTan. monacemTa aRwerebi, struqturebi, marTvis instruqciebi da Cs sxva elementebi programists saSualebas aZlevs ganaxorcielos da gadmosces Tavisi ideebi maqsimalurad gasagebad da efeqturad. amave mizans emsaxureba Cs martivi da mZlavri sintaqsi.

magram amaT garda arsebobs agreTve warmatebuli programebis weris didi gamocdileba, ase vTqvaT daprogramebis stilebi, romelTa dacva gvicavs mravali Znelad SesamCnevi Secdomisagan da saSualebas gvaZlevs SevqmnaT efeqturi da saimedo programebi.

rogor SeviswavloT C
programirebis Sesaswavlad erTaderTi gza arsebobs _ esaa programebis wera. leqciebis kursi dagexmarebaT programebis weris wesebis, meTodebis da kargi stilis aTvisebaSi, magram ufro metis miReba xdeba programebis werisa da gamarTvis procesSi. aucilebelia programirebis kargi stilis dacviT rac SeiZleba meti savarjiSos gakeTeba. aucilebelia programebis komentireba, im SemTxvevaSic ki, Tu savarjiSos mxolod TqveTvis akeTebT. komentireba dagexmarebaT sakuTari azrebis ukeT gadmocemaSi da dagicavT Secdomebisagan. programul kods aqvs erTi ucnauri Tviseba. is uaRresad gasagebi Cans programis weris procesSi, magram xSirad, Tundac erTi kviris Semdeg, Wirs imis gaxseneba, Tu ras vgulisxmobdiT. komentarebi am problemas xsnis.

programebi, amocanis dasmidan Sesrulebamde


maRali donis programebi C enaze iwereba klaviaturaze moTavsebuli simboloebis gamoyenebiT. radgan kompiuteri realurad asrulebs (uSvebs) mxolod dabali donis, manqanur kodebSi daweril programas, amitom, Cs programebi ganicdis mTel rig gardaqmnebs, vidre maTi Sesruleba (gaSveba) moxdeba. programaze muSaoba iwyeba amocanis dasmiT Cveulebriv salaparako enaze, rac SeiZleba iyos zepiri an werilobiTi, SesaZloa diagramebis, cxrilebis, grafikebis, maTematikuri formulebis an sxva raime modelis gamoyenebiT. mas Semdeg, rac programisti moifiqrebs amocanis gadaWris gzas, anu algoriTms, igi teqsturi redaqtoris daxmarebiT qmnis sawyis fails, romelic Seicavs sawyis kods (source code). sawyis kods specialuri programa, saxelad

maRali donis kodi

kompileri
instruqciebis krebulis ena

asembleri
biblioTeka

saboloo kodi amkinZavi programa


Sesrulebadi programa

kompileri, gadaiyvans saboloo failSi (object file). Sinaarsobrivad esaa faili, romlis Seqmnac warmoadgenda Cvens mizans. Semdeg kidev erTi programa (linker) erTad akinZavs saboloo fails da yvela im funqcias, romlebsac is iZaxebs standartuli Tu sxva saxis biblioTekebidan. Sedegad miiReba Sesrulebadi programa (executable program) _ manqanuri enis instruqciebis krebuli. amJamad, programebi amocanis dasmidan Sesrulebame yvela fazas gadian e.w. integrebul garemoSi (IDE), romelic Seicavs teqstur redaqtors, sxvadasxva menius, marTvis Rilakebs da a.S.. Cvens SemTxvevaSi esaa Dev-C++. aseT garemos bevri Rirseba gaaCnia. erT-erTi isaa, rom programists ar sWirdeba izrunos sawyisi kodis gardaqmnebze da saWiro momentSi saWiro programebi (kompileri da amkinZavi) TviTon iwyeben muSaobas.

programis Seqmna integrebul garemoSi


1. movazadoT teqsturi redaqtori, avkrifoT programis teqsti, SevinaxoT programa. aq da SemdegSi vigulisxmoT, rom vmuSaobT Dev-C++ -Si. davaWiroT Dev-C++-is iarliys, anu gavuSvaT es programa (igive Sedegis miRweva SegviZlia Start meniudan). ekranze gamova fanjara (ix. marcxena suraTi). SevqmnaT saqaRalde HELLO programa hellos Sesanaxad, romelsac SevqmniT da gavuSvebT. davaWiroT instumentTa panelze New Rilaks (an File/New/Source File punqtze). pasuxad Dev-C++ redaqtorSi gaixsneba axali teqsturi faili Untitled1 (ix. marjvena suraTi).

davarqvaT mas saxeli hello.cpp da SevinaxoT faili saqaRaldeSi HELLO. redaqtorSi Untitled1 failis saxeli Seicvleba hello.cpp-ze. axla SegviZlia daviwyoT programis teqstis akrefa. miaqcieT yuradReba, rom failis saxelTan gaCnda [*] simboloebi. es imis maCvenebelia, rom failSi Setanili cvlilebebi damaxsovrebuli jer aris. davimaxsovroT akrefili kodi save Rilakze (an File/Save punqtze) daWeriT. [*] simboloebi gaqreba (ix. suraTi). 2. programis kompilireba da Sesruleba. programis kompilireba xdeba Execute menius Compile&Run punqtze (an klaviaturis Rilakze) daWeriT. igive moqmedebisaa instrumentTa panelis Rilaki (ix. suraTi).

ar

F9

kompileri iwyebs programis teqstSi sintaqsuri Secdomebis Zebnas da maTi povnis SemTxvevaSi gamoaqvs Setyobinebebi, romlebic miuTiTeben, Tu rogor gavasworoT Secdomebi:

rodesac yvela Secdoma gaswordeba (Tu aseTebi iyo), iwyeba programis Sesruleba. Sedegad miiReba e.w. exe faili programis muSaobis Sedegi.

sxvanairad, aRwerili procesi SgveZlo or etapad dagvexliCa: jer kompilireba (Compile) da Semdeg Sesruleba (Run). Execute menius Compile qvemenius arCeviT (an Ctrl+F9 klaviSebis kombinaciis akrefiT, an instrumentTa panelis Rilakze daWeriT) iwyeba programis kompilireba da misi gamarTva (Secdomebis Sesworeba). bolos miiReba programa, romlis Sesruleba ukve SeiZleba, da kompilirebis procesi mTavrdeba. amas gvauwyebs qvemoT, marcxena suraTze mocemuli fanjara. axla SevasruloT Execute menius Run brZaneba (aviRoT Ctrl+F10 klaviSebis kombinacia an davaWiroT Rilaks). programa gaiSveba da miiReba hello.exe faili.

Tavi 2.

stili ras warmoadgens stili

daprogramebis kargi stilis gamoyenebis gareSe martivi da advilad wasakiTxi programis Seqmna TiTqmis warmoudgenelia. stili daprogramebis mniSvnelovani nawilia, radgan masSi koncentrirebulia umdidresi gamocdileba, rac daagroves saukeTeso programistebma. es codna gvicavs uamravi Znelad warmosadgeni Secdomisa da drois uazro xarjvisgan. amitom viwyebT kargi stilis gacnobas Tavidanve. gavrcelebuli Sexedulebis sawinaaRmdegod, sinamdvileSi programisti drois umetes nawils xarjavs ara programebis daweraze, aramed arsebuli programebis gamartvaze, eqspluataciaze da gaumjobesebaze. rac dro gadis, tipur gamoyenebebSi gamoyenebiT programebSi striqonTa saSualo raodenoba sul ufro izrdeba.. magaliTad, 1980idan 1990 wlamde saSualo zomis gamoyenebiT amocanaSi striqonebis raodenoba gaizarda 23 000-dan 1 200 000-mde. Sesabamisad, rTuldeba kargi stilis dacviT dawerili programuli kodis garCevac ki. magaliTad, erT-erT konferenciaze menejerTa 74%-ma ganacxada, rom maT uxdebaT iseT sistemebTan muSaoba, romelTa eqsploatacia mxolod konkretul adamianebs SeuZliaT, radgan maT garda veravin verafers arkvevs. programuli produqtebis (software) umetesoba efuZneba ukve arsebul programul produqtebs. amitom arsebiTi mniSvneloba aqvs imas, rom Seqmnili programa iyos maqsimalurad gasagebi nebismieri momxmareblisaTvis. zogierTi programisti Tvlis, rom programis daniSnulebaa mxolod kompiuteris uzrunvelyofa instruqciebis kompaqturi krebuliT. aseT programebs aqvs ori nakli: gasamarTad Znelia, radgan drois garkveuli periodis Semdeg avtorsac uWirs misi gageba. Znelia programis modificireba da gaumjobeseba, radgan programists sWirdeba sakmao dro imis gasarkvevad, Tu ras akeTebs programa. idealur SemTxvevaSi, programa emsaxureba or mizans: uzrunvelyofs kompiuters instruqciebis krebuliT; uzrunvelyofs programists naTeli, gasagebi eniT dawerili aRwerebiT imis Sesaxeb, Tu ras akeTebs programa. sabednierod, orive am miznis miRweva SesaZlebelia erTdroulad. amis saSualebas iZleva komentarebi, romlebic ukeTdeba TiToeul instruqcias.

komentarebi
programa aucileblad unda Seicavdes komentarebs. danergili programa, romelic ar Seicavs komentarebs, Senelebuli moqmedebis naRms waagavs, romelic Tavis wams elis. adre Tu gvian viRac aRmoaCens Secdomas am programaSi, an kidev vinme Seecdeba mis gadakeTebas da gaumjobesebas, komentarebis ararseboba ki mis samuSaos Zalze gaarTulebs. A komentarebi C-Si iwyeba /* -iT da mTavrdeba */ -iT. magaliTi hello.cpp.
/******************************************************** * hello -- program to print out "Hello World". * * Not an especially earth-shattering program. * * * * Author: Steve Oualline. * * * * Purpose: Demonstration of a simple program. * * * * Usage: * * Runs the program and the message appears. * ********************************************************/ #include <stdio.h> #include <stdlib.h> int main()

/* Tell the world hello */ printf("Hello World\n"); system (PAUSE); return (0);

am magaliTSi sawyisi komentarebi Cven CavsviT varskvlavebisgan (*) Seqmnil CarCoSi, romelsac komentarebis CarCos (comment box) vuwodebT. aseTi formiT gamovyofT mniSvnelovan komentarebs. naklebad mniSvnelovani komentarebi CarCoSi ar Caismeba. magaliTad:
/* Tell the world hello */ printf("Hello World\n");

imisTvis, rom SevqmnaT programa, naTlad unda warmovidginoT, Tu ris gakeTeba gvinda da CavweroT martivad da gasagebad. Semdeg es yvelaferi SeiZleba kidev erTxel Semowmdes da gadaiTargmnos kompiuterul programad, xolo Cveni Canawerebi gamoviyenoT komentarebad. daprogramebis kargi stili yalibdeba gamocdilebisa da praqtikis Sedegad. qvemoT aRwerili daprogramebis stili wlebis ganmavlobaSi dagrovili gamocdilebis Sedegia. Tqven SegiZliaT mis safuZvelze Tqveni sakuTari stili SeimuSavoT. aq savaldebulo wesebi ar arsebobs, mxolod SeTanxmebebia. mTavaria daweroT Tqveni programa ise, rom is iyos rac SeiZleba naTeli, mokle da martivi. sawyisi komentarebis bloki ramdenime punqtisgan Sedgeba. zog SemTxvevaSi yvela maTgani arc aris aucilebeli. saTauri. pirveli komentari unda Seicavdes programis dasaxelebas. aqve SegiZliaT CaurToT mokle aRwera imisa, Tu ras akeTebs programa. Tqven SeiZleba gqondeT yvelaze saukeTeso programa, romelic msoflio mniSvnelobis amocanebs wyvets, magram programa gamousadegari iqneba, Tu aravis ecodineba, ras akeTebs igi. avtori. monacemebi Tqvens Sesaxeb. Tu vinme daapirebs Tqveni programis Secvlas, SesaZlebloba eqneba informaciisaTvis an daxmarebisaTvis Tqven mogmarToT. mizani. risTvis dawereT es programa? gamoyeneba. am ganyofilebaSi mokled aRwereT, rogor unda marTon programa. idealur SemTxvevaSi yvela programas unda axldes dokumentTa krebuli, romelSic aRwerili iqneba, Tu rogor gamoviyenoT igi. sacnobaro informacia. arsebuli programebis sxvadasxva fragmentis Tqvens mier gamoyeneba (kopireba) warmoadgens daprogramebis gavrcelebul formas, da sruliad kanonier formasac, Tu Tqven ar arRvevT am dros saavtoro uflebebs. am punqtSi unda miuTiToT avtori nebismieri naSromisa, romeliTac Tqven isargebleT (romlis fragmentebis kopirebac moaxdineT). failebis formati. CamoTvaleT is failebi, romlebsac Tqveni programa kiTxulobs an qmnis da aRwereT mokled maTi formati. SezRudvebi. CamoTvaleT nebismieri SezRudvebi an dasaSvebi sazRvrebi, mag. aseTi tipisa programa ar amowmebs Secdomebs monacemebSi. Semowmebis qronologia. es ganyofileba Seicavs sias, sadac naCvenebia vin Secvala programa, rodis da ra cvlilebebi iqna masSi Setanili. Secdomebis gasworeba. Tu programa aRmoaCens Secdomas, aRwereT ras moimoqmedebs am dros igi. magaliTad, dauyovnebliv Sewyvets muSaobas, Tu migviTiTebs Secdomis Sesworebis gzas. SeniSvnebi. aq SeitaneT specialuri komentarebi an sxva informacia, romelic zemoT ar gqondaT moyvanili. Tqveni komentarebis formati, ra Tqma unda, damokidebuli iqneba imaze, Tu ra aris saWiro Tqveni daprogramebis garemosaTvis. magaliTad, Tu Tqven studenti xarT, SeiZleba pedagogma mogTxovoT programis dasawyisSi Tqveni saxelisa da saidentifikacio nomris Setana. mrewvelobaSi SeiZleba saWiro gaxdes proeqtis an misi nawilis nomris Setana.

komentarebSi axsnili unda iyos yvelaferi, rac programistma unda icodes programis Sesaxeb, magram zedmeti araferi. darwmunebuli unda iyoT, rom yvelaferi, rac SegaqvT komentarebSi, saWiroa. Cveulebrivi teqstis beWdvis dros Cven SegviZlia SevcvaloT Sriftis zoma, gavamuqoT, davxaroT, raTa teqstis sxvadasxva nawili gamovyoT. programis teqstis, anu kodis SemTxvevaSi ki unda SemovifargloT mxolod fiqsirebuli zomis SriftiT. Tumca, SegviZlia am SezRudvas gverdi avuaroT komentarebis weris dros. ganvixiloT komentaris zogierTi nimuSi. /******************************************************* ******************************************************** ******** gafrTxileba: es aris gamafrTxilebeli ******* ******** gzavnilis magaliTi, romelic ******* ******** programistis yuradRebas miiqcevs ******* ******************************************************** ********************************************************/
/*----------> sxva, naklebad mniSvnelovani Setyobineba <--------*/ /*>>>>>>>>>>>> mTavari seqciis saTauri <<<<<<<<<<<<<<< */ /******************************************************** * Cven viyenebT CarCoSi Casmul komentarebs programis * seqciis dasawyisis aRniSvnisaTvis ********************************************************/ /*------------------------------------------------------*\ * es aris CarCos daxatvis sxva xerxi * \*------------------------------------------------------*/

* *

/******************************************************** * Cven viyenebT CarCoSi Casmul komentarebs programis * * seqciis dasawyisis aRniSvnisaTvis ********************************************************/ /*------------------------------------------------------*\ * es aris CarCos daxatvis sxva xerxi * \*------------------------------------------------------*/ /* * es aris seqciis dasawyisi * ^^^^ ^^ ^^^ ^^^^^^^^^ ^^ ^ ^^^^^^^ * * Semdeg paragrafSi Cven avxsniT, ras warmoadgens seqcia * da rogor muSaobs igi */

/* * saSualo donis komentari, romelic exeba programis * momdevno ramodenime striqons. Tumca Cven ar gvaqvs msxvili Srifti, * Cven mainc SegviZlia **gamovyoT** sityvebi */ /* martivi komentari, romlebic exeba programis momdevno striqons*/ nebismieri programis faqtiuri kodi (anu kodi komentarebis gareSe) Sedgeba ori nawilisagan: cvladebi da Sesrulebadi instruqciebi. cvladebi gamoiyeneba imisTvis, rom

SevinaxoT programis mier gamoyenebuli monacemebi, kompiuters, Tu ra moqmedebebi Caataros monacemebze.

xolo

instruqciebi

miuTiTebs

programis kodis wera: gavrcelebuli midgomebi


cvladi _ es aris adgili kompiuteris mexsierebaSi, gamoyofili raime sididis (mniSvnelobis) Sesanaxad. am adgils C aigivebs cvladis saxelTan. saxeli SeiZleba iyos nebismieri sigrZis da ise unda SeirCes, rom misi Sinaarsi gasagebi iyos (sinamdvileSi sigrZis zRvari arsebobs, magram igi didia da realurad am SezRudvas ver vgrZnobT). saWiroa yvela cvladi, romelTac programaSi viyenebT, winaswar CamovTvaloT. cvladebze ganacxadis sakiTxi dawvrilebiT iqneba ganxiluli erT-erT Semdeg leqciaSi. Semdegi ganacxadi C-s acnobebs, rom Cven vapirebT sami mTeli ( int) ricxvis gamoyenebas: p, q da r: magram, sruliad gaugebaria, risTvis? es sami cvladi nebismier rames SeiZleba aRniSnavdes. Semoklebul Canawerebs Tavi unda avaridoT. zedmeti Semokleba Znelad gasagebs xdis aRniSvnebs. axla ganvixiloT sxva ganacxadi: axla Cven viciT, rom saqme gvaqvs sabuRaltro aRricxvis programasTan. magram Cven ufro meti informaciis miRebac SegviZlia. magaliTad, balance_owed dolarebSia Tu centebSi? Cven yovel ganacxads unda davumatoT komentarebi da avxsnaT, ras vakeTebT. magaliTad:
int int account_number; balance_owed; /* sabanko angariSis nomeri */ /* davalianeba (larebSi) */ int account_number; int balance_owed;
int p,q,r;

vwerT ra komentarebs yoveli ganacxadis Semdeg, Cven sinamdvileSi vqmniT minileqsikons, sadac ganvsazRvravT yoveli cvladis saxelis mniSvnelobas. Zalze mniSvnelovania programaSi gamoyenebuli erTeulebis miTiTeba, gansakuTrebiT maSin, Tu gviwevs programis gadakeTeba, an misi formatis Secvla. zogadad, programistma is faqtorebi unda gaiTvaliswinos, rac karg programas axasiaTebs. magaliTad, idealur SemTxvevaSi programa unda iyos advilad aRsaqmeli, kompaqturi, swrafad unda sruldebodes, unda saWiroebdes minimalur mexsierebas da a. S. samwuxarod, realur situaciebSi yvela mizani erTdroulad ver miiRweva da unda vicodeT, Tu ra aris ZiriTadi. nebismier SemTxvevaSi, Tqven unda gamoiyenoT yvela SesaZlebloba, rom Tqveni programa iyos rac SeiZleba advilad aRsaqmeli, Tundac amisTvis, gonierebis farglebSi, sxva miznebis miRwevis gzaze nawilobrivi kompromisebis gakeTeba gaxdes saWiro. nu iqnebiT zedmetad Wkviani da nu SeecdebiT yvela miznis erTdroulad miRwevas, radgan zedmetad Wkvianebi qmnian wasakiTxad gaugebar da gadasasworeblad gamousadegar programebs. programebi Tavisi bunebiT Zalian rTulia. yvelaferi, rasac ki gaakeTebT am sirTulis Sesamcireblad, gaaumjobesebs Tqvens programas. unda gvaxsovdes, rom rTul programas SesaZloa gauTvaliswinebeli efeqtebi axldes Tan (Crdilovan efeqtebs Cven Semdeg SevexebiT ufro dawvrilebiT). kompiuterisTvis sulerTia, Tu programis rogor versias Seqmnis programisti: advilad gasarCevs Tu rTuls da CaxlarTuls. kargi kompileri orive versias Sesatyvis manqanur kods Seusabamebs. gasagebad dawerili kodiT mxolod programisti isargeblebs.

kodis formatireba wanacvlebis saSualebiT


imisaTvis, rom programa advilad gasagebi iyos, programistebis umravlesoba wanacvlebulad wers programis garkveul nawilebs. C-is programebis gaformebis zogadi wesia wavanacvloT erTi doniT yoveli axali bloki. ganvixiloT magaliTi, romelSic sami gansxvavebuli done Segvxvdeba.
/************************************************** * P programa gamoicnobs udris Tu ara ricxvi 5-s * * Author: Irina * *************************************************/

10

#include <stdio.h> #include <stdlib.h> int main() { int a;

/* standartuli Setana-gamotanis biblioTekis CarTva */ /* standartuli funqciebis biblioTekis CarTva */ /* mTavari funqcia */ /* ganacxadi mTel ricxvze */

a=5; /* a-sTvis 5-is miniWeba */ /* amorCeva: ricxvis 5-Tan Sedareba */ if( a == 5 ) /* Tu a udris 5-s, maSin */ { printf("Hello,\n"); /*ekranze gamoCndeba gzavnili Hello da*/ printf("a = 5\n"); /*Semdeg striqonSi gzavnili a = 5 */ } else /* Tu a ar udris 5-s, maSin */ { printf("I'm Program\n"); /*ekranze daibeWdeba I'm Program da*/ printf("I know, a isnt 5\n"); /*Semdeg striqonSi: I know, a isnt 5*/ } system (PAUSE); } return 0; /* ekranis gasaCereblad */

komentarebidan gasagebia, Tu ras akeTebs programa. vnaxoT, Tu rogor akeTebs amas. komentaris bloki ganmartavs programis daniSnulebas da Seicavs cnobas avtoris Sesaxeb. Semdeg modis striqonebi: #include <stdio.h> da #include <stdlib.h>, romlebic kompilers awvdian biblioTekebis saxelebs (Cvens SemTxvevaSi stdio.h - Setana-gamotanis standartuli funqciebis biblioTeka da stdlib.h standartuli funqciebis biblioTeka), romlebSic aris moTavsebuli Cvens programaSi gamoyenebuli funqciebis (Cvens SemTxvevaSi printf da system) Sesaxeb informacia. biblioTekebis CarTva aucilebelia, raTa gamoviyenoT ukve arsebuli programebis fragmentebi. es striqonebi moTavsebulia yvelaze marcxniv, pirvel doneze, anu yovelgvari wanacvlebis gareSe. momdevno striqonSi igive doneze moTavsebulia mTavari funqcia main(). radgan igi yvela programaSi gvxvdeba, amitom sxva dros mas aRar gavukeTebT komentars. mis SigniT moTavsebuli nawili mTlianad mas ekuTvnis da is meore donea. analogiurad, meore donis instruqciis if-is SigniT moTavsebuli instruqciebis Sesrulebis sakiTxi mTlianad if-is Sedegzea damokidebuli da amitom wanacvlebis mesame donea. main()-is tanSi pirveli striqonia a mTeli ricxvis aRwera: rac acnobebs kompilers, rom programaSi monawileobs mTeli ricxvi, romlis saxelia a. aq int mTeli ricxvebis aRmniSvneli standartuli saxelia. Semdeg, a=5; aris miniWebis Setyobineba. misi Sesrulebis Semdeg a ricxvis mniSvneloba gaxdeba 5-is toli. Semdeg ramdenime striqons ikavebs ganStoebis Setyobineba if ( a == 5 ) SesaZlo SedegebiTurT. misi Sesrulebis wesi martivia: Semowmdeba piroba a==5 da Tu piroba WeSmaritia (sworia), Sesruldeba pirvel figurul frCxilebSi moTavsebuli yvela Setyobineba (anu, Tu a tolia 5-is, Sesruldeba printf("Hello\n"); da printf(" a = 5"); ), xolo Tu a ar udris 5-s (e. i. piroba mcdaria) maSin Sesruldeba else sityvis Semdeg figurul frCxilebSi moTavsebuli yvela Setyobineba. yuradReba mivaqcioT Canawers a == 5. es aris Sedareba tolobaze _ tolia Tu ara? aseTi Sedareba C-Si Caiwereba zedized ori tolobis niSniT. araviTar SemTxvevaSi ar SeiZleba = = niSnis Secvla =-iT an = =-iT. programaSi a-s Tavidan mivaniWeT 5, Sedareba a == 5 WeSmaritia da programa gamoitans Sedegs:
int a;

11

SevcvaloT main()-is meore striqoni ase: a = 9; miniWebis operatoris Sesruleba a-s mianiWebs mniSvnelobas 9. piroba a == 5 iqneba mcdari, da programa gamoitans Sedegs:

arsebobs wanacvlebis ori ZiriTadi stili. pirveli _ mokle formaa:


int main()

{ int a; a=5; if( a == 5 ) { printf("Hello,\n"); printf("a = 5"); } else { printf("I'm Program\n"); printf("I know, a isnt } system (PAUSE); return 0;

5");

meore stili figurul frCxilebs calke striqonebze svams:


int main() { int a; a=5; if( a == 5 ) { printf("Hello,\n"); printf("a = 5"); } else { printf("I'm Program\n"); printf("I know, a isnt } system (PAUSE); } return 0;

5");

orive formati xSirad gamoiyeneba. SegiZliaT gamoiyenoT is, romelic ukeTesad migaCniaT. wanacvlebaSi, gamotovebuli simboloebis (space) raodenoba programistzea damokidebuli. miRebulia ori, oTxi an rva space-iT wanacvleba. gamokvlevebma aCvenes, rom oTxi intervaliT wanacvlebis SemTxvevaSi programa ukeT ikiTxeba. zogierTi redaqtori, magaliTad UNIX Emacs editor, Turbo C++, Borland C++ da Microsoft Visual C++ internal editors Seicavs saSualebebs, rac avtomaturad axdens

12

Tqvens programaSi kodis teqstis wanacvlebas. Tumca aseTi wanacvlebis sistemebi saukeTeso araa.

sicxade da simartive
programa unda ikiTxebodes, rogorc teqnikuri dokumenti. is dayofili unda iyos seqciebad da paragrafebad. paragrafi unda daiwyoT Sesabamisi komentariT da gamoyoT es komentari sxva paragrafisgan Tavisufali striqoniT. magaliTad, vxsniT amocanas: sibrtyeze mocemulia ori wertili A da B. A-s koordinatebia x1 da y1, B-si x2 da y2. Cven gvinda A da B wertilebs adgili gavucvaloT.
/* arcTu saukeTeso programa */ temp = x1; x1 = x2; x2 = temp; temp = y1; y1 = y2; y2 = temp; /* * adgili gavucvaloT (swap) A da B-s */ /* X temp x1 = x2 = /* Y temp y1 = y2 = koordinatebis gacvla */ = x1; x2; temp; koordinatebis gacvla */ = y1; y2; temp;

ukeTesi versia iqneba:

Tqveni programa martivi unda iyos. zogadi wesebi aseTia: ecadeT, Tqvens programas ar hqondes rTuli logika. dayaviT calkeul procedurebad da SeamcireT sirTulis xarisxi. grZel instruqciebs Tavi aarideT. umjobesia grZeli winadadeba ramdenime mokleTi SecvaloT (iseve, rogorc salaparako enaSi). programa ase ufro advili aRsaqmeli iqneba. da bolos, yvelaze mniSvnelovani wesi: ecadeT Tqveni programa iyos rac SeiZleba martivi da naTeli, Tundac Tqven mogixdeT zogierTi aq moyvanili wesis darRveva. mizani _ naTeli da gasagebi programis daweraa da es wesebi imisTvisaa, rom dagexmaroT am miznis miRwevaSi. Tu isini xels SegiSlian, nu miaqcevT maT yuradRebas.

13

Tavi 3.

ZiriTadi ganacxadebi da gamosaxulebebi


programis elementebi

vTqvaT, gadavwyviteT Senobis ageba. Cven aucileblad dagvWirdeba agurebi da detaluri gegma, romelic gviCvenebs Tu ra TanmimdevrobiT da rogor davawyobT agurebs. roca kompiuterul programas vadgenT, aseve viyenebT or rames: monacemebs da instruqciebs. programis Sedgenisas cvladebi warmoadgens samSeneblo agurebs, instruqciebi ki gansazRvravs im moqmedebebs, rac kompiuterma unda Seasrulos cvladebze. Senobis agebamde mSenebeli awesrigebs Tavis masalas _ igi akeTebs SekveTas: Cven gvWirdeba 500 didi aguri, 80 naxevari aguri da 4 patara. amis msgavsad, C-Si jer ganacxadi unda gavakeToT cvladebze da mxolod Semdeg SevZlebT maT gamoyenebas. Cven unda davasaxeloT TiToeuli aguri da C-s vacnoboT misi tipi. cvladebis gansazRvris Semdeg SegviZlia SevudgeT maT gamoyenebas. Senobis agebisas ZiriTadi struqtura aris oTaxi. ramdenime oTaxis erToblioba qmnis Senobas. C-Si ZiriTadi struqtura aris funqcia. funqciebis erToblioba qmnis programas. damwyebi mSenebeli ver daiwyebs Tavis moRvaweobas, magaliTad, aia sofias an Tundac Tsu I korpusis msgavsi Sedevris agebiT; savaraudod, Tavidan misTvis ufro Sesaferisi da sasargeblo iqneba erToTaxiani kotejis aSeneba. am TavSi SevudgebiT erTi funqciisgan Semdgari martivi programebis Seqmnas.

programis ZiriTadi struqtura


programis ZiriTadi elementebi aris ganacxadebi monacemebze, funqciebi da komentarebi. vnaxoT rogor SeiZleba maTi organizeba martiv C-programad. erTi funqciisagan Sedgenili programis struqturas ZiriTadad aqvs Semdegi saxe:
/******************************************* * . . . sawyisi komentarebi . . . * ********************************************/ . . . ganacxadebi monacemebze . . .
int main () {

. . . Sesrulebadi Setyobinebebi. . .

return (0); }

sawyisi komentarebi gvixsnis, Tu ras akeTebs programa. ganacxadebi monacemebze aRwers im monacemebs, romlebsac gamoiyenebs programa. im erTaderTi funqciis saxeli, romelsac Cveni martivi programa iyenebs, aris main. es saxeli gansakuTrebulia yvela funqciis saxels Soris, radganac is pirveli gamoiZaxeba programis Sesrulebisas. sxva funqciis gamoZaxeba xdeba mainidan pirdapir an iribad. funqcia main iwyeba:
int main() {

da mTavrdeba:
return (0); }

striqoni return(0); operaciul sistemas (UNIX, MS-DOS, Windows) acnobebs rom programa normalurad damTavrda (Status=0). axla, davubrundeT da am kuTxiT ganvixiloT magaliTi hello.cpp. programis dasawyisSi moTavsebuli sawyisi komentarebi moqceulia niSnebSi /* da */. am komentarebs mosdevs striqoni
#include <stdio.h>

es Setyobineba acnobebs Cs, rom programaSi gamoyenebuli iqneba standartuli Setana_gamotanis (io) funqciebis paketi. am tipis Setyobinebebze Cven dawvrilebiT visaubrebT TavSi, romelic Seexeba Cs preprocesors.

14

main funqcia Seicavs Semdeg instruqcias: printf(Hello World\n);

es striqoni aris Sesrulebadi Setyobineba, rom Cm ekranze dabeWdos gzavnili Hello World C ena TiToeuli Setyobinebis Semdeg iyenebs wertil-mZimes (;), rac niSnavs am Setyobinebis dasasruls, damTavrebas. sazogadod, SegviZlia erT striqonSi ramdenime Setyobinebis Cawera, magram programa advilad wasakiTxi rom iyos, sjobs erT striqonSi mxolod erTi Setyobineba davweroT. meores mxriv, zogierTi sxva enisgan gansxvavebiT, CSi xSirad gvxvdeba Setyobinebebi, romlebic ikaveben ramdenime striqons. funqcia printf() aris formatirebuli beWdvis (amas migviTiTebs aso f funqciis saxelSi) standartuli funqcia, romelsac gzavnili gamoaqvs ekranze. C enis standartuli funqciebi moTavsebulia sxvadasxva biblioTekaSi, romlebic SegviZlia gamoviyenoT programebSi. aseTi funqciebia maTematikuri, sortirebis, Setana-gamotanis, failebTan muSaobis da sxva. Hello World aris martivi C-programa, romelic ar asrulebs gamoTvlebs. mas mxolod gzavnili gamoaqvs ekranze.

martivi gamosaxulebebi
simboloebisgan Sedgenili striqonis beWdvis garda, kompiuters SeuZlia Seasrulos gamoTvlebi. martivi gamosaxuleba Seicavs ricxvebs, operaciebs da gamoiyeneba martivi gamoTvlebis Sesasruleblad. Semdeg cxrilSi CamoTvlilia C enaSi gamoyenebuli 5 martivi operatori:
cxrili : martivi operatorebi:

operatori
* /

+ %

moqmedeba gamravleba gayofa Sekreba gamokleba naSTi (mTeli gayofisas miRebuli)

Sesrulebis TvalsazrisiT, *, / da % operatorebs aqvs meti prioriteti (ufro maRali rigi da sruldeba ufro adre) + da _ operatorebTan SedarebiT. mrgvali frCxilebi gamoiyeneba rogorc wevrebis dasajgufeblad, aseve Sesrulebis rigis Sesacvlelad. magaliTad: (1+2)*3 = 9, maSin, roca 1+2*3 = 7, xolo (4+5)%2 = 1. SevadginoT programa, romelic gamoTvlis (1+2)*3 gamosaxulebis mniSvnelobas.
int main() { ( 1 + 2 ) * 3; return (0); }

kompiuteri gamoTvlis gamosaxulebis mniSvnelobas, magram Cven ver vnaxavT Sedegs ekranze. esaa e.w. nulovani efeqtis magaliTi, rodesac gvaqvs koreqtuli programa, romelic sruliad usargebloa. Tu davubrundebiT analogias Senobis aSenebasTan, es magaliTi igivea rom muSas davavaloT mTeli dRe iaros urikiT agurebsa da Senobas Soris, magram agurebi ar gadaitanos.

cvladebi da mexsiereba
C saSualebas gvaZlevs SevinaxoT sidideebi cvladebSi. TiToeuli cvladi gaigivebulia Tavis saxelTan. TiToeul cvlads aqvs tipi. cvladis tipi acnobebs Cs, Tu ra operaciebis Catareba SeiZleba am cvladze da ra saxis ricxvebi (namdvili, mTeli) SeiZleba SevinaxoT am cvladSi. cvladebis saxelebSi gamoiyeneba asoebi, cifrebi da qveda tires simbolo ( _ ). saxeli ar SeiZleba cifriT iwyebodes. sazogadod, qveda tireTi iwyeba sistemuri saxelebi. sandartuli biblioTekebis procedurebSi xSirad gamoiyeneba am simboloTi dawyebuli saxelebi, amitom ar aris rekomendirebuli cvladis saxelis qveda tireTi dawyeba. radgan C ganasxvavebs zeda da qveda registris simboloebs, amitom saxelebi Gio, gio, GIO sxvadasxva saxelebia.

15

C-programebSi gamoiyeneba zogierTi saxeli, magaliTad, int, while, for, float da sxva, romelTac C enis rezervirebuli (momsaxure) sityvebi ewodeba. maTi gamoyeneba ar SeiZleba cvladebis saxelebad. magaliTad, cvladis saxeli SeiZleba iyos:
sashualo pi studentebis_raoden

/* yvela gazomvis saSualo mniSvneloba */ /* pi ricxvis mniSvneloba meaTasedis sizustiT */ /* jgufSi studentebis raodenoba */ /* /* /* /* iwyeba cifriT */ Seicavs simbolo $-s */ Seicavs hars */ sarezervo sityvaa */

cvladis saxeli : ar SeiZleba iyos Semdegi


3_gazomva fasi$ studentebis raoden int

Tavi unda avaridoT erT programaSi msgavsi saxelebis gamoyenebas, mag.:


total totals

/* erT jerze Setanili cvladebis jami */ /* yvela cvladis jami */

ganacxadi cvladebze
C enaSi cvladebis gamoyenebamde aucilebelia maTi gansazRvra ganacxadis SetyobinebiT. cvladze ganacxadis gakeTebis Sedegad ganisazRvreba cvladis saxeli da tipi (mTeli ricxvi, namdvili ricxvi, simbolo da sxva). magaliTad, ganacxads cvladze, romelsac vuwodebT answer, SesaZloa hqondes saxe: int answer;

/*

gamoTvlis Sedegi

*/

\aq rezervirebuli sityva int miuTiTebs C-s, rom cvladi mxolod erT mTel mniSvnelobas Seicavs. answer - cvladis saxelia. wertil-mZime (;) amTavrebs Setyobinebas. komentari ki programistisTvis cvladis daniSnulebas gansazRvravs. cvladze ganacxadis zogadi saxea: tipi saxeli; /* komentari */ aq tipi C-is erT-erTi tipia (int, float da a.S.), saxeli cvladis saxelia (iseTi, romlis gamoyeneba nebadarTulia), xolo Semdeg komentaria.

mTeli ricxvebi
cvladis erTerT tipi aris int (mTeli). mTel ricxvs arc wiladi nawili aqvs da arc aTobiTi wertili. ricxvebi 1, 87, -222 mTelia, xolo 9.3 ar aris mTeli, vinaidan Seicavs aTobiT wertils. zogadad, mTeli ricxvi aRiwereba ase:
int

saxeli;

/* komentari */

8 Tanrigian kalkulators SeuZlia daamuSavos mTeli ricxvebi diapazonSi: -99999999sa da 9999999-s Soris. Tu 99999999-s davumatebT erTs, moxdeba gadavseba (Secdomis erTerTi saxe). msgavsi SezRudvebi aqvs kompiutersac. mTeli ricxvebis mniSvnelobebis diapazoni damokidebulia kompiuterze. kalkulatori iyenebs aTobiT cifrebs (0-9), kompiuteri ki orobiT cifrebs (0-1) anu bitebs. 8 biti qmnis baits. mTeli ricxvebis Sesanaxad saWiro bitebis raodenoba aseve damokidebulia kompiuterze. dabeWdvisas orobiTi ricxvebi isev aTobiT ricxvebSi gardaiqmneba. Tu kompiuterSi mTel tips uWiravs 32 biti (4 baiti), maSin uzrunvelyofilia diapazoni -2147483648(-231)-dan 2147483647(231-1)-mde. Tu kompiuteris kompileri mTeli ricxvisTvis iyenebs mxolod 16 bits (2 baits), maSin igi daamuSavebs mTel ricxvebs diapazonSi -32768(-

16

standartuli TavsarTi faili limits.h gansazRvravs mudmivebs, romelTa mniSvnelobebiaA sxvadasxva diapazonis sazRvrebi (magaliTad, INT_MAX, INT_MIN). C enis standarti ar afiqsirebs ricxvebisTvis zomas baitebSi. amitom programebs, romlebic iyeneben romelime gansazRvruli sigrZis (magaliTad, 32 bitis) mTel ricxvebs, xSirad eqmnebaT problemebi sxva manqanaze gadatanisas. magaliTad, Semdegi fragmenti sworad imuSavebs kompiuterze, romelic mTeli ricxvis Sesanaxad iyenebs 4 baits, magram arasworad imuSavebs kompiuterze, romelic mTel ricxvs uTmobs mxolod 2 baits:
215)-dan

32767(215-1)-mde.

.......

int balance;

/* sabanko angariSis sidide */

balance = 92126 ;

miniWebis Setyobineba
aris miniWeba. tolobis niSnis ( = ) marcxniv mdgom answer cvlads mieniWeba = -is marjvniv mdgomi ( 1 + 2 ) * 4 gamosaxulebis mniSvneloba. wertil-mZime (;) amTavrebs Setyobinebas. cvladebze gakeTebuli ganacxadi cvladebisTvis gamoyofs mexsierebis monakveTs. grafikulad warmovidginoT es sakiTxi answer cvladze ganacxadis gakeTebisa da misTvis mniSvnelobis miniWebis magaliTze. int answer; answer cvlads jer ara aqvs miniWebuli mniSvneloba.
answer = ( 1 + 2 ) * 4;

cvladi Tavis mniSvnelobas Rebulobs miniWebis Setyobinebis safuZvelze. magaliTad,

amitom ? niSani gviCvenebs, mniSvneloba ganusazRvrelia.

rom

misi

answer = ( 1 + 2 ) * 4; answer

answer

cvlads mieniWa ( 1 + 2 ) * 4 gamosaxulebis mniSvneloba, amitom mexsierebaSi am cvladisTvis gamoyofil areSi Caiwereba 12.

miniWebis Setyobinebis zogadi saxea: cvladi = gamosaxuleba; operatori = gamoiyeneba miniWebisTvis. es Setyobineba ambobs: gamoTvale gamosaxuleba da mianiWe cvlads am gamosaxulebis mniSvneloba. ganvixiloT programis fragmenti. gamoviyenoT cvladi term im mTeli mniSvnelobis Sesanaxad, romelic monawileobs or momdevno gamosaxulebaSi.
int term; int term_2; int term_3; int main() { term = 3 * 5; /* term monawileobs momdevno or gamosaxulebaSi */ /* gaormagebuli term */ /* gasammagebuli term */

17

term_2 = 2 * term; term_3 = 3 * term; return (0);

rogor mivxvdeT, ra gaakeTa programam? droa viswavloT, Tu rogor gdavbeWdoT Sedegebi.

funqcia printf
biblioTekis funqcia printf gamoiyeneba Sedegebis dasabeWdad. Tu programas davamatebT Semdeg Setyobinebas: printf (gaormagebuli %d aris %d \n, term, 2 * term); igi dabeWdavs: gaormagebuli 15 aris 30 specialur niSans %d ewodeba mTeli tipis specifikatori. rodesac printfs Sexvdeba %d, igi am niSnis adgilas dabeWdavs momdevno gamosaxulebis mniSvnelobas im CamonaTvalidan, romelic mosdevs simboloebSi moqceul striqons, anu formatis striqons. am CamonaTvals parametrebis sia ewodeba. aRniSnulidan gamomdinare printf operatoris zogad formas aqvs saxe:
printf ( formati, gamosaxuleba 1 , gamosaxuleba 2 , . . . );

sadac formati aris striqoni, romelic aRwers, Tu ra unda daibeWdos. yvelaferi, rac moTavsebulia am striqonSi, zustad aseve ibeWdeba, garda %d specifikatorisa. gamosaxuleba 1 is mniSvneloba ibeWdeba pirveli %ds adgilze, gamosaxuleba 2 is mniSvneloba ibeWdeba meore %ds adgilze da a. S. es procesi grafikulad ase SegviZlia warmovidginoT:

int term = 15; printf(gaormagebuli

% d

aris

%d\n,

term, 2 * term);

striqoni gaormagebuli %d aris %d\n printf funqcias miuTiTebs, rom man unda dabeWdos sityva gaormagebuli, gamotovos adgili, dabeWdos pirveli gamosaxulebis mniSvneloba, gamotovos adgili, dabeWdos aris da kvlav adgilis gamotovebis Semdeg meore gamosaxulebis mniSvneloba. striqoni bolovdeba niSniT \n (axal xazze gadasvlis indikatori). ganvixiloT martivi magaliTi printf funqciis gamoyenebaze.
#include <stdio.h> #include <stdlib.h> int ter; /* term gamoiyeneba or gamosaxulebaSi */ int main() { term = 3 * 5; printf (gaormagebuli %d aris %d \n, term, 2 * term); printf (gasammagebuli %d aris %d \n, term, 3 * term); system (PAUSE); return (0); }

mmarTvel striqonSi (formati) %d-is raodenoba aucileblad unda emTxveodes printf funqciaSi gamosaxulebebis raodenobas.

namdvili ricxvebi
namdvili ricxvebi cnobilia agreTve rogorc mcocavwertiliani ricxvebi. magaliTad,
5.5, 8.3, -12.6 aris mcocavwertiliani ricxvebi. mcocavwertiliani ricxvebis da mTeli ricxvebis gasarCevad C iyenebs aTobiT wertils. ase, 5.0 aris mcocavwertiliani ricxvi, maSin roca 5 aris

18

mTeli. mcocavwertiliani ricxvi aucileblad Seicavs aTobiT wertils. magaliTad: 3.14, 0.7, 5.47 da a.S. Tumca daSvebulia cifri 0-is gamotoveba wertilis win an Semdeg, mainc rekomendebulia maTi sruli saxiT Cawera. magaliTad, 0.51 da ara .51 Canaweri. C ricxvi SeiZleba damatebiT Seicavdes eqsponentas. magaliTad, ricxvi 1.2e34 aris Canaweri ricxvisa 1.2 x 1034. sazogadod, mcocavwertiliani ricxvebi ase aRiwereba:
float cvladi; /* komentari */

mcocavwertiliani ricxvebis diapazoni damokidebulia kompiuterze. printf operatorSi mcocavwertiliani ricxvebis dasabeWdad gamoiyeneba specifikatori %f. magaliTad, Cven Tu gvsurs davbeWdoT mniSvneloba 1.0/3.0, amisTvis saWiroa gamoviyenoT Setyobineba:
printf ( pasuxia %f\n, 1.0/3.0);

ricxvebis gayofa
mTeli ricxvebis gayofa gansxvavdeba mcocavwertiliani ricxvebis gayofisgan. mTeli ricxvebis gayofisas miiReba mTeli ricxvi, wiladi nawili ki ignorirdeba. ase, rom 19/10 tolia 1. roca gasayofi da gamyofi, an erT-erTi maTgani mcocavwertiliania, maSin Sedegic mcocavwertiliani ricxvia. magaliTad, 19.0/10.0 aris 1.9 (iseve rogorc 19/10.0 da 19.0/10). ramdenime magaliTi motanilia Semdeg cxrilSi: gamosaxuleba 1 + 2 1.0 + 2.0 19 / 10 19.0 / 10.0 Sedegi 3 3.0 1 1.9 Sedegis tipi mTeli mcocavwertiliani mTeli mcocavwertiliani

am magaliTebSi C avtomaturad gardaqmnis mTels mcocavwertilian mniSvnelobad. igi analogiur gardaqmnas asrulebs, rodesac xdeba mTeli tipis cvladze mcocavwertiliani mniSvnelobis miniWeba. magaliTad, ganvixiloT programis fragmenti:
int i; float x; /* mTeli tipis cvladi saxeliT i */ /* mcocavwertiliani cvladi saxeliT x */

main() { x = 1.0 / 2.0; /* mianiWebs cvlad x -s mniSvnelobas 0.5 */ i= 1 / 3; /* mianiWebs cvlad i-s mniSvnelobas 0 */ x = (1 / 2) + (1 / 2); /* mianiWeb cvlads x -s mniSvnelobas 0.0 */ x = 3.0 / 2.0; /* mianiWebs cvlad x-s mniSvnelobas 1.5 */ i = x; /* mianiWebs cvlad i-s mniSvnelobas 1 */ return (0); } SevniSnoT, rom 1/2 aris mTeli tipis gamosaxuleba da misi mniSvnelobaa 0.

simboloebi
calkeuli simboloebis aRsawerad gamoiyeneba simboluri tipi char. simbolur cvladze ganacxads aqvs Semdegi saxe:
char cvladi; /* komentari */

magaliTad, A,a,! simboloebia. daxrili xazi (\) aris damxmare simbolo, romelic zogierT sxva simbolosTan erTad gamoiyeneba. Semdegi cxrili gvixsnis aseTi simboloebis daniSnulebas.

19

simboloTa Tanmimdevroba \b
\f \n \r \t \ \" \\ \nnn \a

saxeli BBackspace
Form Feed Newline Return Tab Apostrophe Double quote Backslash Bell

daniSnuleba ukan dabruneba erTi simboloTi axal furcelze gadasvla axal striqonze gadasvla striqonis TavSi dabruneba Tab-is Semdeg poziciaze gadasvla simbolo simbolo " simbolo \ simbolos rvaobiTi kodi xmovani signali

yuradReba unda mivaqcioT, rom simboloebi erTmag brWyalebSia moTavsebuli, monacemTa sxva tipi striqoni, ormag brWyalebSia moTavsebuli. ganvixiloT Semdegi magaliTi:
#include <stdio.h> #include <stdlib.h> char char1; char char2; char char3; /* pirveli simbolo */ /* meore simbolo */ /* mesame simbolo */

printf operatorSi simboloebis dasabeWdad gamoiyeneba specifikatori %c.

int main() { char1='A'; char2='B'; char3='C'; printf("%c%c%c gardaiqmneba %c%c%c-ad\n",char1,char2,char3, char3,char2,char1); system (PAUSE); return(0); }

pasuxia: ABC gardaiqmneba CBA-ad.

Tavi 4.

masivebi da ricxvebis wakiTxva masivebi

masivi (array) aris mexsierebaSi TanmimdevrobiT ganTavsebuli, erTi da igive sigrZis monakveTebis simravle, romlebic gamoiyeneba monacemebis Sesanaxad. masivis yovel monacems masivis elementi (wevri) ewodeba. masivis ganacxadis
int data_list[3];

mixedviT data_list aris int tipis samelementiani masivi. data_list[0], data_list[1] da data_list[2] warmoadgenen gansxvavebul cvladebs. masivis elementze mimarTva (wvdoma) xdeba indeqsis meSveobiT, romelic aris kvadratul frCxilebSi moTavsebuli arauaryofiTi mTeli ricxvi. davimaxsovroT, rom C-Si indeqsis mniSvnelobis aTvla iwyeba nulidan. amitomaa, rom Cvens magaliTSi elementebi gadanomrilia nulidan oris CaTvliT. aqedan gamomdinare, indeqsi araa elementis rigiTi nomeri, igi gviCvenebs mocemuli elementis misaRebad ramdeni elementi unda gamovtovoT masivis dasawyisidan. SevniSnoT, rom ganacxadSi miTiTebuli indeqsis mniSvneloba (anu [3]) mxolod da mxolod masivis elementebis raodenobis maCvenebelia. amgvarad, data_list[2] am masivis bolo elementia, xolo data_list[3] ar warmoadgens am masivis elements.

20

Semdegi magaliTi iTvlis oTxi ricxvis jams da saSualo mniSvnelobas. magaliTi: array.cpp
#include <stdio.h> #include <stdlib.h> float data[4]; float total; float average; int main() { data[0] data[1] data[2] data[3]

/* cvladebi, romelTaTvisac viTvliT jamis da saSualo mniSvnelobas */ /* cvladi jamisTvis */ /* cvladi saSualo mniSvnelobisTvis */

= = = =

54.0; 18.0; 34.0; 91.0;

total = data[0] + data[1] + data[2] + data[3]; average = total / 4.0; printf("Total %f Average %f\n", total, average); system("PAUSE"); return (0);

programis Sesrulebis Sedegad daibeWdeba:


Total 197.000000 Average 49.250000

striqonebi
striqoni aris simboloebis mimdevroba. Cs ar gaaCnia standartuli (anu CaSenebuli) tipi striqonisTvis. striqoni iqmneba simboloebis masivis safuZvelze, magram Cveulebrivi masivisgan gansxvavebiT mTavrdeba specialuri simbolo \0-iT (end-of-string). magaliTad, kodi:
char name[4]; int main() { name[0] = I; name[1] = r; name[2] = a; name[3] = \0; return (0); }

qmnis simboloebis oTxelementian masivs. yuradReba mivaqcioT, rom erTi simbolo gamoyenebulia striqonis dasasrulis misaniSneblad. striqonuli mudmivebi Sedgeba ormag brWyalebSi ( ) moTavsebuli teqstisgan. magaliTad, printf funqciis pirveli parametri striqonul mudmivs warmoadgens. C ar iZleva saSualebas, rom erT masivs mivaniWoT meore masivis mniSvneloba, anu ar SeiZleba Semdegi saxis Setyobinebis dawera:
name = Irina;

/*

arasworia */

am mizniT Cven unda gamoviyenoT string.h failis funqcia strcpy, romelic axdens striqonuli mudmivis aslis gadatanas cvladSi \0 simbolos CaTvliT. mogvyavs programa, romelic axdens Irina sityviT name cvladis inicializebas (sawyisi mniSvnelobis miniWebas):
#include <string.h> #include <stdlib.h> #include <stdio.h> char name[4]; int main()

21

{ strcpy(name, "Irina"); printf("%s\n", name); system("PAUSE"); return (0);

/* name -is inicializeba */ /* name -is dabeWdva */

printf funqcia iyenebs %s specifikators striqonuli cvladebis dasabeWdad. Cs SeuZlia cvladi sigrZis striqonebis gamoyeneba. magaliTad, ganacxadi #include <string.h> char teacher[45]; int main() { strcpy(teacher,"Irina"); }

qmnis masivs (striqons), romelic SesaZloa Sedgebodes 45 an ufro naklebi simbolosgan. Tu striqonis sigrZe ar aRemateba 44 simbolos, maSin igi moTavsdeba teacher masivSi (erTi simbolo rezervirebulia \0isTvis, romelic miuTiTebs striqonis dasasruls). striqonuli da simboluri mudmivebi arsebiTad gansxvavdeba erTmaneTisgan. striqonebi Tavsdeba ormag brWyalebSi (), xolo simboloebi erTmagSi (). magaliTad, X aris striqoni da ikavebs or baits, xolo simbolo X ikavebs erT baits. Semdeg striqonebTan: cxrilSi funqcia
strcpy(striqoni 1 , striqoni 2 ) strcat(striqoni 1 , striqoni 2 ) length = strlen(striqoni) strcmp(striqoni 1 , striqoni 2 )

naCvenebia

ramdenime

standartuli

funqcia,

romelic

muSaobs

ganmarteba striqoni 2 -is asli gadaaqvs striqoni 1 -Si striqoni 1 is bolos miabams striqoni 2 s miiReba striqonis sigrZe \0 gareSe 0, Tu striqonebi tolia. winaaRmdeg SemTxvevaSi aranulovani sididea

funqciebis saxelebis dasamaxsovreblad saWiroa gaviTvaliswinoT, rom isini SerCeulia maTi Sinaarsis gamomxatveli inglisuri sityvebis safuZvelze. kerZod, strcpy niSnavs striqonebis kopirebas (string copysgan miRebuli Semokleba), strcat niSnavs striqonebis konkatenacias anu mibmas (string concatenate-isgan), strlen niSnavs striqonis sigrZes (string lentgh-isgan), da bolos strcmp niSnavs striqonebis Sedarebas (string compareisgan). Semdegi programa axdens cvladis inicializebas. striqonuli cvladis sigrZe aris 100, radgan Zneli warmosadgenia ufro grZeli gvarsaxelis mqone pirovneba Segvxvdes. magaliTi full.cpp:
#include <string.h> #include <stdio.h> #include <stdlib.h> char first[100]; char last[100]; char full_name[200];

/* saxeli */ /* gvari */ /* saxeli da gvari erTad */

int main() { strcpy(first, "Galaqtion"); /* saxelis (name) inicializeba */ strcpy(last, "Tabidze"); /* gvaris (name) inicializeba */ strcpy(full_name, first); /* full = "Galaqtion" */ /* SeniSvna: strcat sxvaa, strcpy sxva */

22

strcat(full_name, " "); strcat(full_name, last); system("PAUSE"); return (0);

/* full = " Galaqtion " */ /* full = " Galaqtion Tabidze" */

printf("The full name is %s\n", full_name);

programis Sesrulebis Sedegad daibeWdeba: The full name is Galaqtion Tabidze

striqonebis wakiTxva da beWdva


klaviaturidan striqonis wasakiTxad SesaZloa gamoviyenoT standartuli funqcia gets. misi saxe aris:
gets(parametri);

sadac parametri aris winaswar aRwerili simboloTa masivis saxeli. gets aTavsebs striqons, romlis wakiTxvasac vaxdenT klaviaturidan am simboloTa masivSi . wakiTxvisas striqoni monitorze moCans simboloTa mwkrivis saxiT. wakiTxvas vamTavrebT Enter Rilakze daWeriT, romelsac Seesabameba uxilavi simbolo \n(end-of-line), anu axali xazi. end-ofline simbolo masivSi ar Seinaxeba. mis nacvlad gets amatebs masivs \0 simbolos. masivis ganacxadSi aucilebelia gaviTvaliswinoT wasakiTxi simboloebis maqsimaluri ricxvi da erTi adgili \0 simbolosTvis. striqonis gamotanas ekranze emsaxureba standartuli funqcia puts. misi saxe aris:
puts(parametri);

funqcia beWdavs parametri saxelis mqone simboloTa masivis yvela simbolos ekranze da Semdeg gadahyavs kursori axal striqonze (anu amatebs gamosatan striqons \n simbolos). orive funqcia aRwerilia stdio.h failSi. Semdegi programa waikiTxavs striqons klaviaturidan, Semdeg dabeWdavs mas da mis sigrZes. magaliTi length.cpp:
#include <string.h> #include <stdio.h> #include <stdlib.h> char line[100];

/* line - wasakiTxi striqonis saxelia */

int main() { printf("Enter a line: "); gets(line); puts("We have read:"); puts(line); printf("The length of the line is: %d\n", strlen(line)); system("PAUSE"); return (0);

Sedegad vRebulobT: Enter a line: Tina and Irina We have read: Tina and Irina The length of the line is: 20 Press any key to continue . . .

23

ganvixiloT kidev erTi programa, romelic klaviaturidan Setanil pirovnebis saxelsa da gvars Cawers striqonebSi first da last Sesabamisad, Semdeg gaaerTianebs maT striqonSi full da dabeWdavs pirovnebis srul saxels. magaliTi full1.cpp
#include <stdio.h> #include <string.h> #include <stdlib.h> char first[100]; char last[100]; char full[200];

/* pirovnebis saxeli */ /* misi gvari */ /* pirovnebis saxeli da gvari erTad */

int main() { printf("Enter first name: "); gets(first); printf("Enter last name: "); gets(last); strcpy(full, first); strcat(full, " "); strcat(full, last); printf("The full name is %s\n", full); system("PAUSE"); return (0);

programis gaSveba, miTiTebuli saxelis da gvaris arCevis SemTxvevaSi mogvcems aseT Sedegs: Enter first name: Natia Enter last name: Archvadze The full name is Natia Archvadze Press any key to continue . . .

mravalganzomilebiani masivebi
masivs SeiZleba hqondes erTze meti indeqsi. indeqsebis raodenobas ewodeba masivis ganzomileba. organzomilebian masivze ganacxads, magaliTad SeiZleba hqondes Semdegi saxe: int matrix[3][4]; /* matricze ganacxadis nimuSi */ rac warmoadgens ganacxads 3x4=12 cvladze. konkretulad: matrix[0][0], matrix[0][1] da a. S. iseve, rogorc erTganzomilebiani masivis SemTxvevaSi, pirveli indeqsi icvleba 0-dan 2-is CaTvliT, meore 0-dan 3-is CaTvliT.
matrix matricis elementze wvdomisTvis, magaliTad, SegviZlia davweroT: matrix[1][2] = 10;

C saSualebas aZlevs programists, rom man gamoiyenos imdeni ganzomileba, ramdenic saWiroa (SezRuduli varT mxolod xelmisawvdomi mexsierebis moculobiT). ganzomilebebis damateba SeiZleba ase:
four_dimensions[10][12][9][5];

am masivis elementebis raodenobaa 10x12x9x5. ganacxadi


int matrix[3][4];

SeiZleba gavigoT, rogorc ganacxadi samelementian masivze, romlis yoveli elementi aris oTxelementiani masivi. Semdeg magaliTSi matricis elementebs vaniWebT mniSvnelobebs da vbeWdavT matricis yvela elements.

24

magaliTi print_array.cpp
#include <stdio.h> #include <stdlib.h> int array[3][2]; /* mTeli ricxvebis matrica */ int main() { array[0][0] = 0*10+0; array[0][1] = 0*10+1; array[1][0] = 1*10+0; array[1][1] = 1*10+1; array[2][0] = 2*10+0; array[2][1] = 2*10+1; printf("array[%d] ", 0); printf("%d ", array[0][0]); printf("%d ", array[0][1]); printf("\n"); printf("array[%d] ", 1); printf("%d ", array[1][0]); printf("%d ", array[1][1]); printf("\n"); printf("array[%d] ", 2); printf("%d ", array[2][0]); printf("%d ", array[2][1]); printf("\n"); system("PAUSE"); return (0); }

programis Sesrulebis Sedegad daibeWdeba: array[0] 0 1 array[1] 10 11 array[2] 20 21 Press any key to continue . . .

ricxvebis wakiTxva
aqamde Cven vkiTxulobdiT martiv striqonebs. axla movida dro, wavikiTxoT ricxvebic. informacias wavikiTxavT scanf funqciis saSualebiT. misi zogadi saxea:
scanf(formati, &cvladi 1 , &cvladi 2 . . .);

sadac: formati - mmarTveli striqonia printf funqciis mmarTveli striqonis msgavsi. mivaqcioT yuradReba & simbolos cvladebis win. igi miuTiTebs rom scanf funqcia Cawers cvladi 1 - i s , cvladi 2 - i s da a.S. mexsierebaSi klaviaturidan wakiTxuli ricxvebis mniSvnelobebs (Sesabamisi rigiT).

& simbolos gamotovebam cvladebis win SeiZleba gamoiwvios seriozuli problemebi. kerZod, operaciul sistemebSi MS-DOS/Windows am Secdomam SeiZleba daazianos Tqveni programa an TviT operaciuli sistema. Semdeg magaliTSi viyenebT scanf funqcias mTeli ricxvis Sesatanad, Semdeg printf-s viyenebT am ricxvis da misi gaorkecebuli mniSvnelobis dasabeWdad. magaliTi print_int.cpp
#include <stdio.h>

25

#include <stdlib.h> int value;

/* ricxvi, romelic unda gavaormagoTY*/

int main() { printf("Enter a value: "); scanf("%d", &value); printf("Twice %d is %d\n", value, value * 2); system("PAUSE"); return (0);

magaliTad: Enter a value: 123 Twice 123 is 246 Press any key to continue . . . yuradReba mivaqcioT Semdeg garemoebas. Tu 123 is win avkrefT erT an ramdenime hars, an axali xazis (\n) simbolos, an orives erTad, scanf maT ar miaqcevs yuradRebas da gveqneba igive Sedegi: Enter a value: Enter a value: 123 123 Twice 123 is 246 an Twice 123 is 246 Press any key to continue . . . Press any key to continue . . .
scanf s xSirad viyenebT striqonebis beWdvisas, gansakuTrebiT maSin, roca striqoni erTi sityvisgan Sedgeba (anu Tavis SigniT harebs ar Seicavs). magaliTad, programaSi full1.cpp saxelic da gvaric TiTo sityvian striqons warmoadgens, amitom SegviZlia gets is nacvlad gamoviyenoT scanf. radgan es funqcia sxvadasxva tipis monacemis SeyvanisTvis

gamoiyeneba, amitom mis argumentebad unda mivuTiToT striqonis formati da striqonuli cvladis saxeli. sxva sityvebiT, Tu gets(first); da gets(last); Setyobinebebs SevcvliT scanf("%s",first); da scanf("%s",last); SetyobinebebiT, miviRebT iseTive Sedegs. magram maT Soris aris gansxvaveba, raSic advilad davrwmundebiT, Tu orive programas gavuSvebT jer Enter first name: George Enter first name: Edson Arantes da Enter last name: Kuprava monacemebze. pirvel SemTxvevaSi scanf gamotovebs harebs, meore SemTxvevaSi pirveli scanf Seitans pirvel sityvas da meore sityva avtomaturad gadava buuferSi, saidanac aseve avtomaturad moxdeba misi waReba meore scanf is mier.

cvladebis inicializeba
C saSualebas iZleva, rom cvladebis inicializeba (sawyisi mniSvnelobebis miniWeba) moxdes ganacxadSive. magaliTad, Semdegi Setyobineba akeTebs ganacxads mTeli tipis counter cvladze da axdens mis inicializebas mniSvnelobiT 1:
int counter = 1;

/* mTvlelis inicializebas 1-iT */

aseve xdeba masivebis inicializeba. masivis elementebis CamonaTvali unda moeqces figurul frCxilebSi. magaliTad, /* marTkuTxa paralelepipedis ganzomilebebi */
int x[3] = {11, 823, 43};

es inicializeba igives akeTebs, rasac Semdegi kodi:


x[0]= 11; x[1]=823; x[2]=43;

SesaZlebelia figurul frCxilebSi moTavsebuli ricxvebis raodenoba naklebi iyos masivis elementebis raodenobaze. am SemTxvevaSi masivis elementebis darCenil nawils C Seavsebs nulebiT.

26

Tu ganacxadSi ganzomileba mocemuli araa, C TviTon gansazRvravs ganzomilebas, gautolebs ra mas CamonaTvalSi elementebis raodenobas. magaliTad, zemoT ganxilul magaliTSi asec SegveZlo gagvekeTebina:
/* marTkuTxa paralelepipedis ganzomilebebi */ int x[] = {11, 823, 43};

mravalganzomilebiani masivis inicializeba analogiuria erTganzomilebianisa. ricxvebi isev figurul frCxilebSi Tavsdeba, magram Tavidan Tavsdeba pirveli striqonis elementebi, mere meorisa da a.S. Tu elementebi naklebia, vidre ganzomilebebis namravli, CamonaTvals C Seavsebs nulebiT. magaliTad, ganacxadi:
int matrix[2][3]; /* tipuri matrica */

SegviZlia aseve gavigoT rogorc erTganzomilebiani matrica (2-elementiani), romlis elementebsac warmoadgenen isev erTganzomilebiani matricebi (TiToeuli samelementiani). es masivi Semdegnairad inicializdeba:
int matrix[2][3] = {{1, 2, 3},{10, 20, 30}};

igive matrica SegviZlia gavigoT, rogorc erTganzomilebiani matrica 2*3 elementiT. maSin, inicializebisas Cawyobili figuruli frCxilebi saWiro aRaraa:
int matrix[2][3] = {1, 2, 3, 10, 20, 30};

analogiurad xdeba striqonebis inicializeba. magaliTad, imisaTvis, mivaniWoT striqoni Natia, unda gamoviyenoT Semdegi Setyobineba:
char name[] = {'N', 'a', 't', 'i', 'a','\0'};

rom

cvlads

name

garda amisa, C gvTavazobs striqonebis inicializebis sxva gzasac:


char name[] = Natia; nameis elementebis raodenoba aris 6, radgan boloSi C Casvams \0 simbolos.

SegviZlia Semdegi Setyobinebis gamoyenebac:


char name[50] = Natia;

rac niSnavs, rom mexsierebaSi gamoyofolia adgili 50 elementiani masivisTvis, magram Sig Cawerili striqonis sigrZe aris 5.

mTeli ricxvebis tipebi


C farTo arCevans uqmnis programists mTeli ricxvebis gamoyenebisaTvis (imisda mixedviT Tu ra diapazoni gvWirdeba). int tipi saSualebas iZleva gamoviyenoT yvelaze efeqturi (im kompiuterisTvis, romelzec vmuSaobT) zomis mTeli ricxvebi. mocemul kompiuteris mexsierebaSi mocemuli tipis monacemis zomis garkveva SeiZleba sizeof funqciis saSualebiT. xSirad saWiroa did ricxvebTan muSaoba. aseTi ricxvebisTvis mexsierebis gamoyofa xdeba
long int result; /* gamoTvlebis SesaZlo Sedegi */

Setyobinebis saSualebiT. tipi long int acnobebs Cs, rom man TiToeuli aseTi ricxvisTvis gamoyos 4 baiti mexsierebaSi (nebismier kompiuterze). Tu Cven viyenebT mcire ricxvebs da gvsurs SevamciroT maTTvis gamoyofili mexsiereba, viyenebT specifikators short. magaliTad:
short int year; /* cvladi welis mniSvnelobisTvis */

SegviZlia long intis nacvlad vweroT long, xolo short intis nacvlad vweroT short. nebismier SemTxvevaSi,
sizeof(short) sizeof( int) sizeof(long),

Tumca praqtikulad, TiTqmis yovelTvis short ikavebs or baits anu 16 bits, saidanac 1 biti eTmoba niSans. am SemTxvevaSi, ricxvebi aris diapazonSi -32768 (-215)dan 32767 (215-1)

27

mde. misgan gansxvavebiT, tipi unsigned short 16ve bits iyenebs ricxvisTvis, rac diapazons cvlis 0-dan 65535 (216-1)mde. gulisxmobis principiT yvela sxvadasxva saxis int tipi amave dros aris signed tipis. magaliTad, ganacxadi
signed long int result; /* saboloo Sedegi */ /* saboloo Sedegi */

igivea rac
long result;

Semdegi cxrili gviCvenebs printf da scanf funqciebSi gamosayenebel specifikatorebs: specifikatorebi


%hd %d %ld %hu %u %lu

gamoyenebebi
(signed) short int (signed) int (signed) long int unsigned short int unsigned int unsigned long int

ricxvebis diapazoni uaryofiTi ricxvebis gamoricxvis xarjze.

unsigned ricxvebis gamoyeneba saSualebas gvaZlevs gavaormagoT dadebiTi mTeli

Semdeg sailustracio magaliTi gviCvenebs ramden baits ikavebs da ra udides da umcires mniSvnelobebs Rebulobs yoveli mTeli tipi:
#include<stdio.h> #include<stdlib.h> #include <limits.h> int main() { int x = INT_MIN, y = INT_MAX; unsigned int ux = UINT_MAX; long int lx = LONG_MIN, ly = LONG_MAX; unsigned long int lu = ULONG_MAX; short int sx = SHRT_MIN, sy = SHRT_MAX; unsigned short int su = USHRT_MAX; printf("int ikavebs %d baits\n", sizeof(int)); printf("misi diapazonia %d : %d\n", x,y); printf("unsigned int-is diapazonia 0 : %u\n", ux); printf("long int ikavebs %d baits\n", sizeof(long)); printf("misi diapazonia %ld : %ld\n", lx,ly); printf("unsigned long-is diapazonia 0 : %lu\n", lu); printf("short int ikavebs %d baits\n", sizeof(short)); printf("misi diapazonia %hd : %hd\n", sx,sy); printf("unsigned short int-is diapazonia 0 : %hu\n", su); system("pause"); return 0; }

programis Sesrulebis Sedegi: int ikavebs 4 baits misi diapazonia -2147483648 : 2147483647 unsigned int-is diapazonia 0 : 4294967295 long int ikavebs 4 baits misi diapazonia -2147483648 : 2147483647 unsigned long-is diapazonia 0 : 4294967295 short int ikavebs 2 baits misi diapazonia -32768 : 32767 unsigned short int-is diapazonia 0 : 65535 Press any key to continue . . .

28

programaSi dagvWirda limits.h failis CarTva, romelSic gansazRvrulia kontantebi (mudmivebi) mTeli tipebis udidesi da umciresi mniSvnelobebisaTvis (mudmivebis Sesaxeb ix. qvemoT).

tipi char
tipi char agreTve ganekuTvneba mTel tipebs. am tipis ricxvi ikavebs mexsierebaSi erT baits da moTavsebulia diapazonSi (-128)-idan 127-mde. gulisxmobis principiT char niSniani (signed) tipia. unsigned char faravs diapazons 0dan 255mde. Zalian mokle mTeli ricxvebis wakiTxva da dabeWdva SeiZleba %d specifikatoriT. char xSirad moixsenieba, rogorc simboluri tipi. aq winaaRmdegoba ar aris, radgan yovel simbolos kompiuteris mexsierebaSi Seesabameba mokle mTeli ricxvi misi kodi. simboluri warmodgena gvWirdeba, rodesac simboluri informacia Segvaqvs klaviaturidan an gamogvaqvs ekranze (an printerze), xolo kompiuterSi simboloebi Senaxulia kodebSi. simbolos gardaqmna kodSi da piriqiT xdeba avtomaturad. TiToeuli simbolos kodi moyvanilia ASCII (American Standard Code for Information Interchange) cxrilSi, romelic kodebis standartuli cxrilia da moqmedebs mTels msoflioSi. magaliTad, simbolo-cifri '0' warmodgenilia kompiuterSi orobiTi ricxviT 00110000, rac Seesabameba aTobiT 48, e.i. simbolo '0'-is kodia 48 (ASCII-is mixedviT). amrigad, char tipi programaSi gamoiyeneba or SemTxvevaSi: Tu vmuSaobT Zalian mokle mTel ricxvebTan an Tu vmuSaobT simboloebTan. Zalian mokle mTeli ricxvebis wakiTxva-dabeWdva moiTxovs %d specifikators. simboloebis wakiTxva-dabeWdva SeiZleba %c specifikatoris daxmarebiT. Tu ki simbolos davbeWdavT %d specifikatoriT, miiReba am simbolos kodi. Semdegi sailustracio programa gviCvenebs rogors simbolos, aseve Zalian mikle mTeli ricxvis Setana-gamotanas:
#include <stdlib.h> #include <stdio.h> char very_short; /* Zalian mokle mTeli */ char symbol; /* simbolo */ int main() { printf("ShemoitaneT simbolo : "); /* wavikiTxoT simbolo */ scanf("%c", &symbol); /* davbeWdoT simbolo da misi kodi */ printf("Simbolo aris %c, misi kodi aris %d\n", symbol, symbol); printf("ShemoitaneT Zalian mokle mTeli : "); /* wavikiTxoT Zalian mokle mTeli */ scanf("%d", &very_short); very_short+=10; /* davbeWdoT Zalian mokle mTeli */ printf("%d\n", very_short ); system("PAUSE"); return 0; }

programis gamosatan ekrans SeiZleba hqondes saxe: ShemoitaneT simbolo : A Simbolo aris A, misi kodi aris 65 ShemoitaneT Zalian mokle mTeli : 70 80 Press any key to continue . . . char tipTan scanf is gamoyenebisas saWiroa didi sifrTxile, radgan scanf("%c", &symbol); Setyobineba gansxvavebiT scanf("%d", &x); an scanf("%s", str); Setyobinebebisgan, ar axdens harebis ignorirebas. sakmarisia As nacvlad avkriboT hari da

29

A, rom miviRebT sruliad gansxvavebul Sedegs: simbolod CaiTvleba hari da daibeWdeba misi kodi, xolo A simbolo wava Zalian mikle mTeli ricxvis nacvlad (anu programa aRar daelodeba ricxvis akrebas radgan buferSi ukve aris raRac). analogiuri problemebi Cndeba, rodesac scanf iT Sesayvani gvaqvs simbolo, xolo programam am momentisTvis ukve moaxdina scanf iT raime sxva monacemis Seyvana. maSin, bolo Seyvanis maniSnebeli \n simbolo, romelic buferSi aris daarCenili, avtomaturad wava Sesatani simbolos nacvlad. C -Si saerTod Znelia Secdomebis aRmoCena da gasworeba, maT Soris am tipis Secdomebisac. am SemTxvevaSi, gamosavals warmoadgens simbolos Semtani scanf is win getchar funqciis gamoyeneba, romelic moaSorebs zedmet simbolos. am tipis magaliTebi ganxilulia Cveni kursis praqtikul da laboratoriul savarjiSoebSi.
C-s gaaCnia simboloebis Setana-gamotanis specialuri standartuli funqciebi - getchar da putchar. orive funqcia aRwerilia stdio.h failSi. getchar-s aqvs saxe: getchar()

funqcia kiTxulobs TiTo simbolos klaviaturidan da abrunebs mis kods. magaliTad,


char ch; ch = getchar();

fragmentis Sesrulebis Semdeg ch cvladis mniSvneloba iqneba getchar-iT klaviaturidan wakiTxuli simbolo (misi kodi). funqcias putchar aqvs saxe:
putchar(simbolo) putchar beWdavs simbolos ekranze. char ch ='Z'; putchar(ch);

magaliTad,

fragmenti dabeWdavs ekranze Z simbolos. getchar funqciis msgavsia getch. misi saTauri mocemulia conio.h failSi. igi aCerebs ekrans klaviaturis nebismier Rilakze xelis daWeramde, anu igive efeqtisaTvis, romelic miiRweva system("PAUSE") funqciis gamoZaxebiT. magaliTad, Semdegi sailustracio programis
#include<stdio.h> #include<conio.h> int main() { char p; printf("Enter a symbol : "); p=getchar(); /* simbolos wakiTxva */ printf("Symbol is : "); putchar(p); /* simbolos beWdva */ getch(); /* ekranis gaCereba */ return 0; }

Sesrulebis Sedegi SeiZleba iyos: Enter a symbol : B Symbol is : B_

namdvili ricxvebis tipebi


C-Si namdvili ricxvebic sxvadasxvanairad SeiZleba iqnas realizebuli. float niSnavs zomier sizustes (Cveulebriv esaa 4 baiti). double uzrunvelyofs ormag sizustes floatTan SedarebiT (Cveulebriv esaa 8 baiti). long double niSnavs gazrdil sizustes. doubleTan

30

SedarebiT (zogierT sistemaSi es aris 10 baiti, zogan kidev ufro meti). konkretul kompiuterze konkretuli tipis sizustis garkveva problemas ar warmoadgens. magaliTad:
#include <stdio.h> #include <stdlib.h> float f; double d; long double x; /* namdvili ricxvi */ /* ormagi sizutis namdvili ricxvi */ /* gazrdili sizutis namdvili ricxvi */

int main() { printf("float ikavebs %d baits\n", sizeof(f) ); printf("double ikavebs %d baits\n", sizeof(d) ); printf("long double - %d baits\n", sizeof(x) ); system("PAUSE"); return 0;

programis Sesrulebis Sedegi: float ikavebs 4 baits double ikavebs 8 baits long double 12 baits Press any key to continue . . . Semdegi cxrili gviCvenebs printf da scanf funqciebSi gamosayenebel specifikatorebs mcocavwertilebiani tipebisTvis: specifikatorebi
%f %f %lf %Lf

gamoyenebebi
float double double long double

SeniSvna printf-sa da scanf-isTvis mxolod printf-isTvis mxolod scanf-isTvis yvela kompiuterisTvis ar gamoiyeneba

ganacxadebi mudmivebze
zogjer saWiroa iseTi mniSvnelobebis gamoyeneba, romlebic ar icvleba programis Sesrulebis procesSi, an saerTodac (magaliTad ). rezervirebuli sityva const migviTiTebs im mniSvnelobaze, romelic ar icvleba. magaliTad, Tu gvinda mudmivis gamoyeneba, Cven gamoviyenebT Setyobinebas:
const float PI = 3.141592; /* wrewiris sigrZis Sefardeba diametrTan */

miRebulia, rom cvladebis saxelebSi mxolod qveda registris simboloebi Tumca es SezRudvebi programirebis enidan ar modis da stilisturi Sinaarsisaa. mudmivis inicializeba xdeba mxolod ganacxadis gakeTebis momentSi da mere is ar icvleba.

INCLUDEPICTURE "http://tbn0.google.com/images?q=tbn:pfc_AbsIUcdxOM:https://secure.raindropitg.com/aaustore/images gamoiyeneba, xolo mudmivebis saxelebSi _ mxolod zeda registris,

TeqvsmetobiTi da rvaobiTi mudmivebi


Cs SeuZlia ricxvebis gadayvana Tvlis aTobiTi sistemidan TeqvsmetobiTSi da rvaobiTSi da piriqiT. amas igi akeTebs specifikatorebis saSualebiT: Tu ricxvi iwyeba 0xiT, es niSnavs rom igi aris TeqvsmetobiTi. Tu iwyeba nuliT, es niSnavs, rom gvaqvs rvaobiTi ricxvi. magaliTad, Tu k aris mTeli tipis cvladi, maSin Setyobineba k = 020+0x20+20; niSnavs, rom am cvladis mniSvneloba gaxdeba rvaobiTi, aTobiTi da TeqvsmetobiTi ocebis jami, anu 68 (Tu davbeWdavT, rogorc aTobiT ricxvs %d specifikatoriT). Tu gvinda Sedegi amovbeWdoT,

31

rogorc rvaobiTi ricxvi, maSin unda gamoviyenoT specifikatori %o, xolo TeqvsmetobiTi ricxvis saxiT amosabeWdad specifikatori %x. Semdeg magaliTSi aTobiTi ricxvi ibeWdeba rogorc aTobiTi, rogorc rvaobiTi da rogorc TeqvsmetobiTi:
#include <stdio.h> #include <stdlib.h> int main(void) { int x = 100; printf("dec = %d; octal = %o; hex = %x\n", x, x, x); printf("dec = %d; octal = %#o; hex = %#x\n", x, x, x); system("PAUSE"); return 0;

programis Serulebis Sedegi: dec = 100; octal = 144; hex = 64 dec = 100; octal = 0144; hex = 0x64 Press any key to continue . . .

Semoklebuli operatorebi
CSi aris araerTi operatori, romlis Sesruleba niSnavs ori sxva operatoris an instruqciis Sesrulebas. magaliTad, Zalian xSirad aris saWiro romelime cvladis (vTqvaT counter) mniSvnelobis erTiT gazrda. Tu amas miniWebis SetyobinebiT gavakeTebT, gveqneba: igive Sedegs mogvcems ++ (momatebis) operatoris gamoyeneba: analogiuri moqmedebisaa - (moklebis) operatori, romelic erTiT amcirebs cvladis mniSvnelobas. Tu gvinda ara erTiT, aramed 3iT gavzardoT cvladis mniSvneloba, unda gamoviyenoT += operatori, anu Semdegi ori Setyobineba akeTebs erTi da igive rames: Semdeg cxrilSi moyvanilia ramdenime aseTi operatori da maTi gamoyenebis magaliTi: operatori
+= -= *= /= %= counter = counter + 3; counter += 3; ++counter; counter = counter +1;

Setyobineba
x x x x x += -= *= /= %= 2; 2; 2; 2; 2;

ekvivalenturi Setyobineba
x x x x x = = = = = x x x x x + * / % 2; 2; 2; 2; 2;

Crdilovani efeqtebi
samwuxarod, C ar krZalavs Crdilovani efeqtebis gamoyeneba. Crdilovani efeqti niSnavs operacias, romelic sruldeba Setyobinebis ZiriTadi operaciasTan erTad, damatebiT. magaliTad, Semdegi kodi sruliad koreqtulia:
size = 5; result = ++size;

pirveli Setyobineba mianiWebs size s mniSvnelobas 5, meore mianiWebs result cvlads size is mniSvnelobas (esaa ZiriTadi operacia), magram damatebiT kidev, gazrdis size s (Crdilovani efeqti).

++x Tu x++
momatebis operatoris es ori forma erTnairad efeqturia CSi, da Tu Crdilovan efeqtebs Tavs avaridebT, Sedegic erTnairi aqvT. magram pirveli, e.w. prefiqsuli forma ++x SedarebiT

32

efeqturia da amitom sjobs Tavidanve mas mivaniWoT upiratesoba. zogadad, maTi moqmedebis meqanizmi aseTia: Tu gamosaxulebaSi monawileobs x++, maSin jer gamosaxulebis mniSvneloba gamoiTvleba da mere x is mniSvnelobas moemateba erTi. amitom, Semdegi fragmentis Sedegad
n = x = x = 5. n = x =

amisgan gansxvavebiT, Semdegi fragmentis Sedegad:

5; n++;

5; ++n; gveqneba x = 6.

informaciis Setana-gamotanis gadamisamarTeba. funqcia freopen


C-s programis gaSvebisTanave mas avtomaturad uerTdeba 3 nakadi: Setanis standartuli nakadi stdin, gamotanis standartuli nakadi stdout da Secdomebis standartuli nakadi stderr. Setanis standartuli nakadi stdin gulisxmobis principiT asocirebulia klaviaturasTan; gamotanis standartuli nakadi stdout - ekranTan. ekranTan dakavSirebulia Secdomebis standartuli stderr nakadic: misi saSualebiT xdeba Secdomebis Sesaxeb gzavnilebis ekranze gamotana. C -Si SesaZlebelia Setana-gamotanis nakadebis gadamisamarTeba, kerZod, sawyisi informaciis Setana failidan da programis Sedegebis gamotana failSi. amisaTvis arsebobs standartuli funqcia freopen, romlis prototipi (saTauri) mocemulia stdio.h failSi. Setanis nakadis mibma failTan xdeba freopen funqciaze Semdegi saxis mimarTviT:
freopen (striqoni 1 , striqoni 2 , stdin);

sadac striqoni 1 aRwers sawyisi monacemebis Semcvel failamde srul gzas, xolo striqoni 2 _ failis gaxsnis reJims. magaliTad, Setyobineba
freopen ("c:\monacemebi\data.txt", "r", stdin);

niSnavs, rom sawyisi monacemebi programas miewodeba failidan data.txt, romelic ganTavsebulia c: diskze saqaRaldeSi monacemebi. failis gaxsnis reJimia r(read) failidan wakiTxva. funqciis gamoZaxeba freopen ("info.txt", "r", stdin); niSnavs, rom sawyisi monacemebi miiReba failidan info.txt, romelic ganTavsebulia mimdinare direqtoriaSi (anu igive katalogSi, sadac aris ganTavsebuli programis faili). freopen funqciis freopen (striqoni 1 , striqoni 2 , stdout); formatiT gamoyeneba uzrunvelyofs informaciis gamotanas (Caweras) im failSi, romlis sruli gza mocemulia striqoni 1 -Si. striqoni 2 - aRwers failis gaxsnis reJims. magaliTad, funqciis gamoZaxeba freopen ("c:\shedegi.txt", "w", stdout); niSnavs, rom programiT miRebuli Sedegebi Caiwereba c: diskze shedegi.txt failSi. failis gaxsnis reJimia w(write) failSi Cawera. funqciis gamoZaxeba freopen ("pasuxi.txt", "w", stdout); uzrunvelyofs Sedegebis gamotanas mimdinare direqtoriis pasuxi.txt failSi. Tu failidan wakiTxvis dros freopen funqciaSi miTiTebuli faili ver moiZebna (ar aRmoCnda miTiTebul adgilas), dafiqsirdeba failis gaxsnis Secdoma. failSi Caweris SemTxvevaSi freopen funqciaSi miTiTebuli faili avtomaturad Seiqmneba miTiTebul adgilas. Tu ki faili ukve arsebobda, masSi adre Cawerili informacia ikargeba da Caiwereba programis Sesrulebis Sedegebi, amitom failSi Caweris dros gvmarTebs sifrTxile. ganvixiloT sailustracio magaliTi: "monacemebi.txt" failSi mocemulia sami mTeli ricxvi. vipovoT am ricxvebis saSualo ariTmetikuli da pasuxi CavweroT "pasuxi.txt" failSi. Sesabamis programas aqvs Semdegi saxe:
#include<stdio.h> int main() { int a, b, c; float sashualo;

33

freopen( "monacemebi.txt", "r", stdin); scanf("%d%d%d", &a, &b, &c); sashualo =(a+b+c)/3.; freopen( "pasuxi.txt", "w", stdout); printf("%d %d %d ricxvebis ", a, b, c); printf("sashualo ariTmetikuli = %f ", sashualo);

magaliTad:

return 0; }

faili monacemebi.txt 12 -4 10

faili pasuxi.txt 12 -4 10 ricxvebis sashualo ariTmetikuli = 6.000000

Tavi 5.

marTvis Setyobinebebi

am TavSi Cven vnaxavT, Tu rogor SeiZleba SevcvaloT programis Sesrulebis Tanmimdevroba ganStoebis Setyobinebisa (branching statement) da ciklis Setyobinebis (looping statement, sityvasityviT _ maryuJis) meSveobiT. ganStoebis Setyobinebis gamoyenebiT programuli kodis erTi nawili (Sto) sruldeba an ar sruldeba imisda mixedviT, Tu rogoria piroba. ciklis Setyobinebis meSveobiT xdeba programuli kodis nawilis saWiro raodenobajer ganmeoreba.

if Setyobineba
if Setyobinebis zogadi forma aseTia: if (piroba) Setyobineba;

Tu piroba WeSmaritia (nulisagan gansxvavebulia), maSin Setyobineba sruldeba, xolo Tu mcdaria (0-is tolia) _ ar sruldeba. magaliTad, vTqvaT, Cven vwerT programas, romelic afasebs studentis moswrebas. cnobilia, rom students sagani Cabarebulad eTvleba, Tu jamuri 100 qulidan man daagrova 51 mainc. Tu studentma Caabara sagani, programam unda dabeWdos Sesabamisi Sinaarsis gzavnili. Cveni amocanis amoxsna CavweroT fsevdokodis saxiT*: Tu studentis Sefaseba 51-ze metia an toli davbeWdoT sagani Cabarebulia fsevdokodSi mowmdeba piroba studentis Sefaseba 51-ze metia an toli. Tu piroba WeSmaritia, ekranze unda daibeWdos sagani Cabarebulia, winaaRmdeg SemTxvevaSi ekranze gamotana ar xdeba. axla CavweroT programis es fragmenti C-ze:
if (grade >= 51) printf("Passed course\n ");

mivaqcioT yuradReba, rom C-s kodi srulad Seesabameba fsevdokods. swored es xdis fsevdokods programebis damuSavebis mZlavr saSualebad: fsevdokodze Cawerili gaazrebuli algoriTmi martivad gardaiqmneba programad, xolo fsevdokodis winadadebebi gamoiyeneba programis komentarebad. sqematurad Cveni if Setyobineba gamoisaxeba ase:

daibeWdos diax fsevdokodi aris araformaluri ena, romelic gamoiyeneba algoriTmis (amocanis grade>=51 sagani amosaxsnelad saWiro moqmedebaTa mimdevrobis) CawerisTvis. Cabarebulia
*

ara

34

aq >= aris Sedarebis operatori, romelic niSnavs metia an toli, xolo TviT Setyobineba ikiTxeba ase: Tu grade aris 51-ze meti an toli, dabeWde Sesabamisi gzavnili. Sedarebis operatorebis sruli sia moyvanilia Semdeg cxrilSi.
operatori <= < > >= == ! = mniSvneloba naklebia an toli naklebia metia metia an toli udris ar udris

yuradReba unda mivaqcioT, rom operatori == Sedgeba ori = niSnisgan da ar unda avurioT miniWebis SetyobinebaSi. ramdenime Setyobinebis dajgufeba SeiZleba maTi figurul frCxilebSi CasmiT. magaliTad,
if (grade >= 51) { ++student_count; printf("You passed course.\n"); }

fragmentis ramdenjerme ganmeorebiT daviTvliT warmatebuli studentebis raodenobas da TiToeuls SevatyobinebT sagnis Cabarebis Sesaxeb. TvalsaCinoebisaTvis {}-Si Casmuli Setyobinebebi, Cveulebriv, Seweulia. es saSualebas aZlevs programists swrafad gansazRvros, Tu romeli Setyobinebebia pirobis mixedviT Sesasrulebeli.

if-else Setyobineba
if Setyobinebis sruli forma aseTia: if (piroba) Setyobineba 1 ; else Setyobineba 2 ;

Tu piroba WeSmaritia (nulisagan gansxvavebulia), maSin sruldeba Setyobineba 1 xolo Tu mcdaria (0-is tolia), maSin _ Setyobineba 2 . zemoT moyvanil magaliTSi Cven davbeWdeT gzavnili mxolod im SemTxvevaSi, roca studentma Caabara sagani. sasurvelia SevatyobinoT students, Tu ramdeni qula daaklda mas sagnis Casabareblad. vTqvaT, studentis Sefaseba Seadgens grade qulas. maSin Sesabamisi fsevdokodi SeiZleba gamoiyurebodes ase: Tu Sefaseba 51-ze metia an toli davbeWdoT Tqven CaabareT sagani winaaRmdeg SemTxvevaSi davbeWdoT Tqven dagakldaT 51-grade qula xolo C-s kodi iqneba:
if (grade >= 51) printf("You passed course \n "); else printf("You need %d more points\n", 51-grade); daibeWdos daibeWdos diax Tqven Tqven sqematurad Cveni if-else Setyobineba gamoisaxeba ase: ara grade>=51
dagakldaT 51grade qula CaabareT sagani

35

axla ganvixiloT sxva programis fragmenti (araswori wanacvlebiT):


if (number > 0) /* pirveli if Setyobineba */ if ( number % 2 == 0) /* meore if Setyobineba */ printf("Number positive and even\n"); else printf("Number positive and odd\n");

aq aris ori if Setyobineba da erTi else. romel if-s ekuTvnis else, pirvels TuUmeores? C-s sintaqsis wesebis mixedviT else ekuTvnis mis win mdgom uaxloes if-s. Sesabamisad, sintaqsurad swori pasuxia meore if-s. aseT kiTxvebze pasuxs aadvilebs programirebis kargi stilis gamoyeneba. sasurvelia kodi CavweroT figuruli frCxilebis daxmarebiT:
if (number > 0) /* pirveli if Setyobineba */ { if ( number % 2 == 0) /* meore if Setyobineba */ printf("Number positive and even\n"); else printf("Number positive and odd\n"); }

Tu meore if Setyobinebas CavwerT figurul frCxilebSi, anu Tu else-s mivakuTvnebT pirvel if-s, miviRebT azrobriv Secdomas:
if (number > 0) /* pirveli if Setyobineba */ { if ( number % 2 == 0) /* meore if Setyobineba */ printf("Number positive and even\n"); } else printf("Number positive and odd\n");

zogjer saWiroa else mivakuTvnoT swored pirvel if-s, maSin meore if aucileblad unda Caisvas figurul frCxilebSi:
if (number > 0) /* pirveli if Setyobineba */ { if ( number % 2 == 0) /* meore if Setyobineba */ printf("Number positive and even\n"); } else printf("Number negative or zero\n");

rogorc vxedavT, {}-is sxvadasxva gamoyeneba cvlis Setyobinebis Sinaarss, amitom if-else Setyobinebis Cawerisas gvmarTebs sifrTxile.

rogor ar unda gamoviyenoT strcmp


funqcia strcmp adarebs or striqons, Semdeg abrunebs nuls, Tu isini tolia, da nulisgan gansxvavebul ricxvs, Tu striqonebi gansxvavebulia. imis Sesamowmeblad, tolia Tu ara ori striqoni, viyenebT programul kods:P
/* SevamowmoT string1 == string2 */ if (strcmp(string1, string2) == 0) printf("Strings equal\n");

36

else

printf("Strings not equal\n");

ar SeiZleba mocemuli kodis ase Semokleba:


if (strcmp(string1, string2)) printf("......");

erTi SexedviT, programa cxadad adarebs or striqons da asrulebs printf Setyobinebas, Tu isini tolia. samwuxarod, es erTi SexedviT cxadi ram arasworia. Tu striqonebi tolia, strcmp abrunebs 0-s da printf ar sruldeba. amitom Zalian frTxilad unda iyoT strcmp-is gamoyenebis dros da yovelTvis unda gamoiyenoT komentari.

ganmeoebis(looping) Setyobineba
gameorebis Setyobineba saSualebas iZleva gavimeoroT programuli kodis nawili ramdenjerme an manam, sanam sruldeba raime piroba. magaliTad, gameorebis Setyobinebebi gamoiyeneba, roca viTvliT dokumentSi sityvebis raodenobas, an studentTa Soris friadosnebis raodenobas.

while Setyobineba

while Setyobinebis zogadi forma aseTia: while (piroba) Setyobineba;

programa Seasrulebs while-Si arsebul Setyobinebas ramdenjerme, manam sanam piroba gaxdeba mcdari (0). Tu piroba Tavidanve mcdaria, maSin es Setyobineba saerTod ar Sesruldeba.
while Setyobinebis zogadi saxe SeiZleba warmovadginoT Semdegi sqemiT:

piroba ara

diax

Sesasrulebeli Setyobinebebi

Sesasrulebeli Setyobinebebi, rogorc wesi, Caismeba { } frCxilebSi da mas ewodeba


while-is tani.

vTqvaT, mocemuli gvaqvs amocana: studentTa jgufma Caabara gamocda. jgufSi 10 studentia. maTi Sefasebebi mTeli ricxvebi 0-dan 100-mde Cawerilia info.txt failSi, romelic moTavsebulia imave saqaRaldeSi sadac aris grade.cpp. vipovoT studentTa saSualo Sefaseba. CavweroT algoriTmi fsevdokodis saSualebiT: gavanuloT SefasebaTa raodenobis mTvleli gavanuloT Sefasebebis jami manam, sanam Sefasebebis raodenobis mTvleli 10-ze naklebia

wavikiTxoT failidan morigi Sefaseba SefasebaTa raodenobis mTvleli gavzardoT erTiT Sefasebebis jami gavzardoT mimdinare SefasebiT gavyoT Sefasebebis jami 10-ze da ganayofi mivaniWoT studentTa saSualo Sefasebas davbeWdoT saSualo Sefaseba C-s Sesabamis programas aqvs saxe:
/********************* * programa grade.cpp * *********************/

37

#include <stdio.h> #include <stdlib.h> int grade; int grade_count; int total; float average; /* Sefaseba */ /* Sefasebebis raodenobis mTvleli */ /* Sefasebebis jami */ /* saSualo Sefaseba */

int main() { freopen("info.txt", "r", stdin); grade_count=0; total=0; { /* gavanuloT SefasebaTa raodenobis mTvleli */ /* gavanuloT SefasebaTa jami */

while (grade_count<10) /* manam, sanam Sefasebebis raodenobis mTvleli < 10 */ scanf("%d", &grade); /* wavikiTxoT failidan morigi Sefaseba */ grade_count++; /* gavzardoT erTiT raodenobis mTvleli */ total+=grade; /* gavzardoT jami mimdinare SefasebiT */

} average=(float)total/10; /* vipovoT saSualo Sefaseba */ /* davbeWdoT saSualo Sefaseba */ printf("Average grade is %0.2f\n", average); system("pause"); return 0; }

magaliTad:
F info.txt faili
81 53 60 68 72 85 95 56 90 51

G ekranze gamodis
Average grade is 71.10 Press any key to continue . . .

programis kodSi freopen("info.txt", "r", stdin); funqcia axdens Setanis nakadis gadamisamarTebas info.txt failze. average=(float)total/10; Setyobinebis marjvena mxareSi vxedavT total/10 gamosaxulebas. radgan total da 10 mTeli ricxvebia, C-s wesebis mixedviT / operatori Seasrulebs mTelad gayofas, anu miviRebT ganayofis mxolod mTel nawils. cxadia, rom aseTi pasuxi zusti ar aris. swori pasuxis misaRebad viyenebT namdvil ricxvad cxad gardaqmnas (float)total/10 (an total/(float)10). printf funqciaSi %0.2f specifikatori aRniSnavs, rom nadvili ricxvi average daibeWdeba aseulebamde sizustiT, anu mis CanawerSi aTobiTi wertilis Semdeg iqneba ori cifri.

break Setyobineba
Cven gamoviyeneT while Setyobineba, rom gamogveTvala saSualo Sefaseba. while-Si gaerTianebuli Setyobinebebis ganmeoreba dasrulda, roca misi piroba gaxda mcdari ( 0). Tumca ganmeorebis Setyobineba SegviZlia SevwyvitoT nebismier bijze break (Sewyveta) Setyobinebis gamoyenebiT. vTqvaT, data.txt failis TiToeul striqonSi mocemuli gvaqvs studentis gvari da misi Sefaseba gamocdaze. studentTa raodenoba udris 10-s. Cven unda davweroT programa, romelic dabeWdavs pirvelive studentis gvars, romelmac miiRo gamocdaze 100 qula. Tu 100 qula ver miiRo verc erTma studentma, programam unda dabeWdos Sesabamisi gzavnili. fsevdokodze Cawerili algoriTmi:

studentTa raodenobis mTvlels mivaniWoT 1 manam, sanam studentTa raodenobis mTvleli 10-ze naklebia an toli wavikiTxoT failidan striqoni - studentis gvari da misi niSani erTiT gavzardoT studentTa raodenoba

38

Tu mimdinare studentis Sefaseba 100 qulaa, davbeWdoT studentis gvari da SevwyvitoT ganmeoreba Tu studentTa raodenobis mTvleli 10-ze metia davbeWdoT 100 qula ar dawerila C-s programas aqvs saxe:
#include<stdio.h> #include<stdlib.h> int grade; /* Sefaseba */ int students_count; /* studentTa raodenobis mTvleli */ char name[30]; /* studentis gvari */ int main() { freopen("data.txt", "r", stdin); students_count=1; while ( students_count <= 10 ) { scanf("%s%d", name, &grade); students_count++; if( grade == 100 ) { printf("%s\n", name); break; } } if( students_count > 10 ) printf("Estimation of 100 points were not\n"); system("pause"); return 0; }

magaliTad:

F data.txt faili
Arevadze 67 Kankava 89 Kutelia 53 Buadze 40 Metreveli 100 Jalali 75 Iashvili 100 Lejava 50 Nikoladze 51 Papiashvili 99

Ggamotanis ekrani
Metreveli Press any key to continue . . .

ganvixiloT kidev erTi amocana: gvinda SevkriboT ricxvebis mimdevroba, oRond winaswar ar viciT maTi raodenoba. amjerad ricxvebi SevitanoT klaviaturidan. Cven gvWirdeba raime xerxi, rom programisaTvis gasagebi iyos rodis Sewydes ricxvebis wakiTxva. gamoviyenoT e. w. sakontrolo mniSvneloba, vTqvaT 0. Tu sakontrolo mniSvnelobas ar gamoviyenebT, maSin qvemoT moyvanili programa ar dasruldeba, radgan while Setyobinebis pirobas warmoadgens gamosaxuleba 1, romelic yovelTvis 0-sgan gansxvavebulia (WeSmaritia). erTaderTi gza am Setyobinebis dasrulebisa aris aseTi saxis break Setyobineba:
if (item == 0) break; sadac item cvladSi inaxeba klaviaturidan wakiTxuli morigi mTeli ricxvi.

C-programas eqneba saxe:


#include <stdio.h> #include <stdlib.h> int total; int item;

/* jamis mimdinare mniSvneloba */ /* morigi wasakiTxi ricxvi */

39

int main() { total = 0; while (1) { printf("Enter number to add \n"); printf(" or 0 to stop:"); scanf("%d", &item); if (item == 0) break; total += item; printf("Total: %d\n", total);

} printf("Final total %d\n", total); system("PAUSE"); return 0;

magaliTad: Enter number to add or 0 to stop:2 Total: 2 Enter number to add or 0 to stop:5 Total: 7 Enter number to add or 0 to stop:56 Total: 63 Enter number to add or 0 to stop:-12 Total: 51 Enter number to add or 0 to stop:0 Final total 51 Press any key to continue . . .

continue Setyobineba
continue Setyobineba Zalian hgavs break Setyobinebas, mxolod ganmeorebis Setyobinebis dasrulebis nacvlad continue wyvets mis mimdinare bijs, gamotovebs continues momdevno Setyobinebebs da Tavidan iwyebs ganmeorebis Setyobinebis momdevno bijis Sesrulebas. magaliTad, vTqvaT, isev vamuSavebT data.txt failSi mocemul informacias, mxolod axla unda davbeWdoT im studentTa gvarebi, vinc ver Caabara gamocda da daviTvaloT maTi ricxvi. studentma gamocda ver Caabara, Tu man miiRo 51 qulaze naklebi. Tu aseTi studenti ar aRmoCnda, programam unda dabeWdos yvelam Caabara. Sesabamis C-programas eqneba saxe: #include<stdio.h> #include<stdlib.h> int grade; int students_count; char name[30]; int failures;

/* CaWrili studentebis raodenoba */

int main() { freopen("data.txt", "r", stdin); students_count=1; failures=0;

40

while (students_count < = 1 0) { scanf("%s%d", name, &grade); students_count++; if(grade > = 5 1) continue; printf("%s\n", name); failures++;

if(failures = = 0 ) printf("All passed\n"); else printf("Failed %d \n", failures); system("pause"); return 0;

magaliTad:
F data.txt faili Arevadze 67 Kankava 89 Kutelia 53 Buadze 40 Metreveli 100 Jalali 75 Iashvili 100 Lejava 50 Nikoladze 51 Papiashvili 99 Ggamotanis ekrani
Buadze Lejava Failed 2 Press any key to continue . . .

kvlav davubrundeT sakontrolo mniSvnelobiT (0-iT) damTavrebul mimdevrobis amocanas da ase SevcvaloT piroba: daviTvaloT am mimdevrobis dadebiTi ricxvebis jami da uaryofiTi ricxvebis raodenoba. maSin Sesabamisi C-kodi miiRebs saxes:
#include <stdio.h> #include<stdlib.h> int total; int item; int minus_items; /* jamis mimdinare mniSvneloba */ /* morigi wasakiTxi ricxvi */ /* uaryofiTi ricxvebis raodenoba */

int main() { total = 0; minus_items = 0; while (1) { printf("Enter number to add\n"); printf(" or 0 to stop:"); scanf("%d", &item); if (item == 0) break; if (item < 0) { ++minus_items; continue; Enter number to add or 0 to } stop:1 Total: 1 total += item; printf("Total: %d\n", total); Enter number to add } or 0 to stop:2 printf("Final total %d\n", total); Total: 3 printf("with %d negative items omitted\n",minus_items);

Enter number to add or system("pause"); 0 to stop:3 return Total: 6 0; } Enter number to add or 0 to magaliTad: stop:-6 Enter number to add or 0 to stop:-5 Enter number to add or 0 to stop:0 Final total 6 with 2 negative items omitted Press any key to continue . . .

41

gverdiTi efeqtebi
C saSualebas gvaZlevs gamoviyenoT miniWebis Setyobineba TiTqmis yvelgan. magaliTad, miniWebis Setyobineba SegiZliaT CasvaT sxva miniWebis Setyobinebis SigniT:
/* ar daaprogramoT ase */ average = total_value / (number_of_entries = last - first);

es eqvivalenturia Semdegi ori Setyobinebebisa:


/* daaprogrameT ase */ number_of_entries = last - first; average = total_value / number_of_entries;

pirveli versia malavs number_of_entries-is miniWebas gamosaxulebis SigniT. programa ki naTeli da martivi unda iyos. C imis saSualebasac aZlevs programists, rom man miniWebis Setyobineba Casvas whileis pirobaSi. magaliTad:
/* ar daaprogramoT ase */ while ((current_number = last_number + old_number) < 100) printf("Term %d\n", current_number);

erideT aseTnairad daprogramebas. miaqcieT yuradReba, ramdenad kargad Cans logika qvemoT moyvanil versiaSi:
/* daaprogrameT ase */ while (1) { current_number = last_number + old_number; if (current_number >= 100) break; printf("Term %d\n", current_number);
}

axla ganvixiloT Semdegi amocana: data.in failSi moTavsebulia 15 mTeli ricxvi. Semdegi programa iTvlis failSi 7-is toli ricxvebis raodenobas. SekiTxva: raRac mizezis gamo programa fiqrobs, rom failis yvela ricxvi 7-is tolia. ratom?
#include<stdio.h> #include<stdlib.h> int number; /* ricxvi */ int numbers_count; /* ricxvebis mTvleli */ int equal; /* 7-is toli ricxvebis raodenoba */ int main()

42

freopen("data.in", "r", stdin); numbers_count=1; /* ricxvebis mTvlels mivaniWeT erTiani */ equal=0; /* 7-is toli ricxvebis raodenoba gavanuleT */ /* manam, sanam ricxvebis mTvleli 15-ze naklebia an toli*/ while ( numbers_count <= 15 ) { scanf("%d", &number); /* wavikiTxeT ricxvi failidan */ numbers_count++; /* ricxvebis mTvleli gavzardeT erTiT */ if( number = 7 ) /* 7-is toli ricxvebis raodenoba gavzardeT erTiT */ equal++; } /* davbeWdeT 7-is toli ricxvebis raodenoba */ printf("Equal of 7 are %d\n", equal); system("pause"); return 0;

magaliTad:
F data.in faili
12 3 -67 7 987 -100 0 8 -23 7 77 0 -123 56 987

Ggamotanis ekrani
Equal of 7 are 15 Press any key to continue . . .

pasuxi: es programa ilustrirebas ukeTebs C-s erT-erT yvelaze gavrcelebul Secdomas. problema mdgomareobs imaSi, rom C gvaZlevs saSualebas gamoviyenoT miniWebis Setyobineba ifis pirobaSi. SetyobinebaSi: SecdomiT Cawerilia tolobis erTi niSani (=) nacvlad orisa (==). C mianiWebs number-s mniSvnelobas 7 da Seamowmebs Sedegs. radgan Sedegi aranulovania (WeSmaritia), Sesruldeba equal++; Setyobineba. es moxdeba number cvladis 15-ive mniSvnelobisaTvis, rac sabolood gvaZlevs SecdomiT pasuxs. es aris yvelaze gavrcelebuli Secdoma, romelsac C-s uSveben. damwyebi programistebi
if( number = 7 )

Tavi 6.

for Setyobineba

sxva mmarTveli Setyobinebebi

swicht Setyobineba switch, break da continue

for Setyobineba es Setyobineba programists aZlevs saSualebas for-is Semdeg moTavsebuli Setyobineba Seasrulos ramdenjerme; amasTan, ganmeorebaTa ricxvs TviTon Setyobinebis saxe gansazRvravs. for Setyobinebebis zogadi saxe aseTia:
for ( inicializacia; pirobis Semowmeba; koreqcia )

Setyobineba;

es Setyobinebeba eqvivalenturia Semdegi Setyobinebebis: inicializacia;


while (pirobis Semowmeba ) {

Setyobineba; koreqcia;

43

} magaliTad, Semdegi programa iyenebs ganmeorebis while Setyobinebebas Sesakrebad. magaliTi total(5w).cpp
#include <stdio.h> #include <stdlib.h> int total; int current; int counter; char line[80]; /* yvela ricxvis jami */ /* damxmare cvladi */ /* viTvliT, ramdenjer ganmeorda */ /* klaviaturidan Setana */

xuTi ricxvis

int main(){ total=0; counter=0; while(counter<5){ printf("number? "); fgets(line, sizeof(line), stdin); sscanf(line, "%d", &current); total+=current; ++counter; } printf("The grand total is %d\n", total); system("Pause"); return (0);

gadavweroT es programa ganmeorebis for Setyobinebis gamoyenebiT.

magaliTi total(5f).cpp
#include <stdio.h> #include <stdlib.h> int total; int current; int counter; char line[80];

/* yvela ricxvis jami */ /* damxmare cvladi */ /* viTvliT, ramdenjer ganmeorda */ /* klaviaturidan Setana */

int main(){ total=0; counter=0; for (counter=0;counter<5;++counter){ printf("number? "); fgets(line, sizeof(line), stdin); sscanf(line, "%d", &current); total+=current;

} printf("The grand total is %d\n", total); system("Pause"); return (0);

mTvlelis mniSvneloba (cvladi counter) aris 0-dan 4-mde. sazogadod 5-mde Cven viTvliT ase: 1,2,3,4,5, magram C-Si miRebulia daTvla 0-dan 4-mde imis gamo, rom masivis indeqsi swored ase icvleba. yuradRebiT gamovikvlioT es ori programa da SevadaroT erTmaneTs. Semdeg naxazze while da for Setyobinebebs Soris msgavsebaa naCvenebi.

44

switch Setyobineba zogadi saxe aseTia:


switch Setyobineba gamoiyeneba mTeli rigi if/else Setyobinebebis sanacvlod. misi

switch ( gamosaxuleba ) { case konstanta1 :

Setyobineba; ... break;

case konstanta2 :

Setyobineba; ... /* sruldeba momdevno Setyobinac */

default:

Setyobineba; ... break; Setyobineba; ... break;

case konstanta3 :

switch Setyobineba iTvlis gamosaxulebas, romelic SeiZleba iyos mTeli, simboluri an CamonaTvali tipis da irCevs Sesasruleblad im Stos, romlis konstantac gamosaxulebis mniSvnelobis tolia. Tu gamosaxulebis mniSvneloba ar daemTxveva arcerT konstanta-s, maSin Sesruldeba default Sto. Tu es Sto ar aris gansazrvruli switch SetyobinebaSi, maSin is arafers ar gaakeTebs. konstantebis ganmeoreba dauSvebelia. Stoebis Tanmimdevroba SeiZleba sxvadasxagvari iyos. xSirad, Tu gansakuTrebuli SemTxveva araa, default Sto bolo SemTxvevas warmoadgens. rekomendirebulia rom igi yovelTvis CasvaT switch SetyobinebaSi. Semdegi magaliTi Seicavs if/else Setyobinebebis mTel rigs:
if (operator == ' + ' ) {

45

kodis es nawili SeiZleba gadavweroT switch Setyobinebis saSualebiT, romelSic sxvadasxva case Setyobinebas viyenebT TiToeuli operaciis nacvlad. default Sto zrunavs yvela im SemTxvevaze, romlebic gaTvaliswinebuli ar gvaqvs. avRniSnoT, rom switch Setyobinebis gamoyenebiT Cveni programa, romelic kalkulators qmnis, ar gamartivebula, is gaxda ufro gasagebi da aqvs Semdegi saxe:
#include <stdio.h> #include <stdlib.h> char line[80]; int result; int operat; int value; int main() { result=0; /* /* /* /* teqsturi striqoni SetanisTvis */ gamoTvlis Sedegi */ operaciis niSani */ mniSvneloba operaciis Sesrulebis Semdeg */ */

result + = value; } else if (operator = = ' - ' ) { result - = value; } else if (operator = = ' * ' ) { result * = value; } else if (operator = = ' / ' ) { if ( value = = 0 ) { printf (" Error: Divide by zero \n " ); printf (" operation ignored \n "); } else result / = value; } else printf (" Unknows operator %c\n ", operator);

/* mniSvnelobis inicializacia

while (1) { printf ("Result: %d\n", result); printf ("Enter operator and number: "); fgets(line, sizeof(line),stdin); sscanf(line,"%c %d", &operat, &value); if((operat == 'q') || (operat =='Q')) break; switch (operat){ case '+': result += value; break; case '-': result -= value; break; case '*': result *= value; break; case '/': if ( value ==0 ){ printf (" Error: Divide by zero \n " ); printf (" operation ignored \n "); } else result /= value;

46

break; default: printf (" Unknows operator %c\n ", operat); break; }

system(PAUSE); return (0); } switch is SigniT gamoyenebuli break Setyobineba wyvets (anu amTavrebs) switch Setyobinebas. Tu ar weria break, maSin Sesruldeba rigis mixedviT Semdegi Setyobinebebi.

magaliTad,

control=0; /* aseT daprogramebas kargi ar eTqmis */ switch (control) { case 0: printf ("Reset\n"); case 1: printf ("Initialization\n"); break; case 2: printf ("Working\n"); }

im SemTxvevaSi, Tu control == 0, programa dabeWdavs:


Reset Initialization case 0 SemTxveva ar damTavrda break SetyobinebiT, amitom Reset-is dabeWdvis Semdeg Sesrulda Semdegi Setyobinebac (case 1), Sedegad daibeWda Initialization. problema sintaqsSi mdgomareobs. roca programists aviwydeba break SetyobinebiT erTerTi case is damTavreba, maSin Sesruldeba momdevno Setyobinebebi, am SemTxvevaSi case 1. roca programisti gamiznulad gamotovebs break Setyobinebas ori an meti case is gaerTianebis mizniT, maSin aucileblad unda gaakeTos Sesabamisi komentari /* sruldeba momdevno Setyobinac */. anu, ganxilul magaliTSi case 0 miiRebs Semdeg saxes: case 0: printf ("Reset\n"); /* sruldeba momdevno Setyobinac */

vinaidan case 2 bolo Stoa, amitom aq ukve SeiZleba break Setyobinebis gamotoveba. da bolos, ismis kiTxva, ra xdeba, roca control = 5? vinaidan switch - s ar aqvs Sto default, amitom is ubralod gaatarebs am SemTxvevas da araferi ar Sesruldeba. programistma yovelTvis unda CarTos default Sto, vinaidan cvladma control, garda mniSvnelobebisa 0,1,2, SesaZloa sxva mniSvnelobebic miiRos. yovelive zemoTqmulidan gamomdinare, magaliTi miiRebs Semdeg saxes: /* ukeTesi versia */
switch (control) { case 0: printf ("Reset\n"); /* sruldeba momdevno Setyobinac */ case 1: printf ("Initialization\n"); break; case 2: printf ("Working\n"); break; default: printf ("Internal error,control value (%d) impossible\n"); break; }

47

maSinac ki, roca namdvilad viciT, rom default ar aris aucilebeli, mainc unda CavrToT switch -Si, Tundac ase: default: /*saerTod araferi sruldeba */ am SemTxvevaSi sul mcire imas mainc vaRwevT, rom cnobili xdeba Cveni survili: ignorireba gavukeToT im ricxvebs, romlebic diapazonis gareTaa. switch, break da continue
break Setyobinebas aqvs ori gamoyeneba. switch is SigniT break -is gamoyeneba iwvevs switch is dasrulebas. ganmeorebis while da for SetyobinebebSi break wyvets ganmeorebebis Sesrulebas da marTva gadaecema ganmeorebis Setyobinebis Semdeg Setyobinebas. Setyobineba continue moqmedebs mxolod ganmeorebis SetyobinebaSi. qvemoT moyvanil programaSi isrebiT naCvenebia continue-sa da break-is moqmedeba switch SetyobinebaSi. es programa sxvadasxva formatSi mocemul mTel ricxvebs gadaiyvans gansxvavebul formnatSi. magaliTad, Tqven Tu gsurT rvaobiTi ricxvis mniSvnelobis gageba, klaviaturidan unda akrifoT o da ricxvi. simbolo q gamoiyeneba programis dasamTavreblad. magaliTad: Enter conversion and number: o 55 Result is 45 Enter conversion and number: q break;

programaSi gaTvaliswinebulia daxmarebis Setyobineba. simboloebis ? an h Setanis Semdeg Tqven dainaxavT instruqcias 5 striqonze. continue gamoiyeneba switch SetyobinebaSi imisTvis, rom Setyobinebebis ganmeorebad blokSi gamoitovos continue s Semdegi Setyobinebebi. programaSi mxolos erTi break aris gamoyenebuli switch-is gareT, romelic amTavrebs programis muSaobas.
#include <stdio.h> #include <stdlib.h> int number; char type; char line[80];

/* ricxvi, romelsac gardavqmniT */ /* tipi, saidanac gardavqmniT */ /* Sesatani striqoni */

int main (void) { while(1) { printf ("Enter conversion and number: "); fgets (line, sizeof(line), stdin); sscanf (line, "%c ", &type); if (( type == 'q' ) || ( type == 'Q' )) break; switch (type){ case 'o': case 'O': /* rvaobiTebis gardaqmna */ sscanf (line, "%c %o", &type, &number); break; case 'x': case 'X': /* TeqvsmetobiTebis gardaqmna */ sscanf (line, "%c %x", &type, &number); break; case 'd': case 'D': /* aTobiTebis gardaqmna */ sscanf (line, "%c %d", &type, &number); break; case '?': case 'h': /* daxmareba */ printf("Letter Conversion \n"); printf(" o Octal\n"); printf(" x Hexadecimal\n");

48

printf(" d Decimal\n"); printf(" q Quit program\n"); /* ricxvi ar daibeWdos */ continue; default: printf("Tipe ? for help\n"); /* ricxvi ar daibeWdos */ continue; } printf("Result is %d \n",number); } getche(); return (0); }

Tavi 7.

cvladebis moqmedebis are da funqciebi

Cven aqamde viyenebdiT mxolod globalur cvladebs. am TavSi Cven SeviswavliT sxva saxis cvladebs da maT gamoyenebas. aseve vnaxavT, Tu rogor gavanawiloT kodi funqcebs Soris.

moqmedebis are da klasi, steki


TiToeul cvlads ori atributi aqvs: moqmedebis are da klasi. cvladis moqmedebis are aris programis is nawili, sadac es cvladi moqmedebs. globaluri cvladebi yvelgan moqmedebs (amitom ewodebaT globaluri), amitom maTi moqmedebis are mTeli programaa. lokalur cvlads moqmedebis are SezRuduli aqvs im blokiT, romelSic aris aRwerilia da araa xelmisawvdomi am blokis gareT. bloki aris kodis seqtori, romelic SemosazRvrulia figuruli frCxilebiT ({}). sur.9-1 naCvenebia gansxvaveba lokalursa da globalur cvladebs Soris.

Cven SegviZlia aRvweroT lokaluri cvladi imave saxeliT, rac globalur cvlads aqvs. bunebrivia, rom cvladi countis (pirveli gancxadi) moqmedebis are unda iyos mTeli programa. meore, lokaluri count cvladis gancxads aqvs upiratesoba globalur cvladTan SedarebiT im patara blokis SigniT, romelSic lokaluri count aris aRwerili. am blokSi globaluri cvladi count aris damaluli. Semdegi suraTi axdens damaluli cvladebis ilustrirebas.

49

count cvladze ori ganacxadi aris gakeTebuli: lokaluri da globaluri. sazogadod, count cvladis (globaluris) moqmedebis are aris mTeli programa. mas Semdeg, rac cvladi aRiwereba blokis SigniT, am ori count cvladidan igi xdeba aqtiuri am blokSi. am blokSi globaluri count cvladi damalulia lokaluri count cvladis mier. suraTze gaferadebulia are, sadac damalulia globaluri count cvladi. problema Cndeba maSin, roca gvaqvs Setyobineba count = 1; radgan iolad ver vityviT, romel count cvlads vgulisxmobT. amitom rekomendirebulia, rom cvladebs davarqvaT gansxvavebuli saxelebi, magaliTad, total_count, current_count da item_count. klasis mixedviT cvladebis SeiZleba iyos oridan erTi: mudmivi an droebiTi. globaluri cvladebi yovelTvis mudmivi cvladebia. isini iqmnebian da inicialdebian manam, sanam programis Sesruleba daiwyeba da moqmedeben, sanam programa damTavrdeba. droebiTi cvladebi mexsierebis im nawilSi Tavsdeba, romelsac ewodeba stack. Tu Tqven SeecdebiT bevri droebiTi cvladis gamoyenebas, programis Sesruleba Seferxdeba Secdomis gamo, romelsac ewodeba stekis gadavseba. mexsierebis are, romelsac droebiTi cvladebi iyeneben, daubrundeba steks im blokis dasrulebisas, romelic warmoadgens cvladis moqmedebis ares. yovelTvis, roca moxdeba blokSi Sesvla, droebiTi cvladebi inicializdebian. stekis gadavseba sxvadasxva mizezebiT SeiZleba moxdes. erT SemTxvevaSi mas iwvevs, bevri droebiTi cvladi an didi droebiTi masivi, sxva SemTxvevaSi SesaZloa romelime funqcia dausruleblad iZaxebdes Tavis Tavs (magaliTad, cudad organizebuli rekursiis SemTxvevaSi, rasac mogvianebiT ganvixilavT). droebiTi cvladebi gvxvdeba rogorc blokebSi, aseve funqciebSi. gansakuTrebiT saintereso situaciebi iqmneba, rodesac gvxvdeba erTmaneTSi Cawyobili blokebi, an, rac ufro gavrcelebuli SemTxvevaa, erTi funqcia iZaxebs meores, is sxvas da a. S. am SemTxvevaSi stekSi xdeba axal-axali informaciis CatvirTva (push). roca romelime bloki daixureba an romelime funqcia daasrulebs muSaobas, stekidan gaqreba (pop) Sesabamisi cvladebi da agreTve zogierTi sxva informacia, rasac mTlianobaSi uwodeben stekis kadrs. Tavisi muSaobis principis gamo, steks xSirad adareben erTmaneTze dadgmuli erTi zomis TefSebis simravles, romelSic axali TefSis damateba SesaZlebelia mxolod zemodan, da romelime TefSis aRebac mxolod im SemTxvevaSi SeiZleba, Tu is semodan devs. stkSic, bolos damatebuli informacia Tavsdeba stekis boloSi da waSlac xdeba bolodan. muSaobis aseT princips ewodeba LIFO (last-in, first-out), _ anu bolos mosuli pirveli midis. stekis sigrZe damokidebulia operaciul sistemaze da kompilerze, romelsac Tqven iyenebT. UNIX sistemebis umravlesoba programas avtomaturad gamouyofs maqsimalurad

50

didi zomis steks. sxva sistemebSi SeTanxmebis mixedviT aris gamoyofili stekis sigrZe, romelic mxolod kompileris mier SeiZleba Seicvalos. MS-DOS/Windows sistemebSi stekisTvis gamoyofili are unda iyos 65,536 baitze naklebi. es, erTi SexedviTbevria, magram zogierTi didi zomis masivi mas swrafad SeWams. gamitom jobia, rom didi zomis masivebi iyos mudmivi klasis. lokaluri cvladebi arian droebiTi garda im SemTxvevisa, roca isini maTs ganacxadSi miTiTebulia static. Tu static miuTiTebs globalur cvladze, maSin mas aqvs sruliad sxva gamoyeneba. is miuTiTebs, rom cvladi aris lokaluri mimdinare failSi.

magaliTi vars.cpp gviCvenebs gansxvavebas mudmiv da droebiT cvladebs Soris. simartivisTvis, temporary aris droebiTi cvladi, xolo permanent aris mudmivi. am programaSi, cvladi temporary inicialdeba yovelTvis roca iqmneba (es xdeba for Setyobinebis blokis dawyebisas.) cvladi permanent mxolod erTxel, dasawyisSi inicialdeba. for SetyobinebaSi orive cvladi erTiT izrdeba. Tumca, yoveli ganmeorebisas cvladi temporary yovelTvis erTi xdeba. magaliTi vars.cpp
include<stdio.h> int main(){ int counter; /* ganmeorebebis mTvleli */ for( counter=0; counter<3; ++counter ){ int temporary = 1; /* droebiTi cvladi */ static int permanent = 1; /* mudmivi cvladi */ printf("Temprary %d Permanent %d\n", temporary, permanent); ++temporary; ++permanent; } return (0); }

am programis Sedegia:

Temprary 1 Permanent 1 Temprary 1 Permanent 2 Temprary 1 Permanent 3

droebiTi cvladebs zogjer avtomatur cvladebs uwodeben, radgan maTTvis mexsierebis gamoyofa xdeba avtomaturad. specifikatori auto SeiZleba gamoyenebuli iyos imis maCveneblad, rom cvladi droebiTia. sazogadod, praqtikaSi es specifikatori TiTqmis ar gamoiyeneba. Semdegi cxrili gviCvenebs ganacxadis gakeTebis sxvadasxva gzas. ganacxadi gakeTebulia yvela blokis gareT static,yvela blokis gareT blokis SigniT static, blokis SigniT moqmedebi s are globaluri globaluri lokaluri lokaluri klasi mudmivi mudmivi droebiTi mudmivi inicializeba erTxel erTxel blokSi yoveli Sesvlisas erTxel

funqciebi
51

Cven ukve bevrjer Segvxvda erTi funqcia main. es specialuri funqciaa, romelic gamoiZaxeba programis dawyebisTanave. yvela sxva funqcia pirdapir an iribad gamoiZaxeba main-dan. C-s funqciebs bevri saerTo aqvT maTematikur funqciebTan. magaliTad, maT aqvT gansazRvris da mniSvnelobebis areebi, romlebic unda mivuTiToT. SeiZleba iTqvas, rom C-Si funqciebs meti datvirTva aqvs, vidre maTematikaSi. davuSvaT gvsurs davweroT programa, romelic daiTvlis sami samkuTxedis farTobs. Cven SegviZlia davweroT formula samjer, an SegviZlia SevqmnaT funqcia, romelic gaakeTebs am saqmes. TiToeuli funqcia iwyeba komentariT, romelic Seicavs Semdeg informacias: saxeli funqciis saxeli aRwerebi aRiwereba, rasac funqcia akeTebs parametrebi aRiwereba funqciis TiToeuli parametri dasabrunebeli mniSvnelobebi aRiwereba funqciis mier dasabrunebeli sidideebi. amas SeiZleba daematos failebis formatebis, sacnobaro informaciisa an SeniSvnebis saxiT. magaliTad, im funqciis komentarebis bloks, romelic iTvlis samkuTxedis farTobs, SeiZleba hqondes saxe: /* * * * * * * * * * ********************************** triagle iTvlis samkuTxedis farTobs. parametrebi width samkuTxedis sigane. height samkuTxedis simaRle. dasabrunebeli mniSvneloba samkuTxedis farTobi. ********************************** * * * * * * * * * */

TviTon funqcia sxvadasxvanairad SeiZleba iyos realizebuli, imisda mixedviT Tu rogor xdeba parametrebis mniSvnelobebis miReba. am sakiTxebze visaubrebT am da momdevno punqtebSi. nebismier SemTxvevaSi funqcia iwyeba misi gansazRvris arisa da mniSvnelobaTa simravlis aRweriT. Cveni funqciis cxad maTematikur aRweras
triangle : R R -> R,

Seesabameba Semdegi striqoni (SesaZloa sxva gadawyvetac):


float triangle ( float width, float height )

rac niSnavs, rom float aris funqciis tipi da orive parametri (anu argumenti) width da height aris float tipis. rodesac saWiro xdeba funqciis gamoyeneba (gamoZaxeba), parametrebis adgils ikavebs konkretuli mniSvnelobebi an konkretuli mniSvnelobebis mqone cvladebi. magaliTad, triangle(1.3, 8.3); ganvixiloT parametrebis gadacema mniSvnelobebis saSualebiT (Call by value). am dros C akeTebs siganisa da simaRlis mniSvnelobebis asls (Cvens SemTxvevaSi 1.3 da 8.3) da svams maT funqciis parametrebSi (width da height), Semdeg iwyebs funqciis kodis Sesrulebas. rodesac funqcias parametrebi gadaecema maTi mniSvnelobis aslis saxiT, maSin funqcias ar SeuZlia monacemTa ukan dabruneba am parametrebis saSualebiT. funqcia triangle iTvlis farTobs SetyobinebiT:

52

area= width * height /2.0;

ra saSualebiT xdeba gamoTvlili Sedegis dabruneba? maTematikaSi sakmarisi iqneboda dagvewera triangle(width,height)=area, xolo C-Si saWiroa gamoviyenoT Setyobineba return:
return (area);

Semdegi magaliTi iTvlis sami samkuTxedis farTobs. magaliTi triangle.cpp #include <stdio.h> /* *********************************** * triagle iTvlis samkuTxedis farTobs. * * parametrebi * width samkuTxedis sigane. * height samkuTxedis simaRle. * * dasabrunebeli mniSvneloba * samkuTxedis farTobi. * ************************************
float triagle (float width, float height)

* * * * * * * * * */

{
float area; area=width * height / 2; return (area);

/* samkuTxedis farTobi */

int main() { printf(#1 : %f\n, triagle (1.3, 8.3)); printf(#2 : %f\n, triagle (4.8, 9.8)); printf(#3 : %f\n, triagle (1.2, 2.0)); return (0); }

striqoni:

size=triagle (1.3, 8.3); iZaxebs funqcia triagle-s. C aniWebs parametr width-s mniSvnelobas 1.3, xolo parametrs height-s _ mniSvnelobas 8.3. funqciebi arian oTaxebi Cvens mSeneblobaSi, parametrebi ki karebebi am oTaxebs Soris. am analogiiT, mniSvneloba 1.3 gadis karebSi, romlis niSania width. parametrebis karebebi mxolod erTxel iReba. Sig Sesuli ukan veRar brundeba. Setyobineba return aris is, vinc abrunebs mniSvnelobas funqciidan. Cvens magaliTSi, sadac samkuTxedis farTobs viTvliT, funqcia lokalur cvlads area-s aniWebs mniSvnelobas 5.4, romelic Semdeg dabrundeba return (area) SetyobinebiT. am funqciis dasabrunebeli mniSvneloba aris 5.4. ase, rom Tu Cven davamatebdiT Setyobinebas
size = triagle (1.3, 8.3);

maSin size cvladi miiRebda mniSvelobas 5.4. am magaliTSi funqcia da misi aRwera anu tani (bloki romelic mosdevs mas figurul frCxilebSi) erTmaneTis gverdiTaa moTavsebuli. didi zomis programebSi amis saSualeba araa, da xSirad saWiroa funqciis gamoyeneba misi aRweris win. am dros, iseve rogorc cvladis SemTxvevaSi, aucilebelia kompilers acnoboT am funqciis Sesaxeb, anu winaswar gaaakeToT ganacxadi funqciaze: /* samkuTxedis farTobis gamoTvla */

53

float triagle (float width, float height);

am ganacxads uwodeben funqciis prototips. cvladis saxelebi funqciis prototipSi ar moiTxoveba. Cveni funqciis prototipi SeiZleba gamartivebulad ase CavweroT:
float triagle (float , float);

Tumca, Cven viyenebT grZel versias, vinaidan is aZlevs programas damatebiT informacias, da Tanac, martivad SeiZleba prototipis Seqmna redaqtoris funqciebis copy da paste gamoyenebebiT. aseTi redaqciiT, Cvens programas eqneboda saxe:
#include <stdio.h> float triagle (float width, float height); int main() { printf(#1 : %f\n, triagle (1.3, 8.3)); printf(#2 : %f\n, triagle (4.8, 9.8)); printf(#3 : %f\n, triagle (1.2, 2.0)); return (0); } float triagle (float width, float height)

float area;

area=width * height / 2; return (area);

/* samkuTxedis farTobi */

funqciisTvis parametrebis gadacemis meTodebi


funqcias SeiZleba hqondes parametrebis nemismieri raodenoba, maT Soris 0, anu iyos uparametro. amovxsnaT igive amocana uparametro funqciis gamoyenebiT. uparametro funqciis prototipis aRwera odnav gansxvavebulia. saWiroa gamoviyenoT Setyobineba:
float triagle (void);

imisaTvis, rom am funqciam gadacemis gareSe dainaxos Tavisi parametrebi, SegviZlia isini, gansxvavebiT wina amocanisgan, vaqcioT globalur cvladebd, maTze ganacxadis main funqciis win gakeTebis gziT. aseTi redaqciiT, programa miiRebs saxes: #include <stdio.h> /* *********************************** * triagle iTvlis samkuTxedis farTobs. * * parametrebi * araa * dasabrunebeli mniSvneloba * samkuTxedis farTobi. * ************************************
float width=1.3; float height=8.3; float triagle (void)

* * * * * * * */

{
float area; area = width * height / 2; return (area);

/* samkuTxedis farTobi */

54

int main() { printf(area is %f\n, triagle ()); return (0); }

programa SedarebiT mouqneli gaxda da sxva samkuTxedebis farTobebis gamosaTvlelad saWiroa Sesabamis cvladebs xelaxla mivaniWoT mniSvnelobebi. magram es mxolod sailustracio magaliTia, romelic gviCvenebs uparametro funqciis magaliTs. rogorc vnaxeT, miuxedavad imisa rom parametrebi araa, frCxilebis gamaoyeneba savaldebuloa. ufro metic, maTematikisgan gansxvavebiT, programirebaSi Zalian xSirad gamoiyeneba funqciebi, romlebic araviTar mniSvnelobas ar abruneben. sailustraciod, kvlav ganvixiloT igive amocanis gansxvavebuli varianti, simartivisTvis ukve komentarebis gareSe.
#include <stdio.h> float width=1.3; float height=8.3; float area; void triangle (void)

{ }

/* samkuTxedis farTobi */

area = width * height / 2; int main() { triangle(); printf(area is %f\n, area); } return (0);

C s aqvs saSualebebi, rom funqciebi SigniT moqmedi gaxados is lokaluri parametrebi, romelTa moqmedebis areSic xdeba funqciis gamoZaxeba. amas ewodeba parametris gadacema misamarTis gadacemiT. am Temas srulad SevexebiT pointerebis Seswavlis Semdeg. amjerad, kvlav igive magaliTze, ganvixiloT misi erTi SemTxveva.
#include <stdio.h> float width=1.3; float height=8.3; void triangle (float &s) { /* samkuTxedis farTobi */ s = width * height / 2; } int main() { float area; triangle(area); printf("area is %f\n",area); return (0); }

aq Setyobineba kompilers atyobinebs im parametris realur misamarTs, romelic Semdeg gamoZaxebis SemTxvevaSi gadaecema funqcias. Sesabamisad funqciis triangle(area); saxiT gamoZaxebis mere area cvladis Secvlili mniSvneloba Caiwereba mis misamarTSi, romelic damoukidebelia funqciisgan. funqciebTan muSaobisas ZiriTadad yuradReba eqceva parametrebis gadacemis sakiTxs. Tumca, rogorc gviCvenebs Semdegi magaliTi, sabolood yvelaferi sworad unda iyos gakeTebuli Tu gvinda swori pasuxis miReba. Semdegma programam unda gamoiTvalos
void triangle (float &s)

55

striqonis sigrZe. (es funqcia igivea, rac biblioTekis funqcia strlen). am saxiT igi yvela striqonisTvis sigrZed acxadebs nuls. ratom? magaliTi lengh.cpp
#include <stdio.h>

/* * * * * * * * * *

*********************************************
length iTvlis striqonis sigrZes. parametrebi: string striqoni, romlis sigrZesac viTvliT. dasabrunebeli mniSvneloba: striqonis sigrZe.

* * * * * * * * * */

*********************************************

int length (char string[]) { int index; /* indeqsi striqonis SigniT */ /* * ganmeoreba manam, sanam ar miiRweva striqonis bolo simbolo */ for ( index = 0; string[index] != \0; ++index ) /* arafers ar akeTebs */ return (index); } int main() { char line[100];

/* momxmarebeli krefs striqons */

while ( 1 ) { printf ( SemoitaneT striqoni: ); fgets ( line, sizeof(line), stdin); printf (striqonis sigrZea: %d\n, length(line)); } }

struqturuli programireba
programistebi didi drosa da energias xarjaven, raTa iswavlon, Tu rogor unda daprogrameba. Sedegad, Seqmnilia daprogramebis sxvadasxva meTodologia da iqmneba kidev sxvebi. am sistemebidan zogierTi Seicavs blok-sqemebs, zemodan-qvemoT programirebas, qvemodan-zemoT programirebas, struqturul programirebasa da obieqtebze orientirebul dizains (OOD). exla, roca Cven gavecaniT funqciebs, SegviZlia visaubroT programis agebis procesSi struqturuli programirebis teqnologiis gamoyenebaze. es meTodika mdgomareobs programis dayofaSi anu struqturirebaSi patara, kargad gansazRvrul funqciebad. am gziT programa advilad iwereba da gasagebadac martivia. programirebisas Tavdapirvelad saWiroa gadawyvitoT, ris gakeTebas apirebT. Semdeg unda gadawyvitoT Tu rogori iqneba Tqveni monacemebis struqtura. saboloo aris kodirebis faza. sazogadod, iwyebT monaxaziT da Semdeg igi Seivseba main funqciamde. detalebi SeiZleba damaluli iyos sxva funqciebSi. Tu main funqcia sam gverdze naklebi ar gamodis, maSin jobia rom igi daiyos or ufro patara, ufro martiv funqciad. mas Semdeg, rac main funqcias kompilacias gaukeTebT, SegiZliaT daiwyoT sxva funqciebis werac.

56

programirebis am saxes uwodeben zemodan_qvemoT programirebas. Tqven iwyebT zemodan (main) da muSaobT mimarTulebiT qvemoT, - dabali donis funqciebisTvis. kodis daweris Semdegi saxea qvemodan-zemoT programireba. es meTodi gulisxmobs Tavdapirvelad yvelaze dabali donis funqciis daweras, mis testirebas da Semdeg maTgan programis agebas. realur praqtikaSi orive meTodi: zemodan-qvemoTY da qvemodan-zemoT sasargebloa, orive gvaZlevs Sedegs. erT-erTi yvelaze sasargeblo wesi, romelsac saWiroa rom miyveT, aris: gamoiyeneT is, rac ukeT muSaobs.

rekursia
rekursia gvxvdeba, roca funqcia iZaxebs Tavis Tavs pirdapir an iribad. zogierTi funqcias (magaliTad iseTs, rogoric faqtorialia) bunebrivad mivyavarT rekursiul algoriTmTan. rekursiuli funqciebs viyenebT Tu daculia Semdegi ori piroba: funqciis yoveli axali gamoZaxeba amartivebs sawyis amocanas; ramdenime gamoZaxebis Semdeg viRebT umartives amocanas, romlis amonaxsnic cnobilia da amitom funqciis Semdegi gamoZaxeba saWiro aRaaraa. faqtorialis gansazRvris Tanaxmad,
fact(0)=1 fact(n)=n * fact(n-1)

C-Si es gansazRvreba iRebs saxes:


int fact (int number) { if (nember ==0) return (1); /* Tu ara da */ return (number * fact (number-1)); }

es gansazRvreba eTanxmeba orive wess: aqvs damamTavrebeli wertili (roca nember ==0) da misi yoveli gamoZaxeba amartivebs problemas, vinaidan fact( number-1)-is gamoTvla ufro martivia, vidre fact( number ) -isa. aqve mivaqcioT yuradReba funqciis SigniT ganmeorebis Setyobinebis Taviseburebas: radgan pirvelive return asrulebs funqcias, amitom saWiro aRaraa else Setyobineba. faqtoriali gansazRvrulia mxolod maSin, roca number >= 0. magram ra xdeba, roca Cven vcdilobT gamovTvaloT fact ( -3 )? programa unda Sewydes SetyobinebiT stekis gadavsebis Sesaxeb an raime msgavsi SetyobinebiT. fact ( -3 ) iZaxebs fact ( -4 ), romelic, Tavis mxriv iZaxebs fact(-5) da a.S. damamTavrebeli wertili ar arsebobs. am Secdomas moixsenieben xolme, rogorc usasrulo rekursiis Secdomas. cnobilia, rom risi gakeTebac SeiZleba iteraciulad, igives gakeTEba SeiZleba rekursiulad da piriqiT. orive midgomas aqvs Tavisi upiratesobebi. magaliTad, masivis elementebis Sekreba, tradiciulad, iteraciulad keTdeba. gavakeToT igive rekursioulad. rekursiuladac. magaliTad, masivis elementebis Sekreba. ganvsazRvroT funqcia, romelic Sekrebs romeliRac masivis elementebs, dawyebuli m-uri elementidan da damTavrebuli n-uri elementiT. funqciam unda Seasrulos Semdegi samuSao: Tu mxolod erTi elementia, maSin amocana ukve amoxsnilia (jami miRebulia); winaaRmdeg SemTxvevaSi, pirvel elements daemateba danarCenebis jami. C-Si am funqcias aqvs saxe:
int { sum ( int first, int last, int array[] ) if ( first == last )

57

return ( array [ first ] + sum ( first +1, last, array ));

/* winaaRmdeg SemTxvevaSi */

return ( array [ first ] );

} magaliTad: Sum ( 1 8 3 2 ) = 1 + Sum ( 8 3 2 ) = 8 + Sum ( 3 2 ) = 3 + Sum ( 2 ) = 2 3 + 2 = 5 8 + 5 = 13 1 + 13 = 14 PApasuxi = 14

Tavi 9.

struqturebi, gaerTianebebi da sxva tipebi

struqturebi gaerTianebebi (Unions) tipis ganmsazRvreli typedef tipi enum (CamonaTvali) tipis gardaqmna (typecast) bituri velebi an SekumSuli (packed) struqturebi struqturebis masivebi reziume

C sTavazobs programists monacemTa tipebis farTo arCevans. struqturebis, gaerTianebebis da CamonaTvalis gamoyenebiT programists SeuZlia gaamdidros ena axali tipebiT.

vTqvaT, Cven vwerT programas sawyobis inventarizaciisTvis. sawyobi savsea yuTebiT, romelic Seicavs sxvadasxva sagnebs. TiToeul yuTSi moTavsebulia mxolod erTi dasaxelebis sagnebi. Sereul yuTebs Cven ar ganvixilavT. yoveli yuTisTvis unda vicodeT: yuTSi moTavsebuli sagnis saxeli (30 simbolos sigrZis mqone striqoni); raodenoba (mTeli ricxvi); erTi calis fasi (centebSi, mTeli ricxvi). erTi da igive tipis monacemebis Sesanaxad wina TavSi Cven gamoviyeneT masivebi. magram, amjerad Cven gvaqvs sxvadasxva tipis monacemebi _ ori mTeli ricxvi da striqoni. masivis nacvlad Cven gamoviyenebT monacemTa axal tips, romelsac struqtura ewodeba. masivSi yvela elementi erTidaigive tipisaa da gadanomrilia. struqturaSi ki yovel elements anu vels aqvs saxeli da monacemTa sakuTari Atipi. struqturis gansazRvris zogadi forma aseTia:
struct struqturis saxeli { velis-tipi velis-saxeli; /* komentari */ velis-tipi velis-saxeli; /* komentari */ . . . . } cvladis saxeli;

struqturebi

magaliTad, gvinda aRvweroT yuTi, romelic printeris kabelebs Seicavs. Sesabamisi struqtura ase ganisazRvreba:
struct bin { char name[30]; /* sagnis saxeli */ int quantity; /* ramdenia yuTSi */ int cost; /* erTi sagnis fasi (centebSi) */

58

} printer_cable_bin; /* yuTi, romelSic printeris kabelebi awyvia */

cvladebze

ganacxadis gakeTebisaTvis. aseTi ganacxadi gakeTebulia cvladze printer_cable_bin. sxva cvladebze ganacxadi SegviZlia gavakeToT struqturis saxelis gamoyenebiT:
struct bin terminal_cable_box;
/*

struct bin gansazRvravs monacemTa axal tips da igi SeiZleba gamoviyenoT am tipis

yuTi, romelSic terminalis kabelebi awyvia

*/

cvladis saxeli variable-name SeiZleba gamotovebul gansazRvravs struqturul tips, magram cvladebs _ ara:
struct bin { char name[30]; /* sagnis saxeli */ int quantity; /* ramdenia yuTSi */ int cost; /* erTi sagnis fasi (centebSi) */ };

iqnes.

Semdegi

magaliTi

axla ukve SegviZlia gamoviyenoT monacemTa axali tipi (struct bin) cvladebze ganacxadis gakeTebisaTvis. Cven aRvwereT cvladi printer_cable_bin, romelic Seicavs sam saxeldebul vels: name, quantity da cost. maTze wvdoma xorcieldeba Semdegi sintaqsis saSualebiT: cvladi . veli magaliTad, Tu Cven axlaxan gavigeT, rom kabelebis fasi gaxda 12.95 $, maSin Cven programaSi SevitanT cvlilebas:
printer_cable_bin.cost = 1295; /* $12.95 aris axali fasi */

yuTSi moTavsebuli yvela kabelis fass ki ase gamoviTvliT: struqturis inicializacia SeiZleba moxdes misi elementTaAsias movaTavsebT figurul frCxilebSi ({}):
total_cost = printer_cable_bin.cost * printer_cable_bin.quantity;

gamocxadebis

dros,

Tu

mis

struct bin printer_cable_bin = { "Printer Cables", /* yuTSi moTavsebuli nawilis dasaxeleba */ 0, /* daiwye carieli yuTidan */ 1295 /* fasi _ $12.95 */ };

gaerTianebebi
struqturebi gamoiyeneba ramodenime velis mqone monacemTa tipis aRwerisaTvis. TiToeuli veli inaxeba mexsierebis mxolod misTvis gamoyofil areSi. magaliTad, ganvixiloT struqtura:
struct rectangle { int width; int height; };

gaerTianeba hgavs struqturas, Tumca mexsierebaSi is gansazRvravs erTaderT monakveTs, romelic SeiZleba mieces gaerTianebis sxvadasxva vels:
union value { long int i_value; /* value-s long int versia */ float f_value; /* value-s float versia */ };

59

velebi i_value da f_value ziarad floben mexsierebis erTidaimave monakveTs. struqtura SegiZliaT warmoidginoT, rogorc didi yuTi, romelic ramodenime ganyofilebisagan Sedgeba, amasTan TiToeuls Tavisi dasaxeleba aqvs. gaerTianeba ki erTi mTliani yuTia, danayofebis gareSe, ramodenime erTmaneTisagan gansxvavebuli dasaxelebiT. Semdeg naxatze moyvanilia orveliani struqtura da gaerTianeba. struqturis TiToeul vels Seesabameba Tavisi sakuTari seqcia. gaerTianeba ki Seicavs mxolod erT ganyofilebas, romelsac eniWeba gansxvavebuli saxelebi.

Structure

rectangle

Union

value

widt

struqturaSi velebi ar urTierTqmedeben. erTi velis Secvla sxvebs ar cvlis. gaerTianebaSi yvela vels erTidaigive monakveTi ukavia, amitom mocemul momentSi mxolod erTi SeiZleba iyos aqtiuri. sxva sityvebiT rom vTqvaT, Tu moaTavsebT raime sidides i_value-Si, maSin f_value-sTvis raimes miniWeba waSlis i_value-s Zvel mniSvnelobas. Semdegi magaliTi gviCvenebs, Tu rogor muSaobs gaerTianeba. magaliTi. gaerTianebis gamoyeneba
/* * ganisazRvreba cvladi mTeli an namdvili * ricxvisaTvis (magram ara orivesTvis erTdroulad)) */ union value { long int i_value; /* mTeli ricxvi */ float f_value; /* namdvili ricxvi */ } data; int i; /* nebismieri mTeli ricxvi */ float f; /* nebismieri namdvili ricxvi */ main() { data.f_value = 5.0; data.i_value = 3; /* mniSvneloba 3 Caiwera 5.0-s nacvlad */ i = data.i_value; /* sworia */ f = data.f_value; /* arasworia, miviRebT gauTvaliswinebel Sedegs */ data.f_value = 5.5; /*f_value-Si SevitaneT mniSvneloba 5.5, romelic gadaewera i_value-s */ i = data.i_value; /* arasworia, miviRebT gauTvaliswinebel Sedegs */ return(0); }

i_value/f heigh

qvemoT moyvanilis nacvlad movifiqroT raime ufro martivi magaliTi!!!!! gaerTianebebi xSirad gamoiyeneba komunikaciebis sferoSi. magaliTad, vTqvaT gvaqvs daSorebuli telegrafis lenti da gvinda mas gavugzavnoT oTxi Setyobineba: gaxseni, daxure, waikiTxe da dawere. monacemebi, romlebsac es Setyobinebebi Seicavs, erTmaneTisagan mkveTrad gansxvavdeba: gaxsnis Setyobinebas sWirdeba lentis saxeli; daweris Setyobineba unda Seicavdes monacemebs, rom daweros; wakiTxvis Setyobineba unda Seicavdes wasakiTxi simboloebis maqsimalur raodenobas; daxurvis Setyobinebas ki damatebiTi informacia ar esaWiroeba.

60

#define DATA_MAX 1024 /* wasakiTxi da dasaweri monacemebis maqsimaluri sidide */ struct open_msg { char name[30]; /* lentis saxeli */ }; struct read_msg { int length; /* wasakiTxi monacemebis maqs. raodenoba */ }; struct write_msg { int length; /* dasaweri bitebis ricxvi */ char data[DATA_MAX]; /* dasaweri monacemebi */ }; struct close_msg { }; const int OPEN_CODE=0; /* es kodi gviCvenebs gaxsnis mesijs */ const int READ_CODE=1; /* es kodi gviCvenebs wakiTxvis mesijs */ const int WRITE_CODE=2; /* es kodi gviCvenebs daweris mesijs */ const int CLOSE_CODE=3; /* es kodi gviCvenebs daxurvis mesijs */ struct msg { int msg; /* mesijis tipi */ union { struct open_msg open_data; struct read_msg read_data; struct write_msg write_data; struct close_msg close_data } msg_data;};

tipis ganmsazRvreli typedef


C ESesaZleblobas aZlevs programists gansazRvros cvladebis sakuTari tipi typedef Setyobinebis saSualebiT. typedef Setyobinebis zogadi forma aseTia: typedef ganacxadi tipze;

sadac ganacxadi tipze igivea, rac ganacxadi cvladebze, im gansxvavebiT, rom cvladis saxelis nacvlad gamoiyeneba tipis saxeli. magaliTad:
typedef int count;

gansazRvravs axal tips count, romelic igivea rac int.


count flag;

ase, rom gamocxadeba:

igivea rac
int flag;

erTi SexedviT, es ukanaskneli didad ar gansxvavdeba Semdegisgan:


#define count int count flag;

Tumca, typedefs SeiZleba gamoviyenoT ufro rTuli obieqtebis aRwerisaTvis, rac ubralo #define Setyobinebis farglebs scildeba. magaliTad:

61

typedef int group[10]; axali tipi, saxelad group ukve arsebobs da aRniSnavs 10 mTeli ricxvisgan Semdgar masivs: main() { typedef int group[10]; /* axali tipis "group" Seqmna */ group totals; /* axali tipis gamoyeneba cvladebisTvis */ for (i = 0; i < 10; i++) totals[i] = 0; return (0); } typedef yvelaze xSirad gamoiyeneba axali struqturis gansazRvrisTvis an struqturis saxelis Semoklebis mizniT. magaliTad: struct complex_struct { double real; double imag; }; typedef struct complex_struct complex; complex voltag1 = {3.5, 1.2};

tipi enum (CamonaTvali)


monacemTa CamoTvliTi tipi gaTvaliswinebulia im monacemTaTvis, romelTac mniSvnelobaTa mxolod gansazRvruli raodenoba aqvT. am mniSvnelobebze miTiTeba xdeba maTi saxeliT _ tegiT (tag). kompilerisTvis yoveli tegi aris mTeli ricxvi: 0,1, da a.S. ganvixiloT programa, sadac dagvWirdeba cvladi, romelic iRebs kviris dReebis mniSvnelobebs. gamoviyenoT enum tipi:
enum week_day {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY}; /* axla gamoviyenoT es tipi */ enum week_day today = TUESDAY; enum Setyobinebis zogadi formaa: enum enum-saxeli { tegi-1, tegi-2, . . .} cvladis-saxeli;

tegebis rolSi SeiZleba aviRoT C-s nebismieri swori identifikatori. miRebulia maTi zeda registrSi Cawera. C-Si enum tipi Tavsebadia mTel tipTan (an: C aigivebs enum tips mTel tipTan?). magaliTad, C-Si absoluturad swori iqneba, rom vTqvaT:
today = 5; /* 5 ar aris kviris dRe */

Tumca zogierTi kompileri mogvcems gafrTxilebas am striqonis Taobaze.

tipis gardaqmna
xandaxan saWiroa cvladebis erTi tipis gardaqmna meore tipad. es xorcieldeba dayvanis anu tipis gardaqmnis operaciiT. misi zogadi forma aseTia:
(tipi) gamosaxuleba

62

es operacia miuTiTebs C-s, rom gamoTvalos gamosaxuleba da Semdeg mianiWos sasurveli tipi. es operacia gansakuTrebiT sasargebloa, roca vmuSaobT mTel da namdvil ricxvebTan:
int won, lost; /* TamaSebi mogeba/wageba da a.S. */ float ratio; /* mogeba/wagebis fardoba */ won = 5; lost = 3; ratio = won / lost; /* fardoba miiRebs mniSvn. 1.0 (araswori mniSvneloba) */ /* aq gamoiTvleba fardobis swori mniSvneloba */ ratio = (float) won / lost;

es operacia kidev gamoiyeneba pointerebis tipis gardaqmnis dros.

bituri velebi an SekumSuli (Packed) struqturebi


SekumSuli struqturebi saSualebas gvaZlevs aRvweroT struqtura imgvarad, rom man daikavos mexsierebis umciresi SesaZlo raodenoba. magaliTad, Semdegi struqtura ikavebs mexsierebis eqvs baits (16-bitian manqanaze).
struct item { unsigned int list; /* true if item is in the list */ unsigned int seen; /* true if this item has been seen */ unsigned int number; /* item number */ };

mexsierebis ganawileba am struqturisaTvis Cans nax.12.2-ze. TiToeuli struqtura ikavebs mexsierebis eqvs baits (ori baiti TiToeuli mTeli ricxvisaTvis). nax. 12.2. araSekumSuli (Unpacked) struqtura

Tumca, velebs list da seen SeuZliaT mxolod ori mniSvnelobis miReba, amrigad sakmarisia mxolod 1 biti maT warmosadgenad. Cven vTvliT, rom ar gveqneba 16383 punqtze meti (0x3fff nu 14 biti). Cven SegviZlia xelaxla ganvsazRvroT es struqtura bituri velebis gamoyenebiT, ise rom man gamoiyenos mxolod ori biti, romelic miTiTebulia Sesabamis velebTan ori wertilis (:) Semdeg da bitebis garkveuli raodenoba mesame velisaTvis:
struct item { unsigned int list:1; /* true if item is in the list */ unsigned int seen:1; /* true if this item has been seen */ unsigned int number:14; /* item number */ };

am magaliTSi Cven mivuTiTebT kompilers, rom man gamoiyenos TiTo biti list da seen velebsaTvis dfa 14 biti valisaTvis number. am meTodes gamoyenebiT Cven vamWidrovebT Cven
monacemebs da vatevT maT mxolod or baitSi, rac kargad Cans nax.12.3-ze. nax.12.3. SekumSuli struqtura.

63

SekumSuli struqturebi Zalian frTxilad unda gamoviyenoT. bituri velebidan monacemTa amoRebis kodi SedarebiT didi da nelia. Tu mexsierebis naklebobas ar ganvicdiT, SekumSuli struqturebi ar unda gamoviyenoT. ganvixiloT aseTi magaliTi: vTqvaT, mexsierebaSi unda SevinaxoT simboluri monacemebi da statusis xuTi alami 8000 simbolosaTvis. TiToeuli alamisTvis Tu gamoviyenebT gansxvavebul bits, maSin didi mexsiereba dagvWirdeba (xuTi biti yoveli Semosuli simbolosaTvis). X TavSi(?) Cven gamoviyeneT Tanrigobrivi operaciebi, raTa SegvekumSa xuTi alami erT bitSi. igives miRweva SegviZlia SekumSuli struqturebis gamoyenebiT:
struct char_and_status { char character; /* mowyobilobidan Semosyli simbolo */ int error:1; /* WeSmaritia, Tu aRmoCenilia raime Secdoma */ int framing_error:1;/* warmoiSva Secdoma */ int parity_error:1; /* simbolos araswori pariteti aqvs */ int carrier_lost:1; /* matarebeli signali dadablda */ int channel_down:1; /* arxze simZlavre daikarga */ };

SekumSuli struqturebis gamoyeneba almebisTvis programas ufro gasagebs xdis da Secdomebic naklebia, vidre vidre Tanrigobrivi operatorebis gamoyenebisas. Tumca Tanrigobrivi operatorebi programists ufro moqnils xdis. amitom, Tqven unda gamoiyenoT is xerxi, romelic TqvenTvis ufro gasagebi da martivia.

struqturebis masivi
struqturebi da masivebi SeiZleba gavaerTianoT. magaliTad, davuSvaT, Cven gvinda CaviweroT dro, romelsac morbenali andomebs TiToeuli etapis dasrulebas sirbilis oTxetapian SejibrSi. drois Sesanaxad ganvsazRvroT struqtura:
struct time { int hour; /* saaTi (24 sT-iani) */ int minute; /* 0-59 */ int second; /* 0-59 */ }; const int MAX_LAPS = 4; /* Cven gvaqvs mxolod 4 etapi */ /* dRis dro TiToeuli etapisaTvis */ struct time lap[MAX_LAPS];

es struqtura Semdegnairad SeiZleba gamoviyenoT:


/* * morbenalma axlaxans gadasca estafeta */ lap[count].hour = hour; lap[count].minute = minute; lap[count].second = second; ++count;

am masivis inicializacia Semdegac SeiZleba. struqturebis masivis inicializacia mravalganzomilebiani msgavsia:

masivebis

inicializaciis

64

struct time start_stop[2] = { {10, 0, 0}, {12, 0, 0} };

vTqvaT, Cven gvinda davweroT programa safosto gzavnilebis siis dasamuSaveblad. safosto etiketebi aris 5 striqonis simaRlis, TiToeul striqonSi 60 simboloTi. Cven gvWirdeba struqtura gvarebisa da misamarTebis Sesanaxad. safosto gzavnilebis sia dalagebuli iqneba adresatTa gvarebis mixedviT (amonabeWdis gakeTebisTvis), agreTve safosto indeqsebis mixedviT (faqtiuri safosto gzavnilebisTvis). struqturas safosto gzavnilebis siisTvis aqvs Semdegi saxe:
struct mailing { char name[60]; /* gvari, saxeli */ char address1[60];/* ori striqoni quCis misamarTisTvis */ char address2[60]; char city[40]; char state[2]; /* or simboloiani abreviatura */ long int zip; /* ricxviTi safosto indeqsi */ };

axla SegviZlia aRvweroT masivi safosto gzavnilebis siisTvis:


/* safosto gzavnilebis sia */ struct mailing list[MAX_ENTRIES]; state veli orelementiania da Seicavs or simbolos. es veli striqoni ar aris, radgan sakmarisi adgili ara gvaqvs gamoyofili striqonis bolos simbolosTvis ('\0').

Tavi 10.

pointerebi
misamarTebi. moqmedebebi misamarTebze

C s SeuZlia uzrunvelyos ramdenime ZiriTadi tipis monacemTan (mTeli, simboluri, aTwiladi) muSaoba. programists TviTon SeuZlia monacemTa Zalian mravalferovani tipebis da struqturebis Seqmna. erT-erTi motivi monacemebis sxvadasxva tipebad dayofisa aris kompilerisTvis imis garkvevis saSualebis micema, Tu ra moqmedebebi (operaciebi, funqciebi) aris daSvebuli ama Tu im monacemze. erT-erTi ZiriTadi operacia aris monacemis misamarTis gansazRvra, anu misamarTis aReba. mas Cven ukve SevxvdiT ramdenjerme, magaliTad scanf funqciis ganxilvisas da funqciisTvis parametrebis gadacemis sakiTxis ganxilvisas. es operacia Zalian Rrmad aris gaazrebuli C Si da Cven TandaTanobiT ganvixilavT im SesaZleblobebs, rasac misi gamoyeneba uqmnis programists. jer jerobiT sakmarisia davafiqsiroT, rom Tu x aris raime tipis monacemi, maSin &x aris misi misamarTi mexsierebaSi. imis sanaxavad, Tu ras warmoadgens misamarTi, sakmarisia igi gamovbeWdoT rogorc aTobiTi an TeqvsmetobiTi ricxvi. &xis ricxviTi mniSvneloba warmoadgens mexsierebaSi im monakveTis dasawyiss, sadac moTavsebulia x is mniSvneloba. aRsaniSnavia, rom &xis saSualebiT SegviZlia isic gavigoT Tu sad mTavrdeba x is mniSvnelobis Semcveli monakveTi, _ am monakveTis bolo wertilis misamarTi gamoiTvleba formuliT: &x+1. kargad rom gaverkvioT misamarTebis ariTmetikaSi, mexsiereba unda warmovidginoT rogorc didi monakveTi, romelic dayofilia bitebad. maSin, &x iZleva rogorc aTvlis wertils (&x

65

igivea rac &x+0), aseve bitebis raodenobas dadebiTi (misamarTebis zrdis) mimarTulebiT, rac aucilebelia mocemuli x monacemis mexsierebaSi moTavsebisTvis. bitebis es raodenoba warmoadgens erTeuls anu masStabs. sxvadasxva tipis monacemis Sesabamisi erTeulebi SesaZloa bitebis gansxvavebul raodenobas Seicavdnen. faqtiurad, &x mexsierebas aqcevs ricxviTi RerZis diskretul analogad: (aTvlis wertili anu saTave) + erTeuli + (misamarTebis zrdis mimarTuleba) ris Semdegac gveZleva mexsierebaSi navigaciis saSualeba am aTvlis wertilidan orive mimarTulebiT erTeulis jeradi sidideebiT. vTqvaT, gvaqvs aRwera
float x = 5.0;

(1)

vTqvaT &x aris 2293620 is toli, xolo sizeof(x) aris 4. es sidideebi damokidebulia sistemaze, xolo misamarTis mniSvneloba, principSi, damokidebulia imazec Tu konkretul situaciaSi ramdenad aris datvirTuli kompiuteri da sxvadasxva gaSvebaze sxvadasxva mniSvnelobac SeiZleba mogvces. magram gansxvavebuli iqneba aTvlis wertili, xolo masStabi ucvleli. martivad SegviZlia SevamowmoT (printf("%d", &x+1 ); Setyobinebis gaoyenebiT) rom &x+1 aris ara 2293621, aramed 2293624, radgan float tipis cvladi mexsierebaSi akeTebs 4-baitian erTeuls, rac daemata misamarTs. analogiurad, &x+1 aris 2293632 da a. S. navigacia SeiZleba orive mimarTulebiT. magaliTad, &x-186 aris 2294364. cxadia, misamarTebze moqmedebebi imisTvisaa gansazRvruli, rom vnaxoT Tu ra weria mexsierebis sxvadasxva monakveTSi. cxadia, &x Si aris x, anu 5. sxvanairad, &x is mniSvnelobas C Si weren ase: (&x)[0]. analogiurad, imisaTvis rom gavigoT Tu ra mniSvneloba aris moTavsebuli &x-186 misamarTze 4 baitis sigrZis monakveTSi, vwerT (&x) [-186]. sxvadasxva misamarTebze moTavsebuli mniSvnelobebis gansazRvra Zalian waagavs masivebis elementebis mniSvnelobebis gansazRvras. es analogia ar aris SemTxveviTi, raSic male davrwmundebiT. masivis tipis Canaweri ar aris misamarTebze moTavsebuli mniSvnelobebis gansazRvris erTaderTi da yvelaze moxerxebuli saSualeba. C Si misamarTisTvis gansazRvrulia iribi mniSvnelobis gansazRvris operacia *(&x) anu *&x. es aris mniSvneloba, rac moTavsebulia &x misamarTze. ganmartebis Tanaxmad, *(&x+17) igivea, rac (&x)[17]). yovel cvlads, magaliTad (1) ganacxadiT gansazRvruls, gaaCnia sami maxasiaTebeli: aucileblad saxeli da misamarTi, da mniSvneloba. amisgan gansxvavebiT, mis misamarTs anu &x s gaaCnia saxeli (x is misamarTi), mniSvneloba (Cvens magaliTSi 2293620) da iribi mniSvneloba (Cvens magaliTSi 5). rogorc vxedavT, cvladis misamarTs ar gaaCnia Tavisi misamarTi. am dros Zalian xSirad aris misamarTebis damaxsovrebis aucilebloba. magaliTad, Tu gvinda funqcias parametrad gadavceT didi zomis masivi, masivis mniSvnelobebiT gadacemas SeiZleba moyves stekis gadavseba (gansakuTrebiT Tu es funqcia rekursiulia). Tu steki ar gadaivso, programis Sesrulebis dro odnav mainc gaizrdeba. es problema martivad da efeqturad gadaiWreba, Tu funqcias parametrebad gadavcemT masivis pirveli elementis misamarTs da masivis elementebis raodenobas. elementaruli meTodebiT amis gakeTeba SeuZlebelia; magaliTad, Tu
float x[10]; int p;

da aviRebT
p = &x[0];

formalurad p tolia x is misamarTis, magram misi saSualebiT Cven veRar aRvadgenT x is misamarTis irib mniSvnelobas anu x s.

pointeri. pointeris gamoyeneba funqciis argumentad

66

misamarTebTan operireba, maTi Senaxvis uzrunvelyofis CaTvliT, gadaWrilia Semdegnaira: yoveli tipisTvis, iqneba is martivi Tu Sedgenili, ganisazRvreba am tipis misamarTis tipi. misamarTis tipis cvlads ewodeba pointeri. magaliTad, Setyobineba
float *f_ptr; (2)

niSnavs, rom f_ptr is mniSvneloba aris float tipis cvladis misamarTi, xolo misi iribi mniSvneloba iqneba float tipis. zogadad, pointeri aris cvladi, romelsac gaaCnia oTxi maxasiaTebeli: saxeli, misamarTi (eseni aucileblad), agreTve mniSvneloba da iribi mniSvneloba. (2) SetyobinebiT gansazRvrul pointers bolo ori jer-jerobiT ar gaaCnia. Semdegi kodis fragmenti:
double *f_ptr, x = 13.45; f_ptr = &x;

niSnavs Semdegs: f_ptr is iribi mniSvneloba aris double tipis, x_is mniSvnelobac aris double tipis, f_ptr is mniSvneloba aris x_is misamarTis toli, xolo iribi mniSvneloba aris 13.45, anu *f_ptr tolia 13.45-is. an, magaliTad,
int a = 9; int *a_ptr = &a; niSnavs, rom a s mniSvneloba da *a_ptr a s iribi mniSvneloba, orive udris 9-s. ufro metic, erTis Secvla iwvevs meoris Secvlas igive mniSvnelobiT. magaliTad, Tu aviRebT *a_ptr = 34;, a s mniSvneloba avtomaturad gaxdeba 34.

pointerebis erT-erT Taviseburebas is warmoadgens, rom yvela tipis pointeri mexsierebaSi praqtikulad erTnair adgils ikavebs. es iZleva saSualebas, rom ganvsazRvroT void tipis pointeric, romelsac Semdeg SegviZlia mivaniWoT sxva tipis pointerebis mniSvnelobebi. ararsebuli misamarTis aRsaniSnavad gamoiyeneba mudmivi NULL. magaliTad, Setyobineba
*f_ptr = NULL;

niSnavs, rom am pointers ara aqvs konkretuli mniSvneloba, magram arc Zveli an SemTxveviTi mniSvneloba aqvs. Tu gamovbeWdavT, ararsebuli misamarTi gamoibeWdeba rogorc 0. NULL mudmivi gansakuTrebiT sasargebloa dinamikur monacemTa struqturebTan muSaobisas. C funqcias parametrebs gadascems maTi aslebis gakeTebis gziT. es aris, SeiZleba iTqvas, erTmxrivi moZraoba _ parametrebis Secvlili mniSvnelobebi ukan aRar brundeba, funqcias SeuZlia erTaderTi mniSvneloba daabrunos return Setyobinebis gamoyenebiT. imisaTvis rom movZebnoT gamosavali, moviSveloT aseTi analogia. vTqvaT ori kaci, semi da jimi, xvdeba erTmaneTs. semi mxolod laparakobs, jimi mxolod ismens. rogor moaxerxos semma raime informaciis miReba jimisgan? martivad. sakmarisia uTxras: me minda rom Sen Seni pasuxi gamogzavno Cems misamarTze da dauweros Tavisi misamarTi. magaliad ganvixiloT Semdegi amocana: cvladi count ramdenjerme izrdeba. SevadginoT funqcia, romelic daiTvlis Tu ramdenjer gaizrdeba es cvladi.
#include <stdio.h> #include <stdlib.h> void inc_count(int *count_ptr) { (*count_ptr)++; } int main() { int count = 0; while (count < 10) inc_count(&count); printf("count = %d\n",count); system("PAUSE"); return (0);

/* gavlebis raodenoba */

67

rogorc funqciis prototipi gviCvenebs, funqcias gadaecema cvladi count_ptr, romlis iribi mniSvneloba aris mTeli, anu mTeli tipis ricxvis misamarTi. marTlac, main Si am funqciis gamoZaxeba xdeba saxiT: inc_count(&count);. radgan funqciis prototipi warmoadgens ganacxads rogorc funqciaze, aseve mis parametrebze, amitom parametrebis nawili SeiZleba warmoadgendes mudmivs.

mudmivi pointeri
mudmiv pointerze ganacxadis gakeTeba, sxva tipebisgan gansxvavebiT, met dakvirvebas moiTxovs. Tu Cven, magaliTad, gavakeTebT aseT ganacxads:
const int number = 5;

acnobebs C s rom number cvladi aris mudmivi, ase rom


number = 10; /* Secdoma */

aris Secdoma. Setyobineba


const char *answer_ptr = "Forty-Two"; C isTvis ar niSnavs, rom cvladi answer_ptr aris mudmivi, igi acnobebs C s rom am cvladis

iribi mniSvneloba aris mudmivi, anu irib mniSvnelobas, romelizec miuTiTebs pointeri, ver SevcvliT, magram SegviZlia SevcvaloT pointeri. imisaTvis rom C isTvis TviTon pointeri iyos mudmivi, unda gavakeToT, magaliTad, aseTi ganacxadebi:
char *const name_ptr = "Test";

an
float y; float *const x_ptr = &y;

rac niSnavs rom pointeri mudmivia, misi iribi mniSvneloba ki ara. maSasadame sworia
*name_ptr = 'B'; *x_ptr = 6.1; /* Lsworia (*name_ptr aris simbolo) */ /* Lsworia (*x_ptr aris ricxvi) */ Larasworia (name_ptr mudmivia) Larasworia (x_ptr mudmivia) */

magram arasworia
name_ptr = "New"; /* /* */

x_ptr = &y+1;

dasasrul, C saSualebas gvaZlevs erTdroulad gamovacxadoT mudmivebad rogorc pointeri, aseve misi iribi mniSvneloba. magaliTad:
const char *const name_ptr = "Test";

pointerebi da masivebi
imis safuZvelze, rac viciT misamarTebze moqmedebebis da masivebis Sesaxeb, ukve cxadia rom masivebi C -Si organizebulia pointerebis safuZvelze. magaliTad, ganvixiloT ganacxadi
float array[10];

masivis saxelis ( array ) saSualebiT SegviZlia gavigoT: masivis pirveli elementis misamarTi, masivis yvela elementisTvis saWiro baitebis raodenoba da masivis elementebis raodenoba. array TviTon warmoadgens pirveli elementis misamarTs, sakmarisia davbeWdoT printf(%d, &array) da printf(%d,array) da vnaxavT rom isini tolia. sizeof( array ) gvaZlevs masivis yvela elementisTvis saWiro baitebis raodenobas, xolo sizeof( array )/sixeof(float) aris elementebis raodenoba. masivis i elementze mimarTva SegviZlia rogorc array[i] aseve *(array+1) saxiT. radgan masivis saxels aqvs rogorc mniSvneloba (romelic misamarTs warmoadgens) aseve iribi mniSvneloba, amitom igi pointers warmoadgens.

68

rogorc vnaxeT, masivis saxeli warmoadgens pointers, magram igi Seicavs damatebiT informacias masivis elementebis raodenobis Sesaxeb (anu masivisTvis saWiro baitebis raodenobis Sesaxeb). es gansxvaveba gansakuTrebiT TvalsaCinod vlindeba, roca gvinda masivi gadavceT funqcias parametrad da es gavakeToT misamarTebis gamoyenebiT (rac saSualebas mogvcems davimaxsovroT masivis elementebze ganxorcielebuli cvlilebebi). Tu Cven nebismier funqcias rogorc misamarTs ise mivawvdiT masivis saxels da Semdeg am funqciaSi gamoviyenebT sizeof(array)sidides, misi mniSvneloba iqneba sixeof(float)is toli. amitom aris aucilebeli rom funqcias masivis saxelTan erTad mivawodoT misi elementebis raodenobac. magaliTad:
#include<stdio.h> #include<stdlib.h> void f(float *a) { printf("%d\n", sizeof(a )); } int main () { float array[10]; printf("%d\n", sizeof(array )); f(array); system("PAUSE"); return 0;

programuli kodi gviCvenebs, rom main is SigniT sizeof(array) is gamoyenebis Sedegi aris 40 baiti (im pirobiT rom sizeof(float) aris 4 baiti), xolo f funqciis SigniT sizeof(array) is gamoyenebis Sedegi aris 4 baiti. Tu grafikulad SevecdebiT float array[10]; ganacxadiT Seqmnili masivis mexsierebaSi
ganTavsebis sakiTxis warmodgenas, gveqneba aseTi suraTi array
2293568 2293568 2293572 2293576 2293580 2293584

array[0]

array [1]

array [2]

array [3]

array [4]

...

im pirobiT, Tu masivis misamarTi aris 2293568 -is toli.

pointeris gamoyeneba striqonis gasaxleCad


vTqvaT mocemuli gvaqvs Semdegi saxis striqoni: gvari/saxeli. Cven gvinda misi gaxleCa orad ise, rom erTi Seicavdes saxels da meore gvars. am samUSaos Sesruleba SeuZlia standarTul funqcias strchr, magram Cvens programaSi Cven TviTon SevqmniT aseT funqcias, rac dagvanaxebs misi muSaobis meqanizms. es funqcia argunentebad miiRebs simbolos pointers (string_ptr) da saZebn simbolos (find). igi amuSavebs ganmeorebis while Setyobinebas vidre igi ar ipovis im simbolos romelsac Cvens veZebT: yovel ganmeorebaze unda vamowmoT xom ar damTavrda striqoni ise rom saZebni simbolo ar aRmoCnda iq. am SemTxvevaSi funqcia daabrunebs NULL mudmivs:
if (*string_ptr == \0) return NULL; while (*string_ptr != find) ;

Tu Cven gavcdiT am pirobas, es niSnavs rom jer ar gvipovia simbolo da arc striqonis boloSi varT. amitom Cven unda gadaviyvanoT pointeri momdevno simboloze, gadavideT ganmeorebis TavSi da vcadoT xelaxla, anu
++string_ptr; }

Cveni main funqcia kiTxulobs striqons erT xazSi, moaSorebs mas axali xazis simbolos da iZaxebs funqcias my_strchr, romelic daadgens sleSis (/) misamarTs. am momentidan,

69

last_ptr damiznebulia gvaris pirvel simboloze da first_ptr damiznebulia saxelis pirvel

simboloze. amis Semdeg, SevcvliT ra sleSs striqonis dasasrulis simboloTi, davasrulebT sawyisi striqonis orad gayofas. Tu sleSi ar iyo sawyis striqonSi, maSin vbeWdavT Sesabamis gzavnils. programaSi bijebis mimdevroba gamosaxulia Semdeg naxazze:

xolo programul kods aqvs saxe:


#include <stdio.h> #include <string.h> #include <stdlib.h> /******************************************************** * my_strchr eZebs simbolos striqonSi * * imeorebs standartuli biblioTekis funqcias, * * aq moyvanilia ilustrirebis mizniT * * * * parametrebi* * string_ptr striqoni, romelSic veZebT. * * find -- simbolo, romelsac veZebT. * * * * abrunebs * * pointers saZebn simboloze, rodesac igi pirvelad Segvxvdeba * * striqonSi an NULL s Secdomis SemTxvevaSi. * ********************************************************/ char *my_strchr(char * string_ptr, char find) { while (*string_ptr != find) { /* xdeba Semowmeba Zebnis dasrulebaze */ if (*string_ptr == '\0') return (NULL); /* ar moiZebna */ ++string_ptr; } return (string_ptr); /* moiZebna */ } int main() { char line[80]; /* sawyisi striqoni */ char *first_ptr; /* saxelis pointeri */ char *last_ptr; /* gvaris pointeri */ fgets(line, sizeof(line), stdin); /* moviSoroT axali striqonis simbolo */ line[strlen(line)-1] = '\0';

70

last_ptr = line; /* gvari aris xazis dasawyisSi */ first_ptr = my_strchr(line, '/'); /* veZebT sleSs */ /* vamowmebT Secdomis SemTxvevas */ if (first_ptr == NULL) { fprintf(stderr,"Error: Unable to find slash in %s\n", line); system("PAUSE"); exit (8); } *first_ptr = '\0'; /* sleSis nacvlad vwerT '\0'-s */

++first_ptr; /* pointeri umiznebs saxelis pirvel simbolos */ printf("First:%s Last:%s\n", first_ptr, last_ptr); system("PAUSE"); } return (0);

pointerebi da struqturebi
ganvixiloT aseTi amocana: mocemuli aris faili, romelSic pirvel striqons warmoadgens Canawerebis raodenoba, Canawerebs warmoadgenen sxvadasxva pirovnebis misamarTebi, da saWiro aris misamarTebis siidan amovarCioT is, romlis Sesabamisi zip -kodi aris maqsimaluri. TiToeuli misamarTis aRsawerad viyenebT struqturas, saxelad misamarTi (mailing). misamarTi Sedgeba ramdenime velisgan, rogorc struqturis aRweridan Cans.
struct mailing{ char name[60]; char address[60]; char city[40]; char state[2]; int zip; }; /*gvari, saxeli*/ /*quCis saxeli*/ /*qalaqi*/ /*qveynis or simboloiani abreviatura*/ /* zip -kodi */

am amocanis gadaWris saukeTeso gza mdgomareobs mailing struqturis tipis cvladebis (obieqtebis) misamarTebis damaxsovrebaSi (am mizniT ganvsazRvravT pointerebis specialuri masivs) da erTi saSualedo misamarTis SeqmnaSi, saxelad max, romelSic vimaxsovrebT ganxiluli misamarTebidan maxsimaluri zip kodis mqonis misamarTs.
#include<stdlib.h> #include<stdio.h> #include<string.h> struct mailing{ char name[60]; char address[60]; char city[40]; char state[2]; int zip; }; main() { int size; int j; /*gvari, saxeli*/ /*quCis saxeli */ /*qalaqi*/ /*qveynis or simboloiani abreviatura*/ /* zip -kodi */

/* misamarTebis raodenoba*/

/* uzrunvelvyoT failidan Setana da failSi gamotana*/ freopen("mailing_list.in", "r", stdin); freopen("max.out", "w", stdout); /* SevitanoT misamarTebis raodenoba failidan "mailing_list.in"*/

71

scanf("%d",&size); /* gavakeToT ganacxadebi misamarTebis struqturebis masivze da maTze mimTiTebeli pointerebis masivze*/ struct mailing list[size]; /* struqturebis masivi */ struct mailing *list_ptr[size], *max; /* pointerebis masivi */ /* SeviyvanoT misamarTebi misamarTebis struqturebSi */ for( j=0; j<size; j++) { scanf("%s%s%s%s%d",&list[j].name,&list[j].address, &list[j].city,&list[j].state,&list[j].zip); } /* SevqmnaT pointerebis masivi da mis elementebs mivaniWoT struqturebis misamarTebi*/ for( j=0; j<size; j++) { list_ptr[j] = & list[j]; } max = & list[0]; /* max -s vaniWebT pirveli struqturis misamarTs */

/* avarCioT struqtura, romlis Sesabamisi zip -kodi aris maqsimaluri */ for( j=1; j<size; j++) { if (list[j].zip > max -> zip) max = list_ptr[j]; } /* gamovbeWdoT igi*/ printf("%s %s %s %s %d", max->name, max->address, max->city, max->state, max->zip); return 0; }

72

También podría gustarte