c++konspektas informatika

Embed Size (px)

Citation preview

TRUMPAS VADAS PROGRAMAMVIM C IR C++

IVADAS C ir C++ programavimo kalba, tai galinga programavimo kalba, vis labiau naudojama visame pasaulyje. Dabar i kalba tai pagrindin profesional programavimo kalba, kuri skmingai vartojama tiek sistemins, tiek taikomosios rangos krimui. Pirm kart C kalb apra jos autoriai B.W.Karnighan ir D.M.Ritchie 1978 metais ileistoje knygoje C programavimo kalba. C kalbos variantas su klasmis pavadintas C++ kalba. i kalba buvo kaip instrumentas programuotojams praktikams. Be ios kalbos, yra ir kit programavimo kalb: Paskalis grietas programavimas, Beisikas jo sintaks artima angl kalbai. I esms C++ yra nauja programavimo kalba, pritaikyta sudting program sistem ir instrumentini programavimo priemoni krimui, panaudojant objektinio programavimo technologij. Taiau ioje kalboje isaugotas glaudus ryys ir su klasikine C kalba.

C ir C++ kalbos privalumaiC++ iuolaikin programavimo kalba. C ++ efektinga programavimo kalba. Ji leidia geriausiai inaudoti kompiuterinius resursus. C++ kalba paraytos programos yra kompaktikos ir greitai vykdomos. C ++ mobilioji programavimo kalba. Tai reikia, jei programa parayta ia kalba, ji gali bti lengvai, su nedideliais pataisymais arba visai be j, perkeliama kitas skaiiavimo sistemas, pvz.: i IBM kompiuterio perkelti programos veikim UNIX. C++ galinga ir lanksti programavimo kalba. Didel dalis galingos UNIX ir Windows operacins sistemos parayta C++ kalba. C++ kalba paraytos programos naudojamos fizikiniams ir techniniams udaviniams sprsti, taip pat naudojamos ir animacijai kurti. C ++ turi galimyb panaudoti eil valdanij konstrukcij, kurios paprastai asocijuojasi su asembleriu. Asemblerio programavimo kalba labai sudtinga (1pav.), tai skaiiai ir kodai, kuriuos suprasti ne specialistui sunku, kadangi ji raoma procesoriaus kalba (2 pav.). B8 23 01 MOV AX,0123 05 25 00 ADD AX,0025 8B D8 MOV BX,AX 03 D8 ADD BX,AX 8B CB MOV CX,BX 2B C8 SUB CX,AX 2B C0 SUB AX,AX 90 NOP CB RETF 1 pav. Asembleriu prayta programa. B8 23 01 05 25 00 8B D8 03 D8 8B CB 2B C8 2B C0 90 CB D0 A2 17 04 1F C3 1E 52 2E 8E 34 00 AE 1A 45 04 B4 41 CD 21 BA 94 04 B4 41 CD 21 5A E8 93 02 C6 06 44 04 00 1F C3 BA 87 80 E8 DA FF 0E 1F E9 AB F8 9C E8 9D FC 50 52 BA 78 81 E8 C9 FF 0E 1F E8 08 31 5A 58 9D 3D 41 00 75 03 E9 8F F8 E9

12 BA 8E 1E 3A D0 FE 06 44 04 06 57 1E 56 1E 06 1F BE 8D 87 26 C6 06 A3 E5 00 E8 EA F0 1F 72 1F 2 pav. Procesoriaus kalba. Asembleriu parayta programa yra labai didels apimties, nes kompiuteriui reikia aikinti kiekvien norim atlikti veiksm detaliai. inoma, programuojant asembleriu galima pasinaudoti visais kompiuterio resursais. Asembleris tai sistemini programuotoj kalba, kuri pilnai leidia panaudoti visus kompiuterio resursus. Fortranas puikiai suskaiiuoja sinus, taiau sunkiai pavaizduoja tak ekrane. C kalba tai aukto lygio programavimo kalba, kuri leidia panaudoti visus kompiuterio resursus kaip ir asembleris. iuo metu C kalba yra sistemini programuotoj kalba. C patogi kalba. Tai struktrin kalba, taiau ji nra labai grieta ir per daug nevaro programuotojo.

