• 16-04-2015, 22:26:56
    #1
    Arkadaşlar bir ödevim var fakat kafamda bir algoritmasını kuramadım. Şimdi ödevimde;
    C++ dilinde tamsayıları, kayan nokta sayıları, isimleri ve ilişkisel operatörleri ( <, >, <=, >=, == ) tanıyan bir sözcük analizcisi yazın.

    Yani adam 45 girerse;
    Giris: 45
    TAMSAYI
    çıktısı vereceğim.
    Veya;
    Giris: >=
    ILISKISEL_OPERATOR
    olarak çıktı vereceğim.
    Yada;
    Giris: -AB
    HATA

    Giris: AB
    ISIM

    diyerek uzuyor. Ben karakterleri ascii kod u ile alıp if else içinde çıktı olarak yazmanın dışında bunun için ne iyi bir çözüm olabilir ? Fikirleri veya kod olarak ufak yardımları bekliyorum
  • 18-04-2015, 14:09:47
    #2
    Merhaba,
    kusura bakma hocam mesaj atmışsın bana da ancak zaman bulabildim cevap vermeye. cpp derleyicim yok şimdi o yüzden parça parça gidelim. öncelikle her adım için projeni fonksiyonlara böl, bu fonksiyonlar sırasıyla sayı olup olmadığını kontrol etsin, değilse operator olup olmadığını kontrol etsin, değilse de string olarak versin. Ama şurada bir sıkıntı var -AB neden string ifade olmasın ki? Mesela Co-Work dediğinde de bir çizgi var, bu illa eksi olması anlamına gelmez. Ama onun içinde bir çözüm öneririm


    1- sayı olup olmadığını anlamak

    http://www.cplusplus.com/reference/cctype/isdigit/
    http://www.cplusplus.com/reference/cctype/isalnum/

    buradaki fonksiyonlarla karakterlerin numeric-numeric olmayan olarak ayır edebilirsin. mesela bir döngü ile tüm karakterleri dolaşırsın eğer karakterler içinde alpha-numeric karakterler varsa bir tane bile olsa onun tam sayı olmadığına karar verirsin..

    2- ilişkisel operatorler

    bunun için de ascii kodlara inmeye gerek yok hocam, string compare yapacaksın, biraz uzun olabilir ama tüm ilişkisel operatorleri yazıp if-else ile karşılaştıracaksın

    http://www.cplusplus.com/reference/s...tring/compare/

    ya da bu şekilde bir karşılaştırma kullan (switch/select-case gibi)
    http://stackoverflow.com/a/4165312/1022138

    3- string bulma

    http://www.cplusplus.com/reference/cctype/isalpha/

    buradaki fonksiyon ile alfanumeric olanları bulabilirsin. eğer stringin içerisinde + - * gibi ifadeler varsa alfanumeric olarak almaz o zaman da string olmadığını söylersin.

    4- string ifadesindeki "eksi"

    eğer bunu gerçekten matematiksel sembol olarak görüyorsan yani fark olarak, o zaman yukarıda yazdığım 1 ve 2. aşamasadan sonra bu kısma bak. ilk karakteri al (satirin[0]) ve bunun numeric olup olmadığına bak. eğer numeric ise "HATA" yazdırabilirsin. Çünkü 1. maddedeki zaten girilen ifadenin sayı olup olmadığını veriyor, o halde burada 1. karakter numeric dönüyorsa o zaman -AB tarzı bir şey girilmiştir. Eğer numeric değilse "isim" diye yazdırabilirsin


    kolay gelsin
  • 18-04-2015, 19:04:38
    #3
    Oldukça açıklayıcı olmuş. Ben ödevi ascii kodlara inerek teslim ettim ama inceleyecem çok teşekkürler
    ertan2002 adlı üyeden alıntı: mesajı görüntüle
    Merhaba,
    kusura bakma hocam mesaj atmışsın bana da ancak zaman bulabildim cevap vermeye. cpp derleyicim yok şimdi o yüzden parça parça gidelim. öncelikle her adım için projeni fonksiyonlara böl, bu fonksiyonlar sırasıyla sayı olup olmadığını kontrol etsin, değilse operator olup olmadığını kontrol etsin, değilse de string olarak versin. Ama şurada bir sıkıntı var -AB neden string ifade olmasın ki? Mesela Co-Work dediğinde de bir çizgi var, bu illa eksi olması anlamına gelmez. Ama onun içinde bir çözüm öneririm


    1- sayı olup olmadığını anlamak

    http://www.cplusplus.com/reference/cctype/isdigit/
    http://www.cplusplus.com/reference/cctype/isalnum/

    buradaki fonksiyonlarla karakterlerin numeric-numeric olmayan olarak ayır edebilirsin. mesela bir döngü ile tüm karakterleri dolaşırsın eğer karakterler içinde alpha-numeric karakterler varsa bir tane bile olsa onun tam sayı olmadığına karar verirsin..

    2- ilişkisel operatorler

    bunun için de ascii kodlara inmeye gerek yok hocam, string compare yapacaksın, biraz uzun olabilir ama tüm ilişkisel operatorleri yazıp if-else ile karşılaştıracaksın

    http://www.cplusplus.com/reference/s...tring/compare/

    ya da bu şekilde bir karşılaştırma kullan (switch/select-case gibi)
    http://stackoverflow.com/a/4165312/1022138

    3- string bulma

    http://www.cplusplus.com/reference/cctype/isalpha/

    buradaki fonksiyon ile alfanumeric olanları bulabilirsin. eğer stringin içerisinde + - * gibi ifadeler varsa alfanumeric olarak almaz o zaman da string olmadığını söylersin.

    4- string ifadesindeki "eksi"

    eğer bunu gerçekten matematiksel sembol olarak görüyorsan yani fark olarak, o zaman yukarıda yazdığım 1 ve 2. aşamasadan sonra bu kısma bak. ilk karakteri al (satirin[0]) ve bunun numeric olup olmadığına bak. eğer numeric ise "HATA" yazdırabilirsin. Çünkü 1. maddedeki zaten girilen ifadenin sayı olup olmadığını veriyor, o halde burada 1. karakter numeric dönüyorsa o zaman -AB tarzı bir şey girilmiştir. Eğer numeric değilse "isim" diye yazdırabilirsin


    kolay gelsin