Manisa Celal Bayar Üniversitesi Yazılım Mühendisliği Bölümü YZM 1105- Algoritma ve Programlama I Final Sınavı Soruları Güz, 2018-2019 Süre: 90 Dakika Derse Kayıtlı Olduğunuz Grubun Öğretim Üyesini (X) ile Belirtiniz: Ayşegül ALAYBEYOĞLU Aytuğ ONAN Ersin ASLAN Nilüfer ATMAN USLU Adı YANIT ANAHTARI Öğrenci Numarası Soyadı İmza Sınav Tarihi 9 Ocak 2019 Not /100 Soru#1 (15 puan): Bir futbol takımının 10 haftalık maç istatistikleri aşağıda verilen dizide tutulmaktadır. Bu dizide 2 değerleri galibiyetleri, 1 değerleri mağlubiyetleri ve 0 değerleri ise beraberlikleri temsil etmektedir. Takımın küme düşmemesi için en az 12 puan alması gerekmektedir. 2 1 0 0 2 1 1 2 1 0 Buna göre, ilgili futbol takımının 10 hafta sonunda kümede kalıp kalmadığını puanı ile birlikte ekrana yazdıran bir C programı yazınız. Not: Galibiyetlere 3 puan, beraberliklere 1 puan, mağlubiyetlere de 0 puan verilecektir. İşlemler dizi kullanılarak gerçekleştirilecektir. Sayfa#1
Soru#2 (30 puan): Yığın (stack), eleman eklemelerin ve çıkarmaların en sondan yapıldığı özel bir tek boyutlu dizi yapısıdır. Son giren - ilk çıkar (Last-in-First-out (LIFO)) kuralıyla erişimin yapıldığı, ara elemanlara erişilemediği veri yapısı olarak da bilinir. Aşağıdaki fonksiyonları sahip olan bir yığın kodlaması yaparak main programı içerisinden çağırınız. push (int deger, int dizi[]): i değerini yığının üstüne ekler. int pop(int dizi[]): Yığının en üstündeki değeri okur ve onu siler. int peek(int dizi[]):yığının en üstündeki değeri okur ve ancak onu silmez. push(4); push(5); push(11); pop(); 11 5 4 5 4 #include <stdlib.h> int eleman_sayisi = 0; int main() int stack[10]; Push(4, stack); Push(8, stack); Push(12, stack); Push(3, stack); printf("1. pop:%d\n", Pop(stack)); printf("2. pop:%d\n", Pop(stack)); printf("1. peek:%d\n", Peek(stack)); void Push(int deger, int s[]) s[eleman_sayisi] = deger; eleman_sayisi++; int Pop(int s[]) int temp = s[eleman_sayisi-1]; s[eleman_sayisi-1] = -1; eleman_sayisi--; return temp; int Peek(int s[]) return s[eleman_sayisi-1]; Sayfa#2
Soru#3 (15 puan): Parametre olarak str isimli bir karakter dizisi ve ch isimli bir karakter alan, str karakter dizisi ch karakterini içerdiği takdirde, ch karakterinin ilk görüldüğü konumun indisini döndüren; ilgili karaktere karakter dizisinde rastlanmadığında ise -1 değeri döndüren bir fonksiyon yazınız. Aşağıda verilen prototipi kullananınız: int findletter(char str[], char ch) NOT: Sorudan tam puan alınması için yalnızca fonksiyonun yazılması yeterlidir! int findletter(char str[], char ch) for(i=0; i<strlen(str); i++) if(str[i] == ch) return i; return -1; Sayfa#3
Soru#4 (15 puan): Aşağıda verilen C programlarının ekran çıktılarını belirleyiniz: #define R 3 #define C 4 int main(void) int z[r][c] = 1,10,26,0, 2,51,13,8, 6,11,21,4; int i, j, m; 6 51 26 8 for(j=0; j<c; j++) m = z[0][j]; for(i=1; i<r; i++) if(z[i][j]>m) m = z[i][j]; printf ( %d\n, m); system( pause ); 70 49 36 34 45 53 int main(void) int a[7], j, k, b[] = 36,49,70; a[0] = 53; a[2] = 45; a[4] = 34; a[6] = 19; for(k=0; k<3; k++) for (j=0; j<5; j=j+2) if(b[k]>=a[j]) a[j+1] = b[k]; b[k] = a[j]; break; printf( %d %d %d\n, a[1], a[3], a[5]); printf( %d %d %d\n, b[0], b[1], b[2]); system( pause ); Sayfa#4
Soru#5 (25 puan): Mükemmel sayılar, kendisi hariç pozitif tam bölenlerinin toplamına eşit olan sayılardır. En küçük mükemmel sayı 6 dır. 6 nın pozitif tam bölenleri: 1, 2, 3 ve 6 kendisi hariç tam bölenlerinin toplamı: 1+2+3 = 6 dır ve 6 bir mükemmel sayıdır. Yine aynı şekilde 28 in pozitif tam bölenleri: 1, 2, 4, 7, 14, 28 kendisi hariç tam bölenlerinin toplamı: 1+2+4+7+14 = 28 dir ve 28 bir mükemmel sayıdır. Buna göre, girilen bir sayının mükemmel sayı olup olmadığını kontrol eden bir C programı yazınız. int main() int sayi; printf("sayi? \n"); scanf("%d",&sayi); int sum = 0; for(int j=1; j<sayi; j++) if(sayi%j==0) sum = sum + j; if(sum == sayi) printf("%d bir mukemmel sayidir\n",sayi ); else printf("%d bir mukemmel sayi degildir\n",sayi ); Sayfa#5