Programavimo procesasProgramos raymas yra gana ilgas procesas, kuris schematikai yra pavaizduotas 3 pav. Pirma, pasinaudojus turimu redaktoriumi, raomas programos tekstas. ia svarbu neapsirikti renkant programos tekst ir parinkti bylos vard, kurioje bus programa. Programos teksto byla *.cpp arba *.c (pirmasis C++ kalba, antrasis C). Toliau parayt program kompiliuojame, t.y. ms parayt program perraome kompiuterio kalba ir gauname objektin (*.obj) byl. Tai gali bti tik gabaliukas programos. Galiausiai, visus program gabaliukus sujungia vien *.exe byl kita programa, vadinama komponuotoju (linker). i programos dalis kartu traukia ir bibliotekines funkcijas. Taiau gautoji programa yra su klaidomis, todl j reikia derinti ir taisyti. Tai atliekama derintojo (Debugger) programos pagalba.

Programa .for .bas .pas .c .cpp

.obj .lib .asm .obj

Rezultatas .exe .com

Redaktorius Editor

Kompiliatorius Compiler

Komponuotojas Linker

Derintojas Debugger

3 paveikslas. Borlando kompiliatorius

OperacijosPabandykite suprasti, k daro i programa? #include main ( ) /* paprasiausia programa*/ { int num; num = 1; printf ( A paprasta); printf (skaiiavimo maina. \n); printf (Mano mgstamiausias skaiius %d, todl, kad tai pirmas skaiius. \n, num); return 0; } Na jei manote, kad programa kak atspausdins ekrane, tai Js esate visikai teiss. Programos rezultatas: A paprasta skaiiavimo maina. Mano mgstamiausias skaiius 1, todl, kad tai pirmas skaiius. Paraytos programos apvalga #include - program traukiama papildoma byla. i byla paprastai jau yra bet kuriame C kompiliatoriaus pakete. Programuotojai tai vadina programos antrate. i eilut net nra C kalbos operatorius. # - nurodo, kad programos vykdymui bus reikalinga pasinaudoti C kompiliatoriaus biblioteka. main ( ) funkcijos vardas. Programa, kuri yra parayta C kalboje, pradedama vykdyti nuo funkcijos main ( ). Todl C kalboje, visos paprograms gali turti vairius vardus, iskyrus valdanij. Paprogram tai atskira nepriklausoma programos dalis, kuri kreipiasi pagrindin funkcija. Skliausteliai po main ( ) nurodo, kad tai ne kintamasis, o funkcija. iuose skliaustuose gali bti nurodoma ios funkcijos grinama informacija. Kadangi nurodytoje programoje ms funkcija nieko neturi grinti, tai jie yra tuti. /* paprasiausia programa*/ - komentaras.

Komentarai tai pastabos, kurios padeda suprasti programos esm. Komentarai skirti tik programuotojui, kompiliatorius juos ignoruoja. Komentarus galima rayti toje pat eilutje kur ir nurodomos operacijos. { - funkcijos pradia. int num; - operatorius kintamojo tipui aprayti arba kitaip, tai paprasiausias raktinis odis. Nurodome, kad bus naudojamas kintamasis num, kuris bus sveikas skaiius (int). Programuojant yra btina nurodyti naudojam kintamj tip. Programa rayti pradedama nuo kintamj, kurie bus naudojami programoje, nurodant j tip. Kintamaisiais gali bti ne tik sveiki skaiiai, bet ir simboliai bei slankaus kablelio skaiiai. Kabliatakiu baigiamas rayti bet koks operatorius C kalboje. Kintamj tipai gali bti vairs. Pasirenkant kintamj vardus taip pat laikomasi tam tikr taisykli: kintamojo pavadinimas gali bti nuo vieno simbolio iki septyni. Kintamojo vardo pirmasis simbolis btinai turi bti raid, o sekantys skaiiai, didiosios ir maosios raids ir _ simbolis, kuris suprantamas kaip raid. Teisingi vardai Wiggly cat1 Hot_Tub _kcaB Klaidingi vardai $Z^** 1cat Hot-Tub dont

num = 1; - priskyrimo operatorius. = kintamajam num priskiria vienet. Apibrus kintamojo tip, kompiuterio atmintyje buvo iskirta kintamajam atminties vieta, o su priskyrimo operatoriumi, mes t viet upildme. is operatorius irgi baigiamas kabliatakiu. printf ( A paprasta); - ivedimo ekran operatorius. io operatoriaus pagalba ekrane atspausdinama fraz: A paprasta. printf( ) ivedimo ekran funkcija. Kad tai funkcija, rodo skliaustai. Simboli eilut esanti skliaustuose, perduodama funkcijai printf( ). i funkcija periri visus simbolius tarp kabui ir juos atspausdina. Tarp kabui raomi simboliai, tai funkcijai perduodami argumentai. \n nurodo kompiliatoriui kitos eiluts pradi. Tai simbolis, kuris atitinka vedimo klavio paspaudim. Simbolis \t atitinka tabuliacijos klavio paspaudim ir pan. %d nurodo kur ir kokiu formatu atspausdinti kintamojo num vert. % - nurodo, kad ioje vietoje turi bti spausdinamas skaiius, o d nurodo, kad spausdinamas skaiius turi bti deimtainje sistemoje. } pagrindins main( ) funkcijos pabaiga.

