Salam,
4-cü dərsimizə başlayaq.
C# dərsləri. 4-cü dərs.
Keçən dərsimizdə biz bir kod yazmışdıq.
int tameded = 80;
Console.WriteLine("Sabirin boyu " + tameded + " sm idi.");
tameded = tameded + 5;
Console.WriteLine("Bir ile Sabirin boyu " + tameded + " sm oldu.");
Console.ReadKey();
Gəlin kodu bir az dəyişək.
int evvelkiBoyu = 80;
Console.WriteLine("Sabirin boyu " + evvelkiBoyu + " sm idi.");
int sonrakiBoyu = evvelkiBoyu + 5;
Console.WriteLine("Bir ile Sabirin boyu " + sonrakiBoyu + " sm oldu.");
Console.ReadKey();
Proqramı işə salaq
Gördüyünüz kimi, nəticə dəyişmədi. Lakin kodda artıq biz iki deyişən istifadə etdik. Bu bizim nəyimizə lazımdır? Çox vaxt bizə proqram yazanda köhnə qiyməti də yadda saxlamaq lazım olur. Bir dəyişəndə isə eyni zamanda iki qiymət saxlamaq olmur.
Növbəti kod bizim niyyətimizi əks etdirəcək.
int evvelkiBoyu = 80;
Console.WriteLine("Sabirin boyu " + evvelkiBoyu + " sm idi.");
int sonrakiBoyu = evvelkiBoyu + 5;
Console.WriteLine("Bir ile Sabirin boyu " + sonrakiBoyu + " sm oldu.");
int ferq = sonrakiBoyu - evvelkiBoyu;
Console.WriteLine("Bir ile Sabirin boyu " + ferq + " sm artdi.");
Console.ReadKey();
Proqramı işə salaq
İndi görək biz müəyyən edə bilək mi, Sabirin boyu neçə dəfə artdı. Belə bir kod yazaq.
int evvelkiBoyu = 80;
Console.WriteLine("Sabirin boyu " + evvelkiBoyu + " sm idi.");
int sonrakiBoyu = evvelkiBoyu + 5;
Console.WriteLine("Bir ile Sabirin boyu " + sonrakiBoyu + " sm oldu.");
int defe = sonrakiBoyu / evvelkiBoyu;
Console.WriteLine("Bir ile Sabirin boyu " + defe + " defe artdi.");
Console.ReadKey();
Belə çıxır ki, Sabirin boyu bir dəfə artıb. Bu düzgün deyil. Bəs niyə belə oldu. Məsələ burasındadır ki, biz tam ədəd dəyişənindən istifadə etmişik.
Bizə isə kəsr ədəd dəyişəni lazımdır. Proqramlaşdırmada adətən kəsr ədədi üçün
double tipindən istifədə edirlər.
double kesreded = 50.554;
Kodumuzda bir sətri dəyişək:
int evvelkiBoyu = 80;
Console.WriteLine("Sabirin boyu " + evvelkiBoyu + " sm idi.");
int sonrakiBoyu = evvelkiBoyu + 5;
Console.WriteLine("Bir ile Sabirin boyu " + sonrakiBoyu + " sm oldu.");
Double defe = sonrakiBoyu / evvelkiBoyu;
Console.WriteLine("Bir ile Sabirin boyu " + defe + " defe artdi.");
Console.ReadKey();
Bəs niyə cavab yenə də səhv oldu? Olmaya С şarp çaşıb. Yox. Burada mən məcburam proqramlaşdırmanın bir qədər qəliz olan tərflərini sizə anlatam.
Məsələ orasındadır ki, C şapr dilində (və tək onda yox) hesablamalar sağdan sola istiqamətində gedir. Deməli əvvəlcə tam ədəd
sonrakiBoyu bölünür tam ədədə
evvelkiBoyu-na və tam ədədlər əməliyyatı tam ədədlə nəticələnir. Nəticə "1" olur və sonra bu tam ədəd kəsr ədədi olan
defe-ye verilir. Ona görə biz burada səhv cavab aldıq.
Bunun həll yolu bəs nədir?
İki həll yolu var. Birincisi, emeliyyat olunan dəyişənləri də tam ədəd kimi yox, kəsr ədəd kimi müəyyən etmək lazımdır. İkinci yol ola bilər anlamaq üçün indi sizə çətin gəlsin, amma heç narahat olmayın, sonralar biz bu mövzuda çox danışacayıq. İkinci yolda yalnız bu əməliyyat üçün, tam ədədləri müvəqqəti hesablama üçün kəsr tipi kimi tanıtdırırıq.
Yəni birinci üsulla getsək:
double evvelkiBoyu = 80;
Console.WriteLine("Sabirin boyu " + evvelkiBoyu + " sm idi.");
double sonrakiBoyu = evvelkiBoyu + 5;
Console.WriteLine("Bir ile Sabirin boyu " + sonrakiBoyu + " sm oldu.");
double defe = sonrakiBoyu / evvelkiBoyu;
Console.WriteLine("Bir ile Sabirin boyu " + defe + " defe artdi.");
Console.ReadKey();
Nəticə bizi tam qane edir:
İkinci üsul isə bu cür olur:
int evvelkiBoyu = 80;
Console.WriteLine("Sabirin boyu " + evvelkiBoyu + " sm idi.");
int sonrakiBoyu = evvelkiBoyu + 5;
Console.WriteLine("Bir ile Sabirin boyu " + sonrakiBoyu + " sm oldu.");
double defe = (double)sonrakiBoyu / (double)evvelkiBoyu;
Console.WriteLine("Bir ile Sabirin boyu " + defe + " defe artdi.");
Console.ReadKey();
Nəticəyə baxaq
Gördüyünüz kimi, nəticə dəyişmədi.
Son məqamlara bir daha toxunaq. Deməli kəsr ədədi almaq üçün biz ya kəsr ədədlərinin üzərində əməliyyat aparmalıyıq. Ya da tam ədədləri müvəqqəti olaraq, hesablama əməliyyatında kəsr ədəd tipinə çevirməliyik.
bunu biz bu yolla etdik.
double defe = (double)sonrakiBoyu / (double)evvelkiBoyu;
Gördüyünü kimi, dəyişənin adının qabağından mötərizədə
double yazmaqla, biz bu kod sətirində, yəni bu əməliyyat üçün tam ədədi kəsr ədədi kimi müvəqqəti qələmə verdik. Bundan sonrakı kod sətirlərində
sonrakiBoyu adlı dəyişən yenə də tam ədəd kimi qalacaq.
Gəlin yoxlayaq
int evvelkiBoyu = 80;
Console.WriteLine("Sabirin boyu " + evvelkiBoyu + " sm idi.");
int sonrakiBoyu = evvelkiBoyu + 5;
Console.WriteLine("Bir ile Sabirin boyu " + sonrakiBoyu + " sm oldu.");
double defe = (double)sonrakiBoyu / (double)evvelkiBoyu;
Console.WriteLine("Bir ile Sabirin boyu " + defe + " defe artdi. (Muveqqeti tam ededler kesr olublar)");
defe = sonrakiBoyu / evvelkiBoyu;
Console.WriteLine("Bir ile Sabirin boyu " + defe + " defe artdi. (Yene de tam eded kimi qaliblar)");
Console.ReadKey();
Proqramı işə salaq
Əminəm ki, double tipi aydın oldu. Tiplərin dəyişilməsi haqda nə isə qaranlıq qaldısa, bu mövzüda bizim hələ çox dərslərimiz olacaq, inşəallah.
4-cü dərsin sonu.