16 Aralık 2024 Pazartesi

Programlama: Diller

A. GİRİŞ

(1) C programlama dilinin programlamaya giriş aşamasında öğretilmesinin sebepleri nelerdir?

  • Günümüzde yaygın olarak kullanılması
  • C++, C#, Java, Objective-C gibi dillerin atası olması.
  • FORTRAN
  • LISP
  • COBOL
  • ALGOL
  • Sözcüksel analiz
  • Sözdizim analizi
  • Anlambilim analizi
  • Kod üretme

(2) İlk elektrikli bilgisayar ne zaman yapılmıştır?

-1940

(3) 1940-1950 yılları arasında geliştirilen programlama dillerine örnek veriniz.

Plankalkül

ENIAC Coding System

C10

(4) 1950-1960 yılları arasında geliştirilmiş programlama dillerine örnek veriniz.

(5) Yapısal programlama, rekürsif algoritma gibi programlama paradigmalarının hayata geçirildiği dönem hangisidir?

-1960-1978 yılları arası

(6) 1960-1970 yılları arasında geliştirilen programlama dilleri hangileridir?

1962: Simula

1964: BASIC, PL/I

1968: Logo

1970: Pascal

(7) 1970-1980 yılları arasında geliştirilen programlama dilleri hangileridir?

1972: C, Prolog

1975: Scheme

1978: SQL

(8) Nesne tabanlı programlama hayatımıza ne zaman girmiştir?

-1980-1990 yılları arasında

(9) 1980-1990 yılları arasında geliştirilen programlama dilleri hangileridir?

1980: C++

1983: Ada

1985: Eiffel

1986: Erlang

1987: Perl

1988: Tcl

1989: FL

(10) 1990 sonrasında programlama dillerini ne biçimlendirmiştir?

-İnternet

(11) IDE nedir?

-Entegre geliştirme ortamları

(12) RAD nedir?

-Hızlı uygulama geliştirme

(13) 1990-2000 yılları arasında geliştirilen programlama dilleri hangileridir?

1990: Haskell

1991: Python, Java

1993: Ruby

1995: JavaScript, PHP

1997: Rebol

(14) 2000-2010 yılları arasında geliştirilen programlama dilleri hangileridir?

2001: C#

2002: F#

2003: Scala, Factor

2009: Go

(15) Implementation nedir?

-Gerçekleştirim.

(16) Floating-point nedir?

-Kayan nokta.

(17) Programlama dillerine yönelik değerlendirme kriterleri nelerdir?

Readability

Writability

Reliability

Cost

(18) Overall simplicity nedir?

-Overall simplicity genel basitliktir. Okunabilirlik için genel basitlik yaklaşımı önemlidir.

(19) Run-time nedir?

-Yürütme süresi.

(20) Taşınabilirlik nedir?

-Programların bir uygulamadan diğerine geçişlerinin kolay olmasına portability veya taşınabilirlik denir.

(21) Von Neumann darboğazı nedir?

-Bilgisayarın hafızası ve işlemcisi arasındaki bağlantı hızı bilgisayarın hızını belirler. Program yönergeleri genellikle bu bağlantı hızından çok daha hızlı bir şekilde çalıştırılır ve bu sebeple bilgisayarın hızı bir bottleneck (darboğaz) haline gelir. Bu durum Von Neumann darboğazı olarak adlandırılır ve bilgisayarın hızıyla ilgili temel sınırlama faktörüdür.

(22) Merkezi yapıyı değişkenler, atama ifadeleri ve iterasyonun oluşturduğu dillere ne denir?

-Emir belirten dillerde merkezi yapıyı değişkenler, atama ifadeleri ve iterasyon oluşturur. Örnek: C, Pascal.

(23) Verilen parametrelere fonksiyonları uygulayarak hesaplamalar yapma temeline dayanan dillere ne denir?

-Verilen parametrelere fonksiyonları uygulayarak hesaplamalar yapma temeline dayanan dillere fonksiyonel diller denir. Örnek: LISP, Scheme.

(24) Veri soyutlama ve kalıtım kavramlarının ön planda olduğu dillere ne denir?

-Veri soyutlama ve kalıtım kavramlarının ön planda olduğu dillere object-oriented veya nesne-yönelimli diller denir. Örnek: Java, C++

(25) Programlama dillerini gerçekleştirmek için belirlenen ana metotlar nelerdir?

derleme 

yorumlama

(26) Derlemenin dört fazı nelerdir?

(27) Parse tree nedir?

-ayrıştırma ağacı

(28) Derlenen program ile yorumlanan program arasındaki farklar nelerdir?

Derlenen programda çeviri vardır, yorumlanan program bir interpreter vasıtasıyla yorumlanır.

