Bilgisayar programlama soruları

@RaSGooL kağıtta kod yazmak aslında çok mantıksız değil. PC'de yazarken deneme yanılma ile yapıyorsun ama kağıda yazarken kodun ne yapacağını düşünmek zorundasın. Aslında ezbercilikten uzaklaştıran bir şey oluyor. Kapıda kod yazmaya isyan etmeye bence gerek yok, eğitim sistemi hakkında haklısın ama...
 
@Berkay Davas
Hocam şimdi de geçen senenin 2. dönem vize soruları elimize geçti. Yardımcı olur musunuz acaba?

Bu sefer bayağı vaktinde attım.
 

Dosya Ekleri

  • Screenshot_2022-04-17-11-44-56-873_com.google.android.apps.docs.jpg
    Screenshot_2022-04-17-11-44-56-873_com.google.android.apps.docs.jpg
    22,6 KB · Görüntüleme: 31
  • Screenshot_2022-04-17-11-44-53-918_com.google.android.apps.docs.jpg
    Screenshot_2022-04-17-11-44-53-918_com.google.android.apps.docs.jpg
    43,3 KB · Görüntüleme: 26
  • Screenshot_2022-04-17-11-44-49-035_com.google.android.apps.docs.jpg
    Screenshot_2022-04-17-11-44-49-035_com.google.android.apps.docs.jpg
    73,6 KB · Görüntüleme: 45
@Berkay Davas
Hocam şimdi de geçen senenin 2. dönem vize soruları elimize geçti. Yardımcı olur musunuz acaba?

Bu sefer bayağı vaktinde attım.

Screenshot_2022-04-17-11-44-56-873_com.google.android.apps.docs.jpg
Bu sorunun cevabını anlatıyorum:

Parent(Ebeveyn)
chlid(miras alan~çocuk)

Başlangıç için önemli bir nokta hangisinin parent hangisinin child sınıf olduğunu anlamak. Bu nasıl anlaşılıyor ?
Bir sınıf oluşturulurken isminin yanına parantez açılıp içerisinde programcı tarafından önceden bu iş için yazılmış sınıf adı giriliyor.
Böylece oluşan sınıf parent sınıftan miras almış bir child sınıf olmuş oluyor.

Peki super().__init__() ne anlama geliyor ?
O da şöyle bir işlem yapıyor.
super adıyla bilinen sınıf senin parent sınıf olarak kullanıdığın sınıfın ta kendisi olmuş oluyor. super().__init__() diyerek parent sınıfının init methodunu almış oluyorsun.
super().__init__() yazdıktan sonra self anahtar kelimesi ile yazdığın her türetilmiş nesne, parent sınıftan bir değişken/field(alan) olmuş oluyor. Daha sonra modifiye etmek te programcıya kalıyor.

İki sınıfta da whoisThis methodu var. miras alan sınıfta bunu kendin yazıp sonuna da super().whoisThis()
yazdığında parent sınıftan aldığın whoisThis methodu çalışıp ekrana "bird" yazısı çıkacak.
Bunun önüne geçmek için o parent sınıfın whoisThis methodunu almak yerine biz kendimiz oluşturduğumuz whoisThis methodumuzu alıyoruz ve modifiye edip kullanıyoruz. İşte kalıtım burada anlaşılmış oluyor. Eğer üzerine işlev gerektirmeyen işlemler yapılacaksa kalıtım yapmanın pek bir anlamı kalmamış oluyor. Burada yine kişinin ne yapacağına bağlı olduğu anlamı çıkıyor.

Self anahtar kelimesi mecburi bir anahtar kelimesi değil. Yani illa "self" olmak zorunda değil, ama sınıflarda methodlara verilen ilk parametre herzaman kişi tarafından belirnen "bir şey" olmak zorunda. O parametreyi kullanarak sınıf içerisinde nesne türetiyoruz ve türetilen nesnelerde diğer methodlar da da kullanılabiliyor. Yani self anahtar kelimesi(veya herhangi bir şey) bu işe yarıyor.


(HENUZ NUMPY İLE UĞRAŞMADIĞIMDAN DİĞER SS TEKİ SORUYA BAKAMIYORUM)

Screenshot_2022-04-17-11-44-49-035_com.google.android.apps.docs.jpg
(Bu sayfadan anlatıyorum)
1- SORUNUN CEVABI: Fonksiyon, parametrelere verilen argumanlar doğrultusunda farklı işlemler yapan, veya parametre olmadan işlem yapan belirli bir kural doğrultusunda yazılan dilde fonksiyon olduğu belirtilen kod topluluğu.
İsimle başlayan bir örnek fonksiyon istemiş hemde numaranın son iki hanesini istemiş.
Python:
def arif_ryg(okul_no):
    sonuc = [int(i) for i in str(okul_no)] # alınan parametre integer bunu döngü ile işlem yapmak için stringe çevirip ardından tekrar integere çevirerek liste içerisine atıyorum
    for _ in range(5): # beş defa oluşturulan listenin son iki indeksindeki yani son iki basamaktaki sayıları döndüren minik döngü While döngüsüde kullanılabilirdi
        print(sonuc[len(sonuc)-2],sonuc[len(sonuc)-1])
arif_ryg(31840318) # Sıradan bir okul numarası

2- SORUNUN CEVABI:
Python:
def ogrenci(sorgu):
    bilgi = {
        "İsim"    : "Ahmet",
        "Soyisim" : "Çelik",
        "No"      : 12345,
        "Adres"   : "Bandırma Onyedi Eylül Üni"
    }
    if KeyError:
        return "Tanımlanmayan Bir Anahtar"
    return bilgi[sorgu]

print(ogrenci("İsim"))

