Kompyuter ilmlari va dasturlashtirish


Mavzu: Rekursiv va qayta yuklanuvchi metodlarga oid misollar yechish



Yüklə 3,87 Mb.
səhifə6/15
tarix23.07.2023
ölçüsü3,87 Mb.
#119835
1   2   3   4   5   6   7   8   9   ...   15
shernazarov Samandar (1)

Mavzu: Rekursiv va qayta yuklanuvchi metodlarga oid misollar yechish
Ko‘p parametrli metodlar e’lon qilish va ulardan foydalanish
Saralash algoritmlari

Biz ko’pincha metodlarda cheklangan miqdordagi argumentlardan foydalanamiz . Agar dasturdagi metodda argumentlar soni kopaysa kodning korinishini xiralashadi yani xunuklashadi. params kalit so’zi orqali biz cheksiz argumentlarni massiv korinishida kirgazishimiz va kodni ancha ixchamlashtirishimiz mumkin. params Parametrli metodlarni chaqirganimizda , biz quyidagilarni kiritishimiz mumkin:


• Massiv elementlari turiga oid argumentlarning vergul bilan ajratilgan ro'yxati:
int yigindi = Sum(19, 9, 7, 17, 39, 47);
• Belgilangan turdagi argumentlar massivi:
object[] obj = new object[] { "hamroliyev", 'a', 19, 9, 12.8 };
//Add metodini chaqiramiz.
Add(obj);
• Hech qanday argumentsiz. Hech qanday argument yubormasak, params ro'yxati uzunligi nolga teng boladi.
Sum();
params kalit so’zi dasturchi metodda foydalaniladigan parametrlar soni haqida oldindan ma'lumotga ega bo'lmagan hollarda foydali bo'ladi. Metod konstruktorida params kalit sozidan faqat bir marta foydalanishimiz mumkin. params ga tegishli argumentdan keyin qoshimcha argument berish mumkin emas.
params kalit so’zidan foydalanishga oddiy misol:
using System;
namespace dot_net_uz
{
class Program
{
// params parametrni o'z ichiga olgan metod
public static int Sum(params int[] sonlarRoyxati)
{
int sum = 0;
foreach (int i in sonlarRoyxati)
{
sum += i;
}
return sum;
}
static void Main(string[] args)
{
//Sum metodini chaqiramiz.
int [] yigindi = Sum(19, 9, 7, 17, 39, 47);
Console.WriteLine($"yigindi : {yigindi}");
Console.ReadKey();
}
}
}
Output:
yigindi : 138
yigindi : 138
0
Sizda "params kalit so'zidan foydalanmasdan ham metodlarda massivdan foydalanish mumkinku, params ni nima keragi bor?" degan savol tug'ilishi mumkin. Javob shunday: params kalit so'zi metoddan foydalanishni ancha qulaylashtiradi:
using System;
namespace dot_net_uz
{
class Program
{
// params parametrni o'z ichiga olgan metod
public static int Sum(params int[] sonlarRoyxati)
{
int sum = 0;
foreach (int i in sonlarRoyxati)
{
sum += i;
}
return sum;
}
static void Main(string[] args)
{
int [] a={19, 9, 7, 17, 39, 47};
int yigindi = Sum(a); // params ishlatmasdan ham metodni bu usulda chaqirish mumkin edi
Console.WriteLine($"yigindi : {yigindi}");
// paramsdan foydalangandagina metodni shunday chaqirish mumkin:
Console.WriteLine($"yigindi : {Sum(19, 9, 7, 17, 39, 47)}");
// Agar paramsdan foydalanmagan bo'lsangiz kodning bu qismida xatolik yuzaga keladi,
// paramsdan foydalansangiz metodni shu holatda ham chaqirish mumkin
Console.WriteLine(Sum());
Console.ReadKey();
}
}
}
Object turidan va paramsdan foydalanish metodni har qanday turdagi va har qanday miqdordagi qabul qila olishiga imkon beradi:
using System;
namespace dot_net_uz
{
class Program
{
// params parametrni o'z ichiga olgan metod
// object turidagi parametrlardan foydalanilgan funksiya
public static void Print(params object[] royxat)
{
for (int i = 0; i < royxat.Length; i++)
{
// Natijalarni chop etish
Console.WriteLine(royxat[i]);
}
}
static void Main(string[] args)
{
object[] obj = new object[] { "hamroliyev", 'a', 19, 9, 12.8 };
Console.WriteLine("1-usul:");
//Print metodini chaqiramiz.
Print(obj);
Console.WriteLine();
Console.WriteLine("2-usul:");
//Print metodini chaqiramiz.
Print(19,"dot-net",20,"Hamroliyev");
Console.WriteLine("3-usul:");
Print();
Console.ReadKey();
}
}
}
Output:
1-usul:
hamroliyev
a
19
9
12.8
2-usul:
19
dot-net
20
Hamroliyev
3-usul:
Avvalambor saralash algoritmi nima ekanligini aniqlab olaylik.
Saralash algoritmlari taqqoslash operatorlari yordamida ro'yxatlar va massivlarda berilgan ma'lumotlarni tartiblab beradi. Bu operatorlar massiv elementlariga qo’llaniladi va ularning ma’lumotlar strukturasidagi tartibini belgilaydi. Misol uchun, quyidagi belgilar (1-rasm) ASCII kodi bo'yicha o'sish tartibida saralangan. Saralash jarayonida elementlar bir-biri bilan taqqoslanadi. ASCII jadvalidagi belgining qiymati qanchalik katta bo'lsa, u ro'yxat boshidan shunchalik uzoqroqda joylashgan bo'ladi. [1]
Dasturlashda turli xil saralash algoritmlar mavjud. Masalani turi mazmuniga qarab turib saralash algoritmlarning biri qo’llaniladi. Keling eng ko’p qo’llaniladigan saralash algoritmlarini ko'rib chiqamiz.
Dasturlashda turli xil saralash algoritmlar mavjud. Masalani turi mazmuniga qarab turib saralash algoritmlarning biri qo’llaniladi. Keling eng ko’p qo’llaniladigan saralash algoritmlarini ko'rib chiqamiz.
Eng ko’p qo’llaniladigan saralash algoritmlari
Eng ko’p qo’llaniladigan saralash algoritmlaridan biri bu Pufakchali (bubble sort) saralash algoritmidir. Pufakchali saralash algoritmi har bir o'tishda qo'shni elementlarni qayta-qayta taqqoslaydi va almashtiradi (agar kerak bo'lsa) (2-rasm). Bubble Sortning i-o'tish joyida (o'sish tartibida) oxirgi (i-1) ta elementlar allaqachon tartiblangan bo’ladi va i-eng katta element (N-i)-pozitsiyaga joylashadi
Pufakchali saralash algoritmi dastur listingi:
BubbleSort (Arr, N) // Arr n o’lchamli massiv {For ( I:= 1 to (N-1) )
{For ( J:= 1 to (N-I) )
{If ( Arr [J] > Arr[J+1] ) Swap( Arr[j], Arr[J+1] );}}}
Keyingi saralash algoritmi bu Tanlash usuli (selection sort). Tanlash usuli - eng kichik elementni tanlaydi va i-pog'onaga joylashtiradi (3-rasm). Ushbu algoritm massivni ikki qismga ajratadi: tartiblangan (chap) va tartiblanmagan (o'ng) pastki qator. U tartiblanmagan pastki qatordan eng kichik elementni tanlaydi va shu pastki qatorning birinchi holatiga (oʻsish tartibida) joylashtiradi. Keyingi eng kichik elementni qayta-qayta tanlaydi.