Yürütüm aşaması hataları kolaylıkla ve vakit kaybetmeden görüntülendiği için yorumlanan programın gerçekleştirimi derlenen programa göre daha kolaydır ancak daha yavaş çalışır. Yorumlanan program derlenen programdan 10-100 kat daha yavaştır.

(29) Derleyici ve yorumlayıcının birlikte kullanıldığı sisteme ne denir?

-Derleyici ve yorumlayıcının birlikte kullanıldığı sisteme hibrit gerçekleştirim sistemi denir. Bu sistemde yüksek seviyeli bir dille yazılan program kolayca yorumlanmasını sağlayacak orta-seviye bir dile çevrilir. Örnek: JIT gerçekleştirim sistemleri.

 (30) C, C++ ve C# dillerindeki aritmetik operatörleri yazınız.

+

-

*

/

%

(31) C, C++ ve C# dillerindeki aritmetik operatörlerini yazınız.

==

!=

>

>

>=

<=

32. Programlama alanları nelerdir?

bilimsel uygulamalar

iş uygulamaları

yapay zeka

sistem programlaması

web yazılımı


33. Dil değerleme kriterleri nelerdir?

okunabilirlik

yazılabilirlik

güvenilirlik

maliyet


34. Dil tasarımına etki eden faktörler nelerdir?

bilgisayar mimarisi

programlama metodolojileri


35. Yapılandırılmış programlama ne zaman önem kazandı?

Yapılandırılmış programlama 60'ların sonunda önem kazandı. 70'li yıllarda popülerleşti.


36. Ne zaman işlem tabanlı programlamadan veri tabanlı programlamaya geçildi?

70'lerin sonunda.


37. Nesne tabanlı programlama ne zaman başladı?

80'lerin ortalarında


38. Von Neumann mimarisinin programlama dillerine etkileri nelerdir?

i) Veri ve programlar bellekte saklanır. 

ii) Bellek CPU'dan ayrıdır.

iii) Komutlar ve veriler bellekten CPU'ya iletilir.

iv) Emir dilleri esas alınır. 


39. Programlama dili türleri nelerdir?

1. Emir dilleri

2. Fonksiyonel diller

3. Mantıksal diller

4. Hibrid programlama


40. Von Neumann dar boğazının sebebi nedir?

Program deyimlerinin hızının bağlantı hızından yüksek olması.


41. Bilimsel uygulamalar için kullanılan ilk başarılı programlama dili hangisidir?

FORTRAN


42. Web geliştirmede kullanılan en popüler işaretleme dili hangisidir?

HTML


43. Aşırı ortogonallik hangi sorunlara yol açar?

Dil karmaşık hâle gelebilir.

Hataların tespit edilmesi zorlaşabilir.

Geliştiriciyi yorabilir.


44. Nesne yönelimli programlama dillerinin üç temel özelliği nedir?

kapsülleme

kalıtım

çok biçimlilik


45. Nesne yönelimli programlamanın üç temel ilkesini destekleyen ilk dil hangisidir?

Simula 67


B. BÜYÜK PROGRAMLAMA DİLLERİNİN EVRİMİ

1. Plankalkül ne anlama gelir? Plankalkül’ü kim geliştirmiştir?

Cevap: Plankalkül, "Planlama Hesaplaması" anlamına gelir. Alman bilgisayar bilimcisi Konrad Zuse tarafından geliştirilmiştir.


2. Plankalkül'deki en basit veri tipi neydi?

Cevap: Plankalkül'deki en basit veri tipi tek bitlik veri tipiydi (boolean mantık değerleriyle ilişkiliydi).


3. Plankalkül döngüleri (iterasyonları) nasıl uyguladı?

Cevap: Plankalkül, döngüleri yineleme (recursion) ve döngü kontrol ifadeleriyle uygulamıştır.


4. Speedcoding, 1950'lerin başlarındaki bilgisayar donanımlarının iki büyük eksikliğini aşmak için icat edilmiştir. Bu eksiklikler nelerdi?

Cevap:

Yetersiz bellek kapasitesi

Yavaş giriş-çıkış işlemleri


5. Short Code’da kullanılan tekniğe neden otomatik programlama denilmiştir?

Cevap: Çünkü manuel makine kodu yazma zorunluluğunu ortadan kaldırarak, yazılım geliştirme sürecini otomatikleştirmiştir.


6. IBM 704 hangi yılda piyasaya sürüldü?

Cevap: IBM 704, 1954 yılında piyasaya sürüldü.


7. Fortran nerede ve kim tarafından geliştirildi?

