C Döngüden Çıkamama

Serpenos

Kilopat
Katılım
15 Ağustos 2014
Mesajlar
3.257
Makaleler
2
Çözümler
5
Daha fazla  
Cinsiyet
Erkek
Profil Kapağı
1522193036
Selam. Yazılan bir paragrafta istenilen kelimeyi bulan bir kod yazmam gerekiyor ve şöyle bir tane yaptım:

Kod:
#include <stdio.h>
main(){
    int i,j,flag=0;
    char metin[100],kelime[1],sayac,a;
    printf("Taramak istediginiz cumle: ");
    gets(metin);
    printf("Bulmak istediginiz kelime: ");
    gets(kelime);
    for(i=0;metin[i]!='\0';i++){
        for(j=0;kelime[j]<=metin[i];j++){
            sayac++;
            if (kelime[j]==metin[i])
            printf("Aradiginiz kelime var.");
            flag=1;
            break;
        
        }
        if(flag==0)
        continue;
    }

}

Burada olan kelimeyi buluyor ama aranan kelimenin olmadığını else veya başka bir if ile yaptığımda sorun çıkarıyor.

Yardım eder misiniz?

Ek olarak bu kelimenin yazılan cümlede kaçıncı sırada olduğunu da bulmam gerekiyor, o konuda da fikir verirseniz sevinirim.
 
if yapısı tek satırda '{ }' parantezlerine gerek duymaz çoklu satırda parantezleri kullanmak zorundasın.
C++:
if (kelime[j]==metin[i])

{

            printf("Aradiginiz kelime var.");

            flag=1;

            break;

}
ikinci doğru kod bu:
C++:
if (!flag)
    continue;
 
Peki aradığım kelimenin olmadığını nerede belirteceğim? ilk if bloğunun sonunda sorun oluyor ve döngüye girip bir çok kez aradığınız kelime yok yazdırıyor.
 
Kod:
#include <stdio.h>
#include <string.h>
int main(){

    int i,j, sayac = 0 ;

    char metin[1000],kelime[1000];
    printf("Taramak istediginiz cumle: ");
    gets(metin);
    printf("Bulmak istediginiz kelime: ");
    gets(kelime);

    for(i=0; metin[i] != '\0'; i++){

        for(j=0; kelime[j] != '\0'; j++){
            if(kelime[j] == metin[i+j]){
                sayac++;
            }
            if(sayac == strlen(kelime)){
                printf("There is \n");
                return 0;
            }
        }


    }
    printf("No");
    return 0;

}

Hocam kodunuzda kelime 2 harfli, sayac char tipinde ve ne ise yaradigini anlayamadim.
 
Kod:
#include <stdio.h>
#include <string.h>
int main(){

    int i,j, sayac = 0 ;

    char metin[1000],kelime[1000];
    printf("Taramak istediginiz cumle: ");
    gets(metin);
    printf("Bulmak istediginiz kelime: ");
    gets(kelime);

    for(i=0; metin[i] != '\0'; i++){

        for(j=0; kelime[j] != '\0'; j++){
            if(kelime[j] == metin[i+j]){
                sayac++;
            }
            if(sayac == strlen(kelime)){
                printf("There is \n");
                return 0;
            }
        }


    }
    printf("No");
    return 0;

}

Hocam kodunuzda kelime 2 harfli, sayac char tipinde ve ne ise yaradigini anlayamadim.
Hocam string.h kütüphanesini kulanmama izin yok. Sayacı da kelimenin cümlede kaçıncı satırda kullanılacağını göstermek için oluşturmuştum ama kullanamadım kaldı öyle.
 
