Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Gjuha cc. C Bazat

BAZAT C

Prezantimi

Kapitulli 1 C Bazat

1.1. Alfabeti

1.2. Konstruktet bazë C

1.3. Hyrje dalje.

1.3.1. konkluzioni

1.4. Llojet bazë Të dhënat e gjuhës C

1.4.1. Identifikuesit.

1.4.2. Konstantet e shtypura

1.4.3. Variablat

1.4.3.1. Llojet e numrave të plotë

1.4.3.2. Llojet reale

1.4.3.3. Llojet e personazheve

1.4.4. Vargu i llojit të të dhënave

1.4.5. strukturat

1.4.5.1. Vargjeve

1.4.5.2. Regjistrimet

1.4.6 Fushëveprimi dhe jetëgjatësia e variablave

1.5. Operatorët kryesorë

1.6. Paraprocesor

1.7. Programet. Funksione

1.8. Treguesit

1.9. Treguesit dhe funksionet

1.10. Skedarët

1.11. Funksione shtesë Xi

1.11.1. Funksionet e konvertimit

Funksionet e konvertimit të vargut të karaktereve: atoi(), atof(). 37s.

1.11.3. Funksionet e vargut

1.12. Karakteristikat e programimit C

1.12.1. Modulet. Programim multimodul

1.12.2. Modelet e kujtesës

1.12.3. Programimi në DOS dhe Windows

1.12.4. Përdorimi i gjuhës së asamblesë në programet C

Kapitulli 2 C Shembuj

2.1. Renditja

2.2. Algoritme rekursive

2.3. Detyra "Kullat e Hanoi"

Kapitulli 3 Bazat e C++

3.1. Dallimet midis C++ dhe C

3.2. Programimi i orientuar nga objekti në C++

3.2.1. Klasat

3.2.2. Mbingarkesa e funksionit

3.2.3. Konstruktorët

3.2.4. Destruktorë

3.2.5. Konstruktorë me parametra

3.2.6. Hyrje në trashëgimi

3.2.7. Funksionet virtuale

3.2.8. Treguesit për objektet

Kapitulli 4. Bazat e programimit C++ Builder

4.1. Veçori e C++Builder

4.2. Komponentët VCL. Vetitë. Ngjarjet. Metodat

4.2.1. Llojet e komponentëve

4.2.2. Hierarkia e klasave VCL

4.3. Struktura e skedarit në C++Builder

4.4. Komponentët vizualë (VCL)

4.5. Programe, menaxhim ngjarjesh, përjashtime

4.6. Strategjia e korrigjimit për programet Windows

4.7. Përdorimi i komponentëve VCL në zhvillimin e programit

4.8. Komponentët grafikë.

4.9. Multimedia

4.10. Grafika Sprite

4.11. Teknologjia e objekteve OLE2

4.12. DLL-të.

4.13. Zhvillimi i komponentëve vizualë

4.14. Hyrje në programimin CGI

3.15. Programimi i bazës së të dhënave.

3.16. Paketat

konkluzioni

Letërsia

Shtojca N1

Prezantimi

Në 1804, shpikësi francez Joseph Marie Jacquard krijoi një tezgjah "të kontrolluar nga programi". Për të kontrolluar makinën, u përdorën letra me grushta të lidhura me njëra-tjetrën në formën e një shiriti. Kunjat prej druri të "lexuesit" të makinës, sipas vendndodhjes së vrimave në kartën e shpuar, përcaktonin se cilat fije duhet të ngrihen dhe cilat duhet të ulen për të marrë modelin e dëshiruar.

Në 1890, në SHBA, shpikësi Herman Hollerith zhvilloi një elektromekanik. makinë llogaritëse- Një tabelator i kontrolluar nga letra me grushta u përdor për të renditur rezultatet e Regjistrimit në SHBA. Kompania e tabulatorëve e themeluar nga Hollerith më vonë u bë Korporata International Business Machines (IBM).

Në vitin 1936, Alan Turing, një student njëzet e pesë vjeçar anglez në Universitetin e Kembrixhit, botoi një artikull "Mbi numrat e llogaritshëm", i cili konsideronte një pajisje hipotetike ("Makina Turing"), e përshtatshme për zgjidhjen e çdo çështjeje matematikore ose të zgjidhshme. detyrë logjike, - një prototip i një kompjuteri të programueshëm.

Në vitin 1941 ndërtoi inxhinieri gjerman Konrad Zuse kompjuter operativ Z3 që përdoret sistemi binar duke llogaritur. Programet u regjistruan në shirit me grushta.

Në vitin 1945, në Shkollën e Lartë Teknike të Universitetit të Pensilvanisë (SHBA), fizikani John Mauchly dhe inxhinieri Prosper Eckert ndërtuan plotësisht një makinë elektronike"Eniac". Programimi kërkonte vendosjen manuale të mijëra çelsave dhe futjen e qindra prizave në prizat e panelit të kontaktit.

Më 1 qershor 1945, u dërgua një raport nga matematikani amerikan me origjinë hungareze, John von Neumann, "Raporti paraprak mbi makinën Advak", që përmbante konceptin e ruajtjes së udhëzimeve kompjuterike në memorien e tij të brendshme.

Më 21 qershor 1948, në Universitetin e Mançesterit (Britania e Madhe), programi i parë në botë i ruajtur në kujtesën e makinës u ekzekutua në makinën Mark-1 - kërkimi i faktorit më të madh të një numri të caktuar.

Në vitin 1949, nën udhëheqjen e Maurice Wilks, u krijua kompjuteri Edsack. Dizajnerët e Edsac prezantuan një sistem të shënimit mnemonik, ku çdo instruksion i makinës përfaqësohej nga një shkronje e madhe, dhe automatizoni vendosjen e nënprogrameve në një vendndodhje specifike në memorie. Maurice Wilks e quajti qarkun mnemonik dhe bibliotekën e nënprogramit një sistem montimi - prandaj fjala "assembler".

Në vitin 1949, në Filadelfia (SHBA), nën udhëheqjen e John Mauchly, u krijua "Short Code" - përkthyesi i parë primitiv i një gjuhe programimi.

Në vitin 1951, programuesja amerikane Grace Hopper zhvilloi programin e parë të transmetimit në Remington Rand. Hopper e quajti atë një përpilues (përpilues - lidhës).

Në vitin 1957, në katin e 20-të të selisë së IBM në Madison Avenue në Nju Jork, lindi gjuha Fortran (FORmula TRANslation - përkthimi i formulave). Ekipi i zhvillimit u drejtua nga matematikani 30-vjeçar John Backus. Fortran është e para nga gjuhët "të vërteta" të nivelit të lartë.

Në vitin 1972, Dennis Ritchie, një programues sistemesh 31-vjeçar në Bell Labs, zhvilloi gjuhën e programimit C.

Në vitin 1984, matematikani dhe saksofonisti francez Philip Kahn themeloi Borland International.

C fillimisht u zhvillua si një gjuhë programimi për sistemin operativ Unix.

Shpejt filloi të përhapet te programuesit praktikë. Në fund të viteve 70, u zhvilluan përkthyes C për mikrokompjuterët sistemi operativ SR/M.

Pas ardhjes së IBM PC, filluan të shfaqen edhe përpiluesit C (për këtë kompjuter tani ka më shumë se 20 prej tyre).

Në vitin 1983, Instituti Amerikan i Standardeve (ANSI) formoi Komitetin Teknik X3J11 për të krijuar një standard për gjuhën C. Gjuha C++ e Borland, e cila është shfaqur në treg, përputhet me shumicën e kërkesave të standardit.

Në thelbin e saj, C është një gjuhë funksionesh. Programimi në C bëhet duke shkruar funksione dhe duke thirrur funksionet e bibliotekës. Shumica e funksioneve kthejnë një vlerë që mund të përdoret në deklarata të tjera.

Ndër avantazhet e shumta të gjuhës C, duhet të theksohen ato kryesore:


Universaliteti (përdoret pothuajse në të gjithë kompjuterët ekzistues);

Kompaktësia dhe universaliteti i kodit;

Shpejtësia e ekzekutimit të programit;

Fleksibiliteti gjuhësor;

Struktura e lartë.


Kapitulli 1 C Bazat

1.1. Alfabeti

Alfabeti i gjuhës përbëhet nga karakteret e mëposhtme:

Latinishtja e madhe dhe e vogël shkronjat A-Z, a-z dhe nënvizim. Numrat nga 0 në 9. Personazhe të veçanta + - * / = > < . ; , : { } () # $.

Hapësira e karaktereve, skeda, furnizimi i linjës, kthimi i karrocave quhen hapësirë ​​të bardhë.

Një program C++ është një sekuencë karakteresh ACSII që përfaqësojnë tekstin e tij burimor.

1.2. Konstruktet bazë C

Merrni parasysh një program i thjeshtë printimi i frazës "Përshëndetje nga kompjuteri" në ekran

#përfshi

// program

printf("Përshëndetje nga kompjuteri\n");

Merrni parasysh strukturën e programit

Komanda #include përfshin skedarin stdio.h në programin tonë. Skedari përmban informacion në lidhje me funksionet I/O.

Skedari me emrin stdio.h përmban informacion rreth I/O.

Simboli # tregon që para se të përktheni programin, është e nevojshme të përfshini funksione nga skedari stdio.h në të - ky është i ashtuquajturi përpunim paraprocesor, i cili kryen një përpunim paraprak të tekstit të programit përpara përpilimit.

Linja main() përmban emrin e funksionit me të cilin programi fillon gjithmonë. Kllapat bosh tregojnë se ky është një funksion, por nuk ka parametra.

Karakteret // pasohen nga komentet (për një rresht të vetëm), (karakteret midis /* dhe */ quhen gjithashtu komente).

Kllapat() shënon fillimin dhe fundin e trupit të një programi ose funksioni. Ato përdoren gjithashtu për të grupuar deklarata të shumta të programit në një bllok.