Cevap: Fortran, IBM şirketinde John Backus liderliğindeki bir ekip tarafından geliştirildi.


8. Fortran hangi çevresel kısıtlamalar altında geliştirildi?

Cevap: Fortran, düşük bellek kapasitesi ve sınırlı işlem gücü gibi donanım kısıtlamaları altında geliştirildi.


9. Fortran I’de değişkenler için veri tipleri nasıl belirleniyordu?

Cevap: Değişkenlerin veri tipleri, ilk harflerine göre belirleniyordu. Örneğin, "I" ile "N" harfleri arasında başlayan değişkenler tamsayıydı.


10. Fortran II’ye eklenen en önemli özellik neydi ve bu özellik Fortran IV’ü nasıl etkiledi?

Cevap: En önemli ekleme, alt programların (subroutines) desteklenmesiydi. Bu, Fortran IV’ün daha modüler hale gelmesini sağladı.


11. Fortran 90 hangi sözdizimsel değişiklikleri içeriyordu?

Cevap:

Serbest biçimli kodlama (free-form syntax)

Dizi işleme (array processing)

Yeni döngü yapıları (DO WHILE gibi)

12. Fortran’ın hangi sürümü nesne yönelimli programlamayı ilk kez destekledi?

Cevap: Fortran 2003, nesne yönelimli programlamayı ilk destekleyen sürümdü.


13. Fortran’ın hangi sürümü ilk kez yerel kapsamları (local scopes) destekledi?

Cevap: Fortran 77, yerel kapsamları destekledi.


14. Fortran Liste İşleme Dili (FLPL), neden Fortran’a bir genişletme olarak tasarlandı ve uygulandı?

Cevap: FLPL, Fortran kullanıcılarının liste işleme yeteneklerine kolayca erişebilmesi için bir genişletme olarak tasarlanmıştır.


15. Lisp nerede ve kim tarafından geliştirilmiştir?

Cevap: Lisp, MIT’de John McCarthy tarafından geliştirilmiştir.


16. Scheme ve Metalanguage (ML) birbirinden hangi yönlerde farklıdır?

Cevap:

Scheme, minimal ve basit bir tasarıma odaklanırken,

ML, güçlü tür sistemi ve desen eşleme (pattern matching) ile ön plana çıkar.


17. F#’ın onu benzersiz kılan özellikleri nelerdir?

Cevap:

Fonksiyonel programlama ile nesne yönelimli programlama özelliklerini birleştirir.

.NET platformunda çalışarak güçlü bir kütüphane desteği sunar.

Tip çıkarımı (type inference) ile daha az kod yazmayı mümkün kılar.


18. GAMM ve ACM tarafından geliştirilen yeni dilin hedefleri nelerdi?

Cevap: Hedefler, evrensel bir algoritmik dil oluşturmak ve bilimsel hesaplamalar için platform bağımsız bir standardı sağlamaktı.


19. Veri tipi kavramı ALGOL’un hangi sürümünde ortaya çıktı?

Cevap: ALGOL 60 sürümünde veri tipi kavramı tanıtıldı.


20. ALGOL 58’e yapılan en önemli değişiklikler nelerdi?

Cevap:

Blok yapılarının eklenmesi

Daha güçlü bir sentaks ve dil mantığı geliştirilmesi


21. ALGOL giriş ve çıkış ifadeleriyle ilgili ne gibi bir değişiklik sağladı?

Cevap: ALGOL, giriş ve çıkış işlemlerini standartlaştırmak yerine, bu ifadelerin tanımını uygulamalara bıraktı.


22. COBOL hangi programlama diline dayanıyordu?

Cevap: COBOL, Flow-Matic diline dayanıyordu.


23. Basic tasarım süreci hangi yıl başladı?

Cevap: Basic tasarım süreci 1963 yılında başladı.


24. COBOL, değişken adlarının gerçekten anlamlı olmasını nasıl sağlar?

Cevap: COBOL, uzun ve açıklayıcı değişken adlarına izin vererek değişkenlerin anlamlı olmasını sağlar.


25. COBOL’un erken dönemdeki başarısından (kullanım yaygınlığı açısından) en çok hangi organizasyon sorumluydu?

Cevap: Amerikan Savunma Bakanlığı (Department of Defense) COBOL’un başarısında kritik rol oynadı.


26. Basic dilinin geliştirilmesinin ardındaki amaçlar nelerdi?

Cevap:

Programlamayı yeni başlayanlar için kolaylaştırmak

Eğitim amaçlı bir dil geliştirmek


27. Alan Cooper neden “Visual Basic’in babası” olarak bilinir?

Cevap: Alan Cooper, Visual Basic’in temelini oluşturan orijinal prototipi geliştirdiği için bu unvanla anılır.


