2017-2018 Fall Object-Oriented Programming Laboratory 02 - Structures 10.10.2017 1. Diziler. Bir tamsayi dizisinin elemanlarını ekrana yazdırmak için void printarr(int arr[], int elem_count) prototipli fonksiyonu tanımlayın. Tanımladığınız fonksiyonu bir programda test edin. Örnek: 10 elemanlı bir dizi tanımlayın. Dizinin her bir elemanı için rastgele sayı üretin. Dizinin elemanlarını ekrana yazdırın. Rastgele sayı üretmek: #include <cstdlib> #include <ctime> srand(time(null)); // ile rastgele sayı üreteci kurulur. r = rand(); // ile rastgele üretilen sayı r değişkenine atanır. // siz r den başka bir değişkene atayabilirsiniz. #include <iostream> #include <cstdlib> #include <ctime> #define ECOUNT 10 using std::cin; using std::cout; using std::endl; void printarr(int arr[], int elem_count); int main(void) int random_numbers[ecount]; int a; srand( time(null) ); for(a=0; a<ecount; a++) random_numbers[a] = rand(); printarr(random_numbers, ECOUNT); return 0; void printarr(int arr[], int elem_count)
int i; for(i=0; i<elem_count; i++) cout << arr[i]; if(i!=elem_count-1) cout << ", "; 2. Dizi elemanlarını büyükten küçüğe sıralamak. Bir tamsayı dizisinin elemanlarını büyükten küçüğe sıralamak için void sortdecreasing(int arr[], int elem_count) prototipli fonksiyonu tanımlayın. Tanımladığınız fonksiyonu bir programda test edin. Örnek: 20 elemanlı bir dizi tanımlayın. Dizinin her bir elemanı için rastgele sayı üretin. Dizinin elemanlarını ekrana yazdırın. Tanımladığınız fonksiyon ile dizinin elemanlarını sıralayın. Sıralanmış diziyi ekrana yazdırın. #include <iostream> #include <cstdlib> #include <ctime> #define ECOUNT 20 using std::cin; using std::cout; using std::endl; void printarr(int arr[], int elem_count); void sortdecreasing(int arr[], int elem_count); int main(void) int random_numbers[ecount]; int a; srand( time(null) ); for(a=0; a<ecount; a++) random_numbers[a] = rand(); printarr(random_numbers, ECOUNT); sortdecreasing(random_numbers, ECOUNT); printarr(random_numbers, ECOUNT); return 0;
void printarr(int arr[], int elem_count) int i; for(i=0; i<elem_count; i++) cout << arr[i]; if(i!=elem_count-1) cout << ", "; void sortdecreasing(int arr[], int elem_count) int i, j, temp; for(i=0; i<elem_count; i++) for(j=i+1; j<elem_count; j++) if(arr[i]<arr[j]) temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; 3. Katılımcılar için structure. Bir etkinliğe katılacak kişiler için ad, soyad ve yaş bilgileri toplanacaktır. Bu bilgileri işlemek için katilimci isminde bir structure tanımlayın. Bu structure için tip tanımlaması da yapın. Klavyeden katilimci girişi almak için scan_katilimci() fonksiyonu tanımlayın. Argümanlara ve return tipine siz karar verin. Ekrana katilimci çıktısı yapmak için print_katilimci() fonksiyonu tanımlayın. Argümanlara ve return tipine siz karar verin. Tanımladığınız structure ı ve fonksiyonları bir programda test edin. Örnek: Bir katilimci değişkeni tanımlayın. Kullanıcıdan input isteyin. Değişkeninizdeki değerleri ekrana yazdırın. #include <iostream> #include <cstring>
#define NAMELEN 32 #define NAMESIZE (NAMELEN + 1) using std::cin; using std::cout; using std::endl; typedef struct katilimci_s char ad[namesize]; char soyad[namesize]; int yas; katilimci_t; void print_katilimci(katilimci_t * p); void scan_katilimci(katilimci_t * s); int main(void) katilimci_t k; scan_katilimci(&k); print_katilimci(&k); return 0; void print_katilimci(katilimci_t * p) cout << p->ad << ' ' << p->soyad << " (yas:" << p->yas << ")"; void scan_katilimci(katilimci_t * s) char buffer[256]; int input_length; cout << "ad: "; cin >> buffer; input_length = strlen(buffer); if(input_length > NAMELEN) input_length = NAMELEN; strncpy(s->ad, buffer, input_length); (s->ad)[input_length] = '\0'; cout << "soyad: "; cin >> buffer; input_length = strlen(buffer); if(input_length > NAMELEN) input_length = NAMELEN; strncpy(s->soyad, buffer, input_length);
(s->soyad)[input_length] = '\0'; cout << "yas: "; cin >> s->yas; 4. Structure dizisi sıralama. 3. soruda tanımladığınız katilimci structure ını ve ilgili fonksiyonları kullanın. Bir katilimci dizisini ad a, soyad a ve yaşa göre sıralamak için sırala_ad(), sırala_soyad() ve sırala_yas() fonksiyonlarını yazın; argümanlara ve return tipine siz karar verin. Tanımladığınız fonksiyonları bir programda test edin. Örnek: 4 kişinin katılacağı bir etkinlik için kullanıcıdan katılımcı bilgileri alın. Katılımcıların bilgileri ekrana yazdırın. Katılımcıları ada göre sıralayın, katılımcı bilgilerini ekrana yazdırın. Katılımcıları soyada göre sıralayın ve katılımcı bilgilerini ekrana yazdırın. Katılımcıları yaşa göre sıralayın, katılımcı bilgilerini ekrana yazdırın. Gereken fonksiyonlar: <cstring> int strcmp(const char * str1, const char * str2) #include <iostream> #include <cstring> Eğer str1 ve str2 string leri aynı ise 0 döner. Eğer str1, str2 den alfabetik olarak önce geliyor ise negatif değer döner. Eğer str1, str2 den alfabetik olarak sonra geliyor ise pozitif değer döner. #define NAMELEN 32 #define NAMESIZE (NAMELEN + 1) #define KSAYISI 4 using std::cin; using std::cout; using std::endl; typedef struct katilimci_s char ad[namesize]; char soyad[namesize]; int yas; katilimci_t; void print_katilimci(katilimci_t * p); void scan_katilimci(katilimci_t * s); void sirala_ad (katilimci_t kdz[], int e_sayisi); void sirala_soyad(katilimci_t kdz[], int e_sayisi);
void sirala_yas (katilimci_t kdz[], int e_sayisi); int main(void) katilimci_t k[ksayisi]; int looper; scan_katilimci(&k[looper]); cout << "katilimcilar:" << endl; print_katilimci(&k[looper]); sirala_ad(k, KSAYISI); cout << "katilimcilar (ada gore):" << endl; print_katilimci(&k[looper]); sirala_soyad(k, KSAYISI); cout << "katilimcilar (soyada gore):" << endl; print_katilimci(&k[looper]); sirala_yas(k, KSAYISI); cout << "katilimcilar (yasa gore):" << endl; print_katilimci(&k[looper]); return 0; void print_katilimci(katilimci_t * p) cout << p->ad << ' ' << p->soyad << " (yas:" << p->yas << ")" << endl; void scan_katilimci(katilimci_t * s) char buffer[256]; int input_length; cout << "ad: "; cin >> buffer; input_length = strlen(buffer);
if(input_length > NAMELEN) input_length = NAMELEN; strncpy(s->ad, buffer, input_length); (s->ad)[input_length] = '\0'; cout << "soyad: "; cin >> buffer; input_length = strlen(buffer); if(input_length > NAMELEN) input_length = NAMELEN; strncpy(s->soyad, buffer, input_length); (s->soyad)[input_length] = '\0'; cout << "yas: "; cin >> s->yas; void sirala_ad(katilimci_t kdz[], int e_sayisi) char buffer[namesize]; int i, j, temp; for(i=0; i<e_sayisi; i++) for(j=i+1; j<e_sayisi; j++) if(strcmp(kdz[i].ad, kdz[j].ad)>0) strcpy(buffer, kdz[i].ad); strcpy(kdz[i].ad, kdz[j].ad); strcpy(kdz[j].ad, buffer); strcpy(buffer, kdz[i].soyad); strcpy(kdz[i].soyad, kdz[j].soyad); strcpy(kdz[j].soyad, buffer); temp = kdz[i].yas; kdz[i].yas = kdz[j].yas; kdz[j].yas = temp; void sirala_soyad(katilimci_t kdz[], int e_sayisi) char buffer[namesize]; int i, j, temp;
for(i=0; i<e_sayisi; i++) for(j=i+1; j<e_sayisi; j++) if(strcmp(kdz[i].soyad, kdz[j].soyad)>0) strcpy(buffer, kdz[i].ad); strcpy(kdz[i].ad, kdz[j].ad); strcpy(kdz[j].ad, buffer); strcpy(buffer, kdz[i].soyad); strcpy(kdz[i].soyad, kdz[j].soyad); strcpy(kdz[j].soyad, buffer); temp = kdz[i].yas; kdz[i].yas = kdz[j].yas; kdz[j].yas = temp; void sirala_yas(katilimci_t kdz[], int e_sayisi) char buffer[namesize]; int i, j, temp; for(i=0; i<e_sayisi; i++) for(j=i+1; j<e_sayisi; j++) if(kdz[i].yas > kdz[j].yas) strcpy(buffer, kdz[i].ad); strcpy(kdz[i].ad, kdz[j].ad); strcpy(kdz[j].ad, buffer); strcpy(buffer, kdz[i].soyad); strcpy(kdz[i].soyad, kdz[j].soyad); strcpy(kdz[j].soyad, buffer); temp = kdz[i].yas; kdz[i].yas = kdz[j].yas; kdz[j].yas = temp;