Linja printf ("Përshëndetje nga kompjuteri\n") përmban funksionin standard të printimit C. Vargu i karaktereve i mbyllur në kllapa (argumenti) është informacioni i kaluar funksionet printf() nga yni funksioni kryesor kryesore (). Kur funksioni përfundon, kontrolli kthehet në program origjinal. Simboli \n tregon një furnizim rreshti në linjë e re pas printimit.

Merrni parasysh shembulli tjetër Shkruani një program për të kthyer metra në centimetra.

#përfshi

#përfshi

printf ("M?\n");

printf(" %d M përmban %d cm\n", I,J);

Ky program përcakton dy variabla me numër të plotë I dhe J.

Funksioni i prezantuar scanf("%d",&I); e cila ju lejon të hyni numër dhjetor nga tastiera dhe caktoni vlerën në ndryshoren I, pastaj me komandën J=100*I; llogaritja në vazhdim 4.

Rreshti tjetër printf(" %d M përmban %d cm\n", I,J); shtyp një frazë. %d e para (d është një ndryshore numër i plotë) zëvendësohet me vlerën I, e dyta %d zëvendësohet me vlerën J.

Funksioni getch() ju lejon të mbani një imazh në ekran dhe kërkon çdo karakter për të përfunduar punën.

Le të shqyrtojmë një shembull tjetër. Le të shkruajmë një funksion dhe ta thërrasim atë nga programi ynë.

#përfshi

#përfshi

printf("Më thirre?\n");

printf("Po thërras funksionin e mbikëqyrësit.\n");

printf("Po. Shikoni cilët studentë janë duke fjetur dhe zgjojini ata.\n");

Bazat dhe hollësitë e gjuhës së programimit C++. Detyra praktike dhe teste. Dëshironi të mësoni se si të programoni? Atëherë ju jeni në vendin e duhur. Pavarësisht nëse keni apo jo përvojë programimi, këto mësime do t'ju ndihmojnë të filloni të krijoni, përpiloni dhe korrigjoni programet C++ në mjedise të ndryshme zhvillimi: studio vizuale, Kodi::Blloqe, Xcode, Eclipse dhe IDE të tjera. Shumë shembuj dhe shpjegime të hollësishme. E përkryer për të dy fillestarët (dummies) dhe më të avancuar. Gjithçka shpjegohet nga e para deri në detajet më të vogla. Këto mësime (200+) do t'ju japin një bazë/bazë të mirë për të kuptuar programimin jo vetëm në C ++, por edhe në gjuhë të tjera. Dhe është absolutisht falas!

Gjithçka që ju nevojitet është një dëshirë, një dëshirë për të mësuar. Çdo gjë tjetër mund të gjeni këtu.

Për ripost +20 në karma dhe mirënjohjen time!

Kapitulli numër 0. Prezantimi. Fillimi i punës

Kapitulli numër 1. Bazat e C++

Kapitulli numër 2. Variablat dhe Llojet Bazë të të Dhënave në C++

Kapitulli numër 3. Operatorët në C++

Kapitulli numër 4. Fushëveprimi dhe Llojet e tjera të Variablave në C++

Këto mësime janë për të gjithë, pavarësisht nëse jeni i ri në programim ose keni tashmë përvojë të gjerë programimi në gjuhë të tjera! Ky material për ata që duan të mësojnë C / C ++ nga bazat e saj deri në strukturat më komplekse.

C++ është një gjuhë programimi, njohja e kësaj gjuhe programimi do t'ju lejojë të kontrolloni kompjuterin tuaj niveli më i lartë. Në mënyrë ideale, ju mund ta bëni kompjuterin të bëjë çfarë të doni. Faqja jonë do t'ju ndihmojë të mësoni gjuhën e programimit C++.

Instalimi i /IDE

Gjëja e parë që duhet të bëni përpara se të filloni të mësoni C++ është të siguroheni që keni një IDE - një mjedis zhvillimi të integruar (programi në të cilin do të programoni). Nëse nuk keni një IDE, atëherë jeni këtu. Kur vendosni për zgjedhja e IDE, instaloni dhe praktikoni krijimin e projekteve të thjeshta.

Hyrje në C++

Gjuha C++ është një grup komandash që i tregojnë kompjuterit se çfarë të bëjë. Ky grup udhëzimesh zakonisht quhet burimi ose thjesht kod. Komandat janë ose "funksione" ose "fjalë kyçe". Fjalët kyçe (fjalët e rezervuara C/C++) janë blloqet bazë të ndërtimit të gjuhës. Funksionet janë blloqe ndërtuese komplekse, sepse ato janë shkruar në terma të më shumë funksione të thjeshta- këtë do ta shihni në programin tonë të parë, i cili tregohet më poshtë. Kjo strukturë funksionesh i ngjan përmbajtjes së një libri. Tabela e përmbajtjes mund të tregojë kapitujt e librit, çdo kapitull në libër mund të ketë tabelën e vet të përmbajtjes të përbërë nga paragrafë, çdo paragraf mund të ketë nënparagrafët e tij. Edhe pse C++ ofron shumë funksionet e përbashkëta dhe fjalët e rezervuara që mund të përdorni, ka ende nevojë të shkruani funksionet tuaja.

Në cilën pjesë të programit keni filluar? Çdo program në C++ ka një funksion, ai quhet funksioni kryesor ose kryesor, ekzekutimi i programit fillon me këtë funksion. Nga funksioni kryesor, mund të telefononi gjithashtu çdo funksion tjetër, pavarësisht nëse janë shkruar nga ne ose, siç u përmend më herët, të ofruara nga përpiluesi.

Pra, si i aksesoni këto funksione standarde? Për të hyrë karakteristika standarde që vijnë me përpiluesin, duhet të lidheni skedari i kokës duke përdorur direktivën e paraprocesorit - #include . Pse është efektiv? Le të shohim një shembull programi i punës:

#përfshi << "Моя первая программа на С++\n"; cin.get(); }

Le t'i hedhim një vështrim më të afërt elementeve të programit. #include është një direktivë "paraprocesori" që i thotë përpiluesit të vendosë kodin nga skedari i kokës iostream në programin tonë përpara se të krijojë ekzekutuesin. Duke përfshirë një skedar header në programin tuaj, ju keni akses në shumë funksione të ndryshme që mund t'i përdorni në programin tuaj. Për shembull, deklarata cout kërkon një iostream. Linja që përdor hapësirën e emrave std; i thotë kompajlerit të përdorë një grup funksionesh që janë pjesë e bibliotekës standarde std. Kjo linjë gjithashtu lejon programin të përdorë operatorë të tillë si cout. Pikëpresja është pjesë e sintaksës C++. Ai i tregon kompajlerit se ky është fundi i komandës. Do të shihni pak më vonë se pikëpresja përdoret për të përfunduar shumicën e komandave në C++.

Linja tjetër e rëndësishme e programit është int main(). Kjo linjë i tregon kompajlerit se ekziston një funksion i quajtur main, dhe se funksioni kthen një numër të plotë shkruani int. Kllapat kaçurrelë ( dhe ) sinjalizojnë fillimin ( dhe mbarimin ) të një funksioni. Kllapat kaçurrelë përdoren gjithashtu në blloqe të tjera të kodit, por ato gjithmonë nënkuptojnë të njëjtën gjë - fillimin dhe fundin e bllokut, përkatësisht.

Në C++, objekti cout përdoret për të shfaqur tekstin (shqiptohet "cout"). Ai përdor personazhe<< , известные как «оператор сдвига», чтобы указать, что отправляется к выводу на экран. Результатом вызова функции cout << является отображение текста на экране. Последовательность \n фактически рассматривается как единый символ, который обозначает новую строку (мы поговорим об этом позже более подробно). Символ \n перемещает курсор на экране на следующую строку. Опять же, обратите внимание на точку с запятой, её добавляют в конец, после каждого оператора С++.

Komanda tjetër është cin.get(). Kjo është një tjetër thirrje funksioni që lexon të dhënat nga rrjedha e të dhënave hyrëse dhe pret që tasti ENTER të shtypet. Kjo komandë nuk lejon që dritarja e konsolës të mbyllet derisa të shtypet tasti ENTER. Kjo ju jep kohë për të parë rezultatin e programit.

Me arritjen e fundit të funksionit kryesor (kllapa kaçurrela mbyllëse), programi ynë do të kthejë vlerën 0 për sistemin operativ. Kjo vlerë e kthyer është e rëndësishme sepse, duke e analizuar atë, OS mund të gjykojë nëse programi ynë përfundoi me sukses apo jo. Një vlerë e kthimit prej 0 do të thotë sukses dhe kthehet automatikisht (por vetëm për llojin e të dhënave int, funksionet e tjera kërkojnë që ju ta ktheni vlerën manualisht), por nëse do të donim të kthenim diçka tjetër, si 1, do të duhej ta bënim manualisht .

#përfshi duke përdorur hapësirën e emrave std; int main() (cout<<"Моя первая программа на С++\n"; cin.get(); return 1; }

Për të konsoliduar materialin, shkruani kodin e programit në IDE-në tuaj dhe ekzekutoni atë. Pasi programi të ketë ekzekutuar dhe të keni parë rezultatin, eksperimentoni pak me deklaratën cout. Kjo do t'ju ndihmojë të mësoheni me gjuhën.

Sigurohuni që të komentoni për programet tuaja!

Shtoni komente në kod për ta bërë më të qartë jo vetëm për veten tuaj, por edhe për të tjerët. Përpiluesi i injoron komentet kur ekzekuton kodin, gjë që lejon që çdo numër komentesh të përdoren për të përshkruar kodin aktual. Për të krijuar një koment përdorni ose //, e cila i tregon përpiluesit se pjesa tjetër e rreshtit është një koment, ose /* e ndjekur nga */. Kur po mësoni të programoni, është e dobishme të jeni në gjendje të komentoni në seksione të caktuara të kodit në mënyrë që të shihni se si ndryshon rezultati i programit. Mund të lexoni në detaje rreth teknikës së komentimit.