28. PL/I hangi olanakları sağladı?

Cevap:

Bilimsel ve ticari hesaplamaların birleştirilmesi

Eşzamanlı programlama desteği

Güçlü hata yönetimi mekanizmaları


29. APL ve SNOBOL’un paylaştığı iki temel özellik nedir?

Cevap:

Dinamik veri tipleri

Yüksek düzeyde ifade gücü


30. SIMULA 67’nin özelliklerinden hangileri bugün nesne yönelimli dillerde önemlidir?

Cevap:

Sınıflar ve nesneler

Kalıtım

31. ALGOL 68’de tanıtılan ancak genellikle Pascal’a atfedilen veri yapılandırma yeniliği nedir?

Cevap: Kayıtlar (records).


32. ALGOL 60’ın temel eksikliği neydi?

Cevap: Standart bir giriş-çıkış mekanizmasının olmaması.


33. 1970'lerde programlama öğretiminde hangi dil kullanıldı?

Cevap: Pascal.


34. C’deki hangi operatörler ALGOL 68'deki benzer operatörlerden modellenmiştir?

Cevap:

++ (arttırma) ve -- (azaltma) operatörleri

Atama ve mantıksal ifadeler


35. C neden hem sevilir hem de sevilmez?

Cevap:

Sevilir: Güçlü, hızlı ve esnek olduğu için.

Sevilmez: Karmaşık sentaksı ve güvenlik eksiklikleri nedeniyle.


36. Prosedürel bir dil nedir?

Cevap: Prosedürel diller, programların adım adım talimatlarla yazıldığı dillerdir. Örnek: C, Pascal.


37. Prolog veritabanını dolduran iki tür ifade nedir?

Cevap:

Olgular (facts)

Kurallar (rules)

38. Ada dili hangi temel uygulama alanı için tasarlanmıştır?

Cevap: Savunma sistemleri ve kritik öneme sahip yazılımlar için tasarlanmıştır.


39. Ada dilindeki eşzamanlı program birimlerine ne denir?

Cevap: Görevler (tasks).


40. C’nin ALGOL 68’den etkilendiğini gösteren mekanizmalar nelerdir?

Cevap:

Blok yapısı

Dinamik bellek yönetimi

Operatör tasarımı

41. Ada 95 neden popülerliğini kaybetti?

Cevap: Karmaşık olması ve diğer dillerin (C++, Java) daha fazla yaygınlık kazanması nedeniyle.


42. C++’da operatör aşırı yüklemesi (operator overloading) ne anlama gelir?

Cevap: Aynı operatörün, farklı veri tipleri için farklı anlamlara gelmesi.


43. C++ sürüm 3.0’ın sunduğu ek özellik neydi?

Cevap: Şablonlar (templates).


44. Objective-C, metot çağrılarının sentaksını hangi dilden ödünç almıştır?

Cevap: Smalltalk.


45. Objective-C’nin temel uygulama alanı nedir?

Cevap: MacOS ve iOS uygulamaları geliştirmek.


46. Ada ve COBOL dillerinin ortak yönleri nelerdir?

Cevap:

Her ikisi de açıklayıcı sözdizimi sunar.

Büyük sistemler için tasarlanmışlardır.


47. Java’da "thread" nedir?

Cevap: Eşzamanlı işlemleri gerçekleştiren hafif program birimleridir.


48. Java’daki hangi özellik JavaScript’te en belirgin şekilde görülür?

Cevap: Platform bağımsızlık.


49. PHP ve JavaScript’in tip sistemi, Java’nın tip sisteminden nasıl farklıdır?

Cevap: PHP ve JavaScript, zayıf tipli dillerdir (değişkenlerin türleri otomatik olarak belirlenir), Java ise katı tipli bir dildir.

