• 23 Kasım 2024 13:42

Sait ORHAN

Öğretmek için Öğrenin- Öğrenmek için Öğretin

Listeye belirsiz sayıda elaman eklemek için kullanılmıştır. Çalışma mantığı:

İlk adım olarak yeni bir alan tahsisi yaptıktan sonra eklenecek öğrencinin numarasını alır. Aldığı numarayı analiz ederek derse kayıt yapabilecek bir numara olup olmadığını test eder. Dersi alabilen öğrenci numaraları [10000, 19999] aralığındaki numaralardır. Daha sonra alınan numara bool OgrenciBul(const int ArananNumara) metoduna gönderir. Dönen değer true ise bu numaranın daha önce kayıt yaptığını ve tekrar kayıt yapamayacağı uyarısını verdikten sonra yeni numara girişi ister. Bu iki temel testi geçen numara aşağıdaki algoritmaya göre listeye eklenir. Daha sonra eklenecek eleman kopyalanır ve numaranın çift veya tek olmasına göre eklenecek elemanın kopyası Tekler listesi veya Çiftler listesine eklenmek üzere void ListeyeEkle(Veriler *Eklenecek) metoduna gönderilir.

· Liste boş ise eklenecek eleman hem liste başı hem liste sonudur,

· Eklenecek numara liste başındaki numaradan küçükse liste başına eklenir ve yeni liste başıdır,

· Eklenecek numara liste sonundaki numaradan büyükse liste sonuna eklenir ve yeni liste sonudur,

Diğer durumlarda araya eklenir, liste başından başlanarak eklenecek numara bakılan numaradan küçük oluncaya kadar liste taranır ve yeri bulunduktan sonra da araya eklenir.

[cpp]

void Liste::ListeyeEkle(void)
{
int secim=1;
while(secim==1)
{
Veriler *Eklenecek = new Veriler();
if(Eklenecek)
{
cout << "Yeni Ogrencinin Numarasini Giriniz: ";
cin >> Eklenecek->numara;
if(OgrenciBul(Eklenecek->numara))
{
cout << Eklenecek->numara << " ile daha once kayit alinmistir. Numarayi Kontrol ediniz!\n";
continue;
}
Eklenecek->BolumBelirle();
for(;Eklenecek->numara/1000 >= 20 || Eklenecek->numara/1000 < 10;)
{
cout << "Hatali Numara Girisi! Numarayi Tekrar Giriniz.\n";
cout << "Yeni Ogrencinin Numarasini Giriniz: ";
cin >> Eklenecek->numara;
if(OgrenciBul(Eklenecek->numara))
{
cout << Eklenecek->numara << " ile daha once kayit alinmistir. Numarayi Kontrol ediniz!\n";
Eklenecek->numara = 0;
continue;
}
}
Eklenecek->BolumBelirle();
cout << "Yeni Ogrencinin Adi ve Soyadini Giriniz: ";
cin >> Eklenecek->isim; cin >> Eklenecek->soyisim;
Veriler *SiniflandirmadaKullan = new Veriler();
SiniflandirmadaKullan->numara = Eklenecek->numara;
SiniflandirmadaKullan->BolumBelirle();
strcpy(SiniflandirmadaKullan->isim, Eklenecek->isim);
strcpy(SiniflandirmadaKullan->soyisim, Eklenecek->soyisim);
if(SiniflandirmadaKullan->numara%2 == 0)
Ciftler->ListeyeEkle(SiniflandirmadaKullan);
else
Tekler->ListeyeEkle(SiniflandirmadaKullan);
//Eklenecek Eleman Listenin İlk Elamanı mı?
if(ListeSonu == NULL)
{
ListeBasi = Eklenecek;
ListeSonu = Eklenecek;
ListeSonu->onceki = NULL;
ListeSonu->sonraki = NULL;
}
//Eklenecek Eleman Listenin Başına mı Eklenecek?
else if(ListeBasi->numara > Eklenecek->numara)
{
ListeBasi->onceki = Eklenecek;
Eklenecek->sonraki = ListeBasi;
ListeBasi = Eklenecek;
ListeBasi->onceki = NULL;
}
//Eklenecek Eleman Listenin Sonuna mı Eklenecek?
else if(Eklenecek->numara > ListeSonu->numara)
{
ListeSonu->sonraki = Eklenecek;
Eklenecek->onceki = ListeSonu;
ListeSonu = Eklenecek;
ListeSonu->sonraki = NULL;
}
//Eklenecek Eleman Araya mı Girecek?
else
{

Veriler *Bakilan;
Veriler *Bakilandan_Onceki;
Bakilan = ListeBasi;
while(Eklenecek->numara > Bakilan->numara)
{
Bakilandan_Onceki=Bakilan;
Bakilan = Bakilan->sonraki;
}
Eklenecek->sonraki = Bakilan;
Eklenecek->onceki = Bakilandan_Onceki;
Bakilandan_Onceki->sonraki = Eklenecek;
Bakilan->onceki = Eklenecek;
}

}
cout << "\nYeni Ogrenci Girisi Basarili. Yeni Giris Icin 1 e basiniz.\n"
"Cikmak Icin 1 Disinda Rakam Giriniz.Seciminiz: ";
cin>>secim;
cout<<endl;
}
}

[/cpp]

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.