Çfarë duhet bërë me të gjitha këto lloje të variablave?

Ndonjëherë mund të jetë konfuze të kesh lloje të shumëfishta ndryshore kur duket sikur disa lloje të variablave janë të tepërta. Është shumë e rëndësishme të përdoret lloji i saktë i ndryshores, pasi disa variabla kërkojnë më shumë memorie se të tjerët. Gjithashtu, për shkak të mënyrës në të cilën numrat me pikë lundruese ruhen në memorie, llojet e të dhënave float dhe dyfishtë janë "të pasaktë" dhe nuk duhet të përdoren kur duhet të ruhet një vlerë e saktë e plotë.

Deklarimi i variablave në C++

Për të deklaruar një variabël, përdorni llojin e sintaksës<имя>; . Këtu janë disa shembuj të deklaratave të variablave:

int num; karakter; float num_float;

Lejohet të deklarohen disa variabla të të njëjtit lloj në një rresht, për këtë secila prej tyre duhet të ndahet me presje.

int x, y, z, d;

Nëse e keni shikuar nga afër, mund të keni parë se një deklaratë e ndryshueshme ndiqet gjithmonë nga një pikëpresje. Mund të lexoni më shumë rreth konventës - "mbi emërtimin e variablave".

Gabimet e zakonshme gjatë deklarimit të variablave në C++

Nëse përpiqeni të përdorni një variabël që nuk është deklaruar, programi juaj nuk do të kompilohet dhe do të merrni një gabim. Në C++, të gjitha fjalët kyçe të gjuhës, të gjitha funksionet dhe të gjitha variablat janë të ndjeshme ndaj shkronjave të vogla.

Përdorimi i variablave

Pra, tani ju e dini se si të deklaroni një ndryshore. Këtu është një shembull i programit që demonstron përdorimin e një ndryshoreje:

#përfshi duke përdorur hapësirën e emrave std; int main() (num int; cout<< "Введите число: "; cin >>numri; cin.ignore(); cout<< "Вы ввели: "<< number <<"\n"; cin.get(); }

Le t'i hedhim një sy këtij programi dhe të studiojmë kodin e tij, rresht pas rreshti. Fjala kyçe int thotë se numri është një numër i plotë. Funksioni cin >> lexon vlerën në numër, përdoruesi duhet të shtypë enter pas numrit të futur. cin.ignore() është një funksion që lexon një karakter dhe e injoron atë. Ne kemi organizuar hyrjen tonë në program, pasi kemi futur një numër, shtypim tastin ENTER, karakter i cili kalon edhe në rrymën hyrëse. Nuk na nevojitet, ndaj e hedhim poshtë. Mbani në mend se ndryshorja është deklaruar si një numër i plotë, nëse përdoruesi përpiqet të fusë një numër dhjetor, ai do të shkurtohet (d.m.th. pjesa dhjetore e numrit do të shpërfillet). Provoni të futni një numër dhjetor ose sekuencë karakteresh kur ekzekutoni programin shembull, përgjigja do të varet nga vlera e hyrjes.

Vini re se thonjëzat nuk përdoren kur printoni nga një ndryshore. Mungesa e thonjëzave i tregon kompajlerit se ekziston një ndryshore, dhe për këtë arsye programi duhet të kontrollojë vlerën e ndryshores në mënyrë që të zëvendësojë emrin e ndryshores me vlerën e saj kur të ekzekutohet. Operatorë të shumëfishtë ndërrimi në të njëjtën linjë janë krejtësisht të pranueshëm dhe prodhimi do të bëhet në të njëjtin rend. Ju duhet të ndani literalet e vargjeve (vargjet e cituara) dhe variablat, duke i dhënë secilit një operator të ndryshëm ndryshimi<< . Попытка поставить две переменные вместе с одним оператором сдвига << выдаст сообщение об ошибке . Не забудьте поставить точку с запятой. Если вы забыли про точку с запятой, компилятор выдаст вам сообщение об ошибке при попытке скомпилировать программу.

Ndryshimi dhe krahasimi i vlerave

Natyrisht, pa marrë parasysh se çfarë lloji të të dhënave përdorni, variablat janë me pak interes, përveç nëse vlera e tyre mund të ndryshohet. Më poshtë tregon disa nga operatorët e përdorur në lidhje me variablat:

  • * shumëzimi,
  • - zbritja,
  • + shtim,
  • / ndarje,
  • = detyrë,
  • == barazi,
  • > më shumë
  • < меньше.
  • != jo e barabartë
  • >= më i madh ose i barabartë
  • <= меньше или равно

Operatorët që kryejnë funksione matematikore duhet të përdoren në të djathtë të shenjës së caktimit, në mënyrë që të caktojnë rezultatin në ndryshoren në të majtë.

Ketu jane disa shembuj:

A = 4 * 6; // përdorni komentin e rreshtit dhe pikëpresjen, a është 24 a = a + 5; // është e barabartë me shumën e vlerës origjinale dhe pesë a == 5 // nuk është caktuar pesë, kontrolloni, dhe e barabartë me 5 ose jo

Ju shpesh do të përdorni == në konstruksione të tilla si deklarata të kushtëzuara dhe sythe.

A< 5 // Проверка, a менее пяти? a >5 // Kontrollo nëse a është më e madhe se pesë? a == 5 // Kontrolloni nëse a është pesë? a != 5 // Kontrolloni nëse a nuk është e barabartë me pesë? a >= 5 // Kontrolloni nëse a është më e madhe ose e barabartë me pesë? a<= 5 // Проверка, a меньше или равно пяти?

Këta shembuj nuk e tregojnë shumë qartë përdorimin e shenjave të krahasimit, por kur të fillojmë të studiojmë operatorët e përzgjedhjes, do të kuptoni pse kjo është e nevojshme.

Departamenti: Automatizimi dhe Teknologjitë e Informacionit

BAZAT C

Prezantimi

Kapitulli 1 C Bazat

1.1. Alfabeti

1.2. Konstruktet bazë C

1.3. Hyrje dalje.

1.3.1. konkluzioni

1.4. Llojet bazë të të dhënave C

1.4.1. Identifikuesit.

1.4.2. Konstantet e shtypura

1.4.3. Variablat

1.4.3.1. Llojet e numrave të plotë

1.4.3.2. Llojet reale

1.4.3.3. Llojet e personazheve

1.4.4. Vargu i llojit të të dhënave

1.4.5. strukturat

1.4.5.1. Vargjeve

1.4.5.2. Regjistrimet

1.4.6 Fushëveprimi dhe jetëgjatësia e variablave

1.5. Operatorët kryesorë

1.6. Paraprocesor

1.7. Programet. Funksione

1.8. Treguesit

1.9. Treguesit dhe funksionet

1.10. Skedarët

1.11. Funksione shtesë C

1.11.1. Funksionet e konvertimit

Funksionet e konvertimit të vargut të karaktereve: atoi(), atof(). 37s.

1.11.3. Funksionet e vargut

1.12. Karakteristikat e programimit C

1.12.1. Modulet. Programim multimodul

1.12.2. Modelet e kujtesës

1.12.3. Programimi në DOS dhe Windows

1.12.4. Përdorimi i gjuhës së asamblesë në programet C

Kapitulli 2 C Shembuj

2.1. Renditja

2.2. Algoritme rekursive

2.3. Detyra "Kullat e Hanoi"

Kapitulli 3 Bazat e C++

3.1. Dallimet midis C++ dhe C

3.2. Programimi i orientuar nga objekti në C++

3.2.1. Klasat

3.2.2. Mbingarkesa e funksionit

3.2.3. Konstruktorët

3.2.4. Destruktorë

3.2.5. Konstruktorë me parametra

3.2.6. Hyrje në trashëgimi

3.2.7. Funksionet virtuale

3.2.8. Treguesit për objektet

Kapitulli 4. Bazat e programimit C++ Builder

4.1. Veçori e C++Builder

4.2. Komponentët VCL. Vetitë. Ngjarjet. Metodat

4.2.1. Llojet e komponentëve

4.2.2. Hierarkia e klasave VCL

4.3. Struktura e skedarit në C++Builder

4.4. Komponentët vizualë (VCL)

4.5. Programe, menaxhim ngjarjesh, përjashtime

4.6. Strategjia e korrigjimit për programet Windows

4.7. Përdorimi i komponentëve VCL në zhvillimin e programit

4.8. Komponentët grafikë.

4.9. Multimedia

4.10. Grafika Sprite

4.11. Teknologjia e objekteve OLE2

4.12. DLL-të.

4.13. Zhvillimi i komponentëve vizualë

4.14. Hyrje në programimin CGI

3.15. Programimi i bazës së të dhënave.

3.16. Paketat

konkluzioni

Letërsia

Shtojca N1


Prezantimi

Në 1804, shpikësi francez Joseph Marie Jacquard krijoi një tezgjah "të kontrolluar nga programi". Për të kontrolluar makinën, u përdorën letra me grushta të lidhura me njëra-tjetrën në formën e një shiriti. Kunjat prej druri të "lexuesit" të makinës, sipas vendndodhjes së vrimave në kartën e shpuar, përcaktonin se cilat fije duhet të ngrihen dhe cilat duhet të ulen për të marrë modelin e dëshiruar.

Në 1890, në Shtetet e Bashkuara, shpikësi Herman Hollerith zhvilloi një makinë llogaritëse elektromekanike - një tabelator i kontrolluar nga kartat e grushta u përdor për të përpiluar tabela me rezultatet e regjistrimit të popullsisë në SHBA. Kompania e tabulatorëve e themeluar nga Hollerith më vonë u bë Korporata International Business Machines (IBM).

Në vitin 1936, një student njëzet e pesë vjeçar në Universitetin e Kembrixhit, anglezi Alan Turing, botoi një artikull "Mbi numrat e llogaritshëm", i cili konsideronte një pajisje hipotetike ("Makina Turing"), e përshtatshme për zgjidhjen e çdo çështjeje matematikore ose të zgjidhshme. problem logjik - një prototip i një kompjuteri të programueshëm.

