Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Muasir proq dil C++.doc
Скачиваний:
15
Добавлен:
01.05.2025
Размер:
7 Мб
Скачать
☆
    1. Strukturların funksiya parametri kimi ötürülməsi

Aşağıdakı proqram Person struktur nümunəsini iki funksiya parametri kimi ötürür. setValues funksiyası struktur nümunəsinin dəyişənlərinə qiymətlər mənimsədir, getValues funksiyası isə həmin qiymətləri ekrana çıxa­rır:

Misal 10.4.

#include <cstdlib>

#include <iostream>

#include<string>

#include<conio.h>

using namespace std;

struct Person{

string name;

int qrup;

};

void setValues(Person&);

void getValues(const Person&);

int main(int argc, char *argv[])

{

Person P1;

setValues(P1);

cout<<"Telebeler haqqinda melumat\n";

cout<<"=======================\n";

getValues(P1);

getch();

return 0;

}

void setValues(Person& pers)

{

cout<<"Telebenin soyadini daxil et:\n";

getline(cin,pers.name);

cout<<"telebenin qrupunun nomresini daxil et:-";

cin>>pers.qrup;

cin.ignore();

}

void getValues(const Person& pers)

{

cout<<"Telebenin soyadi - "<<pers.name<<"\n qrup nomresi - "<<pers.qrup<<endl;

}

Massivin adından fərqli olaraq, strukturun qiyməti – ün­van deyil. Ona görə də strukturu funksiya parametri kimi ötür­dükdə onun dəyişənlərinin qiymətini dəyişmək üçün struk­turu ünvana və ya müraciətə görə ötürmək lazımdır. Belə­liklə, setValues funksiyasında struktur müraciətə görə ötü­rülür. Həmçinin getValues funksiyasında da struktur mü­raciətə görə ötürülür.

    1. Bir-birinə daxil olan strukturlar

Əvvəllər biz if şərt operatorunun digər if operatoru da­xi­lin­də və bir dövr operatorunun digər dövr operatoru da­xi­lin­­də yerləşməsi hallarına rast gəlmişdik. Bu qayda ilə bir struk­turu da digər struktur daxilində yerləşdirmək olar.

Məsələn, hər bir insanın ad günü var, ad günü isə ta­rix­dir. Tarix isə strukturda təyin oluna bilər: gün, ay və il. Be­lə­liklə, aşağıdakı strukturu elan etmək olar:

struct Date

{

int day;

int month;

int year;

};

Bundan sonra biz yuxarıdakı Person strukturunu geniş­lən­di­rə bilərik:

struct Person

{

string name ;

int height;

Date bday;

};

Qeyd edək ki, Date strukturu proqramda Person struk­tur­dan əvvəldə elan olunmalıdır. Əks halda Date strukturundan sonra Person strukturunun dəyişənlərinin elanında bDay nümunəsinin yerləşməsini kompilyator başa düşməyəcək.

    1. Siniflər

Strukturlar haqqında deyilənlərin əksər hissəsi siniflərə də aid­dir. Bunun üçün siniflərin elanında sadəcə olaraq struct xidməti sö­zünü class xidməti sözü ilə əvəz etmək lazımdır. Lakin bu­nun­la belə sinif və struktur arasında çox mühüm bir fərq var. Onu şərh etmək üçün 10.4 bəndindəki proqramın strukturun ela­nı bölməsinin əvəzinə class yazaraq aşağıdakı kimi dəyişək:

class Person{

string name;

int qrup;

}

Proqramın işləməsi nəticəsində getValues və setValues –də kom­pilyatorun bir neçə səhvi alınacaq. Belə ki, hər bir pers­.nam­e və pers.qrup müraciəti nəticəsində “Person sin­fində elan olunmuş hər bir xüsusi nümunəyə müraciət etmək olmaz” məzmunlu səhv alınacaq. Bu səhv onunla əlaqədardır ki, sinfin nümunəsinin dəyişənləri susmaya görə xüsusi (özəl) ol­duqları halda, struktur nümunəsinin dəyişənləri açıqdırlar. Nümunənin açıq dəyişənlərinə isə proqramın istənilən yerində müraciət etmək olar. Ona görə də Person sinif deyil struktur olduqda kompilyator getValues və setValues funksiyalarında pers.name və pers.height müraciətlərinə qarşı çıxmırdı, çünki name və height – açıq dəyişənlər idi.

Nümunənin xüsusi dəyişəninə yalnız bu sinfin funksiya –həddi ilə müraciət etmək olar. getValues və setValues funk­siyaları Person konstruktoru kimi Person sinfinin funksiya – hədləri deyil. getValues və setValues funksiyaları sinfin hü­dud­la­rın­dan­ kənarda yerləşdiklərindən, onlar name və height nü­munə­si­nin xüsusi dəyişənlərinə müraciət edə bilməzlər.

Bu problemin həll olunması üçün nümunənin xüsusi dəyi­şən­ləri ilə iş­ləmək üçün açıq funksiya-hədd yaratmaq la­zımdır. Bu funk­si­ya – hədlər açıq olduğundan onlara sinfin hüdud­larından xa­ric­də müraciət etmək olar.

Oxumaq və yazmaq üçün nümunələrin xüsusi dəyişən­ləri­nin və funk­siya-hədlərin istifadə olunmasının əsas üstünlüyü girişin yox­lanılmasındadır.