50. C#, C, C++ veya Java’da bulunmayan hangi dizi yapısını içerir?
Cevap: Çok boyutlu diziler (multidimensional arrays) ve jagged arrays (düzensiz diziler).
51. Perl’in dizilerinin özellikleri nelerdir?
Cevap:
Dinamik boyutlandırma
Heterojen veri saklama (farklı türden veriler bir arada tutulabilir)
Çok çeşitli dizinleme ve erişim yöntemleri
52. JavaScript en yaygın olarak hangi uygulama alanında kullanılır?
Cevap: Web geliştirme (özellikle istemci tarafı programlama).
53. JavaScript ve PHP kullanımları açısından nasıl ilişkilidir?
Cevap:
JavaScript: İstemci tarafında çalışır (tarayıcı).
PHP: Sunucu tarafında çalışır.
İkisi birlikte web uygulamalarında tam yığın geliştirme sağlar.
54. PHP’nin birincil veri yapısı, diğer dillerden hangi iki veri yapısının birleşimidir?
Cevap: Diziler (arrays) ve hash tabloları (associative arrays).
55. Python, diziler yerine hangi veri yapısını kullanır?
Cevap: Listeler (lists).
56. Ruby, Smalltalk ile hangi özelliği paylaşır?
Cevap: Her şeyin bir nesne olması (Ruby’de tüm veri türleri nesnedir).
57. Ruby’nin aritmetik operatörlerini diğer dillerin operatörlerinden farklı kılan özellik nedir?
Cevap: Ruby’de aritmetik operatörler, yeniden tanımlanabilir (overloadable) ve metot olarak çalışır.
58. Lua ile JavaScript arasındaki benzerlik nedir?
Cevap: Her ikisi de hafif (lightweight) ve gömülebilir (embeddable) dillerdir.
59. Lua genellikle nasıl çalıştırılır? Derlenmiş mi, tamamen yorumlanmış mı, yoksa hibrit yorumlanmış mı?
Cevap: Lua, hibrit yorumlanmış (impurely interpreted) bir dildir.
60. C#’ın, C dilindeki switch ifadesine yaptığı değişiklik hangi eksikliği giderir?
Cevap:
Switch ifadelerinin tüm veri türlerini desteklemesi.
Fall-through davranışının varsayılan olarak engellenmesi.
61. C# öncelikli olarak hangi platformda kullanılır?
Cevap: Microsoft .NET Framework.
62. Bir XSLT işlemcisine verilen girdiler nelerdir?
Cevap:
XML belgesi
XSLT şablonu
63. Bir XSLT işlemcisinin çıktısı nedir?
Cevap: Dönüştürülmüş bir XML belgesi veya HTML belgesi.
64. JSTL’in hangi elemanı bir alt programa (subprogram) benzer?
Cevap: Özel etiketler (custom tags).
65. JSP işlemcisi bir JSP belgesini neye dönüştürür?
Cevap: Java Servlet.
66. Servlets nerede çalıştırılır?
Cevap: Web sunucusunda (örneğin Apache Tomcat gibi bir servlet konteynerinde).
1. Fortran tasarımcıları Plankalkül’ü tanıyor olsalardı, Plankalkül’ün hangi özellikleri Fortran 0 üzerinde en büyük etkiyi yapmış olabilirdi?
Cevap:
Güçlü veri yapıları: Plankalkül’ün matris ve karmaşık veri türleri gibi özellikleri, Fortran 0’da daha gelişmiş veri işleme olanakları sağlayabilirdi.
Algoritmik ifade yetenekleri: Plankalkül’ün matematiksel algoritmaları ifade edebilme yeteneği, Fortran’ın hesaplama gücünü artırabilirdi.
Kontrol yapıları: Plankalkül’ün döngü ve koşul ifadeleri, Fortran’ın daha esnek bir programlama dili olmasını sağlayabilirdi.
2. Backus’un 701 Speedcoding sistemi ile modern bir programlanabilir el hesap makinesinin yeteneklerini karşılaştırın.
Cevap:
701 Speedcoding sistemi:
Döngüler ve koşullu dallanma gibi temel programlama yapıları içerir.
Daha geniş bir hesaplama gücüne sahiptir, ancak yavaştır ve sınırlı bellek kapasitesine sahiptir.
Modern el hesap makineleri:
Yüksek hızda işlem yapabilir, ancak genellikle daha sınırlı programlama özelliklerine sahiptir.
Grafik çizimi ve daha gelişmiş kullanıcı arayüzü gibi ek özelliklere sahiptir.
Karşılaştırıldığında, Speedcoding sistemi genel amaçlı hesaplama için daha uygunken, modern hesap makineleri kullanıcı dostudur ve belirli görevlerde daha etkilidir.
3. Grace Hopper ve ekibi tarafından tasarlanan A-0, A-1 ve A-2 sistemlerinin kısa tarihçesini yazın.
Cevap:
A-0 sistemi (1952): İlk otomatik programlama sistemi olarak tasarlandı. Bu sistem, makine kodlarını otomatik olarak birleştirerek programcıların işini kolaylaştırdı.
A-1 sistemi: A-0’ın geliştirilmiş versiyonudur. Simge tabanlı programlama dili kullanımıyla programlama süreçlerini daha kullanıcı dostu hale getirdi.
A-2 sistemi: İlk ticari derleyici olarak kabul edilir ve birçok ek özellik ile geliştirildi.
Grace Hopper’ın bu sistemleri, modern derleyicilerin temellerini oluşturdu.
4. Fortran 0’ın olanaklarını Laning ve Zierler sistemi ile karşılaştırın.
Cevap:
Fortran 0:
Daha güçlü matematiksel ifadeler ve döngü yapıları içerir.
Daha verimli çalışır.
Laning ve Zierler sistemi:
Daha basit ve daha sınırlıdır.
Matematiksel ifadeler için doğrudan makine dili kullanımına dayanır.
Fortran 0, özellikle bilimsel hesaplamalar için daha gelişmiş bir çözüm sunmuştur.
5. ALGOL tasarım komitesinin üç orijinal hedefinden hangisi o dönemde başarması en zor olan hedefti?
Cevap:
Taşınabilirlik (portability): O dönemdeki bilgisayar sistemlerinin donanım bağımlılığı nedeniyle, bir programın farklı sistemlerde çalışmasını sağlamak oldukça zordu.
6. Lisp programlarında en yaygın sözdizim hatası ne olabilir?
Cevap:
Parantez dengesi: Lisp’teki kodların doğru çalışması için açılan ve kapanan parantezlerin dengede olması gerekir. Bu yüzden en sık yapılan hata, parantezlerin eksik veya fazla olmasıdır.
7. Lisp neden saf bir fonksiyonel dil olarak başlamışken zamanla daha fazla imperatif özellik kazandı?
Cevap:
Lisp, kullanımını yaygınlaştırmak ve gerçek dünya problemlerini daha etkili çözebilmek için imperatif özellikler ekledi. Bunun nedenleri:
Verimlilik: Bellek yönetimi ve işlem hızını artırmak için.
Uygulama genişliği: Daha geniş bir kullanıcı kitlesine hitap etmek için imperatif paradigmalar eklendi.
Gerçek dünya gereksinimleri: IO işlemleri ve durum değişikliklerini desteklemek.
8. ALGOL 60’ın çok yaygın bir dil olmamasının, size göre en önemli üç nedeni nedir?
Cevap:
Görsel kullanıcı dostu eksikliği: Kodun okunabilirliği ve kullanıcı deneyimi zayıftı.
Standart kütüphane eksikliği: ALGOL 60’ın önceden tanımlanmış kütüphaneleri yoktu.
Donanım bağımlılığı: Taşınabilirlik eksikliği, dilin farklı sistemlerde kullanımını zorlaştırdı.
9. COBOL, Fortran ve ALGOL’un aksine neden uzun değişken adlarına izin verdi?
Cevap:
COBOL, iş dünyası kullanıcıları için tasarlanmıştı. Uzun ve anlamlı değişken adları, kodun okunabilirliğini ve anlaşılabilirliğini artırıyordu. Bu, iş raporları ve finansal işlemler gibi uygulamalarda büyük bir avantajdı.
10. IBM’in PL/I’ı geliştirmesindeki ana motivasyonu neydi?
Cevap:
IBM, hem bilimsel hem de ticari programlama ihtiyaçlarını tek bir dilde birleştirmek istedi. PL/I, farklı kullanıcı gruplarını hedefleyerek, karmaşık uygulamaları daha kolay geliştirmeyi amaçladı.
11. IBM’in 1964’te PL/I geliştirme kararı, bilgisayarların ve dillerin tarihine göre doğru bir varsayım mıydı?
Cevap:
Kısmen doğruydu. PL/I, birçok özellik sunduğu için yaygınlaştı, ancak karmaşıklığı nedeniyle bazı kullanıcılar tarafından eleştirildi. Zamanla, daha basit ve özel diller popüler hale geldi.
12. Programlama dili tasarımında ortogonalite kavramını kendi kelimelerinizle açıklayın.
Cevap:
Ortogonalite, bir dildeki özelliklerin birbiriyle bağımsız olarak çalışabilmesini ifade eder. Örneğin, bir özelliği kullanırken diğer özelliklerle çakışma olmaması, dilin öğrenimini ve kullanımını kolaylaştırır.
13. PL/I neden ALGOL 68’den daha yaygın kullanıldı?
Cevap:
Karmaşıklık seviyesi: PL/I daha kolay öğrenilebilirdi.
Ticari destek: IBM gibi büyük şirketlerin desteği, PL/I’ın popülerliğini artırdı.
Kapsamlı uygulamalar: PL/I, ticari ve bilimsel projelerde daha esnek bir seçenek sundu.
14. Tipten bağımsız (typeless) bir dil fikrine yönelik argümanlar nelerdir?
Lehte:
Daha hızlı prototip geliştirme.
Esneklik sağlar.
Aleyhte:
Tip hatalarının tespiti zorlaşır.
Performans kaybı ve güvenlik sorunları olabilir.
15. Prolog dışında başka mantık programlama dilleri var mı?
Cevap:
Evet. Örneğin, Mercury ve Datalog, mantık programlama paradigmalarını kullanır.
16. Karmaşık dillerin tehlikeli olduğu ve tüm dillerin küçük ve basit tutulması gerektiği görüşü hakkında ne düşünüyorsunuz?
Cevap:
Bu yaklaşım, güvenlik ve kullanım kolaylığı açısından avantajlıdır. Ancak, karmaşık problemlerin çözümü için daha kapsamlı dillerin gerektiği durumlar da vardır.
17. Komite tarafından dil tasarımı iyi bir fikir mi? Destekleyin.
Cevap:
Olumlu yönler: Farklı bakış açılarıyla dengeli bir tasarım yapılabilir.
Olumsuz yönler: Süreç yavaş ilerleyebilir ve kararlar üzerinde uzlaşmak zor olabilir.
18. Programlama dillerindeki değişiklikler için ne tür kısıtlamalar uygundur?
Cevap:
Geriye dönük uyumluluk korunmalıdır.
Yeni özellikler, dili gereksiz yere karmaşık hale getirmemelidir.
Fortran örneği: Fortran, eski kodların çalışabilirliğini sürdürerek evrimini başarıyla devam ettirdi.
19. Programlama dillerindeki büyük gelişmeleri, ne zaman gerçekleştiğini, hangi dilde ortaya çıktığını ve geliştiricilerini içeren bir tablo oluşturun.
Cevap:

