Şimdi Ara

C programlama dilinde bir dizinin elemanlarını char değiken türünde bir karakter ile karşılaştırma

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir (1 Mobil) - 1 Masaüstü1 Mobil
5 sn
12
Cevap
0
Favori
1.119
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Bir program yazmaya çalışıyorum. Şİmdilik sadece toplama işlemi yapacak. Programın amacı şu: bizden 1+3, 34+123 gibi bir şekilde bir işlem girmemizi isteyecek. Daha sonra bu işlemin sonucunu ekrana yazdıracak.
    programdaki sıkıntı ise karşılaştırma kısmında.

    Arkadaşlar asıl sormak istediğim soru şu:
    -bir dizi (hesap[10]) ile bir char türündeki karakteri (krs) nasıl tek tek birbiri ile karşılaştırabilirim?

    Aslında karşılaştırmak istememin nedenide şu:

    -'+' karakteri (krs) ile girdiğimiz işlemin (örneğin 13+34)karakterlerini tek tek karşılaştıracağım. eğer '+' ya eşit değilse bu sayıyı "sayi[]" dizisinin "i"ninci elemanına atayacağım, eğer '+' ya eşit ise bunuda "işlem"e atayacağım.
    sonrasını halledeceğim zaten. sıkıntı için yardımcı olursanız sevinirim. :)

    PROGRAM:
    ___________________C programlama dilinde bir dizinin elemanlarını char değiken türünde bir karakter ile karşılaştırma

    #include <stdio.h>
    #include <stdlib.h>

    int main() {

    char sayi[10];
    char hesap[10];
    char islem;
    char krs[]="+";

    int i,j,k,h;
    int lenght;
    int sonuc;

    //__________________YAZDIRMALAR______________________

    printf("islemi giriniz: \n\n");
    gets(hesap);

    lenght = strlen(hesap);
    printf("uzunluk: %d ",lenght);

    printf("\n\n***********************\nislem:");

    for(k=0;k<10;k++)
    {
    printf("%c", hesap[k]);
    }
    printf("\n\n***********************\n");

    //____________________ISLEMLER_______________________

    printf("\n\n****** KARSILASTIRMALAR*******\n\n");

    for(i=0;i<10;i++)
    {
    sonuc = strcmp(hesap, krs);

    if(sonuc>0)
    {
    sayi=hesap;
    }

    if(sonuc=0)
    {
    islem=hesap;
    }

    printf("%d. sayi: %c _____ islem: %s _____ sonuc: %d\n", i+1, sayi, islem, sonuc);
    }
    printf("deger: %s", sonuc);
    printf("\n\n****** KARSILASTIRMALAR*******\n\n");
    //____________________________________________________

    for(j=0;j<9;j++)
    {
    printf("%d. sayi: %c\n", j+1, sayi[j]);

    }
    printf("____________");
    printf("\n\n\n");
    printf("islem: %c",islem);

    return 0;
    }C programlama dilinde bir dizinin elemanlarını char değiken türünde bir karakter ile karşılaştırma



    Dagbfatih bu mesajı paylaştı




  • strcmp(hesap, krs); ile birebir bir karşılaştırma yapıyorsun fakat 'krs' herhalde karşılaştırma demek fakat karsilaştırma "+" olunca biraz kafa karıştırıyor.


    "1+1" gibi ifadeyi (expression) önce çözümlemelisin bunun için de öncelikle rakamları (1,2,3...9) kontrol etmelisin sonra + , - , * gibi karakterleri ASCII karakter koduna göre bulmalısın. rakamları ve +,-,*,/ operatörleri bu sekilde ayrıştırdıktan sonra hesaplamayı yapıp basmalısın. senin kod (sadece + işlemi için dahi) bu sekilde bir işlem yapmıyor.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Yaklaşımın yanlış. İman gücüyle satıra dalıp artıları rakamları ayıklamaya çalışıyorsun, halbuki aşamalı çözüm üretmelisin.
    Öncelikle gets() ile aldığın satırı + işareti sınır olacak şekilde parçalara böl. Php'de bu işi yapan explode() var, Python'da split() var, C'de ise tam aynı olmasa da strtok() var. Bunu kullan, sonra gelen parçaları sırayla topla. Bu kadar.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • seyfi84 S kullanıcısına yanıt
    Teşekkürler, baya bi ilerledim ama bir noktada yine anlamadığım bir sıkıntı var. öncelikle programı atayım:


    #include <stdio.h>
    #include <stdlib.h>

    int main() {

    char sayi[10];
    char hesap[10];
    char islem;
    char sayi1, sayi2;
    char *krs;
    char kontrol;

    int i,j,k,h;
    int sayi11, sayi22, toplamint;



    //__________________YAZDIRMALAR______________________

    printf("islemi giriniz: \n\n");
    gets(hesap);

    printf("\n\n***********************\nislem:");

    for(k=0;k<10;k++)
    {
    printf("%c", hesap[k]);
    }
    printf("\n\n***********************\n");

    //____________________ISLEMLER_______________________

    printf("\n\n******** KARSILASTIRMALAR*******\n\n");

    krs=strtok(hesap,"+");

    while(krs!= NULL)
    {

    printf("%s\n",krs);
    gets(kontrol);

    if(kontrol != sayi1)
    {
    sayi2=*krs;
    }
    if(kontrol == sayi1)
    {
    sayi1=*krs;
    }
    krs=strtok(NULL,"+");

    }

    printf("\n");
    printf("1. sayi: %c\n",sayi1);
    printf("2. sayi: %c\n\n",sayi2);

    toplamint=sayi1+sayi2;
    toplamint=toplamint-96;

    printf("toplam: %d\n\n",toplamint);


    sayi11=sayi1;
    sayi11=sayi11-48;
    sayi22=sayi2;
    sayi22=sayi22-48;

    printf("1. sayinin int hali: %d\n",sayi11);
    printf("2. sayinin int hali: %d\n",sayi22);

    printf("\n\n******* KARSILASTIRMALAR*******\n\n");
    //____________________________________________________

    printf("_______________________________________________");


    return 0;
    }

    yeni program bu şekilde. sayılardan neden 48 çıkarttım? Çünkü char türünde "0" ın 48, "1" in 49, "2" nin 50... olduğunu buldum. bende sonuçtan 48 çıkararak sonuca ulaştım.
    çıktı şu şekilde:
    _____

    islemi giriniz:

    23+91


    ***********************
    islem:23+91   

    ***********************


    ******** KARSILASTIRMALAR*******

    23
    91

    1. sayi: 2
    2. sayi: 9

    toplam: 11

    1. sayinin int hali: 2
    2. sayinin int hali: 9


    ******* KARSILASTIRMALAR*******
    "
    sayıya 23+91 verince 23'ün 2 sini 91'in 9 unu yani baş sayılarını alıyor. Bunun nedenini araştırdım ama bulamadım ve
    while döngüsünde neden "krs=strtok(NULL,"+");" yazıyoruz? bunu yazmayınca neden sonsuz tane sonuç yazıyor? bu döngünün amacı ne onu sorcaktım? Cevaplarınız için teşekkürler. :)




  • Dagbfatih D kullanıcısına yanıt
    Değişken isimlendirmesi berbat. İngilizce compare => cmp olur fakat karşılaştırma => krs olmaz. krs neyin kısaltmasıdır diye 100 kişiye sorsan coğu 'kuruş' der hiçbiri karşılaştırma demez.

    krs=strtok(NULL,"+") ifadesi yanlış görünüyor cunku "+" ile bölünecek dize yerine NULL vermek anlamsız.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Öncelikle değişken ismi sizi ilgilendirmiyor. Her programcının kendine has programlama stili var buna HİÇ KİMSE hayır veya saçma diyemez. Değişken ismi nasıl olmuş diye sormadım? intrenette her yerde döngü bu şekilde bunun bir anlamı var(krs=strtok(NULL,"+")) ve ben
    bunun anlamını bilen birisi cevap versin diye attım. Cevap için teşekkürler.



    < Bu mesaj bu kişi tarafından değiştirildi Dagbfatih -- 27 Ekim 2019; 22:43:0 >
  • Dagbfatih D kullanıcısına yanıt
    strtok argüman olarak bazen dizi bazen de NULL alır. Strtok'un kendine has bir stili var ve ona hiç kimse sen neden bazen dizi bazen NULL alıyorsun diyemez :) Sorduğunuz bu şeyi Google'da baksanız cevabı orada var. Yoksa Google kullanmayı bilmiyor musunuz?

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • Dagbfatih D kullanıcısına yanıt
    Neyse, ben de gönderimi düzenledim. Alttaki kod geçen yıl forumda bir sorunun çözümü. strok'u iş başında gösteriyor. Üstüne comment'ler ekledim.

    C programlama dilinde bir dizinin elemanlarını char değiken türünde bir karakter ile karşılaştırma


    www.cplusplus.com
    strtok - C++ Reference
    http://www.cplusplus.com/reference/cstring/strtok



    < Bu mesaj bu kişi tarafından değiştirildi Tuğkan-0153 -- 28 Ekim 2019; 17:54:11 >
    < Bu ileti mini 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.