Anasayfa

C ve Sistem Programcıları Derneği

  • CSD Hakkında
    • Yönetim Kurulu
    • Referanslar
    • Üyelik
    • Adres
    • Kroki
    • İletişim
  • Kurslar
    • Kurs Başvurusu
    • Eğitmenler
  • Seminerler
    • Seminer İste
    • Seminer Ver
  • Kaynaklar
    • Yararlı Linkler
    • Kaynak Kod Arşivi
    • Makaleler
    • Çalışma Soruları
    • Yararlı Kitaplar
    • Dosya Arşivi
    • Döküman Arşivi
  • Duyurular
  • Haberler
  • İş İlanları
    • İş İlanı Gönder
  • SSS
  • Kurs Başvurusu

menü

  • CSD Hakkında
    • Yönetim Kurulu
    • Referanslar
    • Üyelik
    • Adres
    • Kroki
    • İletişim
  • Kurslar
    • Kurs Başvurusu
    • Eğitmenler
  • Seminerler
    • Seminer İste
    • Seminer Ver
  • Kaynaklar
    • Yararlı Linkler
    • Kaynak Kod Arşivi
    • Makaleler
    • Çalışma Soruları
    • Yararlı Kitaplar
    • Dosya Arşivi
    • Döküman Arşivi
  • Duyurular
  • Haberler
  • İş İlanları
    • İş İlanı Gönder
  • SSS
  • Kurs Başvurusu

e-posta ile bilgilendirme.

Derneğimizdeki etkinliklerden haberdar olun!

Haber mektubu üyeliğiniz

Kimler çevrimiçi

Şu an 0 kullanıcı ve 4 ziyaretçi çevrimiçi.
""
dreamhost
Anasayfa

Belirli Harfler ve Belirli Sayıdaki Jokerle Oluşturulabilen Kelimeleri Bulan Program

25.03.2010 - 15:05 tarihinde nerg gönderdi

Programın çalışalabilmesi için bir sözlük dosyasına ihtiyaç var. Bu bir text dosya (dict.txt) ve içinde, her bir satırda bir kelime olacak şekilde İngilizce kelimeler bulunuyor. Kelimelerin dosya içinde alfabetik sırada olmaları gerekmiyor. Program kullancıdan bir grup harf ve belli sayıda joker karakter (Her bir * karakteri bir jokeri temsil eder.) alıyor. Dosya içinde bulunan İngilizce kelimelerden, kullancının verdiği harflerle ve verilen saydaki jokerle oluturulabilen kelimeler bulunup ekrana yazdırılıyor. (Bir kelime, bir fonksiyon oyununda oldu gibi.) Kelimeler ekrana yazdırılmadan önce, daha uzun olan kelimeler listede daha önce gelecek şekilde sıraya diziliyor.

Örnek ekran çıktısı: 

enter the letters (* for joker): gune*
net
new
run
no
in

enter the letters (* for joker): bent*
bent
debt
bit
net
new
not
no
in

Kaynak kod: 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
#define SIZE 80
 
int count_chr(const char *pattern, int ch);
int check_word(const char *word, const char *pattern);
void sort_list(char **p, int size);
void display_list(char **p, int size);
 
int main(void)
{
   FILE *in_file;
   char pattern[SIZE];
   char line[SIZE];
   int num_of_star;
   int status, i;
   char *match_list[100];
 
   if ((in_file = fopen("dict.txt", "r")) == NULL) {
      printf("can not open dict.txt");
      return 0;
   }
 
 
   printf("enter the letters (* for joker): " );
   gets(pattern);
 
   i = 0;
   while (fgets(line, SIZE, in_file) != NULL) {
      line[strlen(line) - 1] = '\0';
      num_of_star = count_chr(pattern, '*');
      status = check_word(line, pattern);
      if (num_of_star + status >= 0) {
         match_list[i] = malloc(strlen(line) + 1);
         if (match_list[i] == NULL) {
            printf("not enough memory!");
            return 0;
         }
         strcpy(match_list[i++], line);
      }
   }
 
   sort_list(match_list, i);
   display_list(match_list, i);
   fclose(in_file);
   return 0;
}
/*****************************************************************
pattern karakter dizisinde bulunan ch karakterlerini sayar ve bu
degeri dondurur.
*****************************************************************/
int count_chr(const char *pattern, int ch)
{
   int count = 0;
 
   while (*pattern != '\0') {
      if (*pattern == ch)
         count++;
      pattern++;
   }
   return count;
}
/*****************************************************************
word adresindendeki karakter dizisinde bulunan fakat pattern
adresindeki karakter dizisinde bulunmayan karakterlerin saysn
dondurur. Geri donus degeri 0 ise word karakter dizisi pattern
karakter dizisinde bulunan karakterlerle olusturulabiliyor demektir.
*****************************************************************/
int check_word(const char *word, const char *pattern)
{
   int count = 0;
   char temp[SIZE], *p;
 
   strcpy(temp, pattern);
 
   while (*word != '\0') {
      p = temp;
      while (*p != '\0') {
         if (*p == *word)
            break;
         p++;
      }
      if (*p == '\0')
         count--;
      else
         *p = '*';      /* pattern icinde bulunan karakter * ile eziliyor. */
      word++;
   }
   return count;
}
/*****************************************************************/
void sort_list(char **p, int size)
{
   int i, j, max;
   char temp[SIZE];
 
   for (i = 0; i < size; i++) {
      max = i;
      for (j = i + 1; j < size; j++)
         if (strlen(p[j]) > strlen(p[max]))
            max = j;
      strcpy(temp, p[i]);
      strcpy(p[i], p[max]);
      strcpy(p[max], temp);
   }
}
/*****************************************************************/
void display_list(char **p, int size)
{
   int i;
 
   for (i = 0;i < size; i++)
      printf("%s\n", p[i]);
}
  • Yazıcı uyumluYazıcı uyumlu
  • Arkadaşa gönderArkadaşa gönder
  • PDFPDF
Etiketler:
  • C

Adres: 2.Taşocağı Cd. Oğuz Sk. Barbaros Apt. No: 11/4 PK: 34387  Mecidiyeköy / İSTANBUL Tel: (212) 274 63 60  (212) 274 99 89  (212) 275 88 97  (212) 288 35 20 Fax: (212) 275 88 97 E-Posta: csystem@csystem.org

İçerik yayınları
Fervens Drupal theme by Leow Kah Thong. Designed by Design Disease and brought to you by Smashing Magazine.