C++ yeniyim

Başlatan KillerB, 16 Aralık 2010 - 21:24:15

« önceki - sonraki »

0 Üyeler ve 4 Ziyaretçi konuyu incelemekte.

hyperThread

st1 ve st2'yi St1 ve St2 yap öyle dene bi?

C++ case sensitive bir dildir. Büyük harf küçük harfe çok duyarlıdır ;)

bahadirhtp

#51
haklıymıssın
saol
GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

hyperThread

şimdi emacs, öğrenmesi zaman alan bir editör. Alışması da uzun sürebiliyor bazen. Ancak alıştıktan sonra asıl farkını ortaya koyacaktır. Kimileri emacs için programlama dili öğrenmek gibidir der(şahsen katılmıyorum). Şimdi sana kod yazarken kolaylık olması için iki tane emacs eklentisi önerecem. ilki auto-complete, ikincisi ise yasnippet. yasnippeti ubuntu software centerden kurabilirsin. Auto complete'i ise buradaki videodan takip ederek kurabilirsin.

http://www.youtube.com/watch?v=rGVVnDxwJY

bu ikisi, kodu yazarken hata yapmanı azaltacaktır. Syntax hatalarına karşı da flymake eklentisini kullanabilirsin.

C++, tıpkı C gibi yazarken çok dikkat isteyen bir dildir. Zamanla alışacaksın ;) Tabi bir de sabırlı olman gerekiyor.

bahadirhtp