string.h yerine hizlica bir for yazabilirsiniz. Ayrica bir satirin kac harften olusacagini bilmedigim icin tam olarak satiri tanimlayamadim. Onun yerine size metin arrayinde aradiginiz kelimenin hangi indexlerde oldugunu soyluyor.
C:
#include <stdio.h>
#include <string.h>
int main(){

    int i,j, sayac = 0 ;
    int k=0;
    char metin[1000],kelime[1000];
    printf("Taramak istediginiz cumle: ");
    gets(metin);
    printf("Bulmak istediginiz kelime: ");
    gets(kelime);
    for(k=0; kelime[k] != '\0'; k++){
    }
    for(i=0; metin[i] != '\0'; i++){

        for(j=0; kelime[j] != '\0'; j++){
            if(kelime[j] == metin[i+j]){
                sayac++;
            }
            if(sayac == k){
                printf("There is and cumle %d . karakterden basliyor ve %d de bitiyor. \n", i, i+k-1);
                return 0;
            }
        }


    }
    printf("No");
    return 0;

}
k'yi strlen yerine kullandim. Bos for donuyor.
 
C++:
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string metin = "";
    cout << "Taramak istediginiz cumle : ";
    getline(cin, metin);

    string kelime = "";
    cout << "Bulmak istediginiz kelime : ";
    getline(cin, kelime);

    bool flag = false;
    string metindeki_kelime = "";
    for (char i : metin)
    {
        if (i != ' ')
        {
            metindeki_kelime = metindeki_kelime + i;
        }
        else
        {
            metindeki_kelime = "";
        }

        if (kelime == metindeki_kelime)
        {
            flag = true;
            break;
        }
    }
    if (flag)
        cout << "Metinde aradiginiz kelime bulunmakta." << endl;
    else
        cout << "Metinde aradiginiz kelime bulunmamakta." << endl;
    return 0;

}
İsterseniz kodu şöyle yazın.
 
string.h yerine hizlica bir for yazabilirsiniz. Ayrica bir satirin kac harften olusacagini bilmedigim icin tam olarak satiri tanimlayamadim. Onun yerine size metin arrayinde aradiginiz kelimenin hangi indexlerde oldugunu soyluyor.
C:
#include <stdio.h>
#include <string.h>
int main(){

    int i,j, sayac = 0 ;
    int k=0;
    char metin[1000],kelime[1000];
    printf("Taramak istediginiz cumle: ");
    gets(metin);
    printf("Bulmak istediginiz kelime: ");
    gets(kelime);
    for(k=0; kelime[k] != '\0'; k++){
    }
    for(i=0; metin[i] != '\0'; i++){

        for(j=0; kelime[j] != '\0'; j++){
            if(kelime[j] == metin[i+j]){
                sayac++;
            }
            if(sayac == k){
                printf("There is and cumle %d . karakterden basliyor ve %d de bitiyor. \n", i, i+k-1);
                return 0;
            }
        }


    }
    printf("No");
    return 0;

}
k'yi strlen yerine kullandim. Bos for donuyor.
Çok teşekkür ederim hocam. Kaçıncı indiste olduğunu yapamıyorum yardımcı oldu bayağı.


C++:
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string metin = "";
    cout << "Taramak istediginiz cumle : ";
    getline(cin, metin);

    string kelime = "";
    cout << "Bulmak istediginiz kelime : ";
    getline(cin, kelime);

    bool flag = false;
    string metindeki_kelime = "";
    for (char i : metin)
    {
        if (i != ' ')
        {
            metindeki_kelime = metindeki_kelime + i;
        }
        else
        {
            metindeki_kelime = "";
        }

        if (kelime == metindeki_kelime)
        {
            flag = true;
            break;
        }
    }
    if (flag)
        cout << "Metinde aradiginiz kelime bulunmakta." << endl;
    else
        cout << "Metinde aradiginiz kelime bulunmamakta." << endl;
    return 0;

}
İsterseniz kodu şöyle yazın.
Hocam DEV C++'da C yazıyoruz ama a=a+1 yerine a++ kullanıyoruz sadece :D Yani cout cin değil printf scanf kullanıyoruz. Ki sorun bu değil basitçe çevrilir ama bool görmedim ve fonksiyonları da görmedim bilmediğim bir kaç kelime daha var ama teşekkür ederim.
 
