Veri yapıları dersi için yaptığım, c++ ile yazılmış örnek. C++ struct array pointer örneği. Aşağıda proje için istenenleri ve projeyi görebilirsiniz.

C++ Örnek Proje

Aşağıda verilen yapıyı kullanarak isim, öğrenci numarası, harf notu, test notları ve ortalama bilgilerini saklayan bir program yazınız. Programda kullanıcıdan öğrenci sayısı ve test sayısı sorulmalıdır. Daha sonra gerekli hafıza blokları tahsis edilmelidir. Özellikle verilerin saklanması için dizi (array)yapısından faydalanabilirsiniz. Programda dört fonksiyon bulunmalıdır;

  • void veriAl(): Öğrencinin ismi, öğrenci numarası ve test notları kullanıcıdan alınmakta.
  • double notHesapla(): Öğrencinin ortalaması hesaplanıp, harf notu belirlenmekte. Daha sonra harf notları şu aralıklara göre belirlenmelidir: A: 85-100, B:75-84, C:65-74, D:50-64, F:0-49
  • void goster(): Öğrencilere ait veriler print olacak.
  • void sil(): Alınan hafıza yerleri iade olacak.

C++ Struct Array Pointer Örneği

#include <iostream>
#include <string.h>
using namespace std;
struct Ogrenci
{
    string isim, harfnotu;
    int ogrencino, * testnotlari;
    double ortalama;
};
void veriAl(Ogrenci*, int, int);
double notHesapla(int*, int, Ogrenci*, int);
void goster(Ogrenci*, int, int);
void sil(Ogrenci*);
int main()
{
    //Ogrenci ve test sayisi alindi
    int ogrencisayisi, testsayisi;
    cout << "Ogrenci sayisini giriniz: ";
    cin >> ogrencisayisi;
    cout << "Test sayisini giriniz: ";
    cin >> testsayisi;
    //Ogrenci struct için bellek alindi
    Ogrenci *yeni=new Ogrenci[ogrencisayisi];
    //Her ogrenci icin test sayisi kadar bellek alindi
    for (int i = 0; i < ogrencisayisi; i++)
        yeni[i].testnotlari = new int[testsayisi];
    //Fonksiyonlara bellek adresleri ve degerler gonderildi
    veriAl(&yeni[0], ogrencisayisi, testsayisi);
    for (int i = 0; i < ogrencisayisi; i++)
    {
        notHesapla(&yeni[i].testnotlari[0], testsayisi, &yeni[0], i);
    }
    goster(&yeni[0], ogrencisayisi, testsayisi);
    sil(&yeni[0]);
    return 0;
}
void veriAl(Ogrenci* yeni, int ogrencisayisi, int testsayisi)
{
    //Dongu ile ogrencinin tum bilgileri alindi
    for (int i = 0; i < ogrencisayisi; i++)
    {
        cout << endl << i + 1 << ". ogrencinin adi: ";
        cin >> yeni[i].isim;
        cout << i + 1 << ". ogrencinin numarasi: ";
        cin >> yeni[i].ogrencino;
        for (int j = 0; j < testsayisi; j++)
        {
            cout << i + 1 << ". ogrencinin " << j + 1 << ". notunu giriniz: ";
            cin >> yeni[i].testnotlari[j];
        }
    }
}
double notHesapla(int* nots, int testsayisi, Ogrenci* yeni, int k)
{
    //Ogrencinin not ortalamasi hesaplandi
    double toplam = 0;
    for (int i = 0; i < testsayisi; i++)
        toplam += nots[i];
    yeni[k].ortalama = toplam / testsayisi;
    //Bulunan not ortalamasina harf atandi
    if (yeni[k].ortalama <= 100 && yeni[k].ortalama >= 85)
        yeni[k].harfnotu = "A";
    else if (yeni[k].ortalama < 85 && yeni[k].ortalama >= 75)
        yeni[k].harfnotu = "B";
    else if (yeni[k].ortalama < 75 && yeni[k].ortalama >= 65)
        yeni[k].harfnotu = "C";
    else if (yeni[k].ortalama < 65 && yeni[k].ortalama >= 50)
        yeni[k].harfnotu = "D";
    else if (yeni[k].ortalama < 50 && yeni[k].ortalama >= 0)
        yeni[k].harfnotu = "F";
    return 0;
}
void goster(Ogrenci* yeni, int ogrencisayisi, int testsayisi)
{
    cout << endl << " -> SINIF <- " << endl;
    //Ogrencilere ait bilgiler print edildi
    for (int i = 0; i < ogrencisayisi; i++)
    {
        cout << endl << i + 1 << ". ogrenci -> " << yeni[i].isim << " / No: " << yeni[i].ogrencino;
        for (int j = 0; j < testsayisi; j++)
        {
            cout << endl << " " << j + 1 << ". notu: " << yeni[i].testnotlari[j];
        }
        cout << endl << " " << "Not Ortalamasi:" << yeni[i].ortalama << " - Harf Notu: " << yeni[i].harfnotu << endl;
    }
}
void sil(Ogrenci* yeni)
{
    //Main fonksiyonunda alinan bellek serbest birakildi
    delete[] yeni;
}

Öğrencilerin bilgilerini ve notlarını listeleyen bu console uygulamasında pointer mantığını çözdükten sonra geriye kalan kısımlar basit hale geliyor. Proje veri yapıları dersinin bir ödeviydi. Bu sebeple harici geliştirmeler yapılmadı. Eğer yapılmak istenirse, veri giren kişinin aynı öğrenci numarasını girememesi sağlanabilir.

C++ projesini Visual Studio ile hazırladım. İndirmek için bağlantıyı kullanabilirsiniz.