pcbway

Elon Musk'tan Seçme Soru ! ( Bilen Çıkar mı ? )

Başlatan Furkan KELEŞOĞLU, 06 Ağustos 2019, 15:35:57

Furkan KELEŞOĞLU

Elon Musk ın iş alımını yaparken mühendislere sorduğu sorulardan 1 Tanesi. Sorunun Cevabını Verebilecek olan var mı ?

Diyelim ki değişkenini 2 olarak belirlediğiniz bir 'Var' değeri olsun. İlk satıra 'var++' yazdığınızda karşınıza ne çıkar? Bir sonraki satıra '++var' yazarsanız ne görürsünüz? 'Var' son değeri ne olur?

Edit : Sorunun Cevabını  bende bilmiyorum sadece mantık yürüttüm ve bir cevaba vardım. fakat sizlerin cevabı ne merak ediyorum. Benimle aynı sonuca varılmaz ise Kendi cevabımı açıklayacağım :)
Mekatronik Teknikeri.
Elektrik-Elektronik Teknisyeni.

taydin

Kullanılan operatörlerdan C veya C++ dileri olabileceği anlaşılıyor. Eğer bu dillerden birisi ise, bunlarda büyük/küçük harf ayrımı vardır, dolayısıyla o yazılan program derleme hatası ile sonuçlanır :D  Ortada program falan olmadığına göre değişken değerinden de bahsedilemez.   
Elektrik sayacı döndürücüsü ...

Furkan KELEŞOĞLU

Alıntı yapılan: taydin - 06 Ağustos 2019, 15:53:48Kullanılan operatörlerdan C veya C++ dileri olabileceği anlaşılıyor. Eğer bu dillerden birisi ise, bunlarda büyük/küçük harf ayrımı vardır, dolayısıyla o yazılan program derleme hatası ile sonuçlanır :D Ortada program falan olmadığına göre değişken değerinden de bahsedilemez.   

Kısa zamanda Doğru Cevap Geldi @taydin  Abimizden :D
Mekatronik Teknikeri.
Elektrik-Elektronik Teknisyeni.

taydin

Ben de yeri gelmişken bir soru sorayım. Bunun gibi bir soru, C ile ilgili bir sertifikasyon testinde sorulmuştu.

Aşağıda iki tane basit C programı var. Bunları çalıştırdığımızda ekrana ne yazılır? Programlar doğru çalışıyor mu? Çalışıyor diyorsanız, neden? Çalışmıyor diyorsanız, gene nedenini açıklayınız.

#include <stdio.h>

int buffer[5] = {1, 2, 3, 4, 5};

int main()
{
   int toplam = 0;
   unsigned int i;

   for (i = 0; i <= 5; i++)
   {
      toplam += buffer[i];
   }

   printf("toplam = %d\n", toplam);
}

#include <stdio.h>

int main()
{
   int buffer[5] = {1, 2, 3, 4, 5};
   int toplam = 0;
   unsigned int i;

   for (i = 0; i <= 5; i++)
   {
      toplam += buffer[i];
   }

   printf("toplam = %d\n", toplam);
}
Elektrik sayacı döndürücüsü ...

fatih343

Alıntı yapılan: taydin - 06 Ağustos 2019, 16:42:21Ben de yeri gelmişken bir soru sorayım. Bunun gibi bir soru, C ile ilgili bir sertifikasyon testinde sorulmuştu.

Aşağıda iki tane basit C programı var. Bunları çalıştırdığımızda ekrana ne yazılır? Programlar doğru çalışıyor mu? Çalışıyor diyorsanız, neden? Çalışmıyor diyorsanız, gene nedenini açıklayınız.

#include <stdio.h>

int buffer[5] = {1, 2, 3, 4, 5};

int main()
{
   int toplam = 0;
   unsigned int i;

   for (i = 0; i <= 5; i++)
   {
      toplam += buffer[i];
   }

   printf("toplam = %d\n", toplam);
}

