folder Tahribat.com Forumları
linefolder C - C++
linefolder C++ Ödev Yardım Lazım



C++ Ödev Yardım Lazım

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Webci58
    Webci58's avatar
    Kayıt Tarihi: 12/Eylül/2012
    Erkek

    Ödevi tam yapamadım bi türlü. bukadarını yapa bildim ama düzgün çalışmıyor

    #include <cstdlib>
    #include <iostream>
    #include <cstring>
    #include <stdio.h>

    int krakteradet;//bu degisken benim istedeigim string adedini tutacak.
    using namespace std;

    int fnk(char *kdizi1,char *kdizi2)
    {

    int i,j;
    for(int i=0;(strlen(kdizi1));i++) //1.krakter dizisinin 0. elemanindan kontrole basladm
    for (int j=0;(strlen(kdizi2));j++)//2.krakter dizisinin 0. elemanindan kontrole basladm
    if(kdizi1[i]!=kdizi2[j])//eger 1.stringin 0. elemani 2.stringin 0. elemanindan farkli ise
    {
    krakteradet++; //degiskenimi 1 artir böylece 1.dizide olan 2.dizice olmayan elemanlarin sayisini bulmus oluyorum.
    }
    return krakteradet;//degiskenimi gonder.
    }

    int main()
    {
    char kdizi1[0],kdizi2[0];

    cout<<"1.Stringi Girin= ";
    cin>>kdizi1;
    cout<<"2.Stringi Girin = ";
    cin>>kdizi2;

    cout<<"\n\n1.Dizide olan 2.'de olmayan\nstring sayisinin degisken adresi= "<<krakteradet;//istedigim degeri tutan degiskenin adresini yazdiriyorum.

    cin>>krakteradet;


    system("PAUSE");
    return EXIT_SUCCESS;
    }

     

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

    ÖDEV

    İki karakter dizisini aşağıdaki şartlara göre karşılaştıran programı yazınız

    - kullanıcıdan istenen iki adet karakter dizisi karşılaştırılacaktır

    -karşılaştırma işlemi bir fonksiyon ile gerçekleştirilecektir.

    - fonksiyon argüman olarak karşılaştırılacak dizileri gösteren işaretçileri alacaktır

    - fonksiyon 1. Dizide olup 2. Dizide olmayan karakterlerin adedini bulacak ve bulduğu sonucun tutulduğu değişkenin adresini geri döndürecektir

    - fonksiyonun döndürdüğü işaretçinin içeriği (sonuç) ekrana yazdırılacaktır


    Frontend Dev.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Nobel
    Nobel's avatar
    Kayıt Tarihi: 13/Ağustos/2012
    Erkek
    // odev.cpp : main project file.
    
    #include "stdafx.h"
    #include <iostream>
    #include <cstring>
    #include <stdio.h>
    #include <conio.h>
    
    using namespace System;
    using namespace std;
    int adet=0;
    int fnk(char *dizi1, char *dizi2)
    {
    	int i,k;
    	for(i=0; i<sizeof(dizi1); i++)
    	{
    		for(k=0; k<sizeof(dizi2); k++)
    		{
    			if(*(dizi1 + i) == *(dizi2 + k))
    				adet++;
    		}
    	}
    	adet = sizeof(dizi2) - adet - 1;
    	return (int)&adet;
    }
    
    int main()
    {
    	char kdizi1[3];
    	char kdizi2[3];
    	int adres;
    	int *deger;
    
    
    	cout << "1. karakteri girin: ";
    	cin >> kdizi1[0];
    	cout << "2. karakteri girin: ";
    	cin >> kdizi1[1];
    	cout << "3. karakteri girin: ";
    	cin >> kdizi1[2];
    
    	cout << "İlk dizi tamamlandi. 2. dizi için 1. karakteri girin: ";
    	cin >> kdizi2[0];
    	cout << "2. karakteri girin: ";
    	cin >> kdizi2[1];
    	cout << "3. karakteri girin: ";
    	cin >> kdizi2[2];
    
    	
    	
    	adres = fnk(kdizi1,kdizi2);
    	deger = (int*)adres;
    
    	cout << "Adres: " << adres << endl;
    	cout << "1. dizide olup 2. dizide olmayan karakter adedi: " << *deger << endl;
    	getch();
        return 0;
    }
    
    Nobel tarafından 14/Nis/13 21:56 tarihinde düzenlenmiştir

    http://goo.gl/0i2Fv
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Nobel
    Nobel's avatar
    Kayıt Tarihi: 13/Ağustos/2012
    Erkek

    hocam düzenledim


    "- fonksiyonun döndürdüğü işaretçinin içeriği (sonuç) ekrana yazdırılacaktır"

    bunu görmemişim.


    http://goo.gl/0i2Fv
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Webci58
    Webci58's avatar
    Kayıt Tarihi: 12/Eylül/2012
    Erkek

    hocam öncelikle eline koluna sağlık

    denedim kodları

     

    "#include <stdafx.h>

    using namespace system;"

     

    buralarda hata veriyor

    Edit: silip çalıştırdığımda çalışıyor ama sonuç doğru değil gibi çünki çoğu denemede hep 2 çıktı ve adres aynı

    Webci58 tarafından 14/Nis/13 21:40 tarihinde düzenlenmiştir

    Frontend Dev.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Nobel
    Nobel's avatar
    Kayıt Tarihi: 13/Ağustos/2012
    Erkek

    hocam bnede visual c++ var onda tanımlı ondandır. ne yazıyorsun karakterlere?


    http://goo.gl/0i2Fv
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    C (ve bu bağlamda C++'de) iki tür veri vardır: Skaler ve agregat.

     

    İşlevden geri döndürdüğünüz int tipi skalerdir (değer tipidir). Oluşturduğunuz int tipi değişkenin ömrü o işlev içinde sınırlı olduğundan return ile kullandığınız her koşulda referans ya da işaretçi aracılığı yerine kopyalanarak geçecektir. Bir örnek:

    int * fnc()

    {

       int i = 2132;

       return &i;

    }

    örneğinde i'nin adresinin geri döndürüleceğini düşünürüz fakat i değişkeninin ömrü fnc işlevi'nin etki alanıyla sınırlıdır. fnc işlevinden çıkıldığında i değişkeni kalmaz. Kod yine çalışır fakat i'nin değeri kopyalanmıştır. Örneği şu şekilde değiştirirsek:

    int * fnc()

    {

        int * i = (int*)malloc(sizeof(int)); //ya da int * i = new int(2132);

        *i = 2132;

        return i;

    }

    i, dinamik bellek yönetimi ile oluşturulduğundan (açıkça aksi belirtilene dek yaşamaya devam edecektir) i'yi işaretçi ile aktarabiliriz.

     

    Bu bağlamda istenen şeyin bir sayı değil de karakterleri gösteren bir dizi olduğunu anlayabiliriz. Açıklamalarım doğrultusunda yazdığım örneği sizinle paylaşıyorum:

    #include <cstdlib>
    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    bool HarfVarMi(const char * samanlik, char igne)
    {
       size_t uzunluk = 0;
       
       uzunluk = strlen(samanlik);
       
       for (int i = 0; i < uzunluk; ++i)
       {
          if ( *(samanlik + i) == igne)
          {
             return true;
          }
       }
       return false;
    }
    
    char * Farklar(const char * birinci, const char * ikinci)
    {
       size_t birinciuzunluk = 0;
       size_t ikinciuzunluk = 0;
       
       birinciuzunluk = strlen(birinci);
       ikinciuzunluk = strlen(ikinci);
       
       char * gecicifark = (char *)malloc(sizeof(char) * birinciuzunluk + 1);
       if(gecicifark == NULL)
       {
          cerr << "Bellek ayrilamadi!";
          abort();
       }
       int t = 0;
       char arabellek = 0;
       
       for (int i = 0; i < birinciuzunluk; ++i)
       {
          arabellek = *(birinci + i);
          if ( HarfVarMi(ikinci, arabellek) == false)
          {
             *(gecicifark + t) = arabellek;
             ++t;      
          }
       }
       gecicifark = (char *) realloc(gecicifark, t + 1);
       
       if (gecicifark == NULL)
       {
          cerr << "Bellek yonetimi hatasi!";
          abort();
       }
       *(gecicifark + t) = 0;
       
       return gecicifark;
    }
    
    int main(int argc, char *argv[])
    {
       cout << Farklar("abcdefg", "aecdg");
       cout << "Press the enter key to continue ...";
       cin.get();
       return EXIT_SUCCESS;
    }
    

    Olaylara karışmayın!
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Webci58
    Webci58's avatar
    Kayıt Tarihi: 12/Eylül/2012
    Erkek
    Nobel bunu yazdı

    hocam bnede visual c++ var onda tanımlı ondandır. ne yazıyorsun karakterlere?

    hocam bikaç deneme yaptım iki diziyede aynı karakterleri verince -1 çıkıyor, ikisinede hepsini farklı versem sonuç 2 çıkıyor.



    Frontend Dev.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Webci58
    Webci58's avatar
    Kayıt Tarihi: 12/Eylül/2012
    Erkek
    YeniHarman bunu yazdı

    C (ve bu bağlamda C++'de) iki tür veri vardır: Skaler ve agregat.

     

    İşlevden geri döndürdüğünüz int tipi skalerdir (değer tipidir). Oluşturduğunuz int tipi değişkenin ömrü o işlev içinde sınırlı olduğundan return ile kullandığınız her koşulda referans ya da işaretçi aracılığı yerine kopyalanarak geçecektir. Bir örnek:

    int * fnc()

    {

       int i = 2132;

       return &i;

    }

    örneğinde i'nin adresinin geri döndürüleceğini düşünürüz fakat i değişkeninin ömrü fnc işlevi'nin etki alanıyla sınırlıdır. fnc işlevinden çıkıldığında i değişkeni kalmaz. Kod yine çalışır fakat i'nin değeri kopyalanmıştır. Örneği şu şekilde değiştirirsek:

    int * fnc()

    {

        int * i = (int*)malloc(sizeof(int)); //ya da int * i = new int(2132);

        *i = 2132;

        return i;

    }

    hocam açıklamaların için sağol. bunuda bilgi edinmiş olduk.


    Frontend Dev.
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Nobel
    Nobel's avatar
    Kayıt Tarihi: 13/Ağustos/2012
    Erkek
    Webci58 bunu yazdı
    Nobel bunu yazdı

    hocam bnede visual c++ var onda tanımlı ondandır. ne yazıyorsun karakterlere?

    hocam bikaç deneme yaptım iki diziyede aynı karakterleri verince -1 çıkıyor, ikisinede hepsini farklı versem sonuç 2 çıkıyor.


    yukardaki -1 i sil adet = kısmındaki. derleyiciden derleyiciye farklı oluyor demek ki, yine hatalı alacak büyük ihtimalle size ı sende 1 eksik alıyor bendekinden şöyle düzenle
        for(i=0; i<sizeof(dizi1)+1; i++)
        {
            for(k=0; k<sizeof(dizi2)+1; k++)
            {
                if(*(dizi1 + i) == *(dizi2 + k))
                    adet++;
            }
        }

     

    @YeniHarman
    hocam çok güzel yazmıssın kodları ama ödev diyor adam hocası yermi sence onun yaptığını bu kodları?

    Nobel tarafından 14/Nis/13 21:53 tarihinde düzenlenmiştir

    http://goo.gl/0i2Fv
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Webci58
    Webci58's avatar
    Kayıt Tarihi: 12/Eylül/2012
    Erkek

    tamamdır hocam çözüldü sorun, ama hocaya sordum ödev sayı değilde karakter yani 1. dizi ahmet 2. dizi ali şeklinde olacak ve harfleri karşılaştıracakmış


    Frontend Dev.
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Nobel
    Nobel's avatar
    Kayıt Tarihi: 13/Ağustos/2012
    Erkek
    Webci58 bunu yazdı

    tamamdır hocam çözüldü sorun, ama hocaya sordum ödev sayı değilde karakter yani 1. dizi ahmet 2. dizi ali şeklinde olacak ve harfleri karşılaştıracakmış

    bir öyle bakayım o zaman harfte girsen çalısıyor o da tek girmek gerekiyor.


    http://goo.gl/0i2Fv
Toplam Hit: 4152 Toplam Mesaj: 19