Lyamda ifodalar oid topshiriq



Download 146,3 Kb.
bet1/2
Sana13.06.2021
Hajmi146,3 Kb.
#66222
  1   2
Bog'liq
LYAMDA IFODALAR OID TOPSHIRIQ


LYAMDA IFODALAR OID TOPSHIRIQ

1. Butun N soni berilgan:

a) Fibonachi sonlarining N-xadi topilsin.

b) N gacha bo’lgan tub sonlar aniqlansin.

c) N sonining raqamlari yig’indisi topilsin.



2. Butun N va M sonlari berilgan:

EKUB(N,M)-?

EKUK(N,M)-?.

3. S satr va butun k soni berilgan:

a) S satrda k soni bor yoki yo’qligini aniqlang;



b) S satrda k soni mavjud bo’lsa, shu son satrdan o’chirilsin.

Javoblar

1-usul

1.a) Fibonachi sonlarining N-xadi topilsin.

Nazariy qismi: Fibonachchi sonlari bu rekursiv formula orqali aniqlangan.Y’an ketma-ketlikning keying hadini bilish uchun avvalgi hadlarini bilish lozim(Aynan Fibonachchi seriyasining n- hadi n-1 va n-2 hadlarga bog’liq,aniqlroq aytsak ularning yig’indisi orqali aniqlangan).Shuni e’tiborga olsak uning dastlabki ikki hadi

Quyida dastur kodi keltirilgan:



using System;

namespace Lambda_ifodalar_1

{

public delegate int Fibonacci(int n);

class LyambdaApplication

{

static void Main(string[] args)

{

Console.Write("Enter to black screen calculated n-th Fibonacci number: ");

int n = int.Parse(Console.ReadLine());

Lyambda ex = new Lyambda();/*We create object class Lyambda,because we use by method Fibanachchi of this class. If Fibanachchi method is static field,that we don't need to create object.But it method isn't static declared */
Console.Write("Fibonacci series n-th numbers value is: ");



ex.Fibanachchi(n);

Console.Read();

}

}

class Lyambda

{

public void Fibanachchi(int t)

{

Fibonacci fibo = n =>

{

int n0 = 0, n1 = 1; int result = 0;

for (int i = 2; i <= n; i++)

{

result = n0 + n1;

n0 = n1;

n1 = result;

}

return result;

};

Console.WriteLine(fibo.Invoke(t));

}

}

}
Dastur natijasidan namuna:



Ya’ni 10-Fibonachchi soni 55 ga teng ekan

Izoh: Biz dastlab Fibonacci nomli delegate e’lon qilib olyapmiz(unga bitta int turidagi parametric bor metodniga yuklashimiz mumkin).Chunki delgatni e’lon qilganimizda uning parametrlar ro’yxatiga faqat bitta int turidagi ro’yxat kiritilgan.

Yana shuni ham e’tiborga olishimiz kerakki, bu delegatni private yoki protected modifikatorlari orqali e’lon qilsak kompilyator xatolik beradi.Chunki biz bu masalni ishlashda ikkita class(sinf)dan foydalanyapmiz.Lyambda classida delegatdan foydalanyapmiz.Lyambda Applicationda esa buning natijasini olyapmiz.Agar biz Lyambda va Lyambda Application ni o’zaro polimorfizm(vorislik) orqali bog’laganimizda u holda bu delegatni protected tarzida ham qo’llashimiz mumkin bo’lar edi.

Lyambda ifodadan foydalanib Lyambda classida kerakli natijani olyapmiz.Bu metod void deb e’lon qilingani uchun natijani shu yerning o’zida chop etilyapti.Main() metodi joylashgan classda esa shunchaki natijani ekranga chop etish uchun kod yozilyapti xolos.Buning uchun Lyambda classining obyektini yaratib olib undagi Fibanachchi() metodiga murojaat etilyapti.Darvoqe bunda delegatga murojaat etishda maxsus Invoke() metodidan ham foydalandik.Bu shunchaki dastur effektini oshirish uchun.Uni qo’llamasak ham bo’ladi(Biroq odatda professional dastruchilar orasida odatda undan foydalaniladi).



2-usul

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;
namespace _2_usulda_Fibonacci

{

class Program

{

static void Main(string[] args)

{

Console.Write("n ni kiriting :");

int n = int.Parse(Console.ReadLine());

Func d = Fibonacci;

Console.WriteLine("Fibonachchi ketma-ketligining n- hadi: "+d(n));

Console.ReadKey();

}

static int Fibonacci(int n)

{

int result = 0;

int n0 = 0, n1 = 1;

for (int i = 2; i <=n; i++)

{

result = n0 + n1;

n0 = n1;

n1 = result;

}

if (n == 0) return 0;

if (n == 1) return 1;

else return result;

}

}

}

Bunda hech qanday delegatdan foydalanish shart emas.Bu yozishlarni qisqartirish uchun shunchaki Func ni to’g’ri qo’llay olsa bo’ldi.Uning ichiga odatda hech nima yozilmaydi.Odatd unga kiruvchi parametrlarni bitta o’zgaruvchiga yuklab unga bitta metodni yuklab qo’yiladi.Xuddi delegatlarga o’xshab(shuning uchun ham lambda ifoda delegatning qisqartirilgan shaklidir).



Dastur natijasidan namuna:

Ko’rinib turganidek natija bir xil.



b) N gacha bo’lgan tub sonlar aniqlansin.

