C Dersi Sınavım için tavsiye

Obiwan Canosi

Kilopat
Katılım
26 Ocak 2016
Mesajlar
88
Öncelikle herkese iyi forumlar. Yazılım mühendisliği birinci sınıfım. Neyse çok sıkmadan sizi konuyu anlatayım. Bilgisayar programlama dersinin finali var ve yapamadığım birkaç soru var. Sizden yardım almak istedim bu yüzden. Hemen sorulara geçiriyorum.
1.Türkçe dilinde iki ünlü yan yana gelemez. Bu soruda yazdığımız programla iki aynı sesli karakterin yan yana gelip gelmediğini kontrol etmemiz isteniyor.
2.F, J, h harfleri Türkçe kelimelerde yoktur. Kelimede bu karakterlerin olup olmadığını bulmamızı istiyor hocamız.
3. C, Ğ, L, M, N, R, V, Z harfleri kelimenin başında bulunamaz.
Ve 4. Başta çift sessiz harf bulunmaz.

Sorular bunlar diğer soruları kendim halledebildim. Bu sorularda yardımınıza ihtiyacımın olduğunu düşündüm. Desteklerini bekliyorum.

Tekrardan iyi forumlar.
 
Son düzenleyen: Moderatör:
\Regex\ (Regular Expressions) kullanmanıza izin var mı yoksa saf C ile mi yazmanızı istiyor.
Eğer Regex serbest ise bahsedilen ifadeleri hazırlamak hiç de uzun sürmez.

Ki hiç bir ek kütüphane vs kullanmadan da 3. ve 4. sorular String'in(char[]) 0. ve 1. elemanına bakılarak bile çözülebilir.
Benzer şekilde 2. soru da lineer bir arama ile basitçe yapılabilir.
 
Son düzenleme:
İlki için sesli harfleri diziye koyarsın. Bir değişken tanımlayıp sıfır değerini verirsin. Sesli harf görünce 1 olur, sessiz görünce 0. Her karakter için eskisi ile kontrol edersin. Eskisi 1 iken yenisi de 1 olursa iki tane sesli gelmiş demektir.
İkinci için o harfleri bir diziye koyarsın. Sonrasında sana verilen metnin tüm karakterlerini kıyaslarsın.
Üçüncüde o harfleri diziye atıp kontrol edersin.
Dördüncü için bir değişkeni sıfır olarak tanımlarsın. İlk kararkter sesli değilse artırırsın, ikinci için de aynısını yaparsın. Değişken kelime sonunda 2 ise ikisi de sessizdir.
 
Kod:
 kural1 = "(([a-zA-ZğĞüÜşŞiİöÖçÇ])*[aAeEıIiİoOöÖuUüÜ]{2,}([a-zA-ZğĞüÜşŞiİöÖçÇ])*)+"
 kural2 = "(([a-zA-ZğĞüÜşŞiİöÖçÇ])*([fFjJhH]+)([a-zA-ZğĞüÜşŞiİöÖçÇ])*)+"
 kural3 = "(([cCğĞlLmMnNrRvVzZ])([a-zA-ZğĞüÜşŞiİöÖçÇ])*)"
 kural4 = "(([A-Za-zğĞşŞçÇ&&[^aAeEıIiİoOöÖuUüÜ]]){2,}([a-zA-ZğĞüÜşŞiİöÖçÇ])*)"

Dediğim gibi Regex kullanılabiliyorsa her bir soru tek satırda yapılabilir.
 
Kod:
 kural1 = "(([a-zA-ZğĞüÜşŞiİöÖçÇ])*[aAeEıIiİoOöÖuUüÜ]{2,}([a-zA-ZğĞüÜşŞiİöÖçÇ])*)+"
kural2 = "(([a-zA-ZğĞüÜşŞiİöÖçÇ])*([fFjJhH]+)([a-zA-ZğĞüÜşŞiİöÖçÇ])*)+"
kural3 = "(([cCğĞlLmMnNrRvVzZ])([a-zA-ZğĞüÜşŞiİöÖçÇ])*)"
kural4 = "(([A-Za-zğĞşŞçÇ&&[^aAeEıIiİoOöÖuUüÜ]]){2,}([a-zA-ZğĞüÜşŞiİöÖçÇ])*)"

