Forum: Diğer Konular RSS
C++ robot eli
erdem (Moderatör) #1
Üye Tem 2009 tarihinden beri · 981 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: C++ robot eli
Öncelikle uzun bir aradan sonra herkese merhaba :)

Geçenlerde iş için bir mülakata girdim. Orada bir el nesnesinin parmak nesnesi kullanarak modellenmesini sordular. Benim çözümüm şuna benzer bir şeydi:

#include <iostream>
#include <vector>
 
using namespace std;
 
class Vector3 { /* ... */ };
 
class Parmak
{
 
public:
 
    Parmak(int no)
        :no_(no)
    {}
    void hareketEt(Vector3 nereden, Vector3 nereye)
    {
        cout << no_ << " numaralı parmak hareket ediyor" << '\n';
    }
private:
    int no_;
 
};
 
typedef vector<Parmak *> Parmaklar;
 
class El
{
 
    const int parmakSayisi_;
    Parmaklar parmaklar_;
 
public:
 
    El(int parmakSayisi)
        : parmakSayisi_(parmakSayisi)
    {
        for (int i = 0; i < parmakSayisi; ++i)
        {
            parmaklar_.push_back(new Parmak(i));
        }
    }
 
    void hareketEt(Vector3 nereden, Vector3 nereye)
    {
        Parmaklar::iterator konum;
 
        for (konum = parmaklar_.begin(); konum != parmaklar_.end(); ++konum)
        {
            (*konum)->hareketEt(nereden, nereye);
 
        }
    }
};
 
 
 
int main()
{
    const Vector3 nereden;
    const Vector3 nereye;
    El robotEli = El(5);
    robotEli.hareketEt(nereden, nereye);
}

Aslında bu eli gerçek bir robot eli olarak düşünürsek elin hareketEt() işlevi parmakları hareket ettirmek yerine başka bir konuma hareket edebilir. Ya da baş parmağın hareketEt() işlevi ile diğer parmakların hareketEt() işlevleri farklı olabilir. Çünkü baş parmakta tek bir eklem diğer parmaklarda iki eklem var.

Ya da robot sadece bir parmağını hareket ettirmek isteyebilir. O zaman her parmağın da konum bilgisini ayrı tutmalıyız.

Tabi tüm bunları biraz da sohbet olsun diye yazıyorum  ;-)
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
erdem:
Öncelikle uzun bir aradan sonra herkese merhaba :)

Heeey! Nerelerdeydin? Neler oldu? :)

bir el nesnesinin parmak nesnesi kullanarak modellenmesini

Aklıma ilk gelen, herhalde içerme ilişkisini görmek istiyorlar oldu: El, parmaklar içerir. Senin yaptığın gibi vector olabileceği gibi, aslında her parmak yeterince farklı olduğundan belki de teker teker BaşParmak, İşaretParmağı, vs. diye de eklenebilir.

Parmak'a numara vermen ilk bakışta ters gibi göründü: Kaçıncı olduğunu Parmak değil de, onun sahibi bilsin diye düşündüm ama belki de parmakların farklı kullanışlarını göstermek için kullanılan bir bilgi de olabilir.

typedef vector<Parmak *> Parmaklar;

Onu görünce de neden basitçe (ve daha güvenlice) vector<Parmak> olmasın diye düşündüm. (Veya, vector<shared_ptr<Parmak>> filan gibi bir akıllı gösterge ile olmalı.) Hele new ile elde edilen nesnenin sahipliği öyle vector'e verilince atılan bir hatada o nesneler kaybedilir. (delete'i işletecek zaman olmayabilir.)

            parmaklar_.push_back(new Parmak(i));

Yukarıda da dediğim gibi, o ifade (veya daha sonraki başka bir ifade) hata atsa, vector'de zaten bulunan Parmak nesneleri kaybedilirler (resource leak anlamında).

Ya da baş parmağın hareketEt() işlevi ile diğer parmakların hareketEt() işlevleri farklı olabilir.

Ben de öyle düşündüm. Eğer bir fabrikada olduğu gibi, önceden programlanan hareketlerden bahsediyorsak, belki de parmaklar eş zamanlı olarak ve belki de körlemesine kendilerine baştan verilen küçük hareketleri yapıyorlardır. Sonuçta hepsi topluca tek hareket ediyor gibi görünüordur. (?) Robot konularında hiç bilgim yok aslında. :)

Neyse, kısa süreliğine bile olsa hoşgeldin! Nisan sonunda Ankara'dayım. Eğer yine ara vereceksen tam programı öğrenmek için arada bir buraya bakmayı ihmal etme.

Ali
erdem (Moderatör) #3
Üye Tem 2009 tarihinden beri · 981 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
Heeey! Nerelerdeydin? Neler oldu? :)

Gene Eskişehir'deyim :) Forumu bazen sohbetlere katılamasam da takip ediyordum.

Senin yaptığın gibi vector olabileceği gibi, aslında her parmak yeterince farklı olduğundan belki de teker teker BaşParmak, İşaretParmağı, vs. diye de eklenebilir.

Ben de asıl gerçekleşmenin bu şekilde olabileceğini tahmin ediyorum.


typedef vector<Parmak *> Parmaklar;

Onu görünce de neden basitçe (ve daha güvenlice) vector<Parmak> olmasın diye düşündüm. (Veya, vector<shared_ptr<Parmak>> filan gibi bir akıllı gösterge ile olmalı.) Hele new ile elde edilen nesnenin sahipliği öyle vector'e verilince atılan bir hatada o nesneler kaybedilir. (delete'i işletecek zaman olmayabilir.)

Evet çok haklısınz.

Neyse, kısa süreliğine bile olsa hoşgeldin! Nisan sonunda Ankara'dayım. Eğer yine ara vereceksen tam programı öğrenmek için arada bir buraya bakmayı ihmal etme.

Teşekkürler! :)

Sanırım bundan sonra forumları rahat rahat takip edebilirim. İnşa'Allah haberleşelim o zaman.
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-21, 15:21:14 (UTC -08:00)