Показаны сообщения с ярлыком proqramlaşdırma dərsləri. Показать все сообщения
Показаны сообщения с ярлыком proqramlaşdırma dərsləri. Показать все сообщения

суббота, 12 марта 2011 г.

C# dərsləri azərbaycan dilində. 10-cu dərs.

Salam,
Növbəti C# dərsimizə başlayırıq.

C# dərsləri. 10-cu dərs.

Gəlin giriş formasında olan praktiki dərslərimizi bir neçə nəzəriyyə dərsi ilə davam etdirək. Artıq siz C şarp dili haqda ilkin təsəvvürə maliksiniz. Ona görə bir az geniş tiplər və dəyişənlər haqda danışmağımıza ehtiyac var.

Siz artıq sətir tipi və tam ədəd və kəsr ədədi əks etdirən daha iki tiplə tanış olmusunuz. Tiplər bəhsimiz bir az geniş olacaq, ona görə də ona gələn dərsimizda başlayacayıq. İndi isə gəlin dəyişənlər haqqında bəhs edək.

DƏYİŞƏNLƏR.

Dəyişən hər-hansısa bir tipin elan olunmuş istifadə olunan "nüsxəsidir".

Dəyişənlərə ad verərkən bu qaydalara riayət etmək lazımdır.

Dəyişənin adında hərflərdən (A-Z, a-z), rəqəmlərdən (0-9), alt-xəttdən "_" və "@" simvolundan istifadə oluna bilər. Lakin dəyişənin adında birinci hərf rəqəm ola bilməz, sonrakı hərflərdə isə @ ola bilməz.

Məsələn belə olar: kesrEded, sinif45, @otaq_50.
Belə isə olmaz: 45ci_otaq, sinif@22mekteb.

Ümumiyyətlə tək ingilis dilinin hərfləri yox, başqa dillərdən də istifadə etmək olar. Lakin bunun üçün hər dəqiqə dil registrini dəyişmək lazım olur. Bu isə narahatlıqla başa gəlir və ona görə bu yoldan adətən istifadə olunmur.

Dəyişənlərin adını verəndə həmişə yadınızda saxlayın ki, C# hərflərin registrına həssasdır. Yadınızdadırsa, biz artıq qeyd etmişdik ki, dəyişən bir dəfə elan olunur, ikinci dəfə elan olunması qadağandır.
Yəni belə yazmaq olmaz.


int eded = 5;
int eded = 8;


Lakin C şarpın registra həssaslığı bizə imkan yaradır ki məsələn üç dəyişənə bu adları verək - eded, Eded, və EDED  - və onlar tam fərqli bir dəyişənlər olacaqlar.



int eded = 5;
int Eded = 4;
int EDED = eded + Eded;

Ümumiyyətlə bu cür yazmaq mümkündür, lakin heç məsləhət görülmür, çünki sonra siz özünüz çaşacaqsınız, hansı ad nəyi ifadə edirdi.

Dəyişənləri adlandırmağın bir neçə yolu var. Məsələn biz istifadə etdiyimiz kəsr ədəd üçün dəyişənin adını belə yaza bilərdik:

1) Pascal (məhşur proqramlaşdırma dilinin ənənəsi) - KesrEded
2) Camel (dəvə, yəni ortada hörgüc kimi yekə hərflər var) - kesrEded
3) Uppercase (hamısı böyük hərflə) - KESREDED

Bundan əlavə atl xəttdən də istifadə olunur

4) Alt-xətt ilə başlanan adlar - _eded
5) Ortada alt xətti olan adlar - kesr_eded

Vacib bir qayda ya qanun adlandırmada yoxdur. Sadəcə ümumi ənənələr və C şarpın məsləhətləri mövcuddur. Buna əsasən adi dəyişənlərin və parametrlərin adları balaca hərflərdən başlanması məsləhətdir. Adətən Camel məsləhət görülür. Obyektin adını və xüsusiyyətlərini (bu haqda biz sonrakı dərslərimizdə danışacayıq) əks etdirən dəyişənlər isə böyük hərflə başlansa yaxşıdır. Abbreviaturalar üçün adi həyatda olduğu kimi adətən böyük hərflərdən isdifadə olunur - IO, RAM, YPX, PPX və s. Alt xəttən istifadə bəzi hallarda, məsələn dəyişənləri Visual Studionun İntelliSence-də (siz hərfləri yığarkən köməkçi bir siyahını açan alət) qruplaşdırmaq üçün, istifadə olunur.