Əlavə 1

Borland C/C++ -un qrafik kitabxanası

C++ dilində və onun sələfi olan C dilində qrafik vasitələr ta­mamilə iştirak etmir. Qrafiklə işlə­mək üçün bütün konkret im­kanlar qrafik funksiyaların əlavə kitabxanası şəklində verilir.

Qrafik kitabxana ilə işləmək üçün proqrama qraphice.h başlıq faylını daxil etmək lazımdır.

Funksiya

Prototip və əməllərin qısa təsviri

closegraph

void far closegraph(void);

Sistemin qrafik rejimdən mətn rejiminə keçirilməsi;

graphdefaults

void far graphdefaults(void);

Susmaya görə qrafik sistemin bütün pa­ra­metrlərini qurur.

initqraph

void far initqraph(int far *qraphidriver, int far*graphmode, char far* pathto driver);

Sistemin mətn rejimindən qrafik rejimə ke­çi­ril­məsi, qrafikin adlan­dırıl­ma­sı

installuserfont

int far installuserfont(char far *name);

Name(.chr) faylında yerləşən şriftləri qurur

restorecrtmode

void far restorecrtmote(void);

Initgraph() funksiyasının çagırıldığı yer­dən­ mətn rejiminə müvəqqəti keçid

setactivepage

void far setactivepage(int, page);

Qrafikin çıxarılması üçün aktiv page səhifəsi qurur

setbkcolor

void far setbkcolor(int color);

Fonun rəngini qurur

setcolor

void far setcolor(int color);

Nöqtənin (təsvirin) rənginin qurulması

setgraphmode

void far setgraphmode(int mode);

initgraph() funksiyasının qurduğundan fərqli qrafik rejimə keçid

setallpalette

void far setallpalette(struct palettype far*palette);

Palitranın bütün rənglərini qurur

setpalette

void far setpalette(int colornum, int co­lor);

Palitranın rənglərindən birini qurur.

setusercharsize

void far setusercharsize(int multx, int divx,­ int multy, int divy);

Qrafik rejimdə çıxarılan simvolların ölçüsünün qurulması.

setvisualpage

void far setvisual(int page);

page qrafik səhifəsini görünən edir.

arc

void far arc(int x, int y, int stangle, int end­angle, int radius);

(x,y) mərkəzli çevrənin qövsünün çəkil­mə­si.

bar

void far bar(int left, int top, int right, int bottom);

Rənglənmiş düzbucaqlının çəkilməsi.

bar3d

void far bar3d (int left, int top, int right, int bottom, int depth, int topflag);

Rənglənmiş paralelepipedin çəkilməsi.

cleardevice

void far cleardevice(void);

Ekranın fonun rəngi ilə təmizlənməsi

clearvewport

void far clearviewport (void);

Əvvəlcədən qurulmuş qrafik ekran pəncə­rə­­sinin təmizlənməsi

ellipse

void far ellipse(int x, int y, int stangle, int endangle, int xradius, int yradi­us­);

(x,y) radiuslu ellipsin qövsünün çəkilməsi.

line

void far line (int x1, int y1, int x2,int y2);

(x1,y1)-dən (x2,y2)-yə qədər xəttin çəkilməsi.

putpixel

void far putpixel (int x, int y, int color);

(x,y) koordinatlarına görə nöqtənin çəkil­mə­si.

rectangle

void far rectangle (int left, int top, int rigth­, int buttom);

Təpələri verilmiş düzbucaqlının çəkilməsi.

getmaxcolor

int far getmaxcolor(void);

setcolor() funksiyasının köməyi ilə qrafik dray­verin cari rejimində rəngin ən böyük nömrəsini qaytarır.

getmaxmode

int far getmaxmode (void);

cari qrafik drayver üçün qurulması müm­kün olan rejimin ən böyük nöm­rəsini qay­tarır

getmodename

char *far getmodename (int mo­de­_­num­ber);

Göstəricini qrafik rejimin mode_number adlı sətrinə qaytarır.

getmaxx

int far getmaxx(void);

Horizontal üzrə (x –in maksimal qiyməti) ekranın ölçüsünə bərabər olan tam qiymət qaytarır.

getmaxy

int far getmaxy(void);

vertikal üzrə (y –in maksimal qiyməti) ek­ra­nın ölçüsünə bərabər olan tam qiy­mət qaytarır.

getpixel

unsigned far getpixel (int x,int y);

Verilmiş(x,y) nöqtəsinin rəngini qaytarır.

getpalettesize

int far getpalettesize (void);

Cari qrafik rejimdə aydın olan rənglərin sayını qaytarır.

getx

int far getx(void)

ekranda cari vəziyyətdə x koordinatının tam qiymətini qaytarır

gety

int far gety(void);

Ekranda cari vəziyyətin y koordinatının tam qiymətini qaytarır.

imagesize

unsigned far imagesize (int lefft,int top, int right, int bottom);

Verilmiş koordinatlı ekran pəncərəsində qrafik informasiyanın saxlanması üçün buferin həcmini qaytarır.

textwidth

int far textwidth (char far* textstring);

textstring simvollar sətrinin eninin piksellə tam qiymətini qaytarır.

textheight

int far textheight(char far*textstring);

Textstring sətrindən simvolların piksellə hündürlüyünün tam qiymətini qaytarır.

Əlavə 2

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]