YılGelişmeDilGeliştirici
1957İlk yüksek seviyeli dilFortranIBM (Backus ekibi)
1960Blok yapısıALGOL 60ALGOL Komitesi
1983Nesne yönelimli programlamaC++Bjarne Stroustrup


20. Microsoft ve Sun arasındaki J++ ve C#, Java ile ilgili anlaşmazlıkları analiz edin.
Cevap:
Microsoft, Java’nın yeteneklerini genişletmek için J++’ı geliştirdi ancak Sun’ın lisans ihlalleri iddiaları nedeniyle bu proje durduruldu. Daha sonra Microsoft, C# dilini geliştirerek Java’ya alternatif bir yol izledi.
21. Scripting dillerindeki veri yapılarına geleneksel dizilerin yerine geçen gelişmeleri açıklayın.
Cevap:
Sözlükler (dictionaries) ve hash tabloları, dizilere daha esnek bir alternatif sağladı.
Python ve PHP gibi dillerde, karmaşık veri yapılarını kolayca manipüle etmek için bu özellikler geliştirildi.
22. Neden saf yorumlama (pure interpretation) bazı script dilleri için kabul edilebilir bir yöntemdir?
Cevap:
Hızlı prototipleme: Kod doğrudan çalıştırılabilir.
Platform bağımsızlık: Kodun farklı sistemlerde çalışması kolaydır.
23. Neden yeni script dilleri, yeni derlenen dillere göre daha sık ortaya çıkıyor?
Cevap:
Script dilleri, belirli ihtiyaçları hızlı ve basit bir şekilde karşılar.
Geliştirme süreçleri daha kısa ve daha az karmaşıktır.
24. Bir işaretleme-programlama hibrit dilinin genel bir tanımını yapın.
Cevap:
Bu diller, işaretleme (markup) ve programlama özelliklerini birleştirir. Örneğin, HTML ile JavaScript’in birleşimi, hem yapı hem de dinamik davranış sağlar.
1. Kayıtların (records) programlama dilindeki değerini anlamak için, öğrencilerin bilgilerini saklayan (isim, yaş, GPA (float olarak), sınıf seviyesi (örneğin, "freshman")) bir struct dizisi kullanan bir program yazın. Ayrıca, aynı programı struct kullanmadan yazın.
C-based language (C): Struct Kullanarak Program
#include <stdio.h>
#define NUM_STUDENTS 3
typedef struct {
    char name[50];
    int age;
    float gpa;
    char gradeLevel[20];
} Student;
int main() {
    Student students[NUM_STUDENTS] = {
        {"Alice", 20, 3.8, "Freshman"},
        {"Bob", 21, 3.5, "Sophomore"},
        {"Charlie", 22, 3.9, "Junior"}
    };
    for (int i = 0; i < NUM_STUDENTS; i++) {
        printf("Name: %s, Age: %d, GPA: %.2f, Grade Level: %s\n",
               students[i].name, students[i].age, students[i].gpa, students[i].gradeLevel);
    }
    return 0;
}
Struct Kullanmadan Program
#include <stdio.h>
#define NUM_STUDENTS 3
int main() {
    char names[NUM_STUDENTS][50] = {"Alice", "Bob", "Charlie"};
    int ages[NUM_STUDENTS] = {20, 21, 22};
    float gpas[NUM_STUDENTS] = {3.8, 3.5, 3.9};
    char gradeLevels[NUM_STUDENTS][20] = {"Freshman", "Sophomore", "Junior"};
    for (int i = 0; i < NUM_STUDENTS; i++) {
        printf("Name: %s, Age: %d, GPA: %.2f, Grade Level: %s\n",
               names[i], ages[i], gpas[i], gradeLevels[i]);
    }
    return 0;
}
Not: Structs kullanımı, verilerin bir arada saklanmasını ve düzenlenmesini kolaylaştırır. Struct kullanılmadığında, veriler ayrı ayrı dizilerde saklanmak zorunda kalır, bu da kodun karmaşıklığını artırır.
2. Rekürsiyonun (recursion) programlama dilindeki değerini anlamak için, önce rekürsiyon kullanarak, ardından rekürsiyon kullanmadan quicksort algoritmasını uygulayan bir program yazın.
Rekürsiyon Kullanarak Quicksort
#include <stdio.h>
void quicksort(int arr[], int low, int high) {
    if (low < high) {
        int pivot = arr[high];
        int i = low - 1;
        for (int j = low; j < high; j++) {
            if (arr[j] <= pivot) {
                i++;
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        int temp = arr[i + 1];
        arr[i + 1] = arr[high];
        arr[high] = temp;
        int pi = i + 1;
        quicksort(arr, low, pi - 1);
        quicksort(arr, pi + 1, high);
    }
}
int main() {
    int arr[] = {10, 7, 8, 9, 1, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    quicksort(arr, 0, n - 1);
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}
Rekürsiyon Kullanmadan Quicksort
#include <stdio.h>
void quicksort(int arr[], int low, int high) {
    int stack[high - low + 1];
    int top = -1;
    stack[++top] = low;
    stack[++top] = high;
    while (top >= 0) {
        high = stack[top--];
        low = stack[top--];
        int pivot = arr[high];
        int i = low - 1;
        for (int j = low; j < high; j++) {
            if (arr[j] <= pivot) {
                i++;
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        int temp = arr[i + 1];
        arr[i + 1] = arr[high];
        arr[high] = temp;
        int pi = i + 1;
        if (pi - 1 > low) {
            stack[++top] = low;
            stack[++top] = pi - 1;
        }
        if (pi + 1 < high) {
            stack[++top] = pi + 1;
            stack[++top] = high;
        }
    }
}
int main() {
    int arr[] = {10, 7, 8, 9, 1, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    quicksort(arr, 0, n - 1);
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}
Not: Rekürsiyon, kodu daha okunabilir hale getirir, ancak derinlik artırıldığında yığın taşması (stack overflow) riski taşır. Rekürsiyonsuz yöntemler genellikle daha fazla bellek kullanır.
3. Sayma döngülerinin (counting loops) değerini anlamak için, önce matris çarpımını sayma döngüleri kullanarak, ardından yalnızca mantıksal döngüler (while gibi) kullanarak uygulayan bir program yazın.
Sayma Döngüleri ile Matris Çarpımı
#include <stdio.h>
#define SIZE 2
int main() {
    int A[SIZE][SIZE] = {{1, 2}, {3, 4}};
    int B[SIZE][SIZE] = {{5, 6}, {7, 8}};
    int C[SIZE][SIZE] = {0};
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            for (int k = 0; k < SIZE; k++) {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            printf("%d ", C[i][j]);
        }
        printf("\n");
    }
    return 0;
}
Mantıksal Döngüler ile Matris Çarpımı
#include <stdio.h>
#define SIZE 2
int main() {
    int A[SIZE][SIZE] = {{1, 2}, {3, 4}};
    int B[SIZE][SIZE] = {{5, 6}, {7, 8}};
    int C[SIZE][SIZE] = {0};
    int i = 0, j = 0, k = 0;
    while (i < SIZE) {
        while (j < SIZE) {
            while (k < SIZE) {
                C[i][j] += A[i][k] * B[k][j];
                k++;
            }
            k = 0;
            j++;
        }
        j = 0;
        i++;
    }
    for (i = 0; i < SIZE; i++) {
        for (j = 0; j < SIZE; j++) {
            printf("%d ", C[i][j]);
        }
        printf("\n");
    }
    return 0;
}
Not: Sayma döngüleri (for) daha anlaşılır ve belirgin bir yapı sunar. Mantıksal döngüler (while) esneklik sağlar, ancak daha karmaşık olabilir.

Hiç yorum yok:

Yorum Gönder