3. sorudaki akış şemasını ve istenen a daki işlemi anlayamadığımdan onu ya başkasının çözmesi gerkiyor yada daha net bir şekilde çekilip bana anlatmanız gerekiyor.
 
Son düzenleme:
Python:
def hesapla(b:int):
    l = []
    for a in range(101):
        if b == (a**3)-(a**2):
            l.append(a)
    if l == []:
        print("Şartı Sağlayan Bir değer Yok")
    else:
        print(l)
hesapla() # parametreye integer bir değer girin

Anladığım kadarıyla böyle bir kod ortaya çıktı.
 
Son düzenleme:
Python:
def hesapla(b:int):
 l = []
 for a in range(101):
 if b == (a**3)-(a**2):
 l.append(a)
 if l == []:
 print("Şartı Sağlayan Bir değer Yok")
 else:
 print(l)
hesapla() # parametreye integer bir değer girin

Anladığım kadarıyla böyle bir kod ortaya çıktı.

[CODE title="python"]def Hesapla(b=48):
x=0
for a in range(1,99,1):
if (b == a**3-a**2):
print(a)
x+=1
else:
if x==0:
print("0-100 arasında öyle bir tam sayı değeri yoktur")

b = int(input())
Hesapla(b)

[/CODE]

Yurttaki arkadaşım bu şekilde kodu yazdı. Else altındaki "print("0-100 arasında öyle bir tam sayı değeri yoktur")" ifadesini Xli değer ile sürekli yazdırmasını engelledi. Hocama soracağım. Ona göre sizde geri dönüş yapacağım.
 
[CODE title="python"]def Hesapla(b=48):
def Hesapla(b=48):
x=0
for a in range(1,99,1):
if (b == a**3-a**2):
print(a)
x+=1
else:
if x==0:
print("0-100 arasında öyle bir tam sayı değeri yoktur")

b = int(input())
Hesapla(b)

[/CODE]

Yurttaki arkadaşım bu şekilde kodu yazdı. Else altındaki "print("0-100 arasında öyle bir tam sayı değeri yoktur")" ifadesini Xli değer ile sürekli yazdırmasını engelledi. Hocama soracağım. Ona göre sizde geri dönüş yapacağım.
Özür dilerim default değerinin 48 olduğunu unutmuşum. Benim yazdığım ile paralel bir kod. for döngüsündeki range sınıfındaki üçüncü parametre gereksiz. Zaten birer birer artarak gidecek.
 
Özür dilerim default değerinin 48 olduğunu unutmuşum. Benim yazdığım ile paralel bir kod. For döngüsündeki range sınıfındaki üçüncü parametre gereksiz. Zaten birer birer artarak gidecek.

Yani Xli ifadeden mi bahsediyorsunuz? Açıkçası ben pek anlamadım bu sorudan. Alttaki yazı sürekli çıkmasın diye bu şekil bir yol buldu.
 
Çok saçma sorular.
Programlama ile ilgili sınavlar lab şeklinde yapılması çok daha mantıklı.
Kağıt üzerinde kod mu yazılır Allah için.
İleriki iş hayatında kodları kağıda yazacağız zaten.
Benim de dersler kağıt üzerinde oldu. Ben Ankara Üniversitesinde okuyorum. Türkiye`deki üniler ve hocalar(ortalama) gerçekten rezalet.

Bu sene Android dersi aldım. Adam anlatamıyor ama sınavı mükemmel bir şekilde yaptı. Vizeyi proje verdi. Finalde de 2 saatte verilen projenin yapılmasını istedi. İnternet serbest.
Programlama ile ilgili derslerin bu tarzda sınav olunması çok daha mantıklı.

Sinir oluyorum şu eğitim sistemine, kusura bakmayın.
Ben kodlamayı çalıştırınca alınan hatalar ile öğrendim. Sınavı kağıt üzerinde yapmaları çok saçma. Kod stüdyosunda denemesi serbest olmalıydı.
 
Yani Xli ifadeden mi bahsediyorsunuz? Açıkçası ben pek anlamadım bu sorudan. Alttaki yazı sürekli çıkmasın diye bu şekil bir yol buldu.

[CODE lang="python" title="Arkadaşının yazdığı kod"]def Hesapla(b=48):
x=0
for a in range(1,99,1):
if (b == a**3-a**2):
print(a)
x+=1
else:
if x==0:
print("0-100 arasında öyle bir tam sayı değeri yoktur")

b = int(input())
Hesapla(b)[/CODE]

[CODE lang="python" title="default değeri eklendiğinde benim kod"]def hesapla(b=48):
l = []
for a in range(101):
if b == (a**3)-(a**2):
l.append(a)
if l == []:
print("Şartı Sağlayan Bir değer Yok")
else:
print(l)
hesapla()[/CODE]
gördüğünüz üzere hiçbir fark yok ikisi de aynı.
Yalnızca arkadaşınız gereksiz olarak for döngüsündeki range sınıfının üçüncü parametresine 1 yazmış. bu üçüncü parametre kaçar kaçar ilerleyeceğini belirten fonksiyon default değeri zaten 1 yani 3. parametre verilmediği taktirde 1 olacak. Benim yazdığım kodu düzenleyip b parametresinin default argumanı 48 yaptığımızda ayrıyeten fonksiyona parametre vermemiş oluyoruz.

Son olarak yazdığım koddaki döngüde kullanılan range(101) şu anlama geliyor: 0-100 arasındaki sayılar
Arkadaşınız 1-98 arasındaki sayılarla işlem yapan bir döngü kurmuş.
Bizden istenen de 0-100 arasındaki sayılarla işlem yapması.
 
Son düzenleme:

Geri
Yukarı