Çok teşekkür ederim hocam. Kaçıncı indiste olduğunu yapamıyorum yardımcı oldu bayağı.



Hocam DEV C++'da C yazıyoruz ama a=a+1 yerine a++ kullanıyoruz sadece :D Yani cout cin değil printf scanf kullanıyoruz. Ki sorun bu değil basitçe çevrilir ama bool görmedim ve fonksiyonları da görmedim bilmediğim bir kaç kelime daha var ama teşekkür ederim.
Öncelikle DEV de yada başka IDE'de yapmanız çok şey değiştimez çünkü dil aynı dil sadece compilere çok ilkel yada farklı olmamalı. printf ve scanf bunlar (stdio.h ve conio.h kütüphanlerine ait değişkenler) cin ve cout ise direkt olarak (iostream 'e ait) yani iostream tanımlıysa her sistemde cin cout çağırabilirsin. bool (BOOLEAN) karar değişkenleridir yani sadece true ya da false döndürür. Örneğin bool karar = true yaparsan !karar = false olur; if(karar == true) yazmak yerine if (karar) yazarsanız ya da ünlemli olanı da kullanırsanız fark etmez. Bilmediğiniz kelime sayısı ne kadar gelişirseniz gelişin emin olun her zaman bildiklerinizden fazla olacaktır. Çünkü programlama dili de gelişiyordur.
 
Öncelikle DEV de yada başka IDE'de yapmanız çok şey değiştimez çünkü dil aynı dil sadece compilere çok ilkel yada farklı olmamalı. printf ve scanf bunlar (stdio.h ve conio.h kütüphanlerine ait değişkenler) cin ve cout ise direkt olarak (iostream 'e ait) yani iostream tanımlıysa her sistemde cin cout çağırabilirsin. bool (BOOLEAN) karar değişkenleridir yani sadece true ya da false döndürür. Örneğin bool karar = true yaparsan !karar = false olur; if(karar == true) yazmak yerine if (karar) yazarsanız ya da ünlemli olanı da kullanırsanız fark etmez. Bilmediğiniz kelime sayısı ne kadar gelişirseniz gelişin emin olun her zaman bildiklerinizden fazla olacaktır. Çünkü programlama dili de gelişiyordur.
Teşekkür ederim hocam araştırmayı seviyorum bunları da sorun şuan bunları biliyor olsam da kullanmama izin verilmemesi. Örneğin döngülerle uğraşıyoruz bayadır ama hala string kütüphanesi kullanmamız yerine döngüyle yapmamız söyleniyor. Ha zor değil evet ama napalım yapmıyorlar.
string.h yerine hizlica bir for yazabilirsiniz. Ayrica bir satirin kac harften olusacagini bilmedigim icin tam olarak satiri tanimlayamadim. Onun yerine size metin arrayinde aradiginiz kelimenin hangi indexlerde oldugunu soyluyor.
C:
#include <stdio.h>
#include <string.h>
int main(){

    int i,j, sayac = 0 ;
    int k=0;
    char metin[1000],kelime[1000];
    printf("Taramak istediginiz cumle: ");
    gets(metin);
    printf("Bulmak istediginiz kelime: ");
    gets(kelime);
    for(k=0; kelime[k] != '\0'; k++){
    }
    for(i=0; metin[i] != '\0'; i++){

        for(j=0; kelime[j] != '\0'; j++){
            if(kelime[j] == metin[i+j]){
                sayac++;
            }
            if(sayac == k){
                printf("There is and cumle %d . karakterden basliyor ve %d de bitiyor. \n", i, i+k-1);
                return 0;
            }
        }


    }
    printf("No");
    return 0;

}
k'yi strlen yerine kullandim. Bos for donuyor.
Hocam programı çalıştırdığımda olmayan kelimelere de karşılık bulduğunu fark ettim.
 
Son düzenleme:
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Yeni konular

Geri
Yukarı