Dediğim gibi Regex kullanılabiliyorsa her bir soru tek satırda yapılabilir.


Öncelikle ilginiz için teşekkür ederim.
Regex kullanmamız yasak, saf c ile yazmamız gerekiyor.
İlki için sesli harfleri diziye koyarsın. Bir değişken tanımlayıp sıfır değerini verirsin. Sesli harf görünce 1 olur, sessiz görünce 0. Her karakter için eskisi ile kontrol edersin. Eskisi 1 iken yenisi de 1 olursa iki tane sesli gelmiş demektir.
İkinci için o harfleri bir diziye koyarsın. Sonrasında sana verilen metnin tüm karakterlerini kıyaslarsın.
Üçüncüde o harfleri diziye atıp kontrol edersin.
Dördüncü için bir değişkeni sıfır olarak tanımlarsın. İlk kararkter sesli değilse artırırsın, ikinci için de aynısını yaparsın. Değişken kelime sonunda 2 ise ikisi de sessizdir.

Çok teşekkür ederim deneyeceğim. Yarın teslim etmem gerekiyor, bugün sadece bunun ile uğraşacakmışım gibi.
 
Öncelikle herkese iyi forumlar. Yazılım mühendisliği birinci sınıfım. Neyse çok sıkmadan sizi konuyu anlatayım. Bilgisayar programlama dersinin finali var ve yapamadığım birkaç soru var. Sizden yardım almak istedim bu yüzden. Hemen sorulara geçiriyorum.
1.Türkçe dilinde iki ünlü yan yana gelemez. Bu soruda yazdığımız programla iki aynı sesli karakterin yan yana gelip gelmediğini kontrol etmemiz isteniyor.
2.F, J, h harfleri Türkçe kelimelerde yoktur. Kelimede bu karakterlerin olup olmadığını bulmamızı istiyor hocamız.
3. C, Ğ, L, M, N, R, V, Z harfleri kelimenin başında bulunamaz.
Ve 4. başta çift sessiz harf bulunmaz.

Sorular bunlar diğer soruları kendim halledebildim. Bu sorularda yardımınıza ihtiyacımın olduğunu düşündüm. Desteklerini bekliyorum.

Tekrardan iyi forumlar.

Kontrol edilecek olan karakter dizisini kullanıcı klavyeden mi girecek? Yoksa dosyadan mı okunacak? Kontrol sonunda ekrana girdiğiniz karakter dizisi kabul edildi/edilmedi gibi bir yazı mı yazdırılacak? Yoksa başka bir şey mi yapılacak?
 
Kontrol edilecek olan karakter dizisini kullanıcı klavyeden mi girecek? Yoksa dosyadan mı okunacak? Kontrol sonunda ekrana girdiğiniz karakter dizisi kabul edildi/edilmedi gibi bir yazı mı yazdırılacak? Yoksa başka bir şey mi yapılacak?

Karakter dizisi kullanıcıdan alınacak, o bölümde sıkıntı yok yazdırmada da sıkıntı yok, tek sıkıntı kelime kontrolü yapamıyorum.
İlki için sesli harfleri diziye koyarsın. Bir değişken tanımlayıp sıfır değerini verirsin. Sesli harf görünce 1 olur, sessiz görünce 0. Her karakter için eskisi ile kontrol edersin. Eskisi 1 iken yenisi de 1 olursa iki tane sesli gelmiş demektir.
İkinci için o harfleri bir diziye koyarsın. Sonrasında sana verilen metnin tüm karakterlerini kıyaslarsın.
Üçüncüde o harfleri diziye atıp kontrol edersin.
Dördüncü için bir değişkeni sıfır olarak tanımlarsın. İlk kararkter sesli değilse artırırsın, ikinci için de aynısını yaparsın. Değişken kelime sonunda 2 ise ikisi de sessizdir.


Dediğiniz üzere yaptım iki soruyu fakat bir problem çıktı karşıma iki soruda da .
Dediğinizi yaptığımda girilen kelimenin "kaan" olduğunu düşünün sessiz 1 oldu sesli 1 - 2 oldu sessiz 2 oldu. Ya da sessiz harf değişkeni atamayıp direk harften gittiğimde ise bazı kelimelere uymakta bazılarına uymamakta. O mantık hatasında yardım eder misiniz?
 
Son düzenleme:
Karakter dizisi kullanıcıdan alınacak, o bölümde sıkıntı yok yazdırmada da sıkıntı yok, tek sıkıntı kelime kontrolü yapamıyorum.

C:
#include <stdio.h>
#include <string.h>

int main() {
    char a[256];
    printf("Lütfen bir karakter dizisi giriniz: ");
    scanf("%s", a);
    int b = (int)strlen(a), c, d = 0;
    for(c=0; c<b; c++) {
        if((a[c] == 'a' && a[c+1] == 'a') || (a[c] == 'A' && a[c+1] == 'A') || (a[c] == 'I' && a[c+1] == 'I') || (a[c] == 'o' && a[c+1] == 'o') || (a[c] == 'O' && a[c+1] == 'O') || (a[c] == 'u' && a[c+1] == 'u') || (a[c] == 'U' && a[c+1] == 'U') || (a[c] == 'e' && a[c+1] == 'e') || (a[c] == 'E' && a[c+1] == 'E') || (a[c] == 'i' && a[c+1] == 'i')) {
            printf("Türkçe dilinde iki ünlü yan yana gelemez.\n");
            d = 1;
        }
    }
    for(c=0; c<b; c++) {
        if(a[c] == 'f' || a[c] == 'F' || a[c] == 'j' || a[c] == 'J' || a[c] == 'h' || a[c] == 'H') {
            printf("F, J, H harfleri Türkçe kelimelerde yoktur.\n");
            d = 1;
        }
    }
    if((a[0] == 'b' && a[1] == 'b') || (a[0] == 'B' && a[1] == 'B') || (a[0] == 'c' && a[1] == 'c') || (a[0] == 'C' && a[1] == 'C') || (a[0] == 'd' && a[1] == 'd') || (a[0] == 'D' && a[1] == 'D') || (a[0] == 'f' && a[1] == 'f') || (a[0] == 'F' && a[1] == 'F') || (a[0] == 'g' && a[1] == 'g') || (a[0] == 'G' && a[1] == 'G') || (a[0] == 'h' && a[1] == 'h') || (a[0] == 'H' && a[1] == 'H') || (a[0] == 'j' && a[1] == 'j') || (a[0] == 'J' && a[1] == 'J') || (a[0] == 'k' && a[1] == 'k') || (a[0] == 'K' && a[1] == 'K') || (a[0] == 'l' && a[1] == 'l') || (a[0] == 'L' && a[1] == 'L') || (a[0] == 'm' && a[1] == 'm') || (a[0] == 'M' && a[1] == 'M') || (a[0] == 'n' && a[1] == 'n') || (a[0] == 'N' && a[1] == 'N') || (a[0] == 'p' && a[1] == 'p') || (a[0] == 'P' && a[1] == 'P') || (a[0] == 'r' && a[1] == 'r') || (a[0] == 'R' && a[1] == 'R') || (a[0] == 's' && a[1] == 's') || (a[0] == 'S' && a[1] == 'S') || (a[0] == 't' && a[1] == 't') || (a[0] == 'T' && a[1] == 'T') || (a[0] == 'v' && a[1] == 'v') || (a[0] == 'V' && a[1] == 'V') || (a[0] == 'y' && a[1] == 'y') || (a[0] == 'Y' && a[1] == 'Y') || (a[0] == 'z' && a[1] == 'z') || (a[0] == 'Z' && a[1] == 'Z')) {
        printf("Başta çift sessiz harf bulunamaz.\n");
        d = 1;
    }
    if(d==0)
        printf("Girdiğiniz karakter dizisi kabul edilmiştir.\n");
    return 0;
}
 

Yeni konular

Geri
Yukarı