Në vitin 1941, inxhinieri gjerman Konrad Zuse ndërtoi një kompjuter funksional Z3 që përdorte sistemin e numrave binar. Programet u regjistruan në shirit me grushta.

Në vitin 1945, në Shkollën e Lartë Teknike të Universitetit të Pensilvanisë (SHBA), fizikani John Mauchly dhe inxhinieri Prosper Eckert ndërtuan një makinë plotësisht elektronike Eniac. Programimi kërkonte vendosjen manuale të mijëra çelsave dhe futjen e qindra prizave në prizat e panelit të kontaktit.

Më 1 qershor 1945, u dërgua një raport nga matematikani amerikan me origjinë hungareze, John von Neumann, "Raporti paraprak mbi makinën Advak", që përmbante konceptin e ruajtjes së udhëzimeve kompjuterike në memorien e tij të brendshme.

Më 21 qershor 1948, në Universitetin e Mançesterit (Britania e Madhe), programi i parë në botë i ruajtur në kujtesën e makinës u ekzekutua në makinën Mark-1 - kërkimi i faktorit më të madh të një numri të caktuar.

Në vitin 1949, nën udhëheqjen e Maurice Wilks, u krijua kompjuteri Edsack. Dizajnerët e Edsac prezantuan një sistem të shënimit mnemonik, ku çdo instruksion i makinës përfaqësohej nga një shkronjë e vetme e madhe dhe automatizonte vendosjen e nënprogrameve në një vend specifik në memorie. Maurice Wilks e quajti qarkun mnemonik dhe bibliotekën e nënprogramit një sistem montimi - prandaj fjala "assembler".

Në vitin 1949, në Filadelfia (SHBA), nën udhëheqjen e John Mauchly, u krijua "Short Code" - përkthyesi i parë primitiv i një gjuhe programimi.

Në vitin 1951, programuesja amerikane Grace Hopper zhvilloi programin e parë të transmetimit në Remington Rand. Hopper e quajti atë një përpilues (përpilues - lidhës).

Në vitin 1957, në katin e 20-të të selisë së IBM në Madison Avenue në Nju Jork, lindi gjuha Fortran (FORmula TRANslation - përkthimi i formulave). Ekipi i zhvillimit u drejtua nga matematikani 30-vjeçar John Backus. Fortran është e para nga gjuhët "të vërteta" të nivelit të lartë.

Në vitin 1972, Dennis Ritchie, një programues sistemesh 31-vjeçar në Bell Labs, zhvilloi gjuhën e programimit C.

Në vitin 1984, matematikani dhe saksofonisti francez Philip Kahn themeloi Borland International.

C fillimisht u zhvillua si një gjuhë programimi për sistemin operativ Unix.

Shpejt filloi të përhapet te programuesit praktikë. Në fund të viteve 1970, përkthyesit C për Mikrokompjuterët u zhvilluan për sistemin operativ CP/M.

Pas ardhjes së IBM PC, filluan të shfaqen edhe përpiluesit C (për këtë kompjuter tani ka më shumë se 20 prej tyre).

Në vitin 1983, Instituti Amerikan i Standardeve (ANSI) formoi Komitetin Teknik X3J11 për të krijuar një standard për gjuhën C. Gjuha C++ e Borland, e cila është shfaqur në treg, përputhet me shumicën e kërkesave të standardit.

Në thelbin e saj, C është një gjuhë funksionesh. Programimi në C bëhet duke shkruar funksione dhe duke thirrur funksionet e bibliotekës. Shumica e funksioneve kthejnë një vlerë që mund të përdoret në deklarata të tjera.

Ndër avantazhet e shumta të gjuhës C, duhet të theksohen ato kryesore:


Universaliteti (përdoret pothuajse në të gjithë kompjuterët ekzistues);

Kompaktësia dhe universaliteti i kodit;

Shpejtësia e ekzekutimit të programit;

Fleksibiliteti gjuhësor;

Struktura e lartë.


Kapitulli 1 C Bazat

1.1. Alfabeti

Alfabeti i gjuhës përbëhet nga karakteret e mëposhtme:

Shkronjat e mëdha dhe të vogla letra A-Z, a-z dhe nënvizim. Numrat nga 0 në 9. Karaktere speciale + - * / =>

Hapësira e karaktereve, skeda, furnizimi i linjës, kthimi i karrocave quhen hapësirë ​​të bardhë.

Një program C++ është një sekuencë karakteresh ACSII që përfaqësojnë tekstin e tij burimor.

1.2. Konstruktet bazë C

Konsideroni një program të thjeshtë për të printuar frazën "Përshëndetje nga kompjuteri" në ekran.

// program

printf ("Përshëndetje nga kompjuteri");

Merrni parasysh strukturën e programit

C-programi
# Direktivat e paraprocesorit
Kryesor
Operatorët
Funksioni 1 ()
Operatorët
funksioni n()
Operatorët
Përshkrimet
Detyrat
Funksione
Zyrë
bosh

Komanda #include përfshin skedarin stdio.h në programin tonë. Skedari përmban informacion në lidhje me funksionet I/O.

Skedari me emrin stdio.h përmban informacion rreth I/O.

Simboli # tregon që para se të përktheni programin, është e nevojshme të përfshini funksione nga skedari stdio.h në të - ky është i ashtuquajturi përpunim paraprocesor, i cili kryen një përpunim paraprak të tekstit të programit përpara përpilimit.

Linja main() përmban emrin e funksionit me të cilin programi fillon gjithmonë. Kllapat bosh tregojnë se ky është një funksion, por nuk ka parametra.

Karakteret // pasohen nga komentet (për një rresht të vetëm), (karakteret midis /* dhe */ quhen gjithashtu komente).

Kllapat kaçurrelë () shënojnë fillimin dhe fundin e trupit të një programi ose funksioni. Ato përdoren gjithashtu për të grupuar deklarata të shumta të programit në një bllok.

Linja printf ("Përshëndetje nga kompjuteri") përmban funksionin standard të printimit C. Vargu i karaktereve i mbyllur në kllapa (argumenti) është informacioni i kaluar në funksionin printf() nga funksioni ynë main(). Kur funksioni përfundon, kontrolli kthehet në programin origjinal. Karakteri - tregon një furnizim rreshti në një rresht të ri pas printimit.

Merrni parasysh shembullin e mëposhtëm - shkruani një program për të kthyer metra në centimetra.

printf(" %d M përmban %d cm", I, J);

Ky program përcakton dy variabla me numër të plotë I dhe J.

Funksioni i prezantuar scanf("%d",&I); e cila ju mundëson të futni një numër dhjetor nga tastiera dhe t'i caktoni një vlerë ndryshores I, pastaj me komandën J=100*I; llogaritja në vazhdim 4.

Rreshti tjetër printf(" %d M përmban %d cm ", I, J); shtyp një frazë. %d e para (d është një ndryshore numër i plotë) zëvendësohet me vlerën I, e dyta %d zëvendësohet me vlerën J.

Funksioni getch() ju lejon të mbani një imazh në ekran dhe kërkon çdo karakter për të përfunduar punën.

Le të shqyrtojmë një shembull tjetër. Le të shkruajmë një funksion dhe ta thërrasim atë nga programi ynë.

printf ("A më thirre?");

printf("Po thërras funksionin e mbikëqyrësit. ");

printf("Po. Shihni cilët studentë janë duke fjetur dhe zgjojini ata.");

Së pari, ne përshkruajmë funksionin supervisor() dhe më pas i referohemi në programin kryesor duke përdorur komandën supervisor();. Rezultati është një dialog:

Po thërras funksionin e mbikëqyrësit.

A më thirre?

Po. Shihni cilët nxënës janë duke fjetur dhe zgjojini ata.

1.3 I/O
Për të zgjidhur një problem në çdo fushë problematike, është e nevojshme të shkruani një program në të cilin duhet të ketë komanda që lejojnë:
- të ndajë hapësirë ​​për ruajtjen e të dhënave;

Futni të dhënat fillestare;

Përpunoni të dhënat fillestare sipas algoritmit;

Prodhimi në dalje.

C përmban funksionet e nevojshme për të kryer këto veprime. Ne do t'i shqyrtojmë të gjitha funksionet me shembuj dhe do të fillojmë me funksionet hyrëse-dalëse.

1.3.1. konkluzioni

Dalja kryhet në ekran, printer, hard disk (disketa), port. Le të shohim funksionet e ekranit.

Funksioni printf është krijuar për këtë qëllim. Formati: printf([,argument1],...).

Formati është një varg me citime të dyfishta që printohet në ekran. Përpara daljes, printf zëvendëson të gjitha objektet në varg sipas specifikimeve të argumentit. Për shembull, printf(" %d M përmban %d cm ", I, J); %d në vargun e formatit është specifikimi i argumentit.

Specifikimet e argumentit fillojnë me një shenjë përqindjeje (%) dhe një shkronjë të vetme që tregon llojin e të dhënave.

%d e përdorur në specifikim tregon se pritet një numër i plotë. Këtu janë disa specifikime të tjera të formatit të përdorura zakonisht:

- %d numër i plotë;

- %u numër i plotë i panënshkruar;

- %ld numër i plotë i gjatë;

- %p vlera e treguesit;

- %f numër me pikë lundruese;

- %e numri i pikës lundruese në formë eksponenciale;

- %c karakter;

- %s varg;

- %x numër i plotë në format heksadecimal.

Mund të vendosni gjerësinë e fushës, për shembull %6d - gjerësia e fushës 6.

Vlera do të printohet me zhvendosje djathtas (hapësirat përpara), kështu që gjerësia totale e fushës është 6.

Për formatin e numrave realë, mund të specifikoni një pjesë thyesore, për shembull %8.4f - një fushë me gjerësi 8, një pjesë dhjetore 4.

Në fund të vargut të formatit, mund të vendosni karaktere:

