folder Tahribat.com Forumları
linefolder C - C++
linefolder C De Bir Soru (Palindromik Sayılar)



C De Bir Soru (Palindromik Sayılar)

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    elfkrc
    elfkrc's avatar
    Kayıt Tarihi: 26/Ocak/2010
    Dişi

    soru palindromik sayılar(sayının baştan ve sondan okunuşu aynı; örn:12344321) 8 basamaklı girilen sayının palindromik olup olmadığı bulunacak. ben kodları yazdım ama sadece sayı girişi kısmı işliyor kodun, gerisi gelmiyor, hata da vermedi, anlayamadım bi bakarsanız iyi olur:

     

    #include<stdio.h>
    #include<math.h>
    #include<conio.h>
    main()
    {
          int birler,onlar,yuzler,binler,onb,yuzb,mil,onmil;
          long int sayi;
          printf("8 basamakli bir sayi giriniz: ");
          scanf("%ld\n",&sayi);
          birler=sayi%10;
          onlar=(sayi%100)/10;
          yuzler=(sayi%1000)/100;
          binler=(sayi%10000)/1000;
          onb=(sayi%100000)/10000;
          yuzb=(sayi%1000000)/100000;
          mil=(sayi%10000000)/1000000;
          onmil=(sayi/10000000);
          sayi=birler+onlar*10+yuzler*100+binler*1000+onb*10000+yuzb*100000+mil*1000000+onmil*10000000;
          if ((birler==onmil) && (onlar==mil) && (yuzler==yuzb) && (binler==onb))
                printf("bu bir palindromik sayidir\n");      
          else
                printf("palindromik sayi degildir\n");    
          getch();            
    }     

     

    yardımcı olanlara teşekkürler.. ;)        

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Sscheme
    Sscheme's avatar
    Kayıt Tarihi: 04/Mart/2007
    Erkek

    #include<stdio.h>
    #include<math.h>

    main()
    {
          int birler,onlar,yuzler,binler,onb,yuzb,mil,onmil;
          long int sayi;
          printf("8 basamakli bir sayi giriniz: ");
          scanf("%d",&sayi);
          birler=sayi%10;
          onlar=(sayi%100)/10;
          yuzler=(sayi%1000)/100;
          binler=(sayi%10000)/1000;
          onb=(sayi%100000)/10000;
          yuzb=(sayi%1000000)/100000;
          mil=(sayi%10000000)/1000000;
          onmil=(sayi/10000000);
          sayi=birler+onlar*10+yuzler*100+binler*1000+onb*10000+yuzb*100000+mil*1000000+onmil*10000000;
          if ((birler==onmil) && (onlar==mil) && (yuzler==yuzb) && (binler==onb))
                printf("bu bir palindromik sayidir\n");     
          else
                printf("palindromik sayi degildir\n");              
    }

    Bu şekilde çalışıyor ama

    Palindrom olayı Stack'le yapılır, aklında bulunsun. Windows platformunda çalışıyorsan  en sona

    System("pause");

    eklemen yeterli konsolun kapanmaması için.

    Kolay gelsin.


    Bütün mesajlarım ve konularım BSD Lisansı"yla lisanslanmıştır.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    elfkrc
    elfkrc's avatar
    Kayıt Tarihi: 26/Ocak/2010
    Dişi

    sscheme, öncelikle windows ortamı ama system pause olayı hata verdi,ben yine include ve getch(); yaptım :)

    2.si senin yaptığın düzeltmede benimkinden hiçbir farkı yok, tek fark ben

     

    scanf("%ld\n",&sayi); 

     

    böyle yapmışım, sen;

     

    scanf("%d",&sayi);

     

    böyle yapmışsın. sayi değişkenini okuduktan sonra alt satıra geçmek için   \n    yazmak hatalı bi kullanımmıdır?

     

    edit: stack ne bilmiyorum :)

     

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    oldwolf
    oldwolf's avatar
    Kayıt Tarihi: 02/Haziran/2002
    Erkek

    basamakları birler hariç yanlış tanımlamışsın, scanf("%ld\n",&sayi); satırında \n kullanımı da hatalıymış...

    system pause olayı için #include <stdlib.h> kullanman gerekiyor.

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int main()
    {
    long int birler,onlar,yuzler,binler,onb,yuzb,mil,onmil;
    long int sayi;
    printf("8 basamakli bir sayi giriniz: ");
    scanf("%ld",&sayi);
    birler=sayi%10;
    onlar=(sayi/10)%10;
    yuzler=(sayi/100)%10;
    binler=(sayi/1000)%10;
    onb=(sayi/10000)%10;
    yuzb=(sayi/100000)%10;
    mil=(sayi/1000000)%10;
    onmil=(sayi/10000000)%10;
    if ((birler==onmil) && (onlar==mil) && (yuzler==yuzb) && (binler==onb))
    printf("bu bir palindromik sayidir\n");
    else
    printf("palindromik sayi degildir\n");
    system("PAUSE");
    return 0;
    }

    çalışıyor...

    bu da string kullanarak:

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

    int main()
    {
    char num[8];
    printf("8 basamakli bir sayi giriniz: ");
    gets(num);
    if ((num[0]==num[7]) && (num[1]==num[6]) && (num[2]==num[5]) && (num[3]==num[4]))
    printf("bu bir palindromik sayidir\n");
    else
    printf("palindromik sayi degildir\n");
    system("PAUSE");
    return 0;
    }


    Metallica Rules
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    elfkrc
    elfkrc's avatar
    Kayıt Tarihi: 26/Ocak/2010
    Dişi

    oldwolf bunu yazdı:
    -----------------------------

    basamakları birler hariç yanlış tanımlamışsın, scanf("%ld\n",&sayi); satırında \n kullanımı da hatalıymış...

    system pause olayı için #include  kullanman gerekiyor.

    #include 
    #include 
    #include
    int main()
    {
    long int birler,onlar,yuzler,binler,onb,yuzb,mil,onmil;
    long int sayi;
    printf("8 basamakli bir sayi giriniz: ");
    scanf("%ld",&sayi);
    birler=sayi%10;
    onlar=(sayi/10)%10;
    yuzler=(sayi/100)%10;
    binler=(sayi/1000)%10;
    onb=(sayi/10000)%10;
    yuzb=(sayi/100000)%10;
    mil=(sayi/1000000)%10;
    onmil=(sayi/10000000)%10;
    if ((birler==onmil) && (onlar==mil) && (yuzler==yuzb) && (binler==onb))
    printf("bu bir palindromik sayidir\n");
    else
    printf("palindromik sayi degildir\n");
    system("PAUSE");
    return 0;
    }

    çalışıyor...

    bu da string kullanarak:

    #include 
    #include 
    #include

    int main()
    {
    char num[8];
    printf("8 basamakli bir sayi giriniz: ");
    gets(num);
    if ((num[0]==num[7]) && (num[1]==num[6]) && (num[2]==num[5]) && (num[3]==num[4]))
    printf("bu bir palindromik sayidir\n");
    else
    printf("palindromik sayi degildir\n");
    system("PAUSE");
    return 0;
    }


    -----------------------------

    öncelikle teşekkürler:)

    ama ben basamaklarda yanlışlık yaptığımı düşünmüyorum. hatamı da buldum sanırım, scanf de \n kullnılmıyormuş galiba alt satıra geçmek için printf("\n") yapmamız gerekiyormuş. 2. verdiğin çözüm daha iyi tabi ama biz daha onları öğrenmedik :)

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    tutay
    tutay's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    C nin çalışma mantığını bilmem ama sadece 8 basamklı değilde başka basamak sayısında da yapmak için sayıyı aldıktan sonra

    for döngüsüyle tersten yazdırıp karşılaştısan daha kolay olmaz mı?

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Hunter
    j4x
    j4x's avatar
    Kayıt Tarihi: 16/Temmuz/2005
    Erkek

    Gereksiz kafa yormak istemiyorsan string olarak al sayıyı, toplam string uzunlugunun yarisina bol substr ile iki yarıyıda al, 2.yi reverse et eşitmi diye bak. Sonra bide sayımı diye bakarsın :)) Hem kac basamakli olduguda farketmez.


    The king is bleeding.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    NmC
    NmC's avatar
    Kayıt Tarihi: 23/Kasım/2008
    Erkek

    gVeR bunu yazdı:
    -----------------------------

    Gereksiz kafa yormak istemiyorsan string olarak al sayıyı, toplam string uzunlugunun yarisina bol substr ile iki yarıyıda al, 2.yi reverse et eşitmi diye bak. Sonra bide sayımı diye bakarsın :))


    -----------------------------

    Yarıya bölmeye gerek var mı sence? :)

    Direk tersini alıp karşılaştırma yapmak yeterli.. Öbür türlü tek haneli sayılarda sıkıntı çıkar :))


    There are 10 types of people in the world. Those who knows binary and those who dont...
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Hunter
    j4x
    j4x's avatar
    Kayıt Tarihi: 16/Temmuz/2005
    Erkek

    NmC bunu yazdı:
    -----------------------------

    gVeR bunu yazdı:
    -----------------------------

    Gereksiz kafa yormak istemiyorsan string olarak al sayıyı, toplam string uzunlugunun yarisina bol substr ile iki yarıyıda al, 2.yi reverse et eşitmi diye bak. Sonra bide sayımı diye bakarsın :))


    -----------------------------

    Yarıya bölmeye gerek var mı sence? :)

    Direk tersini alıp karşılaştırma yapmak yeterli.. Öbür türlü tek haneli sayılarda sıkıntı çıkar :))


    -----------------------------

    ahahah, üzgünüm geç saatin etkisi :P, pali bilmemne sayınında ne olduğunu bilmem göz kararı söyledim öyle bi mantik, senin dedigin gibi yapsın :P


    The king is bleeding.
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    elfkrc
    elfkrc's avatar
    Kayıt Tarihi: 26/Ocak/2010
    Dişi

    tutay bunu yazdı:
    -----------------------------

    C nin çalışma mantığını bilmem ama sadece 8 basamklı değilde başka basamak sayısında da yapmak için sayıyı aldıktan sonra

    for döngüsüyle tersten yazdırıp karşılaştısan daha kolay olmaz mı?


    -----------------------------

    olabalir sanki, aklıma gelmemişti bu.

  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    guru
    guru's avatar
    Kayıt Tarihi: 30/Mart/2007
    Erkek

    #define ARR_LEN(p) (sizeof(p) / sizeof(*p))
    int ispalindromic(int), getreverse(int);
    int main(int argc, char **argv)
    {
        int n = 155;
        printf("%d is %s number", n, ispalindromic(n) == 1 ? "palindromic" : "not palindromic" );
        _getch();
        return 0;
    }
    int ispalindromic(int n)
    {
        int rev = getreverse(n);
        return rev == n;
    }
    int getreverse(int n)
    {
        int revNumb = 0;
        for (; n > 0; n = n / 10)
        {
            revNumb *= 10;
            revNumb += n % 10;
        }
        return revNumb;
    }

     

    pelles c uzerinde yazdim derledim ;)


    ..
Toplam Hit: 4307 Toplam Mesaj: 11