Nazariy qismi: Tub son faqat o’ziga va birga bo’linadigan son ekanligini inobatga olamiz.Bunda sikldan foydalanamiz va delegate ni bool tipida e’lon qilamiz.Har bir sonni gacha bo’luvchisi borligini tekshiramiz va shu orqali tub yoki murakkab son ekanligini aniqlaymiz



Dastur kodi quyidagicha

using System;

namespace Tub_son_Lyambda_ifoda_bilan

{

public delegate bool isOdd(int v);

class Program

{

static void Main(string[] args)

{

Console.Write("Enter number n: ");

int n = int.Parse(Console.ReadLine());

isOdd isOdd=k=>

{

bool prime =true;

for (int i = 2; i <=Math.Sqrt(k); i++)

{

if (k % i == 0) { prime = false; break; }

}

return prime;

};

String list_OddNumbers_to_N = null;

for (int i = 2; i <=n; i++)

{

if (isOdd(i)) { list_OddNumbers_to_N += i + " "; }

}

Console.Write("There are odd numbers to n: " + list_OddNumbers_to_N);

Console.ReadKey();

}
}

}
Dastur natijasidan namuna:

Izoh:Yuqorida ta’kidalanganidek delegateni bool tipida e’lon qilib n gacha bo’lgan hamma sonlarni bu delegat orqali tublikka tekshirib chiqamiz.Va bitta sikl orqali hamma sonlarni tekshirish chog’ida bu natijani shakllantirib boramiz(String turidagi o’zgaruvchiga yuklab boramiz qiymatlarni.Aslida buni delgatni void tarzida e’lon qilib ham natijaga erishish mumkin bunda har bir sonni tekshiryotganda aga u tub bo’lsa natijani ekranga chop etaverardik.Biroq yuqoridagi kod har bir dasturchi uchun tushunarliroq bo’ladi effekt jihatidan ham soddaroq yozilganligi ham void tarzida e’lon qilgandan ko’ra yaxshiroq deb o’ylayman.Kodda qo’llanilgan lambda expressions(ifoda) esa quyidagicha:



isOdd isOdd=k=>

Uning quyi qismi esa lambda operatorga misol bo’la oladi.



2-usul

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;
namespace ConsoleApplication8

{

class Program

{

static void Main(string[] args)

{

Func> EnumerableRange = (startPoint, endPoint) =>

Enumerable.Range(Math.Min(startPoint, endPoint), Math.Abs(startPoint - endPoint) + 1);

Func isFullyDivided = (value, divisor) => (value % divisor).Equals(0);

Console.Write("N ni kiriting ");

int ep = int.Parse(Console.ReadLine());

var query = EnumerableRange(2, ep) .Where(value =>

EnumerableRange(2, (int)Math.Ceiling(Math.Sqrt(ep))) .Any(divisor => value != divisor && isFullyDivided(value, divisor)) );

var primeNumbers = EnumerableRange(2, ep) .Except(query);

Console.WriteLine("1 dan N gacha bo'lgan tub sonlar quyidagilar: ");

foreach (var item in primeNumbers) { Console .WriteLine(item); } Console .Read(); }

}

}
Bunda ataylab inglizcha yozmadim ustoz.IEnumerable bilan ishladim.

Func isFullyDivided = (value, divisor) => (value % divisor).Equals(0);

Yuqorida lambda ifoda va operator qo’llanilgan.Bunda maxsus tiplar bilan ishlovchi Func dan foydalandim.Lambda expressionsni qo’llashning yana bir ommaviy uslublaridan biri bunda lambda ifoda ta’rifiga binoan delegate kodining yozilishoi qosqa ko’rinishga keladi.

c) N sonining raqamlari yig’indisi topilsin.

Nazariy qism: Buni ham bitta sodda lambda ifoda va lambda operator orqali hal etamiz.Teskari tomondan qarab sonning birlar xonasidan boshlab 10 ga bo’lib qoldiq olamiz va sonni o’nga bo’lib avtomtik ravishda yig;indini hisoblab boramiz.

Dastur kodi quyidagicha:

using System;

namespace Sum_with_lambda

{

class Program

{

private delegate int SumNumbers(int n);

static void Main(string[] args)

{

Console.Write("Enter the number n: ");

int k = int.Parse(Console.ReadLine());

SumNumbers sum=n=>

{

int sumnums = 0;

while(n!=0)
{

int digit = n % 10;

n /= 10;

sumnums += digit;

}

return sumnums;

};

Console.Write("Sum of numbers' digits is equal to: " + sum(k));

Console.Read();
}

}

}

Dastur natijasidan namuna:



Izoh:Bu juda sodda algoritm bo’lin ko’rinib turibdiki, oxirgi birlar xonasidan boshlab raqamlarini ajratib olyapmiz(n%10 orqali) va sonni n/10 qilib nolgacha kamaytirib borib hamma raqamlari yig’indisini dinamik ravishda hisoblab borilyapti.Bunda bitta lambda ifoda va lambda opertaordan foydalandik.Bunda qo’llanilga lambda expressions esa:



SumNumbers sum=n=>

Va pastki qatordan {} ichida lambda operatorni qo’lladik(Yuqorida kodi bilan batafsil tanishib o’tishingiz mumkin



2-usul

Dastur kodi quyidagicha:



using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;
namespace _2_usulda_SumsNumbers

{

class Program

{

static void Main(string[] args)

{

Console.Write("n sonini kiriting : ");

int n = int.Parse(Console.ReadLine());

Func sums = k => k.ToString().Sum(c => c - '0');

Console.WriteLine("Sum numbers digit is ="+sums(n));

Console.ReadKey();

}

}

}


Download 146,3 Kb.

Do'stlaringiz bilan baham:
  1   2




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish