Şimdi Ara

Bu kodu daha iyi şekilde yazmanın yolu?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
18
Cevap
0
Favori
410
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Kodu tamamıyla paylaştım çünkü belki ihtiyacı olan biri çıkar hemde geliştirilerek bilgi paylaşımı yapılmış olur. Kodu içinde sormak istediğim bazı yerler var .

    Class yapısı ile nasıl yazılabilir. Daha iyi function tarzları varsa lütfen sabrederek biliyorsanız yazın lütfen?

    #include <iostream>
    #include <string>
    using namespace std;

    const int num_stu=10;
    const int num_grade=5;

    struct student {
    string name;
    int grade[num_grade];
    double sum;
    }s[num_stu];

    void students(student s[])
    {
    s[0].name="Mehmet";
    s[1].name="Mustafa";
    s[2].name="Hakan";
    s[3].name="Ayşe";
    s[4].name="Ali";
    s[5].name="Ahmet";
    s[6].name="Harun";
    s[7].name="Özge";
    s[8].name="Haluk";
    s[9].name="Salih";

    //s0.grade[num_grade]={96,45,90,70,85}; // how do write this way ?
    s[0].grade[0] = 96;
    s[1].grade[0] = 76;
    s[2].grade[0] = 54;
    s[3].grade[0] = 85;
    s[4].grade[0] = 100;
    s[5].grade[0] = 96;
    s[6].grade[0] = 45;
    s[7].grade[0] = 85;
    s[8].grade[0] = 65;
    s[9].grade[0] = 85;

    s[0].grade[1] = 45;
    s[1].grade[1] = 85;
    s[2].grade[1] = 70;
    s[3].grade[1] = 90;
    s[4].grade[1] = 100;
    s[5].grade[1] = 76;
    s[6].grade[1] = 86;
    s[7].grade[1] = 70;
    s[8].grade[1] = 54;
    s[9].grade[1] = 90;

    s[0].grade[2] = 90;
    s[1].grade[2] = 96;
    s[2].grade[2] = 70;
    s[3].grade[2] = 90;
    s[4].grade[2] = 100;
    s[5].grade[2] = 54;
    s[6].grade[2] = 70;
    s[7].grade[2] = 90;
    s[8].grade[2] = 75;
    s[9].grade[2] = 90;

    s[0].grade[3] = 70;
    s[1].grade[3] = 80;
    s[2].grade[3] = 90;
    s[3].grade[3] = 95;
    s[4].grade[3] = 100;
    s[5].grade[3] = 40;
    s[6].grade[3] = 95;
    s[7].grade[3] = 80;
    s[8].grade[3] = 54;
    s[9].grade[3] = 95;

    s[0].grade[4] = 85;
    s[1].grade[4] = 65;
    s[2].grade[4] = 65;
    s[3].grade[4] = 100;
    s[4].grade[4] = 95;
    s[5].grade[4] = 100;
    s[6].grade[4] = 75;
    s[7].grade[4] = 85;
    s[8].grade[4] = 70;
    s[9].grade[4] = 100;

    }
    void get_grd(student stu);
    void list_name(student stu[]);
    void secim();
    double stu_average(student stu);
    void total_average();
    void question();
    int main ()
    {
    students(s);
    question();
    return 0;
    }


    void get_grd (student stu)
    {
    cout<<"Öğrenci "<< "ismi: " <<stu.name<<endl;
    cout<<"Sınavlar: ";
    for (int i=0; i<num_grade; ++i)
    {
    cout<<i+1<<":"<<*(stu.grade+i)<<" ";
    if(stu.grade[i] ==100)
    {cout<<"grade=A++ ";}
    if (stu.grade[i] >=90 && stu.grade[i]<100)
    {cout<<"grade=A ";}
    if (stu.grade[i] >=80 && stu.grade[i] < 90)
    {cout<<"grade=B ";}
    if (stu.grade[i] >=70 && stu.grade[i] < 80)
    {cout<<"grade=C ";}
    if (stu.grade[i] >=60 && stu.grade[i] < 70)
    {cout<<"grade=D ";}
    if (stu.grade[i] <60)
    {cout<<"grade=F ";}
    }
    cout<<endl;
    }

    void list_name (student stu[])
    {
    cout<<"Sınıfın Öğrencileri:"<<endl;
    for (int i=0; i<num_stu; ++i)
    {
    cout<<i+1<<":"<<stu[i].name<<" ";
    }
    cout<<endl;
    }
    void secim(){
    int t;
    double average;
    list_name(s);
    cout<<endl<<"İstenilen öğrencinin notlarını görmek için sıra numarasını giriniz: ";
    cin>>t;
    if (t>num_stu || t==0 )
    {
    while (t>num_stu || t==0) // What to do if the while loop give error when the letters are pressed? while döngüsünün harflere basıldığında hata vermemesi için ne yapmalı?
    {
    cout<<"Sıra numarasını yanlış girdiniz. Tekrar Deneyiniz: ";
    cin>>t;
    }

    }
    if (t<=num_stu)
    {
    get_grd(*(s+t-1));
    average=stu_average(*(s+t-1));
    cout<<"Aldığı ortalama:"<<average<<endl;
    }

    }

    double stu_average(student stu)
    {
    double average;
    stu.sum=0;
    for (int i=0; i<num_grade; ++i)
    {
    stu.sum+=stu.grade[i];
    }
    average=stu.sum/5;
    return average;
    }
    void total_average()
    {
    double totalAverage=0,classAverage=0;
    for (int i=0; i<num_stu; ++i)
    {
    totalAverage+=stu_average(*(s+i));
    }
    cout<<"totalAverage:"<<totalAverage<<"\t";
    classAverage=totalAverage/10;
    cout<<"Sınıf ortalaması:"<<classAverage<<endl;

    }



    void question()
    {
    char t;
    cout<<"Listeden istediğiniz işlemi seçiniz:"<<endl;
    cout<<"1. Öğrenci notlarını göster."<<endl;
    cout<<"2. Sınıf Ortalamasını göster."<<endl;
    cout<<"Seçiminiz: ";
    cin>>t;
    if(t =='1')
    {
    secim();
    }
    if(t =='2')
    {
    total_average();
    }
    }

    //s0.grade[num_grade]={96,45,90,70,85}; // how do write this way ?
    if (t>num_stu || t==0 )
    {
    while (t>num_stu || t==0) // What to do if the while loop give error when the letters are pressed?
    // While döngüsünün harflere basıldığında hata vermemesi için ne yapmalı? char olmaz çünkü int değeri olması gerekiyor variable t.
    {
    cout<<"Sıra numarasını yanlış girdiniz. Tekrar Deneyiniz: ";
    cin>>t;
    }

    }

    // While döngüsünün harflere basıldığında hata vermemesi için ne yapmalı? char olmaz çünkü int değeri olması gerekiyor variable t.
    Array index numarasını nasıl ekrana yazdırabiliriz.
    get_grd (student stu)
    {
    cout<<"Öğrenci "<<buraya index of array element yazılacak<< "ismi: " <<stu.name<<endl;



    < Bu mesaj bu kişi tarafından değiştirildi berce -- 21 Aralık 2018; 10:30:35 >







  • While döngüsünde harfe basıldığında hata vermemesi olayı cin yani standard inputu kontrol etmek işi. https://stackoverflow.com/questions/18567483/c-checking-for-an-integer
    Bu linkteki çözümden faydalanabilirsin.

    Array index numarası için ise secim metodunda zaten onu t değişkenine atıyorsun.
    get_grd(student stu) yerine get_grd(int index) olarak integer index parametresini alırsın içeride de s[index] olarak student işlemini yapabilirsin. index parametresi olarak t-1 gönderilir.



    < Bu mesaj bu kişi tarafından değiştirildi yesil1026 -- 21 Aralık 2018; 12:15:45 >
  • student yapısını std::vector<student> student1{"Mehmet", student1_grade, 1} ile
    grade yapısını da std::array<int, 5> student1_grade{96, 45, 90, 70, 85} ile oluşturmayı denerdim

    ki o durumda student vektörü için bir initializer-list de tanımlamak gerekebilir. Burada belirttiğim şeyler sadece temsili; syntax ve yapı olarak doğru şekilde kodlamak için önce C++ STL konularını tekrardan çalışırdım cünkü tür işlemler için C++ uzun süredir kullanmadım. Bu tür işlemler için dinamik bir dil kullanmak en doğrusu. Yine de C++ ile kodlamam gerekseydi, student'i bir linked-list yapısı içinde tanımlamayı da denerdim cunku o zaman çalışma anında da istediğim gibi yeni student tanımlayabilir veya silebildiğim dinamik bir yapım olurdu.
  • Şu ödevcilere yardım etmeyi bırakın artık ya. Zaten yağmur gibi mühendis yağıyor ülkede, birkaçı eksik olsun.
  • Tamam eksik olsun.
    Kimler gibi?



    < Bu mesaj bu kişi tarafından değiştirildi berce -- 21 Aralık 2018; 19:17:2 >
  • Sorun mühendisin cok olması değil, sorun mühendislik işlerinin olmaması ; mühendislerin yaptığı işlerin gerçekte mühendis olmayı gerektirmemesi ve yaptıkları işlerin mühendislik işi olmaması. Ve ülkede mühendislik kültürü yok. İşçilik kültürü dahi yok! Hah biraz memurluk, doktorluk ve öğretmenlik kültürü var, o kadar.

    Sorunun kaynağını görmeden sorunun belirtisi üzerine konuşuyorsunuz...
  • Ben böyle şeylere Ehemmiyet vermiyorum. Yıllarca çocukluğumdan beri istedim lakin bu sözlere aldırış ederek bir şey yapamadım. okuma imkanım da olmadı. Lakin içimdeki mekanik elektronik programlama aşkı hiç bitmedi. şimdi imkanım sadece programlama için var. ben onu gerçekleştiriyorum.

    Ya bir şekilde öğreneceğim. sorarak çalışarak uğraşarak yada hep böyle kalacağım. Bende böyle olmasını istemiyorum.

    @revivo72
  • #include <iostream>

    using namespace std;

    int main()
    {
    int input;
    cout << "Enter an int: ";
    cin >> input;
    if (cin.fail())
    cout << "Not an int
    ";
    else
    cout <<"Yes an int
    ";
    return 0;
    }


    bu kod işe yarıyor lakin bir problem var oda şu 1a girersende onu interger kabul ediyor. bütün girdiye bakmıyor. a11 girdiğinde not an int diyor
    Özeti ilk karaktere bakıyor.

    Böyle bir kod buldum. lakin input variable string olduğunda işe yarıyor.


    #include <iostream>
    #include <regex>
    #include <string>

    using namespace std;

    int main()
    {
    string input;
    regex integer("(\\+|-)?[[:digit:]]+");
    //As long as the input is correct ask for another number
    while(true)
    {
    cout<<"Give me an integer!"<<endl;
    cin>>input;
    if(!cin) break;
    //Exit when the user inputs q
    if(input=="q")
    break;
    if(regex_match(input,integer))
    cout<<"integer"<<endl;
    else
    {
    cout<<"Invalid input"<<endl;
    }
    }
    }



    < Bu mesaj bu kişi tarafından değiştirildi berce -- 24 Aralık 2018; 7:35:56 >




  • quote:

    Orijinalden alıntı: Tuğkan-0153

    student yapısını std::vector<student> student1{"Mehmet", student1_grade, 1} ile
    grade yapısını da std::array<int, 5> student1_grade{96, 45, 90, 70, 85} ile oluşturmayı denerdim

    ki o durumda student vektörü için bir initializer-list de tanımlamak gerekebilir. Burada belirttiğim şeyler sadece temsili; syntax ve yapı olarak doğru şekilde kodlamak için önce C++ STL konularını tekrardan çalışırdım cünkü tür işlemler için C++ uzun süredir kullanmadım. Bu tür işlemler için dinamik bir dil kullanmak en doğrusu. Yine de C++ ile kodlamam gerekseydi, student'i bir linked-list yapısı içinde tanımlamayı da denerdim cunku o zaman çalışma anında da istediğim gibi yeni student tanımlayabilir veya silebildiğim dinamik bir yapım olurdu.
    Bu tür işlemler için dinamik bir dil kullanmak en doğrusu. bu sözün doğruluğunu gerçekten hissediyorum. Program yazarken c++ beni kısıtlıyor. Bilmediğim konular var lakin aklımda düşüdüğüm şeylerin bazıları gerçekleştirmeye izin vermiyor.

    bu işlemler için yakın dil hangisi perl mi? daha dinamik bir dil gibi. python'da hybrid dil.

    senin gösterdiğin string değişkenini okuma eval ile onu görünce perl bakayım dedim zaten modem yazılımları perl ile yazılmış çoğu

    C++ STL konularına bakarım

    eklenen:linked-list yapısı nasıl oluyor bir örnek verir misin?



    < Bu mesaj bu kişi tarafından değiştirildi berce -- 24 Aralık 2018; 5:3:35 >




  • Gnu bu yukardaki yazdığım kodu derler iken hata verdi. Visual studio sorunsuz derledi.
    işte resmi!
    Bu kodu daha iyi şekilde yazmanın yolu?



    < Bu mesaj bu kişi tarafından değiştirildi berce -- 24 Aralık 2018; 5:8:4 >
  • Derleyici kurulumunda bir takım eksikler var. "undefined reference to" ile başlayan hatalar, derleyicinin C++ include ve library path tanımlarının eksik olduğunu gösterir nitekim include <iostream> include <string> satırlarındaki string 'in dahil olduğu include (.h veya .hpp dosyaları) ve/veya library (.lib veya Linux için .so veya OSX için .dylib) dosyalarını bulamıyor. Ayrıca cpp dosyası derlemek için gcc değil, g++ girmelisin. Windows için GCC/g++ yani MinGW yerine TDM-GCC 'yi indirip kurman daha isabetli olabilir. TDM-GCC Windows'a özel birkaç özellik eklenmiş MinGW fork'udur. MinGW'yi tamamen kaldırıp onu kur ve Windows Sistem değişkenlerinde Ortam Değişkenlerindeki path 'e onu örneğin C:\TDM-GCC-64 klasörü şeklinde kurduysan C:\TDM-GCC-64\bin; şeklinde kaydet. CMD.exe 'de bu yeni path'in etkinleşmesi için Windows restart gerekli. ConEmu veya CMDer gibi yeni nesil terminal kullanıyorsan restarta gerek yok. Örnek olarak bendeki TDM-GCC 64bit ile aynı kodu sorunsuz derleyip çalıştırdım:

    Bu kodu daha iyi şekilde yazmanın yolu?

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • g++ -o %temp%\deneme1 J:\developers_code\cpp\grade_average4.cpp -finput-charset=utf-8 -fexec-charset=ibm857

    böyle yazınca karakterler düzgün gösteriyor.

    Bu kodu daha iyi şekilde yazmanın yolu?

    quote:

    A good compiler should allow you to specify the source code encoding, so even if your friend on an EBCDIC machine sends you her program text, that shouldn't be a problem. GCC offers the following options:

    -finput-charset: input character set, i.e. how the source code file is encoded
    -fexec-charset: execution character set, i.e. how to encode string literals
    -fwide-exec-charset: wide execution character set, i.e. how to encode wide string literals


    ConEmu yüklemiştim ama shadow defender olduğu için elektrikler kesilince gitti :D bende disable yapıp tekrar yükleyeceğim.

    peki gcc.exe ne işe yarıyor?




  • berce B kullanıcısına yanıt
    Öğrenci programını kodlayabilmek için gerekli olan std::vector gibi STL sınıfları C++ yi oldukça iyi bilen kişilerin kullanacağı şey. Temel C++ 'ı yeni öğrenmiş biri için STL 'yi değil kullanmak, STL'i anlamak ve öğrenmek dahi zordur (başlangıçta) Yani C++ burada aslında kısıtlamıyor da sadece bu problemde kullanımı zor.

    Bu problemde Perl Python veya Ruby gibi bir dinamik dil kullanmak daha isabetli. Perl'in esprisi, Python ve Ruby'den önce çıkmış alanında öncü bir dil olması; Perl öğrendiğinde Python, Ruby (+ PHP ve Javascript) kolay gelir ve örneğin Ruby'de birşeye bakarken sıklıkla "ben bunu daha önce görmüştüm" yaşarsın cunku Ruby'yi geliştiren kişi coğu seyi Perl'den kopyalamıştır :)

    Modem yazılımları Perl ile yazılmış gibi derken Perl Networking ve System Administration işlemlerinde cok yaygın kullanılır, o yüzden modem ile ilgili işlemlerde Perl 'e rastlaman olası.

    Linked list - Bağlı liste için Internete bakman daha verimli olur cunku cok temel bir veri yapısıdır. Türkçe Wikipedia'da makalesi var; cok fena değil:https://tr.wiki2.org/wiki/Bağlı_liste (Türkiye'den açılan Wikipedia) Wikipedia makalesinde görüleceği gibi bağlı liste standart diziden daha gelişmiş özellikleri olan bir veri yapısı örneğin orada "Listenin ortasına veri eklenebilir ya da ortasından veri kaldırılabilir." diyor; bir dizinin ortasından eleman kaldıramazsın, eleman Integer ise 0'layabilir String ise "" yapabilirsin ama silemezsin; bağlı listede direkt silebilirsin ve hiçbir sorun çıkmaz; cunku tasarımı öyledir (bakınız makaledeki şekil) Nitekim o yüzden öğrenci programını C++ ile kodlamam gerekseydi, student'i bir linked-list yapısı içinde tanımlardım cunku o zaman çalışma anında da istediğim gibi yeni student tanımlayabilir veya silebilirdim şeklinde yorumum var.

    Nitekim bağlı liste yapısı kullanan ufak bir program da yazdım fakat C++ ile değil, bağlı liste yapısını dahili olarak destekleyen Lisp ile yazdım. Lisp syntax'ı biraz farklıdır fakat hiç Lisp bilmeyen biri dahi kodlara baktığında ne olup bittiğini anlayabilir. Görüldüğü gibi öğrencilerin notlarını istediğim sayıda ekleyebiliyorum örneğin Ayşe 8 not Mehmet 5 not aldı cunku notlar bağlı liste yapısı içinde tutuluyor. Veritabanından öğrenci silme işlemini de listeden elemanı direkt silerek yaptım örneğin (ogrenci-sil fonksiyonu) Fakat öğrenci yapısını liste olarak değil de structture olarak tanımadım (defstruct fonksiyonu ile) istesem onu dahi bağlı listenin biraz modifiye edilmiş hali olan plist (property list) tipinde tanımlayabilirdim fakat C++'a daha benzesin diye structure tercih ettim.

    Bu koddaki lambda (anonim fonksiyon) ifadeleri biraz kafa karıştırıcı görünebilir, fakat Lisp'te onlar cok yaygın kullanılıyor ve bu kodda biraz kolayıma geldiği için lambda biraz kullandım. Tüm kodu yaklaşık bir saatte yazdım. Lisp derleyicide kod denerken kod hatalı olsa bile derlemeye devam edebilyosun oldukça değişik bir derleyici, C++ derleyicide ise bazen bir hatanın kaynağını bulana kadar bir saat geçiyor :)

    Bu kodu daha iyi şekilde yazmanın yolu?



    
    (defstruct ogrenci isim not toplam) 

    (defparameter *ogrenciler* '())

    ;; klasik kod (uzun)

    (push (make-ogrenci :isim "Mehmet" :not (list 96 45 90 70 85)) *ogrenciler*)
    (push (make-ogrenci :isim "Mustafa" :not (list 76 85 96 80 65)) *ogrenciler*)
    (push (make-ogrenci :isim "Hakan" :not (list 54 70 70 90 65)) *ogrenciler*)

    (defun ogrenci-ekle (isim not-listesi)
    (push (make-ogrenci :isim isim :not not-listesi) *ogrenciler*)
    (concatenate 'string "yeni öğrenci eklendi: " isim))

    ;; daha kısa

    (ogrenci-ekle "Sibel" '(90 90 95 100 94 87 100))
    (ogrenci-ekle "Ayşe" '(98 92 100 89 97 100 100 93))
    (ogrenci-ekle "Berk" '(58 61 47 73))

    (defun ogrenci-sil (isim)
    (setf *ogrenciler* (remove-if
    #'(lambda (ogrenci) (equal (ogrenci-isim ogrenci) isim))
    *ogrenciler*))
    (concatenate 'string "öğrenci silindi: " isim))

    (defun ogrenci-not-bas (isim)
    (let ((ogrenci
    (car (remove-if-not #'(lambda (kayit) (equal isim (ogrenci-isim kayit)))
    *ogrenciler*))))
    (format t "~a, notları: " (ogrenci-isim ogrenci))
    (dolist (note (ogrenci-not ogrenci))
    (format t "~a " (notu-harfe-cevir note)))
    'ok))

    (defun tum-ogrenciler ()
    (format t "~a~15t~a~%" "Öğrenci" "Notlar")
    (dolist (ogrenci *ogrenciler*)
    (format t "~a~15t~{~a~^ ~}~%"
    (ogrenci-isim ogrenci)
    (mapcar #'(lambda (x) (notu-harfe-cevir x))
    (ogrenci-not ogrenci))))
    'OK)

    (defun genel-not-ortalama ()
    (let* ((veriler (not-toplam-adet *ogrenciler* 0 0))
    (toplam (car veriler))
    (adet (cdr veriler)))
    (format t "~a adet not toplamı: ~a~%" adet toplam)
    (format t "Not ortalaması: ~a" (/ (float toplam) adet))
    'OK))

    (defun not-toplam-adet (ogrenciler toplam adet)
    (dolist (ogrenci ogrenciler (cons toplam adet))
    (dolist (note (ogrenci-not ogrenci))
    (setf adet (1+ adet))
    (setf toplam (+ note toplam)))))

    (defun notu-harfe-cevir (note)
    (cond
    ((= note 100) 'A++)
    ((>= note 90) (< note 100) 'A)
    ((>= note 80) (< note 90) 'B)
    ((>= note 70) (< note 80) 'C)
    ((>= note 60) (< note 70) 'D)
    ((< note 60) 'F)
    ))




  • Lisp anladım. kodlar anlaşılır ve lips scheme koduna benzettim. maşallah bir çok kod biliyorsun :D

    Dediğin gibi kesinlikle bir perl öğrenmem gerekiyor. Çünkü javascript bana ilk başta zor gelmişti. jqvery kodları tabi.
    Benim c++ öğrenmedeki amacım şuydu; ne kadar doğrudur bilmem ama windows yazılımını c# f# tarzı programla dilleri ile yazıldığını söylemişlerdi ve okulda popüler dil c++ idi başka bir dil öğretiliyor mu bilmiyorum. onun için ben c++ öğremek istedim. lakin linux c# ve f# destekliyor mu bilmiyorum.

    #' bunlara scheme benzer bir şekilde rastladım diye hatırlıyorum.



    < Bu mesaj bu kişi tarafından değiştirildi berce -- 25 Aralık 2018; 5:8:11 >
  • berce B kullanıcısına yanıt
    
    Scheme ve Lisp birbirine cok benzeyen diller geçen sene bazen Scheme kullanıyordum cunku yeni geliştirilmiş iyi bir derleyicisi vardı. Fakat ciddi bir program yazmaya çalışınca Scheme'deki benzerlik birden bitip yerini soyut bir dil alıyordu, Lisp'in akla yatkın syntax'ı yerine üst düzeyli ifadeler kullanmak zorunda kalıyordum. Sonradan öğrendim ki Scheme daha cok akademik araştırma amaçlıymış, bunda bir sakınca yok fakat olaya bir türlü ısınamadım o yüzden Lisp'e döndüm. benzer bir durumu Haskell'de de yaşadım, öğrenmeye çalışırken syntax'ına alışamayıp hemen bıraktım fakat buna rağmen Haskell ilerde öğrenmeyi düşündüğüm dillerden biridir :)

    #' notasyonu anonim fonksiyonu ifade ediyor; yani o ifadeden sonra istediğin bir fonksiyonu tanımlayıp istediğin sekilde kullanabiliyorsun. Bu arada Lisp denemek üzere derleyici indirirken muhakkak Common Lisp / CL ifadesine rastlayacaksın, o Lisp'in standart spesifikasyonu fakat onun birçok implementasyonu var örneğin CMU CL, SBCL, Clozure CL, CLISP, Allegro CL gibi, kafa karıştırıcı görünen bu durumda yapman gereken, bilgisayar ve işletim sisteminde en sorunsuz çalışan implementasyonu kullanmak. Örneğin bendeki Apple OSX 'te önce SBCL'yi denedim fakat bir yerde sorun çıkardı CMUCL'ye geçtim hiç sorun cıkarmadı. Eski IBM laptop'taki Windows XP'de Clozure CL sorunsuz çalışırken yeni Lenovo windows 7 laptop'ta sorun çıkardı, CLIPS sorunsuz çalıştı.

    Perl ile yazdığım ufak bir betik var altta, tüm comment'leri ile. (Not: Betiği uzun süredir denemedim basit bazı eksikleri olabilir)

    C++ en iyi gerçek projelerde öğrenilir bence. Linux C#'ı destekliyor cunku C# sistemden bağımsız bir dil. Örneğin benim Mac bilgisayara Mono Framework kurarak birkaç C# Form uygulamasını derleyip çalıştırdım.


    # DonanimHaber'de çok sayıda rumuzu haberdar 
    # edebilmek üzere her rumuza 'mention' etiketi ekleme betiği.
    # Örnek:
    # dh_uye
    # dh uye
    # dosyasını
    # [mentioned]dh_uye[/mentioned] [mentioned]dh uye[/mentioned]
    # dosyasına dönüştürür.

    use File::Glob; # home '~' (tilde) için gerekli modül
    local $/ = "\n";
    # $/ satır sonu kısayolunun ne olacağını belirler
    # İlk başta local $_ = "\$" denendi fakat Mac'e uymadı
    # Satır sonu kısayolu $/ ve değeri "\n" olmalı.

    my $file = @ARGV[0];

    if ($file !~ m/[a-z]/i) { # RegEx ifadesi
    print "Dosya adı girilmedi!\n";
    $file = glob("~/Documents/text-Files/rumuzlar_2018.txt");
    } # default dosya adı
    # glob işlevi baştaki ~ (tilde) işaretini doğru yorumlar

    print "dosya: $file\n";
    open INPUT, "<", $file
    or die "Dosya açılamadı: $!\n";

    # .txt dosyasını açıp INPUT simgesine ata
    # Dosya açılamazsa die 'den sonraki ifadeyi basıp çık.

    my @cikti;
    # my / benim alanımda @cikti dizisini tanımla

    while (my $line = <INPUT>) {
    # Her satırı çekip $line 'e ver
    # Çektiğimiz satır örneğin @Glitch olsun
    chomp $line;
    # satırın sol ve sağdaki boşlukları temizle [chomp]
    push @cikti , "\[mention\]$line\[/mention\]\n";
    # @cikti isimli diziye [mentioned]@Glitch[/mentioned] ekle
    }

    close(INPUT);

    foreach(@cikti)
    {
    print "$_";
    }

    (my $file_name = $file) =~ s/(.+?)(\.[^.]*$|$)/$1/;
    # Dosya adını uzantısından ayırır. Açıklama:
    # . Capture filenames that start with a dot (e.g. ".logs" is a file named ".logs", not a file extension), which is common in Unix.
    # . Gets everything but the last dot: "foo.bar.jpeg" gets you "foo.bar".
    # . Handles files with no dot: "secret-letter" gets you "secret-letter".
    # Kaynak:https://stackoverflow.com/questions/
    # 624870/regex-get-filename-without-extension-in-one-shot

    my $yeni_dosyaismi = "$file_name" . "_Sonuc.txt";
    open FH, ">", $yeni_dosyaismi
    or die "'$outfile' yazılırken hata $!\n";
    print FH @cikti;
    close FH;




  • bu senin perl'de yazmış olduğun bir kod vardı. onun ilgili bir şey sordum microsoft'ta cevap geldi.

    Bu kodu daha iyi şekilde yazmanın yolu?


    quote:

    The key point here is that Perl is interpreted, not compiled. The Perl interpreter is reading and translating every line as the program is run. Because the interpreter is always there and available, it's easy to do the "eval" statement by just passing the string to the interpreter. Python works the same way.

    C++ is (usually) not interpreted. It gets compiled directly to machine language in a separate step. When the program runs, there is no compiler available, so there's no entity to handle the "eval" step.

    C# and F# kind of a mixture. When you run a C# program, it is running under the control of the Common Language Runtime, which happens to include an interpreter. Thus, it IS possible to write this kind of code in C#, although it's certainly not easy as in Perl or Python.


    by just passing the string to the interpreter kısmında tam ne demek istiyor? anladığım geçişli bir text dizi yorumlayıcıya gönderilir şeklinde

    there is no compiler available, so there's no entity to handle the "eval" step. burasıda teknik detay içeriyor

    C++ en iyi gerçek projelerde öğrenilir kesinlikle katılıyorum. bu şekilde sınırlı bir öğrenme oluyor. ama sadece gerekli temel yapıyı öğrenmek için yaptım.

    peki bir örnek bir proje linki gösterde onu yapayım. Bir okul programı gibi yada bir otel programı bazı yerlerinde free source code olanları varsa iyi olur.

    iki dili birlikte öğreneceğim perl ve c++ bu iki dilde diğer dilleri öğrenmede bana yardımcı temel taşı olacak. jquvery ve üstdüzey javascript kodlarını anlamıyordum. rekursif kodlara benziyorlardı perl öğrenince o problem ordan kalkabilir.

    peki perl scriptlerini exe çevirmek için ne yapmam gerekiyor.



    < Bu mesaj bu kişi tarafından değiştirildi berce -- 27 Aralık 2018; 10:59:13 >




  • Eval fonksiyonu nun esprisi kaynak kodununun çalışma anında değiştirmesi. C++ ve C# gibi dillerde kaynak kod bir kere derlendikten sonra kaynak kodunu değiştirmek sözkonusu olamayacağı için eval adımını işleme özelliği yok, demek istiyor. Fakat eval daha cok demo amaçlı birşey yani gerçek programlarda Perl dahil o kadar cok kullanıldığını sanmam cunku kaynak kodundaki değişikliğe göre farklı sekilde yorumlanan birşey*



    Perl'de exe yapmak için modül var yani perl dahilinde, 3. parti bir program indirmeden yapılıyor, şurada sözkonusu modül linki var, henüz Perl kullanmadığın için açıklamalar şifreli gibi görünebilir:

    https://metacpan.org/pod/PAR::Packer



    Bu arada Perl modülü demişken Python'daki Pip, Node'taki NPM, Java'daki Maven, Ruby'deki gem ... alayı Perl'deki bu downloadable modul sisteminden esinlenerek geliştirilmiştir yani o alanda da Perl öncüdür.



    jquvery ve üstdüzey javascript kodları rekursif kodlara benziyorlardı derken ordaki rekursif ifadesi de yanlış gibi cunku rekursif biraz farklı birşeydir. Örneğinhttps://forum.donanimhaber.com/fb.asp?fromMobile=yes&fromZero=yes&m=136365822 linkinde rekursif bir kod var; jQuery de rekursif cok kullanılan birşey olmasa gerek.



    *Perl'de Syntax::Stride modülü ile kaynak kodundaki değişikler yorumlanmadan / runtime a gitmeden kaynak kodunda değiştirme imkanı var. Yani bir çeşit yeni syntax ekleme gibi, programı yazarken yeni syntax tanımlayarak daha yüksek düzeyli program yazabiliyorsun. C++ 'da operator overload da aslında ona benzer birşey, örneğin + operatörüne toplama harici başka görevler tanımlayabiliyorsun. Java ve C# da aynı özellik yok, C# da olabilir belki ama Java da yok.

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.