Yunus Emre
Software Engineer
C++ Struct Array Pointer Örneği – Sınıf Listesi
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(¥i[0], ogrencisayisi, testsayisi);
for (int i = 0; i < ogrencisayisi; i++)
{
notHesapla(¥i[i].testnotlari[0], testsayisi, ¥i[0], i);
}
goster(¥i[0], ogrencisayisi, testsayisi);
sil(¥i[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.
Benzer bir proje için uğraşıyorum ama kodlardan hiç anlamadım. Ücret karşılığı yardımcı olur musunuz
bilgi@mryed.com mailine projenin detaylarını atabilirsiniz.