Deməli bizə bu an lazım olan odur ki, dəyişənlərimizin adını Camel formasında yazacayıq və bu C#.NET mühiti üçün bəyəniləndir.

Dəyişənlərin adına istədiyimizi verə bilərik, lakin burada məhudiyyət var. Aşağıdakı sözləri C şarp özü istifadə edir, onlar yazılanda göy rəngə boyanırlar. Bu sözlərlə dəyişənləri adlandırmaq olmaz.



Bir neçə dənə də kontekstual sözlər var, onlar bəzi hallarda, yəni istifadə olunan konstruksiyalarda göy rəngə boyanırlar. Onlardan da istifadə etmək lazım deyil.



Hələlik dəyişənlər haqqında bu qədər. Gələn dərsimizdə biz tiplər haqda bəhs edəcəyik.

10-cu dərsin sonu.



вторник, 8 марта 2011 г.

C# dərsləri azərbaycan dilində. 9-cu dərs.

Salam,
Növbəti C# dərsimizə başlayırıq.

C# dərsləri. 9-cu dərs.

Nəhayət yaxınlaşdıq interaktiv proqramlaşdırmaya. Yəni artıq biz kompüterlə proqram kodu vasitəsilə ünsiyyət qurmağa başlayacayıq.

Keçən dərslərimizdə biz ədəd və sətir tiplərinin bir-birinə çevrilməsi barədə öyrəndik. Biz ToString()Convert alətlərini öyrəndik.

Gəlin sizə üçüncü çevirmə alətini də başa salım, sonra keçək interaktiv proqramlara.
Sətirlərdən ədəd tipinə keşmək üçün Parse()-dən də istifadə olunur.

Belə bir kod yazaq:

String setir = "20";
// tam edede setirden cevrilmis qiymeti veririk ve o onu qebul ede bilir
int tamEded = int.Parse(setir);
Console.WriteLine(tamEded);
Console.ReadKey();

Nəticəni yoxlayaq



Eyni ilə də kəsr ədədi üçün Parse-dən istifadə edək. Lakin yenə də milli fərqləri yada salaq və problem olmasın deyə koda System.Globalization.CultureInfo.InvariantCulture əlavə edək.