Paprastos programos struktraSusipainsime su pagrindinmis taisyklmis raant program C kalba. Paprastai, program gali sudaryti viena ar keletas funkcij, kuri viena btinai turi vadintis main( ). Funkcij pradedame aprayti nuo antrats, po to seka paios funkcijos apraymas. Funkcijos struktros paprasiausia schema pateikta 4 pav.

Antrat #include main( ) Pagalbins bibliotekos Funkcijos vardas ir argumentai

Funkcijos apraymas int num; num = 1; printf(%d tai skaiius.\n, num); Kintamojo apraymas Priskyrimo operatorius Funkcijos ikvietimo operatorius

4 paveikslas. Funkcijos struktra C kalboje.

Programuojant nereikt rayti visko vien eilut. Kompiliatorius, paraytoje programoje, tuias eilutes ignoruoja. Todl galima detaliai atskirti kiekvien funkcijos dal.

Pateiksime iek tiek sudtingesn program: #include main( ) /* skaii daugyba*/ { int a, b; a = 6; b = 2 * a; printf( %d padauginus i dviej gausime %d. \n, a, b); return 0; } ios programos rezultatas: 6 padauginus i dviej gausime 12. Kaip matome, jei ekran reikia ivesti kelis kintamuosius, tai po kabui nurodomi i eils kintamieji, kuri vertes norime ivesti ekran. Uduotys 1. Paraykite program, kuri ivest ekran Js vard ir pavard. 2. Paraykite program, kuri ivest ekran Js ami, kai nurodyti Js gimimo metai.

Duomen ir kintamj tipaiDuomen ir kintamj tipai ir j raktini odi paaikinimas yra pateiktas 1 lentelje.

1 Lentel. Duomen Tipai ir j raktiniai odiai.

Raktiniai odiai: int, long, short, unsigned, char, float, double. int - jei kintamasis bus sveikas skaiius su enklu. long arba long int dideli sveiki skaiiai short arba short int nedideli sveikieji skaiiai unsigned int, unsigned long, insigned short gali bti nulis arba teigiamas sveikas skaiius char simbolinis kintamasis Skaiiai nuo 32768 iki 32767

float teigiamas ir neigiamas slankaus kablelio skaiius. double arba long float dvigubo tikslumo arba ilgas dvigubas skaiius

Skaiiai, didesni nei sveikieji

mogui skirtumas tarp sveiko skaiiaus ir slankaus kablelio skaiiaus, tai tik skirtingas uraymo bdas. Kompiuteriui tai i skaii uraymas kompiuterio atmint. Sveik skaii pavyzdiai: 2, -23, 2456. Tuo tarpu 3,14 arba 2/3 jau nra sveikieji skaiiai. Pagrindiniai i skaii skirtumai: 1. Sveiki skaiiai neturi trupmenins dalies, tuo tarpu slankaus kablelio skaiiai gali bti sveiki arba trupmeniniai. 2. Naudojant slankaus kablelio skaiius, galima apimti didesn skaii diapazon. 3. Veiksmai su trupmeniniais skaiiais atliekami ilgiau. Norint, kad ekrane bt atspausdintas sveikas skaiius, reikia rayti %d, simbolis - %c, slankaus kablelio skaiius - %f. Uduotys Studentas para program, kurioje gausu klaid. Suraskite jas. #include main ( ) ( float g; h; float tax, rate; g = e21; tax = rate * g; )

Simbolins eiluts, funkcijos printf( ) ir scanf( )iame skyriuje pabandysime isiaikinti, kaip reikia apibrti simbolines konstantas ir kaip dirbti su simbolinmis eilutmis. Pradioje pateiksime programos pavyzd ir pabandysime suprasti, k ji daro: /* dialogas*/ #define DENSITY 1200 /*mogaus kno tankis*/ #include #include #include

main ( ) { float weight, volume; int size, letters; char name[40]; clrscr(); printf(Labas! Koks Js vardas? \n); scanf( %s, name); printf(%s, kokia Js mas?\n, name); scanf(%f, &weight); size = sizeof( name); letters = strlen(name); volume = weight/DENSITY; printf(Nuostabu, %s, Js tris %2.2f kubiniai metrai.\n, name, volume); printf(Be to, Js vardas sudarytas i %d raidi, \n, letters); printf(ir jis kompiuterio atmintyje uima %d bait.\n, size); getch( ); return 0; } Programos veikimo rezultatas: Labas! Koks Js vardas? Viktorija Viktorija, kokia Js mas? 64 Nuostabu, Viktorija, Js tris 0.053 kbiniai metrai. Be to, Js vardas sudarytas i 9 raidi, Ir jo patalpinimas kompiuterio atmintyje uima 40 bait. Perirsime, kas gi naujo atsirado ioje programoje: 1. 2. 3. 4. 5. 6. ia buvo apibrtas masyvas, kuriame saugomas vartotojo vestas vardas. Vedant ir ivedant simbolin eilut buvo naudota ivedimo specifikacija %s. Buvo apibrta konstanta DENSITY. vesta vesties funkcija scanf( ), kuri nuskaito vedamus duomenis. vestos eiluts ilgiui nustatyti naudota funkcija strlen( ). Masyvo dydiui nustatyti panaudota nauja funkcija sizeof().

scanf( ) ir printf( ) funkcij viduje vesta ir norima ivesti informacija raoma tarp kabui, kurios nurodo eiluts pradi ir pabaig. Simbolins eiluts vedimui panaudotas masyvas tai kompiuterio atmintyje iskirta vieta, kurioje greta vienas kito patalpinama tarpusavyje logikai susijusi vienodo tipo informacija (5 pav.).

V

I

K

T

O

R

I

J

A

\0

5 paveikslas. Eiluts idstymas masyve. Kiekvienas masyvo elementas uima 1 bait. \0 C kalboje ymi eiluts pabaig. Pateiktame pavyzdyje yra apibrtas 40 element masyvas, kiekviename masyvo elemente galima patalpinti vien simbol. Lautiniai skliaustai rodo, kad name kintamasis yra masyvas, kuris turi 40 element, o char nurodo, kad element tipas yra simbolinis: char name[40]; Simbolis %s nurodo funkcijai printf( ) spausdinti simbolin eilut. Funkcija scanf( ) skaito simbolius i klaviatros, kol sutinka tarpo, tabuliacijos klavio ir vedimo klavio simbol. Duomen vedimui arba nuskaitymui C kalboje yra ir daugiau funkcij, pvz.: gets( ), getchar( ). Raant programas, danai tenka susidurti su konstantomis, kuri nuolat prireikia skaiiavimuose. Todl konstantos yra apibriamos pradioje #define, po to nurodomas konstantos vardas ir po tarpo nurodoma konstantos reikm. Jei tai simbolin konstanta, tai jos reikm nurodoma kabutse: #define DENSITY 1200 - skaitin konstanta. #define PHRAISE tai ir a simbolin konstanta. Programoje kiekvienoje vietoje, kur bus sutiktos nurodytos konstantos, j viet i karto bus raytos konstant verts. Funkcijos scanf( ) ir printf( ) vedimo ir ivedimo funkcijos. Norint, kad ios funkcijos ivest arba vest kintamj, reikia nurodyt kintamj format. emiau pateikti ivedimo/vedimo formatai ir ivedamos/vedamos informacijos tipas: Formatas %d %c %s %e %f %g %u %o %x Ivedamos/vedamos informacijos tipas deimtainis sveikas skaiius vienas simbolis simboli eilut slankaus kablelio skaiius, ivedimas eksponentiniu formatu slankaus kablelio skaiius, deimtaininis ivedimas naudojama vietoj f ir e, jeigu jis yra trumpesnis deimtainis sveikas skaiius be enklo atuntains sistemos skaiius be enklo eioliktains sistemos skaiius be enklo

Galima tarp % ir simbolio nurodyti skaiius: %4d spausdinamam skaiiui skirti 4 simboliai, pildoma i deins kair

___5 %4.5f - skaiius po taku nurodo ivedimo tikslum, t.y. kiek skaii po kableliu ivesti ekran %ld atitinka long duomen tip. %-10d ivedimui skirta 10 simboli, spausdinama bus i kairs dein. raant duomenis i klaviatros, kaip matme scanf( ) funkcijoje nurodant kintamj, kuriam bus priskirta nuskaityta vert naudojamas simbolis &. is simbolis reikia rodykl kintamj arba kitaip, kintamojo adres. Jei kintamasis apibrtas *p, tai rodykl j bus p; jei kintamasis apibrtas p, tai rodykl j bus &p. Uduotys 1. Paraykite programa, kuri paklaust Js vardo, pavards, gimimo met. Po to ivest Js ami, suskaiiuot raides ir pasakyt kiek vietos uima Js duomenys. 2. Suraskite klaidas: define B oi-oi define X 10 main( ) { int age; char name; printf(Koks Tavo vardas?); scanf(%s, name); printf(nuostabu, %c, kiek jums met?\n, name); scanf(%f, age); xp = age +X; printf(%s! Jums tikriausiai %d ?\n, B, xp); }

Operacijos, iraikos ir operatoriaiCiklas tai eil veiksm, kurie yra kartojami. /*bat dydis*/ #define OFFSET 7.64 #define SCALE 0.325 main ( ) {

/* perskaiiuoja bat dyd pdos dyd ciliais*/ float shoe, foot; printf(Bat dydis pdos dydis\n); shoe = 3.0; while (shoe I kairs dein < >= I kairs dein = = != I kairs dein & I kairs dein ^ I kairs dein | I kairs dein && I kairs dein || I kairs dein ?: I kairs dein = += -= *= / * %= I deins kair , I kairs dein Dabar pabandysime pasiaikinti nemintas anksiau operacijas. += - prideda deinje esant kintamj prie kairje esanio kintamojo: a+=2, tai atitinka a=a+2. Analogikai atliekami ir sekantys veiksmai: -=, *=. >= 10)

n=2*n;

printf(%d\n,n)

else (ne) n=10*n;

Jei nebt operatoriaus else, tai i karto bt vykdomas spausdinimas. Po operatoriumi else galima vl kartoti operatori if. Tokiu bdu galima patikrinti didesn slyg skaii.

Slygins operacijosKai kurias slygines komandas mes jau naudojome anksiau, dabar susipainsime su visomis galimomis slyginmis operacijomis C kalboje. Operacija < = > != Reikm maiau maiau arba lygu lygu daugiau arba lygu daugiau nelygu

Slygins komandos naudojamos su if ir while operatoriais. Atkreipiame dmes - jokiu bdu lyginimui negalima naudoti operatoriaus =, nes tai yra priskyrimo operatorius. Deja, slygines komandas negalima naudoti eilui lyginimui. Jei dirbama su trupmeniniais skaiiais, patartina naudoti tik < ir > lyginimo komandas.

Logins operacijosDanai tenka panaudoti ne tik slygines operacijas, bet ir logines. Pavyzdiui, mums reikia paskaiiuoti, kiek byloje yra tui simboli, t.y. tarpo simboli, naujos eiluts ir tabuliacijos klavio. /*simboli skaiius*/ #include

main( ) { int sim; int t=0; while ((sim=getchar( ))!=EOF) if(sim= = || sim = =\n || sim = = \t) t++; printf(I viso yra %d tui simboli, t); return 0; } Taigi, || tai login komanda arba. C kalboje yra trys logins komandos: Operacija Reikm && ir || arba ! ne Pairkime kaip jos vykdomos. Tarkime turime du slyginius operatorius a ir b. 1. a&& b, slyga bus teisinga ir vykdoma, kada bus teisingos a ir b slygos. 2. a||b teisinga, jei yra teisinga a arba b slyga, arba bus teisingos abi slygos. 3. !a teisinga, jei a slyga yra neteisinga. Paimsime kelet konkrei pavyzdi: 5>2 && 4>7 neteisinga, nes viena slyga nra patenkinta. 5>2 || 4>7, teisinga, nes viena slyga yra patenkinta. !(4>7), teisinga, nes 4 ne didesnis u 7.

Slygin operacija: ?:i operacija, tai trumpas if else operatoriaus uraymas. Pateiksime operatoriaus iraik skaiiaus absoliutins verts radimui: x=(y