#include <stdio.h>

int main()
{
   int buffer[5] = {1, 2, 3, 4, 5};
   int toplam = 0;
   unsigned int i;

   for (i = 0; i <= 5; i++)
   {
      toplam += buffer[i];
   }

   printf("toplam = %d\n", toplam);
}


indexten kaynaklı bir problem var. 5 dizi uzunluğu olan bir değişken dizisinde 6 index sayılmış :)
nasıl tepki vereceğini gerçekten bilmiyordum online compiler ile test ettim. main dışında tanımlanırsa buffer olmayan indexlere 0 değeri veriyor. ama main içerisinde saçmalık var tam anlamadım o olayı. bazı indexler(artık olanlar) 0 bazıları saçma sapan değerler alıyor
Ne kadar ekmek o kadar köfte

taydin

06 Ağustos 2019, 16:58:08 #5 Son düzenlenme: 06 Ağustos 2019, 17:02:21 taydin
Alıntı yapılan: fatih343 - 06 Ağustos 2019, 16:55:12indexten kaynaklı bir problem var. 5 dizi uzunluğu olan bir değişken dizisinde 6 index sayılmış :)
nasıl tepki vereceğini gerçekten bilmiyordum online compiler ile test ettim. main dışında tanımlanırsa buffer olmayan indexlere 0 değeri veriyor. ama main içerisinde saçmalık var tam anlamadım o olayı. bazı indexler(artık olanlar) 0 bazıları saçma sapan değerler alıyor

Evet her iki programda da index hatası var. Ama buffer global olunca bu programda bir soruna sebep olmuyor, çünkü linker global dataları 0 ile dolduruyor. buffer stack üzerinde olunca da içinde rastgele değerler oluyor.

yani iki program da problemli. Aslında çalışıyor gibi görünen program daha tehlikeli :) En azından öteki bariz bir şekilde hatayı belli ediyor.

Eğer buffer global olan ilk programda buffer'dan sonra değişken olsaydı ve biz de buffer'dan okumak yerine yazıyor olsaydık, sonraki değişken bozulacaktı. Birçok sistemin hacklenmesine sepeb olan güvenlik açıkları işte bu tip sorunlu programlar nedeniyle oluyor.
Elektrik sayacı döndürücüsü ...

Furkan KELEŞOĞLU

#include <stdio.h>

int buffer[5] = {0, 1, 2, 3, 4};

int toplam = 0;
unsigned int i;


int main()
{
     
for (i = 0; i < (sizeof(buffer)/sizeof(int)) ; i++)
   {
      toplam += buffer[i];
   }

   printf("toplam = %d\n",toplam);
}

Bunu bir deneyin bakalım başka sonuc verecekmi ? bufferin icini taşırın veya az yazın bakalım ne olacak ? :D
Mekatronik Teknikeri.
Elektrik-Elektronik Teknisyeni.

fatih343

Alıntı yapılan: Furkan41 - 06 Ağustos 2019, 20:49:01#include <stdio.h>

int buffer[5] = {0, 1, 2, 3, 4};

int toplam = 0;
unsigned int i;


int main()
{
     
for (i = 0; i < (sizeof(buffer)/sizeof(int)) ; i++)
   {
      toplam += buffer[i];
   }

   printf("toplam = %d\n",toplam);
}

Bunu bir deneyin bakalım başka sonuc verecekmi ? bufferin icini taşırın veya az yazın bakalım ne olacak ? :D

Knk sen lehim dumanına fazla maruz kaldın sanırım :D
Ne kadar ekmek o kadar köfte

Furkan KELEŞOĞLU

@fatih343  Benim işim lehim dumanına maruz kalmak :D Sen niye şimdi böyle bir şey yazdın onu anlamadım ? :D
Mekatronik Teknikeri.
Elektrik-Elektronik Teknisyeni.