String setir = "254.6554";
// kesr edede setirden cevrilmis qiymeti veririk
// medeniyyet formati ise muxtelif ola biler (yeni "," ve ya ".")
double kesrEded = double.Parse(setir, System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine(kesrEded);
Console.ReadKey();

Yoxlayaq



Parse haqda bu qədər. Zınnimcə hər şey aydın oldu.

Belə bir suallar yarana bilər. Niyə biz konvertasiyanın üç alətini öyrəndik? Hansı daha üstündür? Biri bəs deyilmi? ...
Birincisi tiplərin konvertasiyası çox mühüm bir mövzudur. Bunu tam anlayandan sonra hər hansı bir proqlamlaşmadan danışmaq olar. Mən sizə hələ tiplər haqda çox az məlumat vermişəm. Bir azdan siz başqa tiplər haqda öyrənəcəksiniz, onların hansı yaddaşda nə formada saxlanılır. Köçürəndə hansının qiyməti, hansının isə yalnız yaddaş ünvanı köçürülür. Bu həqiqətəndə asan və tezanlanılan mövzu olmadığından mən istəyirəm siz bu məsələni tədricən öyrənəsiniz. Və bütün növ çevrilmələrdən istifadə edərək tiplərlə yaxından tanış olmağınızı nəzərdə tutmuşam. Ona görə çalışın hər bir çevrilmə üsulundan istifadə edin ki, tiplərdə çətinliklərlə rastlaşmayasınız.

İndi isə keçək interaktivliyə.
Bu günə qədər komputer öz qara konsol ekranında bizə nəsə məlumat verirdi. Bu gündən sonra isə biz də ona məlumat göndərəcəyik. Əslində biz ona artıq ReadKey vasitəsi ilə məlumat göndərirdik.

Gəlin ardıcıllıqla öyrənək.
Console.ReadLine() vasitəsilə biz kompüterə sətir göndərə bilərik.
Bu kodu yığaq:


Console.WriteLine("Bir setir daxil edin ve Enter duymesini basin.");
string s = Console.ReadLine();
Console.WriteLine("Siz bu cumleni daxil etdiniz: " + s);
Console.ReadKey();


Bu kod bizdən hər-hasısa bir cümləni daxil etməyimizi və sonda ENTER düyməsinə basmağımızı istəyir. Mən "salam dunya" sözlərini daxil etdim.
Nəticə belə oldu.



Gürdüyünüz kimi sətir daxil etdik və komputer onu setir kimi qəbul etdi və s adlı string tipli dəyişənə verməklə sonra onu istifadə etdi. Bu interaktivliyin əsas vəzifəsidir. İstifadəçinin daxil etdiyi məlumatı komputerin anlaması və onu sonradan istifadə etməsi.
Gələn dərsimizdə biz interaktiv proqramlaşdırma bəhsimizə davam edəcəyik.

9-cu dərsin sonu.

воскресенье, 6 марта 2011 г.

C# dərsləri azərbaycan dilində. 8-cı dərs.

Salam,
Növbəti C# dərsimizə başlayırıq.

C# dərsləri. 8-cı dərs.


Bu qısa dərsdə mən şərhlər barədə danışacam. Dərslərin ardıcıllığı pozulmur, yox. Sadəcə bizim kodumuz getdikcə qəlizləşir. Və ən əsası isə kodun sətirləri artır. Bu isə o deməkdir ki, bir müddətdən sonra biz öz kodumuza yenidən nəzər salanda, elə də asan olmayacaq dərhal onun mənasını dərk etmək. Bəs indi təsəvvür edin ki, professional proqramçıların kodu minlərlə sətirdən ibarət olur.

Bunun üçün bizə C şarp şərhləri koda əlavə etmək imkanı yaradır.
Şərhlərin koddan fərqi ondadır ki, onu Visual Studio-nun kompilyatoru (bizim C şarp proqram sətirlərimizi maşın koduna çevirən vasitə) onları nəzərə almır. Lap orada şeir də yazsaq belə.

Cşarpda şərhlər üç növ olur.
Birincisi - tək sətir üçün şərh. Bunun üçün sətirin əvəlinə // yazmaq lazımdır.

Gəlin keçək nümumələrə:

Axırıncı kodumuzu yada salaq və oraya şərhlər əlavə edək.


// string tipli setir adli deyiseni elan edirik ve ona "5.65" qiymetini veririk
string setir = "5.65";
// double tipli kesrEded adli deyiseni elan edirik ve setir-i hemin edede ceviririk
double kesrEded = Convert.ToDouble(setir, System.Globalization.CultureInfo.InvariantCulture);
// ekrana neticeni cixardiriq
Console.WriteLine(kesrEded);
// ekrani derhal baglanmaga qoymuruq, o bizim klaviaturada duymeni basmagimizi gozleyir
Console.ReadKey();

Proqramı işə salaq.

Gördüyünüz kimi nəticə eynidir.

Şərhlər Cşarpda tünd yaşıl rəngə boyanır. Qeyd etdiyimiz kimi, // işarəsi ilə başlanan şərhlər tək sətirli şərhlər adlanılır. Yəni bu işarədən sonrakı bütün hərflər şərh kimi anlatılır.

Onu da nəzərə alın ki, şərhləri hər bir dildə yazmaq olar. Misal üçün azəricə yazmaq istəsəniz, sadəcə Visual Studio proyektini Unicode formatında yenidən Save etməyiniz tələb olunacaq. Amma əgər qısa proqram üçün başqa dildə yazmaq problem deyilsə, tələsik və iri həcmli kod üçün tez-tez klaviaturanın dil kodunu dəyişmək cansıxıcı olur.
Ona görə ingilis dilini bilənlər şərhləri ingiliscə yazarlar, qalanlarına isə məsləhət görürəm transliterasiya yolu ilə, yəni ingilis klaviatura dil kodu ilə doğma dilimizdə şərhləri yazmaq. Necə ki mən etdim.
 
Çoxlu sətiri şərh kimi qeyd etmək üçün biz ya hər sətirin qabağına // işarəsi qoymalıyıq, ya da ikinci varintı seçməliyik.

Çox sətirli şərhlərin qabağımda /* , axırında isə */ işarəsi qoyulur.

Misala baxaq.


/* 
string tipli setir adli deyiseni elan 
edirik ve ona "5.65" qiymetini veririk
*/ 
string setir = "5.65";
/* double tipli kesrEded adli deyiseni elan edirik
ve setir-i hemin edede ceviririk
burada biz Convert aletinden istifade edirik
ustegel hele  CultureInfo -sundanda yararlaniriq
*/
double kesrEded = Convert.ToDouble(setir, System.Globalization.CultureInfo.InvariantCulture);
/* ekrana neticeni cixardiriq */
Console.WriteLine(kesrEded);
/* ekrani derhal baglanmaga qoymuruq,
o bizim klaviaturada duymeni basmagimizi gozleyir */
Console.ReadKey();

Fikir verirsinizsə, biz bu şərh tipini bir neçə cür istifadə etdik Əsası odur ki, /* və */ arasında olan hər bir hərfləri C şarp şərh kimi başa düşür.

Belə bir yol da tez-tez istifadə olunur.

string setir = /* bu sherhin bashqa bir numunesidir */ "55";
Console.WriteLine(setir);
Console.ReadKey();

bu kod

string setir = "55";
Console.WriteLine(setir);
Console.ReadKey();

koduna tam ekvivalentdir, setir adlı dəyişən şərhi heç görmürdə.

Şərhin üçüncü tipi isə XML şərhi adlanır. Onun işarəsi /// olur və belə şərhlər boz rəngə boyanır. Bu şərhlərə biz gələcəkdə, klaslar və proyektlər haqda danışanda, nəzər salacayıq və faydasını öyrənəcəyik. Hal-hazırda onların bizə heç bir xeyri yoxdur.

Zənnimcə şərhlər və onların kodu daha da oxunacaqlı etməsi haqda qaranlıq bir yer qalmadı.

Sadəcə bir Visual Studionun düyməsini də sizə öyrədim.

Proqramınızın bir neçə sətirini siçan ilə seçin.


Sonra isə qırmızı xətt ilə əhatə etdiyim düyməni siçanın sol düyməsi ilə klikləyin.



Seçilmiş sətirlər dərhal şərh kimi qeyd olunurlar.



Gördüyünüz kimi proqramın bir hissəsini şərh kimi dərhal işarələmək üçün və C# -a o sətirləri nəzərə almamasını tələb etmək üçün çox asan bir yoldu.

Yenə də o sətirləri seçək


İşarə etdiyim düyməni basaq.


Və dərhal şərh sətirləri yenidən koda çevrilir


Şərhlər barədə bu qədər.

8-ci dərsin sonu.


C# dərsləri azərbaycan dilində. 7-cı dərs.

Salam
İlk yaz ayında növbəti C# dərsimizə başlayırıq.

C# dərsləri. 7-cı dərs.

Keçən dərsimizdə biz sətir tipi ilə ədəd tiplərinin münasibətini aydınlaşdırırdıq.
Bu dərsimizdə mən sizə söz verdiyim kimi, universal bir funksiyanı öyrədəcəm. Bu Convert adlı obyektin bizə yaratdığı imkanlarıdır.

Gəlin bu kodu yazaq.


int tamEded = 10;
string setir = Convert.ToString(tamEded);
Console.WriteLine(setir);
double kesrEded = 5.45;
setir = Convert.ToString(kesrEded);
Console.WriteLine(setir);
Console.ReadKey();

Proqramı işə salırıq:


İndi isə bu kodu yoxlayaq:

string setir = Convert.ToString(10);

Console.WriteLine(setir);
setir = Convert.ToString(5.65);
Console.WriteLine(setir);
Console.ReadKey();


Nəticəyə nəzər yetirək:



Əla. İstədiklərimiz alındı. Bəs deyəcəksiniz ki, elə nöqtəToString() vasitəsi ilə də bunu əldə etmişdik. Və o kod daha qısa idi. Tamamilə düzdür. Bu həqiqətəndə belədir. Və sətirə çevirəndə yalnız nöqtəToString() -dən istifadə olunur.
Lakin mən qeyd elədiyim kimi, Convert universal bir alətdir. Bəs sətiri ədədə çevirmək istəsək. Burada bizim köməyimizə Convert gəlir.

Gəlin yazaq.
  
string setir = "10";
int tamEded = Convert.ToInt32(setir);
Console.WriteLine(tamEded);
setir = "5,65";
double kesrEded = Convert.ToDouble(setir);
Console.WriteLine(kesrEded);
Console.ReadKey();

 Nəticəyə baxaq:



Alındı. Amma ...

Diqqətli oxuyucular mütləq fikir verəcəklər ki, burada mən setir adlı dəyişənə "5.65" yox, "5,65" qiyməti verdim. Diqqət edin bu qaydaya: Bunun səbəbi nədir? Səbəb ondadır ki, adi halda C# dili ingilis formatı (rəqəm, tarix və s.) ilə işləyir. Və bu formatlar millətlər arası fərqlənir. Misal üçün mənim kompüterimdə XP-nin rus variantı instal olunub. Deməli kompüterim rəqəmlərin rus format variantı ilə işləyir. Ona görə də biz əvvəllərdə proqramda 5.65 yazırdıq, amma ekrana (rus Windows əməliyyat sisteminin konsol ekarnına) 5,65 çıxırdı.

Bəs nə etməli?

Birinci yol budur. Özümüz diqqət edək və sətiri ədədə çevirəndə dırnaq arası əməliyyat sisteminə uyğun nöqtə və ya vergül yazaq. Misal üçün axırıncı kodumuzda mən öz kompüterimdə

setir = "5.65";

yazsaydım, proqram səhv barədə mənə məlumat verərdi.

Lakin C# çox ağıllı bi dildir, və bizə lazım olan bütün imkanları yaradır. Sadəcə bir az öyrənməliyik.
Bizə kömək edən alət IFormatProvider interfeysi olacaq. İnterfeys barədə biz hələ söhbət açmayacayıq. Sadəcə bu millətlər arası format problemini həll edən alətdir. Burada biz onun aşağıda qeyd olunan bir metodunu əzbərləyəcəyik.

System.Globalization.CultureInfo.InvariantCulture 

Gəlin bu kodu yazaq


string setir = "5.65";
double kesrEded = Convert.ToDouble(setir, System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine(kesrEded);
Console.ReadKey();


Yoxlayaq:



Alındı. Düzdür, ekranda yenə də vergül işarəsi qaldı, lakin biz artıq kodda 5.65 standart ingilis variantını verə bildik.

Bu dərsimizi burada tamamlayaq və növbəti dərsimizdə mövzunu davam etdirəcəyik.

7-ci dərsin sonu. 

воскресенье, 27 февраля 2011 г.

C# dərsləri azərbaycan dilində. 6-cı dərs.

Salam

Növbəti dərsimizə başlayaq.


C# dərsləri. 6-cı dərs.

Biz artıq bəzi tiplərin bir-biri ilə münasibəti haqda danışdıq. Konkret desək isə, int (tam ədəd) və double (kəsr ədəd) tiplərinin arasındakı münasıbət.
Maraqlıdır, bəs biz artıq string (sətir) tipi ilə də tanışıq. Bəs bu tiplə ədədlərin münasibəti necədir?
Gəlin baxaq. Belə bir proqram kodu yığaq.


int tamEded = 10;
string setir = "tem ededin qiymeti " + tamEded;
Console.WriteLine(setir);
Console.ReadKey();


Belə asan. Bəs kəsr ədəd necə?


int tamEded = 10;
string setir = "tem ededin qiymeti " + tamEded;
Console.WriteLine(setir);
double kesrEded = 5.45;
setir = "kesr ededin qiymeti " + kesrEded;
Console.WriteLine(setir);
Console.ReadKey();
 Nəticə:

Belə bir fikir bizdə yarandı ki, ədədlər asan sətir tipinə keçir. Lakin bu həmişə belə olmur.
Gəlin kodu bir az dəyişək və nəticəyə diqqət edək.

int tamEded = 10;
string setir = tamEded;
Console.WriteLine(setir);
double kesrEded = 5.45;
setir = kesrEded;
Console.WriteLine(setir);
Console.ReadKey();


Nəticədə bizə artıq tanış olan səhvlərlə qarşılaşırıq.




Error 1 Cannot implicitly convert type 'int' to 'string'
Error 2 Cannot implicitly convert type 'double' to 'string'

Yəni biz intdouble tipli ədədləri qeyri-müəyyən surətdə string tipli sətirə çevirə bimərik.
Bəs onda əvvəlki nümunələr necə?
Diqqət edək əvvəlki nümunələr.


string setir = "kesr ededin qiymeti " + kesrEded;

Orada ədəd birbaşa sətir tipli dəyişənə verilmirdi. Gördüyümüz kimi orada sətir əməliyyatı var idi. Yəni üstəgəl əməliyyatında iştirakçılardan biri artıq string tipli dırnaqarası sözlər idi.Bu əməliyyata Cşarp icazə verir. Hətta belə yazsaqda:

string setir = kesrEded + "kesr ededin qiymeti ";

Lakin son kodda biz çalışırıq ədədi və ya ədəd tipli dəyişəni birbaşa sətir tipli dəyişənə verək.


string setir = 5.45;
string setir = kesrEded;


Bu isə Cşarp-da xüsusi qeyd olunmadan qadağandır. Bununla Cşarp bizi təsadüfi diqqətsizlikdən qoruyur, yəni bilmədən bizi sətirə ədədin qiymətini verib, sonra saatlarla proqramda səhvi axtarmaqdan qoruyur.

Qaydaya əsasən biz yalnız açıq şəkildə bu əməliyyatı yerinə yetirə bilərik. Bəlkə yenə də mötərizədə biz string tipini qeyd etməliyik.
Yox bu yol string üçün yaramır. Yoxlayaq:

int tamEded = 10;

string setir = (string)tamEded;
Console.WriteLine(setir);
           
setir = (string)10;
Console.WriteLine(setir);
           
Console.ReadKey();



Yenə də Cşarp bizim səhvlərimizi qeyd edir.
Deməli string tipinə cevirmək asan deyil. Əslindı gələcəkdə siz görəcəksiniz ki, elə ən asanı string tipinə çevirməkdir. Çün ki hər obyekt-in (obyektin nə olduğunu gələcəkdə keçəcəyik, indi isə bilin ki hər bir dəyişən Cşarpda obyektdi) ümumi bir fuksiyası var. Amma gəlin sıra ilə gedək.

Birincisi sizə ən aydın yolu göstərim. Bu yolu siz məntiqlə də tapa bilərdiniz. Amma bu yol belə deyək professional yol saylmasa da, sadəcə anlamaq üçün çox asan yoldu.


int tamEded = 10;
string setir = "" + tamEded;
Console.WriteLine(setir);
           
setir = "" + 10;
Console.WriteLine(setir);
           
Console.ReadKey();


Burada biz boş sətirin üstünə ədəd tipli dəyişəni gəlirik. Yoxlayaq:



Alındı.


İndi isə ikinci yolla tanlş olaq.

int tamEded = 10;
string setir = tamEded.ToString();
Console.WriteLine(setir);

double kesrEded = 5.65;
setir = kesrEded.ToString();
Console.WriteLine(setir);
           
Console.ReadKey();

Nəticəyə baxaq:

Əla, deməli ədəd tipli dəyişənlərin arxasına nöqtəToString() yazmaqla çox asan onları sətir tipinə çevirmək olur. Bu funksiya, və ya metod C#-da ən çox istifadə olunan və universal əməliyyatlardan biridir. ToString() istədiyiniz dəyişəni sətir formasına çevirir.

Bəs görəsən dəyişənləri yox, elə ədədlərin özünü biz sətir tipinə çevirə bilərik mi? Gəlin yoxlayaq.

 
string setir = 10.ToString();
Console.WriteLine(setir);
setir = 5.65.ToString();
Console.WriteLine(setir);
Console.ReadKey();

Nəticəyə nəzər yetirək:


Super. Əhsən C# -a. C# həqiqətən də çox  gözəl proqramlaşdırma dilidir və gələcəkdə siz özünüz bunun şahidi olacaqsınız.

Üçüncü yolu isə sizə gələcək dərslərimizdə başa salacam.

6-cı dərsin sonu.

суббота, 26 февраля 2011 г.

C# dərsləri azərbaycan dilində. 5-ci dərs.

Salam

Növbəti  dərsimizə başlayaq.

C# dərsləri. 5-ci dərs. 

Bu dərsdə biz  keçən dərsimizdəki bəhsi davam etdirəcəyik. Dəyişənlərin tipləri və onların arasında əməliyyatlar.

Keçən dərsdə biz tam ədəd tipli dəyişənlərlə əmaliyyatlar etdik və nəticədə kəsr ədəd almağın yollarını müəyyən etdik. Müvəqqəti tip dəyişmə yolu yalnız əməliyyat olunan sətrdə təsiri qalır, sonra isə dəyişən yenə də əvvəlki vəziyyətinə qayıdır.

Belə kod yazaq:


int tEded = 10;
double kEded = tEded / 4;
Console.WriteLine(kEded);
Console.ReadKey();


Nəticə belə olacaq



Kodu dəyişək.


int tEded = 10;
double kEded = tEded / 4.0;
Console.WriteLine(kEded);
Console.ReadKey();

İndi isə nəticə belə olacaq.

Aha, deməli əməliyyat olunanlardan birinin kəsr ədəd olması kifayət edirmiş ki, nəticədə kəsr ədəd alaq. Gəlin dəyişənlərlə yoxlayaq.

int tEded = 10;

double kEded1 = 4.5;
double kEded2 = tEded / kEded1;
Console.WriteLine(kEded2);
Console.ReadKey();

Nəticə eynidir.
Bəs belə olsa:


int tEded1 = 10;
int tEded2 = 3;
double kEded = tEded1 / (double)tEded2;
Console.WriteLine(kEded);
Console.ReadKey();


Belə etsək də, eyni cavabı alacayıq


int tEded1 = 10;
int tEded2 = 3;
double kEded = (double)tEded1 / tEded2;
Console.WriteLine(kEded);
Console.ReadKey();
 Deməli bu nəticəyə gəldik:
Kəsr ədədi almaq üçün əməliyyat olunan ədələrdən birinin kəsr ədəd olması kifayətdir.

Bəs tərsinə olsa nə baş verər?
Yoxlayaq.


double kEded1 = 10.5;
double kEded2 = 3.5;
int tEded = kEded1 / kEded2;
Console.WriteLine(tEded);
Console.ReadKey();


Üçüncü sətirin altından qırmızı dalğalı xətt çəkildi.


Proqramı işlətmək istəyəndə belə bir mesaj ekrana gəlir:



Mesaj pəncərəsində bizdən soruşurlar ki, səhv ola-ola proqramı işlətmək fikrimiz varmı? Təbii ki bunu eləmək məsləhət deyil, gərək əvvəl səhvləri tapıb həll edək. Biz "No" deyirik.
Bəs səhv nədədir. Visual Studio bizə aşağıda ERROR siyahısında bildirir. İkinci yol isə siçanın ox işarəsini dalğavari xəttin üstünə gətirəndə, ekranda səhvin mesajı yazılır.




Cannot implicitly convert type 'double' to 'int'. An explicit conversion exists (are you missing a cast?)  

Yəni biz double tipli kəsr ədədi qeyri-müəyyən surətdə int tipli tam ədədə çevirə bimərik.

Yadımıza salaq C şarp necə hesablayır. Bəli, sağdan sola, yəni kəsr ədədi kəsr ədədə bölür, nəticədə kəsr ədədi alır, və sonra onu tam ədədli dəyişənə yazmaq istəyir. Bu isə adi halda olmaz. Niyə?
Burada C# bizi, yəni proqramçıları təsadüfi səhvlərdən qoruyur. Çün ki kəsr ədədi tam ədədə çevirəndə qiymət itkisi baş verə bilər. Yəni 3.24 tam ədədə çevirəndə 3 qalır, 0.24 itir. Bu da hesablamaların səhvinə gətirib çixarır.

Bəs nə etməli? Əgər bu əməliyyat tam ədədlə bitməlidirsə, və qiymət itkisi bizi maraqlandırmırsa, onda açıq surətdə bunu Cşarpa bildirmək lazımdır. Yəni mötərizədə bunu açıq işarə etməklə. Bu halda Cşarp anlayır ki, biz bunu bilərəkdən edirik və hesablamaların nəticəsində səhvdən xəbərdarıq.

Gəlin kodu yazaq:


double kEded1 = 10.5;
double kEded2 = 3.5;
int tEded = (int)(kEded1 / kEded2);
Console.WriteLine(tEded);
Console.ReadKey();

Nəticə budur:

Gördüyünüz kimi tam ədədi aldıq.

5-ci dərsin sonu.