#53
benım emac hata verdıgınden mı yoksa yanlıslıkla cıkıs kodu falan gırdıgımden mı bılmıyorum ama tam yazarken cıkıyor yada asagıya aldıgımda kapanıyor tamamen
ustelık nasıl save yapacagımı altta yazıyor ama yapınca save yapmıyor (:
benım pc sorunlu sanırım (:
sabır konusunda cok berbatım sanırım
vıdeoyu ızlemeye baslıyorum
ayrıca bıldıgın class'larla ılgılı guzel vıdeo adresı varda cok ıyı olur
nasılsa bunları daha sonra okuyacak olanlar benım hocamdan ders alanlar ozallıkle sıra sıra okurlarsa aynı adımları kolayca takıp ederler dıye dusunuyorum.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 03 Nisan 2011 - 00:40:42

madem hocanın yazdıgı student ısımlı program calısmadı bende kendı programımı yazayım dedım
ama farklı olarak header'ı ıcınde attım ama  bır akc hata aldım
#include<iostream>
#include<string>
#include <sstream>
using namespace std;
class Dog {
  int reg_no;
  char name;
  int age;
public:

void setreg_no(int reg_no1);

void setname(char name1);

void setage(float age1);



int getreg_no();

char getname();

int getage();
};
void Dog::setreg_no(int reg_no1)

{ reg_no=reg_no1; }


void Dog::setname(char name1)

{ strncpy(name,name1,19);

name[19]='\0';}


void Dog::setage(float age1)

{ age=age1; }


int Dog::getreg_no()

{ return reg_no ; }


char Dog::getname()

{ return name; }



int Dog::getage()

{ return age; }

int main()
{
Dog Dog1;
Dog Dog2;
Dog1.setreg_no(1);
Dog2.setreg_no(2);

cout<<"Dog1:"<<Dog1.getreg_no()<<endl;
cout<<"Dog2:"<<Dog2.getreg_no()<<endl;
}


dog.cpp: In member function 'void Dog::setname(char)':
dog.cpp:25: error: 'strncpy' was not declared in this scope
dog.cpp:26: error: invalid types 'char[int]' for array subscript
'


ilk hatayı anlamadım yalan yok (: ıkıncıyı gıdermek ıcın header ekledım. satır 25 ıcın dıgerlerıde array olsun dedım ama bu seferde onlar ıcın aynı hatayı verdı ve benım kafa oldu yuzbın
GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

Erdem

strncpy için

#include <stdio.h>

eklemek gerekiyor sanırım. Ayrıca sınıfın kurucu işlevi eksik.

Dog () {}


şeklinde..

İşte bir köpek sınıfı :)


#include <iostream>

class Kopek
{
public:
    Kopek () : numara_ (0) {}

    Kopek (int no)
        : numara_ (no)
    {
        std::cout << numara_ << " numaralı köpek havliyor :)\n";
    }
    ~Kopek ()
    {
        std::cout << numara_ << " numaralı köpek güle güle diyor!\n";
    }   
       
private:
    const int numara_;
};

Kopek baskaKopek (1);

int main ()
{
    Kopek kucu;
   
    Kopek benimKopegim (2);
   
    for (int i = 3; i < 6; ++i)
        Kopek birKopek (i);
    Kopek birTaneDahaKopek (6);

}

Eğer Arch Linux tabanlı bir dağıtıma geçmek isterseniz Arcolinux D sürümünü buradan indirebilirsiniz.

Elektronik

sem

strncpy fonksiyonunun normal şartlarda string.h altında olması gerekir.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

bahadirhtp

#56
constructure da yapmıssın
ben neden beceremıyorum yaaa (:
strncpy yerıne baska bısey kullansamda sonuc olarak ısmı char* olarak degerlendırmem gerekıcek
cıkamadım ısın ıcınde
dıkrı olan var sa soylesın
ısım tanımlamak ıstedıgım de hem aray hemde char* neden yanlıs oluyor?
GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

Erdem

Alıntı yapılan: sem0900 - 03 Nisan 2011 - 08:08:12
strncpy fonksiyonunun normal şartlarda string.h altında olması gerekir.

Evet haklısın. Ama bu C++'nin std::string'iyle aynı şey değildir. Hatta C'den kalma eski bir başlık olduğunu belirtmek üzere başına C eklenerek <cstring> olarak eklenebilir. Ben bunu çok az kullandım hatta çoğu durumda std::string yeterlidir. Bakıyorum öyle bir tane bulabildim strncpy kullanan bir program  :D


//------------------------------------
//  kopyalayici2.cpp
//  Üç işlevler Kuralı sayesinde
//  kopyalayıcı kullanıp kullanmamaya
//  karar veriyoruz
//  (c) F.Erdem ÖNCEL, 2005
//------------------------------------

#include <iostream>
#include <cstring>

char * dizgiKopyala (char const * eski, int boy)
{
    char * yeni = new char [boy + 1];
    strcpy (yeni, eski);
    return yeni;
}

class String
{
public:
    String ();
    String (const char *);
    String (const String & );
    String & operator= (const String & );
    ~String ();
    void degisTokusYap (String & );
    void goster ();
   
private:
    char * icerik_;
    int boy_;
};

String::String ()
    : boy_ (0)
{
    icerik_ = new char [boy_ + 1];
    icerik_ [0] = '\0';
   
}

String::String (const char * girilenler)
    : boy_ (strlen (girilenler))
{
    icerik_ = new char [boy_ + 1];
    strcpy (icerik_, girilenler);
   
}

   
String::String (const String & diger)
    : boy_ (diger.boy_),
      icerik_ (dizgiKopyala (diger.icerik_, diger.boy_))

}

String & String::operator= (const String & diger)
{
    String gecici (diger);
    this->degisTokusYap (gecici);

    return *this;
}

String::~String ()

{
    delete [] icerik_;
}

void String::degisTokusYap (String & diger)
{
    std::swap (boy_, diger.boy_);
    std::swap (icerik_, diger.icerik_);
}

void String::goster ()
{
    std::cout << icerik_ << " " << boy_ << '\n';
}

int main ()
{
    String isim;
    isim = "Erdem";
    isim.goster ();
    String baskaIsim (isim);
    baskaIsim.goster ();
   
}
Eğer Arch Linux tabanlı bir dağıtıma geçmek isterseniz Arcolinux D sürümünü buradan indirebilirsiniz.

Elektronik

sem

C++ sınıflarını çok iyi bilmiyorum çünkü C++ çok bilmiyorum bir iki gündür bakınıyorum öyle =)  fakat C++ derleyicileri C kodlarını derleyebildiği için bu öneriyi yaptım çünkü C fonksiyonu, o fonksiyonu C tarafında o başlıkta kullanıyoruz. 

Tabii dediğiniz gibi <cstring> başlığını da önermiştim fakat onu özelden söylemişim arkadaşa, o nedenle buraya tekrar not düşmeyi gözden kaçırmışım...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

bahadirhtp

yanlış hatırlamıyorsam iki dosya vs arasındaki farklılıklara diff komutu ile bakıyorduk, peki yazılan iki prgram içinde benzer bir komut vs birşey varmı?
GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

sem

Kaynak kod değil çalışan dosyalar için soruyorsunuz sanırım...

Çalışan dosyaları da diff komutu ile inceleyebilirsiniz. Eğer iki çalışan dosya aynı ise doğrudan aşağı satıra geçiyor... Değilse , karşılaştırılan a ve b dosyaları için;

Binary file a and b  differ

diyor...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

bahadirhtp

benım turkcem yetmedı
ıkı header dosyasını karsılastırmak ısteıyorum
diff a.h b.h
yazdıgımda ıkısınıde ardı ardına yazıyor
GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

bahadirhtp

Bir paragramı yada tabloyu nasıl gosterebılırım, yanı her seferınde satır basına "cout" mu eklemem gerekır?
char Character or small integer. 1byte signed: -128 to 127
unsigned: 0 to 255
short int (short) Short Integer. 2bytes signed: -32768 to 32767
unsigned: 0 to 65535
int Integer. 4bytes signed: -2147483648 to 2147483647
unsigned: 0 to 4294967295
long int (long) Long integer. 4bytes signed: -2147483648 to 2147483647
unsigned: 0 to 4294967295
bool Boolean value. It can take one of two values: true or false. 1byte true or false
float Floating point number. 4bytes +/- 3.4e +/- 38 (~7 digits)
double Double precision floating point number. 8bytes +/- 1.7e +/- 308 (~15 digits)
long double Long double precision floating point number. 8bytes +/- 1.7e +/- 308 (~15 digits)
wchar_t Wide character. 2 or 4 bytes 1 wide character

mesela ıkıncı kısım gostermek ıstedıgım tablo
GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

6ng4n

gerek yok

cout << "bi'şeyler bi'şeyler..... \n"+
               "başka şeyler" <<endl;

oalarak da yazabilirsin

sem

<< seri bir operatör olduğu için cout eklemeden << kullanabilirsiniz...

cout << işlemininin geri dönüşü zaten cout.

cout << "sem" << "0900";

Burada sem ilk önce cout'a parametre olarak sem gönderiliyor ve tekrar cout döndürülüyor. Daha sonra "0900" kısmını almış oluyor... 6ng4n'nin gösterdiği şeklide satır başı için karakter dizisi içerisinde "\n" de kullanabilirsiniz.. Akıma (örneğimizdeki cout) "endl" de gönderebilirsiniz.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

bahadirhtp

cout<<"asasdasd";
şeklinde yaptım,"+" binary system'e giridigi icin tanımadı.
ayrıca tablo ıcınde sanırım tek yol kopyala yapıstır mıdır?
GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

Erdem

Soruyu tam anlayamadım ama eğer amacımız bir dosyadan okumaksa şu şekilde yapılabilir:

#include <iostream>
#include <fstream>

int main ()
{
    // Bir dosyayı aç
    std::ifstream dosya("dosyaoku1.cc");
    std::string veriler, gecici;
    while (dosya) // dosyanın sonuna gelinmediği sürece
    {
       
        // '#' karakterine ulaşana kadar bilgileri oku
        // bunları giriş akımından al ve gecici'ye at
        getline (dosya, gecici, '\t');
        // bu bilgileri veriler ismindeki diğer
        // dizgiye ekle
        veriler += gecici;
    }
    std::cout << veriler;
}


Ayrıca programın çıktısını bir dosyaya da yönlendirebiliriz:

$ ./program > program.txt

şeklinde..
Eğer Arch Linux tabanlı bir dağıtıma geçmek isterseniz Arcolinux D sürümünü buradan indirebilirsiniz.

Elektronik

bahadirhtp

sleep.cpp: In function 'int main()':
sleep.cpp:6: error: variable 'std::ifstream dosya' has initializer but incomplete type

gibi bir hata verdı
ayrıca dosyaokul ıle dosya aynı ısımlı degıl mı?
GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

Erdem

Eğer bu koddan bahsediyorsan bende sorunsuz derleniyor:

g++ dosyaoku.cc -o dosyaoku

dosyaoku1.cc herhangi bir C++ kaynak kod dosyası olabilir. cxx uzantılı. Programı çalıştırdığında dosyaoku1.cc'nin içeriğini ekrana yazıyor.
Eğer Arch Linux tabanlı bir dağıtıma geçmek isterseniz Arcolinux D sürümünü buradan indirebilirsiniz.

Elektronik

bahadirhtp

hee sen sorunumu tam anlamamıssın
bende dıyorum butun dosyayı nasıl okutturuyor (:
benım derdım bı pfd yada txt dosyasında kı bır tabloyu, program ıcınde gondererek (kopyala yapıstırda kaydıgı ıcın ıstemedım o sekılde yapayım) yada sadece output'unda gostermesını ıstıyorum.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 21 Nisan 2011 - 22:30:24

en azıdnan kaymadan bı tabloyu nasıl program ıcınde "cout" ıle yerlestırebılırım ???
GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

6ng4n

"/t" kaçışı ile 1'er tab boşluk bırakabilirsin

Erdem

Herhangi bir C++ kitabında dosya giriş-çıkış işlemleri ile ilgili bölümü okursan soruna daha ayrıntılı cevap bulabileceğini tahmin ediyorum. Daha sonra o kodu yazmaya çalışırsın. Tabi okumaya çalıştığın dosyanın da yapısını bilmemiz gerekiyor. Eğer yapamazsan takıldığın yerler olursa sorabilirsin.

Pdf ile ilgili işlemler yapmak tamamen bir kütüphaneyi kullanmakla ilgili ve C++ ile direkt ilgili sayılmaz.

Buradan bir Pdf pdf kütüphanesinin nasıl kullanılacağı ile bilgi bulabilirsin.

Pdf dosyalarını işleyen kütüphanelerin bazılarının lisanslarını Adobe elinde bulunduruyor. Ama ben açık kaynak bir tane bulabildim:

http://sourceforge.net/projects/libharu/

http://libharu.org/wiki/Documentation/Usage
Eğer Arch Linux tabanlı bir dağıtıma geçmek isterseniz Arcolinux D sürümünü buradan indirebilirsiniz.

Elektronik

bahadirhtp

ornek yazayım ozaman

cout<<" adsasdasda adsdasd asd asd asd asd asd asd asd as d  asdasdasd ";
cout<<"asdasd asdas dasdasda sdasd asdasdasdasdasd;
cout<<"SONRA TABLO";

cout<<"ismi     yaşı      cısmı";
cout<<""baha  33 yok";


ama benım tablom bazen ıkı satırlı falan yazıldıgı ıcın duzenlemeler yapsamda kayıyor cıktıda


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 21 Nisan 2011 - 23:37:25

ki buda kaymış (:
GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

sem

Zaten burada vermiş olduğunuz cout çıktıları şu şekilde olacaktır;

Alıntı Yapadsasdasda adsdasd asd asd asd asd asd asd asd as d  asdasdasdasdasd asdas dasdasda sdasd asdasdasdasdasdSONRA TABLOismi     yaşı      cısmıbaha  33 yok

Gördüğünüz gibi zaten istediğiniz gibi bir görüntü alamayacaksınız... Satır başı ve tampon boşaltmak için "endl" yi öneriyorum tekrardan... Ya da \n yaparsanız g++ satır tamponlu olduğu için aynı etkiyi alacaksınız...

bunun dışında yapmak istediğiniz şey içinse kendinize bir karakter sayısı belirleyin derim... Örneğin 15...

ISIMXXXXXXXXXXXSOYISIMXXXXXXXXCINSIYETXXXXXXX
MEHMETXXXXXXXXXKIMIMBENXXXXXXXERKEKXXXXXXXXXX
ALİXXXXXXXXXXXXCOŞXXXXXXXXXXXXKADINXXXXXXXXXX


Burada X lerin yerini boşluk karakteri ile doldurursanız sıkıntı kalmayacaktır... Bahsettiğim işlemi standart string sınıfı ile yapabilirsiniz..


EK: Forum nedeni ile kayma olabilir... Kod etiketi içerisindekileri Gedite kopyaladığınızda demek istediğimi anlayacaksınız..
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Erdem

Ekrana formatlı yazı yazmak için kullanacağın başlık <iomanip>

Bununla ilgili bu sayfada dersler var:

http://www.arachnoid.com/cpptutor/student3.html


#include <iostream>
#include <iomanip>

using std::cout;
using std::setw;
using std::flush;


int main()
{
    const int enbuyuk = 12;
    const int genislik = 6;
    for(int satir = 1; satir <= enbuyuk; ++satir) {
        for(int sutun = 1; sutun <= enbuyuk; ++sutun) {
            cout << setw(genislik) << satir * sutun;
        }
        cout << '\n';
    }
    cout << '\n' << flush;
    return 0;
}


Dosya ile aynı işlemleri yapmak için de örneğin bilgiler satır satır okunur. Daha sonra bunlar bir std::vector<string>'e atılabilir.

@sem0900: C++ için genellikle endl yerine \n kullanılmasının tavsiye edildiğini hatırlıyorum. Bunun nedeni de

    cout << endl;
    cout << '\n' << flush;  // bu üsttekinin aynısıdır


endl çıkışa bir satırsonu \n gönderir ve akımın hızlı çalışmak için tuttuğu ara belleği yazdırır.
Eğer Arch Linux tabanlı bir dağıtıma geçmek isterseniz Arcolinux D sürümünü buradan indirebilirsiniz.

Elektronik