Manisa Celal Bayar Üniversitesi Yazılım Mühendisliği Bölümü YZM 1105- Algoritma ve Programlama I Final Sınavı Örnek Soruları Güz 2018 Süre: 90 Dakika Adı YANIT ANAHTARI Öğrenci Numarası Soyadı İmza Sınav Tarihi Not /100 Soru#1 (20 puan): Kullanıcı tarafından girilen bir N pozitif tamsayısının küpünü ve bu N sayısına kadar olan tamsayıların (N dâhil) kareleri toplamını hesaplayan fonksiyon prototipleri aşağıda verilmiştir. Buna göre gerekli fonksiyonları yazınız ve C programı içerisinde kullanınız. Fonksiyon Prototipleri: int kup(int sayi); int kareler_toplami(int sayi); Not: Prototiplere dikkat edildiğinde iki ayrı fonksiyon yazılacağı açıktır. Fonksiyonları yazdıktan sonra ana program içerisinden fonksiyonları çağırmayı unutmayınız. Sayfa#1
Soru#2 (15 puan): Klavyeden girilen 10 adet tamsayı bir dizi içine okunacaktır. Bu sayıların kaçının tek, kaçının çift sayı olduğunu bulan ve ekrana yazan C programını yazın. Not: Aşağıda verilen ekran çıktısı sadece bir örnektir, program herhangi girilen 10 sayı için çalışmalıdır. Sayfa#2
Soru#3 (10 puan): Aşağıda verilen C programlarının ekran çıktılarını yazınız. Ekran Çıktısı: 52 Ekran Çıktısı: 425 Sayfa#3
Soru#4 (25 puan): Bir futbol takımının 10 haftalık maç istatistikleri aşağıda verilen dizide tutulmaktadır. Bu dizide "2" ler galibiyetleri, "1" ler mağlubiyetleri, "0" lar ise beraberlikleri belirtmektedir. Bu takımın küme düşmemesi için 12 puan alması gerekmektedir. Verilenlere göre bu takım 10 hafta sonunda kümede kalıp kalmadığını puanı ile birlikte ekrana yazan programı C dilinde yazınız. 2 1 0 0 2 1 1 2 1 0 Not: Galibiyetlere 3 puan, beraberliklere 1 puan, mağlubiyetlere de 0 puan verilecektir. İşlemler dizi kullanılarak gerçekleştirilecektir. Sayfa#4
Soru#5 (30 puan): Küçük bir havayolları şirketi, rezervasyon kayıtlarını tutmak için yeni bir bilgisayar almıştır. Patron, size yeni sistemi C de programlamanızı söylemiştir. Havayolları bir uçağa sahiptir ve sizden bu uçağın bütün uçuşlarının rezervasyon kayıtlarını tutacak bir program istenmiştir. Programınız aşağıdaki menüyü içermelidir. Sigara içilen bölüm için 1 e basın. Sigara içilmeyen bölüm için 2 ye basın. Eğer kullanıcı 1 e basarsa, programınız sigara içilen bölümden bir koltuğun rezervasyonunu yapmalıdır.(1-5. koltuklar.) Eğer kullanıcı 2 ye basarsa sigara içilmeyen bölümün koltuklarından birinin rezervasyonu yapılmalıdır.(6-10. koltuklar). Daha sonra programınız, müşterinin hangi bölümden ve kaç numaralı koltuğa rezervasyon yaptırdığını göstermelidir. Programınızda tek belirteçli bir dizi kullanınız. Dizi elemanlarının ilk değerlerini, koltukların boş olduğunu göstermek için 0 yapınız. Bir koltuğun rezervasyonu yapıldığında ilgili dizi elemanını 1 yapınız. Programınız kesinlikle aynı koltuğa iki rezervasyon yapmamalı. Eğer sigara içilen bölüm dolduysa müşterinin sigara içilmeyen bölümden rezervasyon yapmak isteyip istemediğini sormalı(tam tersi durum içinde aynı işlemi yapmalı). Eğer cevap evet ise uygun rezervasyon yapılmalı. Eğer hayırsa Diğer uçuş 3 saat sonra yazmalı. #include<stdio.h> #include<stdlib.h> #include<time.h> #define BOYUT 10 int main(){ int sayi,a[boyut]={0,x,y; char letter; printf("sigarali[1] Sigarasiz[2] Cikis[3]:"); scanf("%d",&sayi); do{ if(sayi==1 ){ y=getemptyindex(a,sayi); if(y!= -1){ a[y]=1; printf("\nsigarali bolumden %d. koltugun rezervasyonu yapilmistir.\n",y); if(getemptyindex(a,2)!= -1){ printf("sigarali yerin Rezervasyonu dolmustur.sigarasiz yerden almak istermisiniz?[e-h]"); scanf("%s",&letter); if(letter=='e' letter=='e') sayi=2; printf("diger ucus 3 saat sonra!!."); break; printf("tum rezervasyonlar dolmustur.diger ucus 3 saat sonradir.\n"); break; Sayfa#5
if(sayi==2){ x=getemptyindex(a,sayi); if(x!= -1){ a[x]=1; printf("\n\nsigarasiz bolumden %d. koltugun rezervasyonu yapilmistir.\n",x); if(getemptyindex(a,1)!= -1){ printf("sigarasiz yerin rezervasyonu dolmustur.sigarali yerden almak istermisiniz?[e-h]\n"); scanf("%s",&letter); if(letter=='e' letter=='e'){ sayi=1;continue; printf("diger ucus 3 saat sonra..!\n");break; printf("tum rezervasyonlar dolmustur.diger ucus 3 saat sonradir.\n"); break; printf("sigarali[1] Sigarasiz[2] Cikis[3]:"); scanf("%d",&sayi); while(sayi!=3 ); return 0; int getemptyindex(int a[],int sayi) { int i,startindex,endindex; if(sayi == 1){ startindex = 0; endindex = BOYUT/2; startindex = BOYUT/2; endindex = BOYUT; for(i=startindex;i<endindex;i++){ if(a[i]==0) Sayfa#6
return i; return -1; Sayfa#7