3-rasm. Tanlash usuli (selection sort)


Tanlash usuli dasturlash tilida quyidagicha yozish mumkin: SelectionSort (Arr, N)
{For ( I:= 1 to (N-1) ) { min_index = I;
For ( J:= I+1 to N )
{If ( Arr [J] < Arr[min_index] ) min_index = J;}
If (min_Index != I)
Swap ( Arr[I], Arr[min_index] ); }}
Uchinchi algoritm bu Yig’ish usuli (heap sort). Algoritm ma'lumotlarni ikkilik daraxt (ikkilik to'p) shaklida tuzadi. Elementlarni joylashtirishning ikkita varianti mavjud - max-heap (ota-onaning qiymati bolalarning qiymatlaridan katta) va min-heap (ota-onaning qiymati bolalarning qiymatlaridan kamroq). Eng katta yoki eng kichik element (turiga qarab) daraxtning ildiziga joylashtiriladi (4-rasm). U to'plamning oxirgi elementi bilan almashtiriladi va massivning oxiriga joylashtiriladi. Uyum hajmi 1 ga kamayadi, shundan so'ng u qayta tiklanadi. Uyum hajmi 1 dan katta bo'lsa, tsikl takrorlanadi.

4-rasm. Yig’ish usuli (heap sort) Yig’ish usuli dasturlash tilida quyidagicha yozish mumkin: heapify(array)