përkthimi rreshtor;.

f (konvertimi i formatit ose pastrimi i ekranit)

(skedë)

xhhh (fut karakterin me kodin ASCII hhh, ku hhh përmban 1 deri në 3 shifra gjashtëkëndore)

Për dalje, mund të përdorni funksionet: puts dhe putchar.

Funksioni puts printon një varg në ekran. Për shembull:

puts ("Përshëndetje student");

Funksioni putchar printon një karakter të vetëm në ekran.

1.3.2 Hyrja

Hyrja në C bëhet kryesisht nga tastiera, nga skedari dhe porti.

Funksioni scanf është i ngjashëm me printf. Formati i tij është scanf([,argument1],...). scanf përdor të njëjtat specifikues të formatit si printf. Duhet të theksohet se scanf ka një veçori: argumentet që ndjekin vargun e formatit duhet të jenë adresa, jo vlera (kjo nuk vlen për variablat e karaktereve). Më parë në shembujt, pamë se kur futni një numër të plotë, funksioni ishte shkruar si më poshtë:

scanf("%d", &a);

& është operatori i adresave, i cili i kalon adresat në skanim.

Kur futni variabla të shumta të ndara me presje, mund të përdorni një presje brenda formatit. Shembull:

scanf("%d, %d", &a, &b);

Tani mund të futni, për shembull, 23.56.

Ka vështirësi me futjen e një vargu karakteresh me disa fjalë - do të futen vetëm të dhënat deri në hapësirën e parë. Ekziston një funksion merr për të zgjidhur këtë problem.

printf("Si e ke emrin:");

printf("Përshëndetje %s", emri);

Funksioni merr lexon çdo gjë që shtypet derisa të shtypet Enter.

Në C++, I/O mund të bëhet jo vetëm me funksione, por edhe me operacione. Funksionimi i daljes >.

Formati i daljes së ekranit: cout

Formati i hyrjes së tastierës: cin

Kur përdorni operacionet I/O, skedari iostream.h duhet të përfshihet në program.

I/O e disa vlerave është e mundur (të ndara me një hapësirë).


1.4 Llojet bazë të të dhënave C

1.4.1 Identifikuesit

Emrat që u jepen konstanteve, llojeve të të dhënave, variablave dhe funksioneve quhen identifikues. Në C, rregullat e mëposhtme për krijimin e identifikuesve: duhet të fillojnë me një shkronjë (a...z,A...Z) ose me nënvizim (_), pjesa tjetër e identifikuesit duhet të përbëhet nga shkronja, nënvizime dhe/ose numra ( 0...9).

1.4.2 Konstantet e shtypura

C përdor konstante, të cilat janë një emër që i jepet një vlere. Identifikuesi i emrit mund të jetë çdo gjatësi, por 32 karakteret e para njihen. Identifikuesi fillon me një shkronjë latine ose nënvizim, karakteret pasuese mund të jenë numra, shkronja latine dhe nënvizime.

Përpiluesi C trajton shkronjat e mëdha dhe të vogla si karaktere të ndryshme.

Konstantet e shtypura janë: numrat e plotë, pikat lundruese, konstantet e karaktereve dhe vargjet e karaktereve.

Konstantet përfaqësohen si numra dhjetorë, oktalë ose heksadecimalë.

Përshkrimi i konstanteve fillon me fjalë kyçe const, pastaj shkruani dhe vlerën, për shembull const int Nalog=2.

1.4.3 Variablat

Një variabël është një vlerë e emërtuar, vlera e së cilës mund të ndryshojë gjatë ekzekutimit të programit. Variabla i përket një lloji specifik.


1.4.3.1 Llojet e numrave të plotë

Numrat e plotë përfaqësohen nga llojet e numrave të plotë. Një tip numër i plotë është një lloj gjenerik, përfaqësimi i të cilit varet nga sistemi operativ dhe lloji i procesorit.

Konsideroni llojet kryesore të numrave të plotë:

Le të shqyrtojmë një shembull të thjeshtë.

const int Tax= 2;

Symma = Norma * Taksa;

printf("Taksa Symma = %d ",Symma);

Shembulli deklaron një konstante dhe dy variabla të tipit numër të plotë.

1.4.3.2 Llojet reale

Lloji real përdoret për të ruajtur numrat me një pjesë thyesore.

Në C++, ekzistojnë llojet kryesore të mëposhtme të numrave realë:

Merrni parasysh shembullin e mëposhtëm.

konst float Tax= 0.7;

Symma = Norma * Taksa;

printf("Taksa Symma = %8.4f ",Symma);

V ky shembull tipi real përfaqësohet nga ndryshorja Symma.

1.4.3.3 Llojet e karaktereve

Lloji i karakterit -Char është krijuar për të ruajtur një karakter, kështu që madhësia e tij është një bajt.

Konsideroni një shembull:

printf("A=%c B=%c",A,B);

printf("C= %c",C);

Në këtë shembull, ndryshorja A është vendosur në 'D^, ndryshorja B është vendosur në '!^' dhe ndryshorja C është vendosur në '*^'.

1.4.4 Vargu i tipit të të dhënave

Për të përfaqësuar një varg karakteresh në C, përdoren vargje të tipit char.

Konsideroni një shembull.

charA; /* gjatësia mund të jetë deri në 256 karaktere */

strcpy (A"IBM PC Pentium");

strcpy (B,"Windows 95");

strcpy (C,""); /* variabël pastruese */ printf("A= %s ",A);

printf("B= %s ",B);

printf("C= %s",C);

Në këtë shembull, ekzistojnë tre vargje karakteresh A, B, C.

Me komandë, për shembull, strcpy (A"IBM PC Pentium"); rreshti A përmban tekstin IBM PC Pentium.

Përveç shembullit të mësipërm, mund të përdorni një tregues drejt karaktereve për të përcaktuar vargjet. Shembull:

msg = "Përshëndetje student";

Ylli para mesazhit do të thotë që msg është një tregues karakteri - d.m.th. msg mund të ruajë adresën e një simboli. Megjithatë, kjo nuk ndan memorie për personazhet akomoduese.

Komanda msg = "Përshëndetje, student" cakton adresën fillestare të këtij vargu - (adresën e karakterit U) variablit msg. Komanda puts(msg) printon karaktere derisa të ndeshet me një karakter null, që tregon fundin e vargut.

1.4.5 Strukturat

Një grup të dhënash të ndërlidhura të vendosura në memorie përfaqëson një strukturë. Në C, strukturat e mëposhtme konsiderohen: vargje, regjistrime dhe kombinime të tyre.

1.4.5.1 Vargjet

Një koleksion i emërtuar i të dhënave homogjene quhet një grup. Çdo element i grupit ruhet në një zonë të veçantë memorie dhe ka numrin e vet (duke filluar nga zero).

Konsideroni një shembull.

B=10; B=20; B=30;

printf("B= %d ",B);

printf("B= %d ",B);

printf("B= %d ",B);

printf("B= %d ",B);

Në shembullin e shqyrtuar, përcaktohet një grup B, i përbërë nga katër elementë me numra të plotë. Elementet e grupit mund të manipulohen si variabla të rregullt.

Ekzistojnë grupe shumëdimensionale, për shembull:

Vargu A është një grup dydimensional (përbëhet nga katër rreshta dhe tre kolona):

Vargu A është një grup katërdimensional.

Shqyrtoni një shembull të punës me një grup dy-dimensional.

B = 1,2; B = 1,3;

printf("B= %4.2f B= %4.2f B= %4.2f", B,B,B);

printf("B= %4.2f B= %4.2f B= %4.2f", B,B,B);

1.4.5.2 Regjistrimet

Ndryshe nga grupet, një rekord ju lejon të ruani të dhëna të llojeve të ndryshme. Hyrja fillon pas fjalës kyçe struct. Le të shqyrtojmë një shembull - informacioni për studentët ruhet në një rekord: mbiemri, viti i lindjes, numri i grupit.

tipdef strukture A (

strcpy (B.Fio,"Ivanow G.I."); B. Zoti = 1977;

printf("Fio = %s ",B.Fio);

printf("Zoti = %d ",B.God);

Në shembullin e konsideruar, rekordi ka strukturën e mëposhtme:

struktura A ( /* Emri i regjistrimit) */

charFio; /* 1 fushë regjistrimi */

ndër Zotin; /* 2 fusha regjistrimi */

Tasti typedef u jep strukturave një emër.

Shembulli mund të rishkruhet si më poshtë.

typedef struct (

strcpy (B.Fio,"Ivanow G.I.");

printf("Fio = %s ",B.Fio);

printf("Zoti = %d ",B.God);

printf("Gruppa = %d ",B.Gruppa);

Në shembull, ne kemi konsideruar një rekord, por në jetën reale, nuk mund të ketë një student në një grup, kështu që ne mund të kombinojmë një grup dhe një rekord dhe të krijojmë një grup rekordesh. Konsideroni një shembull.

tipdef strukture A (

WGruppa.Zot = 1977;

WGruppa.Gruppa = 384;

WGruppa.Zot = 1978;

WGruppa.Gruppa = 384;

printf("Fio2 = %s ",WGruppa.Fio);

printf("God2 = %d",WGruppa.God);

printf("Gruppa2 = %d ",WGruppa.Gruppa);

Fillimisht përcaktuam strukturën A dhe më pas e përdorëm kur deklaronim strukturën WGruppa si një grup prej 12 hyrjesh të strukturës B.

Tani, për adresimin, duhet të specifikojmë numrin e elementit të grupit dhe emrin e fushës.

Ekzistojnë opsione kur një hyrje përmban një hyrje tjetër, për shembull, duke shtuar një adresë në hyrjen e studentit të diskutuar më sipër. Shembull.

typedef struct Adresa(

char Street_Nd_Kw; );

tipdef strukture A (

Adresa D_addr; );

strcpy (WGruppa.Fio,"Ivanow G.I.");

WGruppa.Zot = 1977;

WGruppa.Gruppa = 384;

strcpy(WGruppa.D_addr.City"Shadrinsk"); strcpy(WGruppa.D_addr.Rruga_Nd_Kw,"Lenina 10 kw.1");

strcpy (WGruppa.Fio,"Petrow R.G.");

WGruppa.Zot = 1978;

WGruppa.Gruppa = 384;

strcpy(WGruppa.D_addr.City,"Kataisk"); strcpy(WGruppa.D_addr.Rruga_Nd_Kw,"Akulowa 1 kw.2");

printf("Fio1 = %s ",WGruppa.Fio);

printf("God1 = %d",WGruppa.God);

printf("Gruppa1 = %d ",WGruppa.Gruppa);

printf("Qyteti= %s ",WGruppa.D_addr.City);

printf("Fio2 = %s ",WGruppa.Fio);

printf("God2 = %d",WGruppa.God);

printf("Gruppa2 = %d ",WGruppa.Gruppa);

printf("Qyteti= %s ",WGruppa.D_addr.City);

printf("Rruga= %s ",WGruppa.D_addr.Rruga_Nd_Kw);

1.4.6 Fushëveprimi dhe jetëgjatësia e variablave

Sipas fushëveprimit, variablat në C mund të ndahen në tre grupe:

1. Variabla e përcaktuar në të gjitha modulet (fajlet) e programit. Një variabël i tillë përcaktohet duke përdorur fjalën kyçe të jashtme. Kjo variabël do të jetë e dukshme në të gjitha pikat e programit. Një variabël i tillë është global për të gjithë programin.

2. Një variabël i përcaktuar në një nga modulet (skedari) përpara teksteve të të gjitha funksioneve. Një variabël i tillë do të jetë global për këtë modul, d.m.th. mund të përdoret në të gjitha pikat e këtij moduli.

3. Variabla e përcaktuar në këtë funksion. Kjo variabël mund të përdoret vetëm brenda këtij funksioni. Një variabël të tillë do ta quajmë lokale.

Sipas jetëgjatësisë, të gjitha variablat mund të ndahen në dy grupe:

1. Variablat që jetojnë gjatë programit.

2. Variablat që shkatërrohen pas daljes nga funksioni.

Variablat globalë janë të llojit të parë për sa i përket jetëgjatësisë. Variablat lokale shkatërrohen kur funksioni del. Në rastin kur duam të bëjmë një ndryshore lokale jetëgjatë, përdoret fjala statike. Variablat lokale të këtij lloji jetojnë nga momenti i thirrjes së parë të funksionit deri në përfundimin e programit. Megjithatë, në kuptimin e dukshmërisë, këto variabla mbeten lokale. Shkruani int statike i=0; Do të thotë që ndryshorja është inicializuar në zero në hyrjen e parë në funksion, por në hyrjet e mëvonshme në funksion, vlera e saj ruhet në varësi të veprimeve që janë kryer në të.

Përpiluesit modernë C përkthejnë programin në atë mënyrë që të optimizojnë performancën e tij sa më shumë që të jetë e mundur. Një optimizim është ruajtja e variablave, kur është e mundur, në regjistra në vend të vendndodhjeve të memories. Në rastet kur dëshironi të parandaloni që një ndryshore e caktuar të ruhet në regjistra, përdorni modifikuesin e paqëndrueshëm. Një nevojë e tillë mund të lindë nëse ndryshorja pritet të ndryshojë si rezultat i ndikimeve të jashtme (për shembull, ndërprerjet).

Dhe vërejtja e fundit. Kujtesa e alokuar në mënyrë dinamike, kudo që ta shpërndani, jeton derisa ta lironi.

1.5 Operatorët kryesorë

operacioni i caktimit.

Operacioni më i zakonshëm është caktimi, për shembull c= a/b. Në C, caktimi shënohet me shenjën e barazimit=, ku vlera në të djathtë të shenjës së barazimit i caktohet ndryshores në të majtë. Është gjithashtu e mundur të përdoren caktime sekuenciale, për shembull: c = a = b.

Operatorët aritmetikë.

Në C, kryhen grupet e mëposhtme të veprimeve aritmetike:

1.Binar: mbledhje(+), zbritje(-), shumëzim(*), pjesëtim(/), pjesëtim i plotë(%) (për llojin int duke marrë mbetjen).

2. Unary: plus unary (+), unary minus (-), adresimi (&), adresimi indirekt (*), përcaktimi i madhësisë së memories së tipit (madhësia e).

3. Logjike: dhe (&&), ose (!!), jo (!=).

4. Marrëdhëniet:

a) barabartë (==), jo e barabartë (!>);

b) më pak se (), më pak se ose e barabartë me (=);

5. Rritjet (++) dhe zvogëlimet (--). Për shembull, i++ do të thotë i=i+1 dhe i-- do të thotë i=i-1.

Operacionet 6.Bit - ju lejojnë të kryeni operacione në bit.

7. Operacione të kombinuara. Turbo-C ka shkurtore për të shkruar shprehje që përmbajnë operacione të shumta:

a = a + b shkurtuar në a += b;

a = a - b; shkurtuar në a -= b;

a = a * b; shkurtuar në a *= b;

a = a / b; shkurtuar në a /= b;

a = a % b; reduktuar në një %= b;

8. Operacionet e adresës:

1. Operacioni i përcaktimit të adresës (&) 2. Operacioni i hyrjes në adresën (*).

Operatori & kthen adresën e ndryshores së dhënë; nëse X është një variabël int, atëherë &X është adresa (vendndodhja e memories) e asaj ndryshore. Nga ana tjetër, nëse msg është një tregues për të shtypur char, atëherë *msg është karakteri i drejtuar nga msg. Konsideroni një shembull:

msg = "përshëndetje";

printf("X = %d &X = %p",X,&X);

printf("*msg = %c msg = %p ", *msg, msg);

Kur printohet, funksioni i parë printon dy vlera: vlerën e X 7 dhe adresën e X (të caktuar nga përpiluesi). Funksioni i dytë gjithashtu printon dy vlera: karakterin e treguar nga msg (P) dhe vlerën msg, e cila është adresa e atij karakteri (e caktuar gjithashtu nga përpiluesi).

Përparësia e veprimeve në C korrespondon me përparësinë e veprimeve në matematikë.

Operatori i presjes.

Operatori i presjes përdoret për të organizuar shprehje të shumta brenda kllapave. Shprehja brenda kllapave vlerësohet nga e majta në të djathtë dhe e gjithë shprehja merr vlerën që u vlerësua së fundi. Për shembull:

(X=Y, Y=marr())

I cakton ndryshores X vlerën Y, pastaj lexon karakterin e futur nga tastiera dhe e ruan atë në Y. Rezultati i të gjithë shprehjes, në fund, do të jetë vlera e karakterit të futur nga tastiera.

Operatorët e kontrollit.

Deklarata If... bën të mundur, në varësi të kushtit, ekzekutimin e një ose një dege tjetër të programit. Sintaksa e operatorit është si më poshtë:

Nëse shprehja e kushtit1 shprehja tjetër2;

Kushti duhet të vlerësohet në një vlerë boolean të vërtetë ose të gabuar. Shprehja 1 do të ekzekutohet nëse kushti është i vërtetë. Shprehja 2 do të ekzekutohet nëse kushti është false.

Ekziston një version i shkurtuar i operatorit:

nëse shprehja e kushtit1

Shembull. Përcaktoni nëse numri i futur është një ditë e javës, d.m.th. nëse numri është në rangun nga 1 në 7.

printf("Gabim %d ",A);

else printf("OK %d ",A);

Shprehja e kushtit (A 7) do të vlerësohet në TRUE nëse ekzekutohet A 7 - në këtë rast, ekzekutohet dega printf("Gabim ",A); përndryshe ekzekutohet dega printf("OK",A);

Ekziston një mënyrë tjetër për të shkruar deklaratën Nëse .... Shembull:

y=(t>0)? t*10: t-10; /* nëse t>0 y=t*10 tjetër y=t-10;*/

printf("OK %d ",y);

Në këtë version, lloji i operatorit tregohet në komente.

Deklarata switch... case përdoret kur është e nevojshme të analizohet një ndryshore dhe të kryhen veprime të caktuara në varësi të vlerës së saj. Konsideroni një shembull. Shkronjat e alfabetit latin futen nga tastiera. Në varësi të shkronjës, kryeni veprime të caktuara.

case "c": printf(" small %c ",A); pushim; /* blloko daljen */

case "G": printf("big %c",A);

default: printf("Gabimi %c",A);

Në këtë shembull, nëse futet karakteri c, atëherë futet printf(" vogël %c", A); nëse futen shkronjat e mëdha F ose G, atëherë ekzekutohet printf(" %c i madh", A); nëse nuk është futur asnjë nga karakteret e konsideruara, atëherë ekzekutohet printf("Gabim %c", A);

Për të përsëritur një grup komandash disa herë, mund të përdorni deklaratën do... while. Konsideroni një shembull.

printf("Zifra?");

printf("Gabim %d ",A);

) ndërsa (!(A == 9));

printf("OK %d",A);

Një numër futet nga tastiera. Deklarata printf("Gabimi %d ",A); ekzekutohet. Më pas vjen analiza - numri 9 është i barabartë apo jo, nëse nuk është i barabartë, trupi i lakut ekzekutohet përsëri:

printf("Zifra?");

printf ("Gabim %d ",A).

Nëse numri është 9, atëherë ekzekutohet deklarata printf("OK %d ",A); dhe laku përfundon.

Karakteristika kryesore e deklaratës do... while është fakti që trupi i ciklit të mbyllur ndërmjet deklaratave do dhe while ekzekutohet të paktën një herë, d.m.th. fillimisht ekzekutohet trupi i lakut dhe më pas analizohet gjendja.

Pra, kuptimi i operatorit në fjalë është si vijon: "Ekzekutoni trupin e lakut derisa kushti të jetë i vërtetë".

Deklarata while..., ndryshe nga do... while, fillimisht analizon gjendjen dhe më pas ekzekuton trupin e ciklit.

printf("Zifra?");

printf("Gabim %d ",A);

printf("OK %d",A);

Në këtë shembull, ndryshorja A:=0; është inicializuar. Kjo bëhet sepse analiza është e para nëse është 9 apo jo. Nëse nuk është i barabartë, atëherë ekzekutohet trupi i lakut. Kuptimi i operatorit të konsideruar është si më poshtë:

"Për sa kohë që kushti është i vërtetë, ekzekutoni trupin e lakut."

Deklarata for... përdoret kur dihet se sa herë duhet të ekzekutohet trupi i ciklit, por ky pohim është shumë më fleksibël në krahasim me Pascal. Konsideroni një shembull.

printf("Zifra %d ",A);

Në këtë shembull, A ruan gjendjen e numëruesit të ciklit. Fillimisht A:=1. Deklarata printf("Zifra %d ",A) është ekzekutuar. Atëherë vlera e A rritet me një. A është duke u analizuar

Në shembullin e mëposhtëm, merrni parasysh opsionin për deklaratë... kur vlera fillestare e ndryshores është më e madhe se vlera përfundimtare, dhe ndryshorja zvogëlohet me një gjatë ciklit.

për (A = 5; A >= 1; A--) /* A-- do të thotë A=A-1 */

printf("Zifra %d ",A);

Ka shumë modifikime në deklaratën për..., për shembull:

Deklaratë boshe - për vonesë kohore:

; /* deklaratë boshe */

Përdorimi i hapave të ndryshëm:

Ndryshimi i variablave:

Konsideroni një shembull në të cilin dy variabla janë inicializuar dhe secila prej të cilave ndryshon pas përsëritjes së ciklit:

Deklarata goto ju lejon të transferoni kontrollin në çdo linjë të programit. Për këtë qëllim përdoret një etiketë. Shembull.

label_1:/* label */ printf("? ");

nëse (A != "y") goto label_1; )

Ju mund të përdorni deklaratën break për të thyer ciklin sipas disa kushteve. Shembull.

i (A == "y") thyej;

Për të ndërprerë përsëritjen e lakut dhe për të shkuar në përsëritjen tjetër, përdorni Vazhdo deklaratën. Shembull.

nëse (A == "y") vazhdon;

printf("Punon %c",A);

Deklaratat return() dhe exit() përdoren gjithashtu për të përfunduar programin.

1.6. Paraprocesor

Paraprocesori i gjuhës C ju lejon të përfshini në program fragmente programesh të shkruara veçmas nga ai kryesor përpara se të filloni përkthimin.

#përcaktoni direktivën.

Direktiva #define mund të shfaqet kudo në program dhe përkufizimi që jep është i vlefshëm nga ajo pikë deri në fund të programit.

#define PËRGJIGJE TRI*TRI

#define OT printf("Përgjigjja është %d.",OTWET)

#define jd cin >>C;

Pas ekzekutimit të programit, do të merrni:

PËRGJIGJA është 9

Në rreshtin e parë të programit, TRI është përkufizimi makro dhe është i barabartë me 3, ku 3 është vargu zëvendësues.

Në rreshtin e dytë, makroja OTWET ka vargun zëvendësues TRI*TRI, e kështu me radhë. Çdo rresht ka tre pjesë. E para është direktiva #define, e ndjekur nga përkufizimi makro. Makrot nuk duhet të përmbajnë hapësira brenda vetes. Dhe në fund vjen vargu (i quajtur "vargu zëvendësues") që përfaqëson makro. Kur paraprocesori gjen një nga përkufizimet makro në program, ai e zëvendëson atë me një varg zëvendësues. Ky proces i kalimit nga përkufizimi makro në vargun përfundimtar të zëvendësimit quhet "zgjerim makro".

Direktiva #përfshi.

Kur paraprocesori "e njeh" direktivën #include, ai kërkon emrin e skedarit që e ndjek atë dhe e përfshin atë në programin aktual. Direktiva vjen në dy forma:

#include filename në kllapa këndore

#përfshi emrin e skedarit "my.h" në thonjëza të dyfishta

Kllapat e këndit i tregojnë paraprocesorit të kërkojë skedarin në një ose më shumë nga drejtoritë standarde të sistemit. Thomat i thonë që së pari të shikojë në drejtorinë e punës dhe më pas të shikojë në vendet "standarde".

Direktivat: #undef, #ifdef, #else, #endif

Këto direktiva ju lejojnë të pezulloni përkufizimet e mëparshme.

Direktiva #undef anulon përkufizimin më të fundit të makros së emërtuar.

#undef TRI /* TRI tani është e papërcaktuar */

#define F 10 /* F ripërcaktuar si 10 */

#undef F /* F është përsëri 5 */

#undef F /* F tani është e papërcaktuar */

Le të shqyrtojmë një shembull tjetër.

#include "otw.h" /* do të ekzekutohet nëse OTW është përcaktuar */

#include "w.h" /* do të ekzekutohet nëse OTW nuk është përcaktuar */

Direktiva ifdef thotë se nëse një identifikues pasues OTW specifikohet nga paraprocesori, atëherë të gjitha direktivat pasuese ekzekutohen deri në shfaqjen e parë të #else ose #endif. Kur ka një #else në një program, programi nga #else në #endif do të ekzekutohet nëse identifikuesi nuk është i përcaktuar.

1.7 Programet. Funksione

Siç e pamë më herët, një program C ka një segment rrënjë që fillon me direktivat e paraprocesorit dhe fjalën kyçe kryesore.

Seksionet e programit të përdorura shpesh theksohen në funksion. Çdo funksion gjithashtu fillon me direktivat e paraprocesorit dhe një emër të ndjekur nga kllapa ( ).

Konsideroni një program shembull për vizatimin e shkallëve.

printf("|----| ");

printf("|----| ");

printf("|----| ");

Tani le ta shkruajmë këtë program duke përdorur funksionin Lestniza.

printf("|----| ");

Siç mund ta shihni nga programi, funksioni thirret tre herë. Për të kapërcyer këtë mangësi, ne e ripunojmë programin dhe prezantojmë argumente formale dhe aktuale:

Lestniza(int B)/* B - argument formal */

printf("|----| ");

shkallë (3); /* 3 -argumenti aktual */

Në këtë funksion, B është një argument formal (vlera përfundimtare e operatorit for to). Për t'i caktuar një vlerë specifike, përdoret argumenti aktual, i cili i kalohet funksionit kur thirret në programin kryesor.

Nëse disa parametra i kalohen një funksioni, atëherë ato duhet të kalohen sipas radhës në të cilën janë shkruar në funksion.

Konsideroni një funksion që kthen vlerën e tij duke përdorur shembullin e katrorit të një numri.

float Kwadrat (noton A)

printf("Kwadrat = %8.2f ",Kwadrat(B));

Siç mund ta shihni nga shembulli - emri i funksionit është Kwadrat - ai llogarit katrorin e një numri. Në rreshtin printf("Kwadrat = %8.2f ",Kwadrat(B)); ky funksion quhet - vlera (numri i hyrjes) jepet si hyrje, dhe si rezultat marrim rezultatin - katrorin e numrit, i cili kthehet në program me komandën kthyese.

Le të shqyrtojmë një variant tjetër të punës me një funksion që kthen një vlerë pa komandën e kthimit.

Kwadrat (noton A, noton *B)

printf("Kwadrat = %8.2f ",D);

1.8. Treguesit

Një tregues është një variabël që përmban adresën e të dhënave, jo vlerën e saj. Treguesi përdoret:

1. Për lidhjen e strukturave të pavarura me njëra-tjetrën.

2. Për alokimin dinamik të memories.

3. Për të hyrë elemente të ndryshme strukturat.

Merrni parasysh programin e mëposhtëm:

printf("Vlera direkte Z: %d ", Z);

printf("Vlera Z e përftuar nëpërmjet treguesit: %d ",*Y);

printf(" Adresa Z nëpërmjet marrjes së adresës: %p ",&Z);

printf("Adresa Z nëpërmjet treguesit: %p ", Y);

Në këtë shembull, Y është një tregues për një ndryshore numër të plotë dhe përmban adresën e saj. Nga ana tjetër, & ju lejon të merrni adresën në të cilën ndodhet vlera e ndryshores Z. Në këtë program:

Adresa e ndryshores Z i caktohet Y;

Vlera e plotë 100 i caktohet Z;

Operatori & ju lejon të merrni adresën,

në të cilën vendoset vlera Z.

Rezultati i programit:

Vlera e drejtpërdrejtë Z: 100

Vlera Z e marrë nëpërmjet treguesit: 100

Adresa Z përmes merrni adresën: 85B3:0FDC

Adresa Z nëpërmjet treguesit: 85B3:0FDC

Pointerët përdoren gjithashtu për shpërndarjen optimale të memories.

Konsideroni një shembull të një treguesi për një numër të tipit char.

char*str; /* treguesi te ndryshorja e karakterit */

str = (char*)malloc(10);

strcpy (str, "përshëndetje");

printf("String është %s", str);

Së pari, me komandën char *str; krijohet tipi str, i cili është një tregues për variabël tip char(* qëndron për "tregues"). Me komandë str = (char *)malloc(10); ne ndajmë 10 bajt memorie për variablin str (lloji i vargut). Me komandën strcpy(str, "Përshëndetje"); kryhet - "shkruani në zonën e memories të treguar nga str, vargun e karaktereve "Përshëndetje". Me komandën printf("String është %s ", str); "printoni në ekran se për çfarë tregon str. komanda e lirë (str); liron memorien e treguar nga rr.

Konsideroni më shumë shembull kompleks qasja në një rekord duke përdorur një tregues.

); /* fundi i regjistrimit */

struct Nxënësi *A;

nëse ((A =(Studenti *) malloc(madhësia e(studenti))) == NULL)

printf ("Jashtë memoria");

strcpy (A.Fio, "Ivanov");

printf("Fio1 %s Gruppa %d ", A.Fio, A.Gruppa);

strcpy (A.Fio, "Petrow");

printf("Fio2 %s Gruppa %d ", A.Fio, A.Gruppa);

Një tregues mund të përdoret gjithashtu për të marrë një tregues indirekt në një strukturë.

Le të jetë poit një tregues për një strukturë dhe le të jetë elem elementi i përcaktuar nga shablloni i strukturës. Pastaj point->elem përcakton elementin që është duke u referuar. Merrni parasysh shembullin e mëparshëm.

struct Student ( /* hyrje Student */

charFio; /* fusha e regjistrimit Fio */

grupi int; /* Fusha e regjistrimit Gruppa */

); /* fundi i regjistrimit */

Tani ne mund të aksesojmë fushat e strukturës në disa mënyra. Trajtim ekuivalent:

Nxënësi.Grup=236;

pikë->Gruppa=236;

Ne shënojmë një tipar i rëndësishëm tregues në C. Përkthyesi merr automatikisht parasysh llojin e treguesit në veprimet aritmetike mbi të. Për shembull, nëse i është një tregues për një ndryshore me numër të plotë (d.m.th., dy bajtë), atëherë veprimi i tipit i++ do të thotë që treguesi nuk rritet me një, por me dy bajt, d.m.th. do të tregojë variablin ose elementin e vargut tjetër. Për këtë arsye, një tregues mund të përdoret në vend të indekseve të vargjeve. Për shembull, nëse A është një tregues për një grup të tipit të numrit të plotë, atëherë në vend të A[i] mund të shkruani *(A+i). Për më tepër, përdorimi i treguesve në vend të indekseve i lejon përpiluesit të prodhojë kode më të dobëta dhe më të shpejta.

1.9 Treguesit dhe funksionet

Treguesit mund të përdoren gjithashtu si parametra zyrtarë të funksionit. Konsideroni një shembull.

Funksioni swap deklaron dy parametra zyrtarë x dhe y si tregues për të dhënat int. Kjo do të thotë që funksioni i shkëmbimit funksionon në adresat e ndryshoreve të plota (në vend të vlerave të tyre). Prandaj, të dhënat adresat e të cilave i kalohen funksionit gjatë thirrjes në të do të përpunohen. Funksioni main() thërret swap.

këmbim (int *x, int *y)

wr = *x; *x = *y; *y=wr;

printf("Ishte: i=%d, j=%d ",i,j);

printf("Tani: i =%d, j=%d ",i,j);

Pasi të ekzekutohet programi, vlerat i dhe j do të ndërrohen. Duhet të theksohet se megjithëse treguesit kursejnë memorie, ata përdorin shumë më tepër kohë për procesorin.

Kështu, konsiderohen elementët kryesorë të gjuhës C.

1.10 Skedarët

Një skedar është një koleksion i të dhënave të regjistruara në një medium. Mund të krijoni një skedar, të shkruani të dhëna në të, të fshini të dhëna, të përditësoni të dhëna, të shtoni të dhëna. Hyrja/dalja në një skedar bëhet duke përdorur metoda të aksesit direkt ose sekuencial.

Konsideroni fillimisht mënyrën sekuenciale të aksesit.

I/O është me bufer. Kjo do të thotë që programi shkruan dhe lexon në buffer; të dhënat shkëmbehen ndërmjet buferit dhe skedarit nëse buferi është i plotë, ose skedari është i mbyllur, ose para daljes nga programi.

printf ("skedar burim");

printf ("skedari i daljes");

nëse ((në = fopen(n1, "rt"))== NULL)

printf ("Nuk mund të hapet skedari me burim"); kthimi 1;

nëse ((jashtë = hap (n2, "wt"))== NULL)

printf ("Nuk mund të hapet skedari i daljes"); kthimi 1;

ndërsa (!feof(in))

fputc(fgetc(në), jashtë);

string FILE *in, *out; përcakton një tregues për dy skedarë. Emri i skedarit mund të jetë any - në rastin tonë, në është skedari burimor, jashtë është dalja.

V rreshti tjetër char n1, n2; Përcaktoni dy variabla n1 dhe n2 për të ruajtur emrat e skedarëve. Katër rreshtat e ardhshëm ju lejojnë të futni emrat e skedarëve hyrës dhe dalës dhe t'i caktoni këta emra variablave n1 dhe n2. Përpara se të filloni të punoni me një skedar, ai duhet të jetë i hapur. Për ta bërë këtë, ekziston një funksion fopen () në të cilin parametri i parë përmban emrin e skedarit, dhe i dyti - lloji i punës, për shembull "rt" - lexoni skedarin.

Komanda in = fopen(n1, "rt" do të bëjë që skedari i ruajtur në variablin n1 të hapet për lexim dhe programi do të kthejë treguesin in në këtë skedar, të cilin (pointer) do ta përdorim kur lexojmë karaktere nga Nëse skedari nuk ekziston, atëherë fp do të jetë NULL, fprintf(stderr, "Nuk mund të hapet skedari i daljes"); ktheni 1; dhe programi do të dalë.

Funksioni out = fopen (n2, "wt", vetëm tani jashtë është një skedar dalës, dhe mënyra e funksionimit "wt" është shkrimi në një skedar) funksionon në mënyrë të ngjashme.

Kjo komandë krijon një skedar me emrin e ruajtur në variablin n2.

Leximi nga një skedar bëhet duke thirrur fgetc(in). Lexon një karakter nga skedari i lidhur me treguesin in.

Me komandën fputc(fgetc(në), jashtë); karakteri i lexuar shkruhet në skedar jashtë. Për të lexuar informacion nga i gjithë skedari, përdorni konstruksionin while (!feof(in)).

fputc(fgetc(në), jashtë);.

Funksioni feof(in) kthen një vlerë jo zero nëse është në pozicionin fundor, dhe zero përndryshe. Derisa të haset zero, të dhënat nga skedari burimor lexoni dhe shkruani në ditën e pushimit.

Skedari mbyllet kur thirret funksioni fclose(). Nëse skedari është hapur për shkrim në të njëjtën kohë, shfaqet përmbajtja e buferit të lidhur me këtë skedar. Lidhja midis treguesit dhe skedarit është prishur.

Në mënyrë të ngjashme, funksioni fgetc(string,n,fp) lexon një varg nga skedari i lidhur me fp dhe e vendos atë në varg. Karakteret lexohen derisa të merret një karakter " ", ose derisa skedari të shterohet, ose derisa të lexohen (n-1) karaktere.

Modaliteti akses direkt më fleksibël, sepse ju lejon të aksesoni drejtpërdrejt çdo hyrje në skedar. Hyrja minimale për një skedar me akses të drejtpërdrejtë është një bajt. Më poshtë do të shqyrtojmë rastin e një skedari me akses të drejtpërdrejtë me një rekord të barabartë me një bajt. Skedarët e tillë quhen binare. Skedarët e aksesit të drejtpërdrejtë janë të domosdoshëm kur shkruani programe që duhet të punojnë me sasi të mëdha informacioni të ruajtura pajisje të jashtme. Përpunimi i DBMS bazohet në skedarët e aksesit të drejtpërdrejtë.

Le të përshkruajmë shkurtimisht dispozitat kryesore të punës me skedarët e aksesit të drejtpërdrejtë.

një). Çdo hyrje në skedarin e aksesit të drejtpërdrejtë ka një numër. Regjistrimet numërohen nga 0 në N-1, ku N është numri i regjistrimeve në skedar. Për skedar binar N është gjatësia e skedarit në bajt. Për skedar i hapur njëri nga rekordet është ai aktuali - thuhet se treguesi është vendosur në këtë hyrje. Mund ta lëvizni treguesin duke përdorur funksionin lseek.

2). Kur hapni (ose krijoni një skedar) treguesi vendoset automatikisht në fillim (rekord 0). Gjatë kryerjes së operacioneve të leximit ose shkrimit, treguesi kalon automatikisht pas regjistrimit të fundit të leximit (shkrimit).

3). Ju mund të ndryshoni madhësinë e skedarit (rritni ose shkurtoni) duke përdorur funksionin chsize. Kur madhësia e skedarit rritet, të dhënat e mbushura me kodet 0 shtohen në të.

Më poshtë është një program që tregon se si të punohet me skedarë.

int h; /*trajtimi i skedarit që do të krijohet*/

char * s="Ky varg do të vendoset në një skedar";

charbuf; /*buffer për të lexuar nga skedari*/

Fmode=O_BINARI; /*punoni me skedarë binare*/

if((h=creat("proba.txt",S_IREAD |S_IWRITE))==-1) /*krijo skedar*/

printf ("Dështoi në hapjen e skedarit!");

shkruani(h,s,strlen(s)); /*shkruani vargun s në skedar*/

lseek(h,4,SEEK_SET); /*bajt i katërt nga fillimi i skedarit*/

tampon=0; /*shënoni fundin e rreshtit*/

mbyll (h); /*mbyll skedarin*/

printf("%s",buf); /*shtypni rreshtin e leximit*/

Programi ynë është mjaft i komentuar, ndaj japim mjaftueshëm shpjegime të shkurtra. Programi krijon një skedar me akses të drejtpërdrejtë dhe shkruan një sekuencë bajtash (string) atje. Pastaj ka një akses të drejtpërdrejtë në një nënvarg të këtij vargu direkt në skedar. Kur analizojmë tekstin e programit, ne i tërheqim lexuesit në disa pika:

1.Përpunimi i gabimit të krijimit të skedarit. Në të vërtetë, hapja e një skedari mund të dështojë dhe një program i mirë duhet të trajtojë situata të tilla.

2. Nëse skedari hapet me sukses, atij i caktohet një përshkrues (një numër unik), me anë të të cilit mund të aksesoni skedarin.

3. Së fundi, mos harroni se një varg do të bëhet varg vetëm kur përfundon me kod

Artikujt kryesorë të lidhur