29 Ağustos 2014 Cuma

C Programlamada İstatistiksel Metin Bilgisini Yazdıran Program

Verilen bir metin parçası ile ilgili bazı istatistiksel bilgiler elde etmek için bir program 
istenmektedir. Bunun için kullanıcı metin parçasını, aşağıda belirtilen kısıtlara uygun olarak 
ve tek seferde klavyeden girecektir:
 Kelimelerden sonra sadece boşluk, virgül veya noktalı virgül karakterlerinden birisi 
gelebilir. 
 Cümlelerden sonra sadece nokta, soru işareti, ünlem veya iki nokta üst üste 
karakterlerinden birisi gelebilir. 
 Kelime aralarında sadece bir karakter olabilir. 
 Kelimeler sadece Latin ve Türk alfabelerinde yer alan harfler içerebilir. 
 # karakteri, metnin bittiğini belirtir. 
Veri girişleri sırasında hatalı giriş yapılmayacağı varsayılmalı ve metnin bittiğini gösteren 
karakterden sonrası dikkate alınmamalıdır. Metindeki her bir cümleyi oluşturan harfler, bir dik 
üçgen oluşturacak şekilde (1. satırda 1 harf, 2. satırda 2 harf, …, n. satırda n harf v.b.) ekrana 
basılmalıdır. Basılan harflerin sayısı yeterli olmadığında, son satırın kalan kısmı için + 
karakteri kullanılmalıdır. Metindeki tüm cümleler bu şekilde ekrana basıldıktan sonra ise 
aşağıda listelenen istatistiksel bilgiler ekrana yazdırılmalıdır: 
 Metindeki toplam cümle sayısı 
 Metindeki toplam kelime sayısı 
 Metindeki toplam karakter sayısı 
 Metindeki toplam harf sayısı 
 Metindeki Latin alfabesinde yer almayan harflerin sayısı ve toplam harf sayısı içindeki 
yüzdesi 
 Cümlelerin ortalama kelime sayısı 
 Kelimelerin ortalama harf sayısı 
 4 harften kısa kelimelerin sayısı 
 10 harften uzun kelimelerin sayısı 
 En uzun kelimenin harf sayısı 
 3 kelimeden kısa cümlelerin sayısı


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

int main()
{
    char harf;
    int toplamCumle=0,toplamSozcuk=0,toplamKarakter=0,toplamHarf=0,latinSay=0,cumledekiharf=0;
    int kisa_sozcukSayisi=0, uzun_sozcukSayisi=0,enUzunHarf=0, kisaCumle=0,satir=1,sutun=1,kelimedekiHarf=0,cumledekiSozcuk=0;
    float yuzde;

    printf("Lutfen bir cumle veya kelime  yaziniz: \n\n");
    fflush(stdin);
    harf=getchar();
    printf("\n");
    do{
        toplamKarakter++;//harfler ve imla iþaretlerinin sayisi
        //metindeki toplam harflerin sayisi toplamKarakter-toplamSozcuk formuluyle bulunur.cunku her kelime ayni zamanda harf olmayan
        //karakterlerin sayisi demektir.
        kelimedekiHarf++;//o an okunan kelimenin harf sayisi
        if(harf==' '||harf==','||harf==';'){//eger kelime bittiyse;
            toplamSozcuk++;//metindeki toplam kelime sayisi bir arttirilir
            //þu anki harf degiskeni bosluk,virgül ya da
            kelimedekiHarf--;//noktali virgül olduðunda harfler bir azaltilir
            cumledekiharf+=kelimedekiHarf;//o anki cumle içindeki harflerin sayisi
            cumledekiSozcuk++;//o anki cumledeki kelime sayisi
            if(kelimedekiHarf>enUzunHarf) enUzunHarf=kelimedekiHarf;//karsilastirmalar
            if(kelimedekiHarf>10) uzun_sozcukSayisi++;
            if(kelimedekiHarf<4) kisa_sozcukSayisi++;
            kelimedekiHarf=0;//yeni kelime için harf sayýsý sýfýrlanýr
        }
        else if(harf=='.'||harf=='?'||harf==':'||harf=='!'){//eger cümle bittiyse
            toplamCumle++;//metindeki cumle sayisi bir arttirilir
            toplamSozcuk++;//cümlenin son kelimesi için de arttirma yapilir
            kelimedekiHarf--;
            cumledekiharf+=kelimedekiHarf;
            cumledekiSozcuk++;
            if(sutun==1) satir--;//eger son satirin ilk karakteri nokta,?,: veya ! ise satir sayisi azaltilir çünkü ücgen dolmustur
            if(cumledekiSozcuk<3) kisaCumle++;
            if(kelimedekiHarf>enUzunHarf) enUzunHarf=kelimedekiHarf;
            if(kelimedekiHarf>10) uzun_sozcukSayisi++;
            if(kelimedekiHarf<4) kisa_sozcukSayisi++;

            if( cumledekiharf<(satir)*(satir+1)/2){//dik üçgenin n satirina (n*n+1)/2 kadar eleman sayar.(1den n'e kadar olan sayilarin toplami )
                while(cumledekiharf<(satir)*(satir+1)/2){//bos yerlere + yazilir
                    printf("+");
                    cumledekiharf++;
                }
                printf("\n");
            }
            printf("\n");
            satir=1;//yeni cümle için satira ve sutuna baslangic degeri verilir.
            sutun=1;
            cumledekiharf=0;
            kelimedekiHarf=0;
            cumledekiSozcuk=0;
            }else
            {   //eger harf okunduysa;
                printf("%c",harf);
                toplamHarf++;
                if(harf<0) latinSay++;//Turkce karakter olup olmadigi incelenir
                if(satir==sutun)
                    {//satir doldugunda yeni satira gecilir
                    printf("\n");
                    satir++;//satir sayisi bir arttirilir
                    sutun=1;//yeni sütun 1 olur
                }
                else sutun++;//satir dolmadiysa sütun bir arttirilir
            }
        harf=getchar();//yeni karakter alinir
    }while(harf!='#');// # iþaretini görene kadar karakter alma islemi gerçeklesirilir

    yuzde=((float)latinSay*100/(toplamKarakter-toplamSozcuk));

    printf("Metindeki toplam cumle sayisi: %d\n",toplamCumle);
    printf("Metindeki toplam sozcuk sayisi: %d\n",toplamSozcuk);
    printf("Metindeki toplam karakter sayisi: %d\n",toplamKarakter);
    printf("Metindeki toplam harf sayisi: %d\n",toplamKarakter-toplamSozcuk);
    printf("Metindeki Latin alfabesinde yer almayan harflerin sayisi ve toplam harf sayisi icindeki yuzdesi: %d ve %%%.2f\n",latinSay,yuzde);
    printf("Cumlelerin ortalama sozcuk sayisi: %.2f\n",(float)toplamSozcuk/toplamCumle);
    printf("Sozcuklerin ortalama harf sayisi: %.2f\n",(float)toplamHarf/toplamSozcuk);
    printf("4 harften kisa kelimelerin sayisi: %d\n",kisa_sozcukSayisi);
    printf("10 harften uzun kelimelerin sayisi: %d\n",uzun_sozcukSayisi);
    printf("En uzun kelimenin harf sayisi: %d\n",enUzunHarf);
    printf("3 kelimeden kisa cumlelerin sayisi: %d\n",kisaCumle);

    return 0;
}

Hiç yorum yok:

Yorum Gönder