Root = array[0]
Largest = largest( array[0] , array [2 * 0 + 1]. array[2 * 0 + 2]) if(Root != Largest)
Swap(Root, Largest)
K eyingi saralash algoritmi bu Kiritish usulidir (5-rasm insertion sort). Kiritish algoritmi - bu oddiy tartiblash algoritmi bo'lib, u karta o'yinidagi kartalarini saralash usuliga o'xshab ishlaydi. Massiv deyarli tartiblangan va tartiblanmagan qismlarga bo'lingan. Saralanmagan qismdan qiymatlar tanlanadi va tartiblangan qismning to'g'ri joyiga joylashtiriladi.[2]
rasm. Kiritish usuli (insertion sort)
Kiritish usulining algoritmi quyidagicha: InsertionSort (Arr, N) // Arr is an array of size N.
{For ( I:= 2 to N ) // N elements => (N-1) pass
{insert_at = I; // Find suitable position insert_at, for Arr[I] item = Arr[I]; J=I-1;
While ( J ? 1 && item < Arr[J] )
{Arr[J+1] = Arr[J]; // insert_at = J;
J--;}
insert_at = J+1;
Arr[insert_at] = item; // Arr[J+1] = item;}}}
Yana bir saralash usullaridan biri bu - Birlashtirish usuli (6-rasm Merge sort)dir. Bu usul “Bo‘l va zabt et” tamoyiliga amal qiladi, unga ko‘ra ma’lumotlar massivi teng qismlarga bo‘linadi, ular alohida tartiblanadi. Ular birlashgandan so'ng, natijada tartiblangan massiv hosil bo'ladi.[5]


6-rasm. Birlashtirish usuli (Merge sort).
Birlashtirish usulining dastur listingi quyidagi ko’rinishda yozish mumkin: void Merge(int *a, int low, int high, int mid)
{ int i, j, k, temp[high-low+1]; i = low;
k = 0;
j = mid + 1;
while (i <= mid && j <= high) {if (a[i] < a[j]){temp[k] = a[i]; k++;
i++;
}
else
{
temp[k] = a[j]; k++;
j++;
}
}
while (i <= mid) {temp[k] = a[i];
k++;
i++;
}
while (j <= high)
{
temp[k] = a[j];
k ++; j++;
}
for (i = low; i <= high; i++) {a[i] = temp[i-low];}
}
void MergeSort(int *a, int low, int high) {int mid;
if (low < high) {mid=(low+high)/2; MergeSort(a, low, mid); MergeSort(a, mid+1, high);
Merge(a, low, high, mid);} }
Tanishadigan yana bir saralash algoritmi bu Tez saralash usuli (7-rasm quick sort)dir. Eng tezkor tartiblash algoritmlaridan biri hisoblanadi. Birlashtirish usuli kabi, u bo'lish va egallash asosida ishlaydi



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp8


{
class Program
{
static void Main(string[] args)
{
int n = Convert.ToInt32(Console.ReadLine()), k = 0;
double s;
double[] arr = new double[n];
for (int i = 0; i < arr.Length; i++)
{
arr[i] = Convert.ToDouble(Console.ReadLine());

}
int x, y;


x = Convert.ToInt32(Console.ReadLine());
y = Convert.ToInt32(Console.ReadLine());
double min = arr[0];
for (int i = 1; i < arr.Length; i++)
{
if (min > arr[i]) { min = arr[i]; }

}
for (int i = x - 1; i < y; i++)


{
arr[i] = arr[i] / min;

}
for (int i = 0; i < arr.Length; i++)


{
Console.Write(arr[i] + " ");

}
Console.WriteLine();


Console.ReadKey();
}
}
}



Yüklə 3,87 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9   ...   15




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©www.genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə