Şimdi Ara

C++ girilen bir karaktere sayısal değer atama

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
10
Cevap
0
Favori
1.614
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Başlıkta da belirttiğim gibi programlama dersinden almış olduğum ödevde takıldığım nokta budur , birçok şey denedim ama olmadı.
    Siyah ekranda kullanıcıdan girilen örneğin AA yı sayısal olarak tanıyıp hafızaya kayıt etmesini istiyorum.Nasıl yapabilirim ?



  • Merhaba, aklıma 2 yol geldi birincisi her mümkün harf notunu hafızada tutup girdi ile karşılaştırmak, örneğin (not sistemini tam bilmiyorum yanlış olmuş olabilir);
    const int notCesidi = 7; 
    const char notlar[notCesidi][2] = {
    'A', 'A',
    'B', 'A',
    'B', 'B',
    'C', 'B',
    'C', 'C',
    'D', 'C',
    'D', 'D',
    };


    Kontrol etmek için şöyle bir şey yapabilirsin;
    char input[3]; 

    cin >> input;

    for (int i = 0; i < notCesidi; i++)
    {
    if (input[0] == notlar[i][0] && input[1] == notlar[i][1])
    {
    cout << i;
    break;
    }
    }


    i tabiki index oluyor, karşılık gelen sayılar bir formül ile bulunuyorsa veya bir düzeni varsa i'den yola çıkarak işlem yapabilirsin. Eğer karşılık gelen sayı kurala bağlı değilse onun için de bir array oluşturabilirsin;
    int karsilik[notCesidi] = { 100, 95, 85, 70, 60, 55, 50 }; 
    //Yukarıdaki for'un aynısı, içi şöyle değişecek;
    cout << karsilik[i];


    Diğer bir yöntem ise şu olabilir;
    char input[3]; 
    cin >> input;
    const int notCesidi = 7;
    int karsilik[notCesidi] = { 100, 95, 85, 70, 60, 55, 50 };
    int index = 0;
    for (int i = 0; i < notCesidi; i++)
    {
    index = (input[0] - 'A') + (input[1] - 'A');
    if (index >= 0 && index < notCesidi)
    {
    cout << karsilik[index];
    break;
    }
    }

    Bunun mantığı da şöyle;
    AA 0
    BA 1
    BB 2
    CB 3
    CC 4
    DC 5
    DD 6
    Sağ taraf istenen index (karşılık gelen notlar'dan 0. mesela AA'ya karşılık geliyor.
    Eğer not sistemi bu şekildeyse dikkat edersen aşağı doğru indikçe harflerin değeri birer düşüyor (BA, BB vs.)
    ama aslında ascii table'da artıyor değerleri, mesela 'B' - 'A' yaparsam sonuç 1 olur dolayısıyla yukarıdaki matematikle bu not sistemi çalışıyor.

    Not sistemin farklıysa 2. yöntemi biraz değiştirmen gerekebilir, 1. yöntemde tek yapman gereken not karşılıklarını değiştirip tabloya yenilerini eklemek.




  • welrocken W kullanıcısına yanıt
    yazmış olduklarınız da kontrolü yapıp bir yerde döngüyü kırıyorsunuz gibi geldi aldığım hatanın da kaynağı bu galiba ben bunu girdirdiğim her ders için tekrar tekrar sormasını istiyorum ya da benim yerleştirme biçimimde hata kaynaklı olabilir :) kodu göndermem daha mantıklı olabilir

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

    class ak_ort
    {

    public:
    double f(double n)

    {
    const int notCesidi = 7;
    const char notlar[notCesidi][2] = {
    'A', 'A',
    'B', 'A',
    'B', 'B',
    'C', 'B',
    'C', 'C',
    'D', 'C',
    'D', 'D',
    'F', 'F',
    };
    double top1=0,i,top2=0,a;
    double karsilik[notCesidi] = { 4, 3.5, 3, 2.5, 2, 1.5, 1, 0 };
    for (int k=1;k<=n;k++)
    {
    cout<<k<<".dersin kredisini giriniz :" " ";
    cout<<"Harf notunu giriniz :" " ";
    cin>>karsilik[a];
    cin>> i;
    top1+=i;
    top2+=i*karsilik[a];
    }
    cout<<"Akademik ortalama =" " "<<top2/top1<<endl;
    return top2/top1;}
    };

    void main()
    {
    setlocale(LC_ALL,"turkish");
    cout<<"\t \t AKADEMIK ORTALAMA HESAPLAMA PROGRAMI"<<endl;
    cout<<endl;
    cout<<"\t \t \t HARF NOTLARI"<<endl;
    cout<<"*************************************************************************"<<endl;
    cout<<endl;
    cout<<"AA = 4 \t BA = 3.5 \nBB = 3 \t CB = 2.5 \nCC = 2 \t DC = 1.5 \nDD = 1 \t FF = 0 "<<endl;
    cout<<endl;
    cout<<"*************************************************************************"<<endl;
    cout<<endl;
    int a ;
    cout<<"Ders sayisini giriniz :" " ";
    cin>>a;
    cout<<endl;
    ak_ort ns; ns.f(a);


    system("pause");}





  • Dostum şimdi yemek yemeye gidiyorum yalnızca dikkatimi çeken şu oldu;
    cin >> karsilik[a] yaptığında a'ya input almış olmazsın tahminimce karsilik'in a o anda neyse o indexi değişir. Oraya bi göz at derim

    Şöyle denedim bi;
    #include<iostream> 
    #include<string>
    #include <clocale>
    using namespace std;

    class ak_ort
    {
    private:
    int notAl()
    {
    const int notCesidi = 8;
    const char notlar[notCesidi][2] = {
    'A', 'A',
    'B', 'A',
    'B', 'B',
    'C', 'B',
    'C', 'C',
    'D', 'C',
    'D', 'D',
    'F', 'F'
    };

    double karsilik[notCesidi] = { 4, 3.5, 3, 2.5, 2, 1.5, 1, 0 };

    char input[3];
    cin >> input;

    for (int i = 0; i < notCesidi; i++)
    {
    if (input[0] == notlar[i][0] && input[1] == notlar[i][1])
    {
    return karsilik[i];
    }
    }
    }

    public:
    double f(double n)
    {
    double top1=0,i,top2=0;
    for (int k=1;k<=n;k++)
    {
    cout<<k<<".dersin kredisini giriniz :" " ";
    cin >> i;
    top1 += i;
    cout<<"Harf notunu giriniz :" " ";
    top2 += notAl();
    /*cin>>karsilik[a];
    cin>> i;
    top1+=i;
    top2+=i*karsilik[a];*/

    }
    cout<<"Akademik ortalama =" " "<<top2/top1<<endl;
    return top2/top1;}
    };

    int main(void)
    {
    setlocale(LC_ALL,"turkish");
    cout<<"\t \t AKADEMIK ORTALAMA HESAPLAMA PROGRAMI"<<endl;
    cout<<endl;
    cout<<"\t \t \t HARF NOTLARI"<<endl;
    cout<<"*************************************************************************"<<endl;
    cout<<endl;
    cout<<"AA = 4 \t BA = 3.5 \nBB = 3 \t CB = 2.5 \nCC = 2 \t DC = 1.5 \nDD = 1 \t FF = 0 "<<endl;
    cout<<endl;
    cout<<"*************************************************************************"<<endl;
    cout<<endl;
    int a ;
    cout<<"Ders sayisini giriniz :" " ";
    cin>>a;
    cout<<endl;
    ak_ort ns; ns.f(a);
    cin.get();
    }


    Bir kere deneme şansım oldu;
    ders sayısı: 2
    ilk ders kredi: 5
    harf notu: AA
    2. ders kredi: 3
    harf notu: BB

    hesaplanan değeri: 0.875



    < Bu mesaj bu kişi tarafından değiştirildi welrocken -- 2 Mayıs 2015; 21:06:21 >




  • welrocken W kullanıcısına yanıt
    hata veriyor

     

    1>------ Build started: Project: asd, Configuration: Debug Win32 ------
    1> asdasdas.cpp
    1>c:\users\cc\documents\visual studio 2010\projects\asd\asd\asdasdas.cpp(30): error C2446: '==' : no conversion from 'const char *' to 'int'
    1> There is no context in which this conversion is possible
    1>c:\users\cc\documents\visual studio 2010\projects\asd\asd\asdasdas.cpp(30): error C2040: '==' : 'int' differs in levels of indirection from 'const char [2]'
    1>c:\users\cc\documents\visual studio 2010\projects\asd\asd\asdasdas.cpp(30): error C2446: '==' : no conversion from 'const char *' to 'int'
    1> There is no context in which this conversion is possible
    1>c:\users\cc\documents\visual studio 2010\projects\asd\asd\asdasdas.cpp(30): error C2040: '==' : 'int' differs in levels of indirection from 'const char [2]'
    1>c:\users\cc\documents\visual studio 2010\projects\asd\asd\asdasdas.cpp(32): error C2440: 'return' : cannot convert from 'double [8]' to 'int'
    1> There is no context in which this conversion is possible
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========




  • Vallahi bilmiyorum devc++'da test etmiştim az önce visual studio 2013'de test ettim ikisinde de çalıştı. Verdiği hatayı da anlayamıyorum, eğer parantez içinde yazdığı satırsa şu satırla ilgili bir hata veriyor;
    if (input[0] == notlar[0] && input[1] == notlar[1])

    notu AA şeklinde giriyorsun değil mi?
  • welrocken W kullanıcısına yanıt
    verilen hatayı bu şekilde çözdüm

    if (input[0] == notlar[0][2] && input[1] == notlar[1][2])

    fakat bu seferde cevap doğru çıkmıyor

    5 DERS

    5, AA
    5, AA
    5, AA
    5, AA
    5, AA girilenlere göre cevabın 4 çıkması lazım ken 8 çıkıyor sizin girdilerinizi de denedim farklı bir sonuç çıktı. :(
  • notlar[0] ve notlar[1] olacak, yanlış olmuş o ya kusura bakma;

    italik yapıyor [ i ] yi.
    if (input[0] == notlar[i][0] && input[1] == notlar[i][1])



    < Bu mesaj bu kişi tarafından değiştirildi welrocken -- 3 Mayıs 2015; 19:07:05 >
  • welrocken W kullanıcısına yanıt
    programdaki sorun private bölümündeki return kısmında return değerini 1 yapınca 1 kez değer dönüyor ve cevap doğru çıkıyor fakat degerler[notCesidi] döndürüldüğündeyse bu hata çıkıyor :(
     C++ girilen bir karaktere sayısal değer atama



    < Bu mesaj bu kişi tarafından değiştirildi CentrifugaLL -- 3 Mayıs 2015; 23:09:10 >
  • Yardımın için teşekkür ederim sorunu da hallettim private bölümündeki return eden kısımdaki notcesidini a yaptım public teki fonksiyonuda double tipinden void e çevirince sorunum giderildi.Tekrardan teşekkürler fikir ve yardımın için.



    < Bu mesaj bu kişi tarafından değiştirildi CentrifugaLL -- 4 Mayıs 2015; 15:52:06 >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.