Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
4171
Cevap
169261
Tıklama
3
Öne Çıkarma
Cevap: C/C++/C# Sorularınız Buraya. . .(GÜNCEL) (59. sayfa)
M
12 yıl
Binbaşı

quote:

Orijinalden alıntı: Servius

----Konu hala aktifse---
Arkadaşlar bu işlere yeni yeni merak saldım.
Öncelikle bir sorum var

#include <iostream>
#include <conio.h>
using namespace std;

main(){

int a[3]={2,5,6};
int x;

for(x=0;x<=3;x++){
cout << a[x] << "\n";
}

getch ();
return 0;

}
Kod bu.Şimdi bunu çıktısı 2,5,6,2 oluyor fakat anlamadığım olay ben 3 için dizide değer tanımlamadım fakat program değer 0 daki yani 2 yi yazdırdı bunun nedeni nedir acaba ?

Hocam orda 2'nin yazması şans eseri denk gelmiş sanırım çünkü sen bellekteki t, (t+1) ve (t+2) adreslerine değer atıyosun döngünde x=3 olduğu zaman program (t+3) adresindeki değeri veriyo sana bu değer de çok düşük bi olasılık olmasına rağmen 2'ymiş.


Bu mesaja 1 cevap geldi.
S
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: Mtntk

quote:

Orijinalden alıntı: Servius

----Konu hala aktifse---
Arkadaşlar bu işlere yeni yeni merak saldım.
Öncelikle bir sorum var

#include <iostream>
#include <conio.h>
using namespace std;

main(){

int a[3]={2,5,6};
int x;

for(x=0;x<=3;x++){
cout << a[x] << "\n";
}

getch ();
return 0;

}
Kod bu.Şimdi bunu çıktısı 2,5,6,2 oluyor fakat anlamadığım olay ben 3 için dizide değer tanımlamadım fakat program değer 0 daki yani 2 yi yazdırdı bunun nedeni nedir acaba ?

Hocam orda 2'nin yazması şans eseri denk gelmiş sanırım çünkü sen bellekteki t, (t+1) ve (t+2) adreslerine değer atıyosun döngünde x=3 olduğu zaman program (t+3) adresindeki değeri veriyo sana bu değer de çok düşük bi olasılık olmasına rağmen 2'ymiş.

Çok teşekkür ederim cevabınız için şans eseride olsa görünce baya bir kafamı karıştırmıştı sağolsun ama şimdi anladım gibi :) .
Bu diziler ne zor işmiş arkadaş


Bu mesaja 1 cevap geldi.
S
12 yıl
Yarbay

@source aslında çözmüştü fakat henüz array işlemediğimiz için array kullanılmadan yapılması gerekiyormuş. ben de array'siz yapmaya çalıştım fakat yine tıkandım.

1-2 sorum olacak size

< Resime gitmek için tıklayın >

1- 1.maddede not getirtemiyorum, 2.maddeyi hiç yapamadım, 1 olursa 2 olmuyor 2 olursa 1 olmuyor. En önemli sorunum bu. fonksiyonlarda sıkıntım var sınıftan çağırmaları yapamadım hiç
2- biraz önce not'u yazdırırken sorun yoktu ama şimdi çalıştırınca 1,2,3.maddelerdeki not ortalaması ya da diğer maddelerdeki not ortalamalarını yazmıyor.

yarın teslim etmem lazım yardımcı olacak olursa çok çok çok sevinirim.

#include <iostream>  
#include "ogrenci.h"
using namespace std;

class ogrenci

{

double siniftopnot ;
double mevcut2;
double maks;

public:

int maxbul(){return maks;}

int ortbul(double sinitopnot, double mevcut2){return siniftopnot/mevcut2 ; }

};


int min,maks;
int mevcut,mevcut2;
int maxno, maxisim;
int isim;
char harf, maxharf;
int numara,odevnot,finalnot,vizenot,katilimnot;
double orta1;
int A,B,C,D,F;
double siniftopnot;

int main(){




int ort=0;

ogrenci p;
siniftopnot=0;
cout<<"Sinif Mevcudunu Giriniz : ";
cin >>mevcut;
mevcut2=mevcut;
while (mevcut >0){


cout <<"Ogrenci Numarasi :"<<endl;
cin >> numara;
cout <<"Adi Soyad :"<<endl;
cin >> isim;
cout<<"Vize Notu Giriniz :"<<endl;
cin >> vizenot;
cout<<"Odev Notu Giriniz "<<endl;
cin >> odevnot;
cout<<"Katilim Notu Giriniz "<<endl;
cin >> katilimnot;
cout<<"Final Notu Giriniz "<<endl;
cin >> finalnot;
system("cls");
mevcut--;

orta1 =((0.3)*vizenot + (0.2)*odevnot + (0.1)*katilimnot + (0.4)*finalnot );

siniftopnot=(siniftopnot+orta1);

if (orta1 >= 90){
harf = 'A';
A++;

}
else if (orta1 >=80){
harf= 'B';
B++;
}
else if (orta1 >=70){
harf ='C';
C++;

}
else if (orta1 >=60){
harf = 'D';
D++;

}
else{
harf ='F';
F++;

}

}
system("cls");
if (orta1>maks){
maks=orta1;

maxisim=isim;
maxno=numara;
maxharf=harf;
}




int secim;

do {

cout << "1. Ortalamasi En Yuksek Ogrenci Bilgileri : "<<endl;
cout << "2. Ortalamasi En Dusuk Ogrenci Bilgileri : "<<endl;
cout << "3. Sinif Ortalamasi : "<<endl;
cout << "4. A Harfi Notu Alan Ogrenci Sayisi : "<<endl;
cout << "5. B Harfi Notu Alan Ogrenci Sayisi : "<<endl;
cout << "6. C Harfi Notu Alan Ogrenci Sayisi : "<<endl;
cout << "7. D Harfi Notu Alan Ogrenci Sayisi : "<<endl;
cout << "8. F Harfi Notu Alan Ogrenci Sayisi : "<<endl;
cout << "9. Basarili Ogrenci Sayisi (A+B+C) : "<<endl;
cout << "10.Basarisiz Ogrenci Sayisi (D+F) : "<<endl;
cout << "Islem Turunu Seciniz (1...10, Cikis Icin 0 Giriniz) :"<<endl;

cin>>secim;


switch(secim){
case 1:
cout << "Ortalamasi En Yuksek Ogrenci Bilgileri " <<endl;
cout << "********************************************"<<endl;
cout<< "Isim :" <<maxisim<< " Numara : " <<maxno <<" Not : " <<p.maxbul() << " Harf : "<<maxharf<<endl;
break;

case 2:
cout << "tey"<<endl;
break;

case 3:
cout<<"Sinif Ortalamasi : "<<p.ortbul(siniftopnot,mevcut2)<<endl;
break;

case 4:
cout<<"A Harfi Notu Alan Ogrenci Sayisi : "<<A<<endl;
break;

case 5:
cout<<"B Harfi Notu Alan Ogrenci Sayisi : "<<B<<endl;
break;

case 6:
cout<<"C Harfi Notu Alan Ogrenci Sayisi : "<<C<<endl;
break;

case 7:
cout<<"D Harfi Notu Alan Ogrenci Sayisi : "<<D<<endl;
break;

case 8:
cout<<"F Harfi Notu Alan Ogrenci Sayisi : "<<F<<endl;
break;

case 9:
cout<<"Basarili Ogrenci Sayisi (A+B+C) : "<<A+B+C<<endl;
break;

case 10:
cout<<"Basarisiz Ogrenci Sayisi (D+F) : "<<D+F<<endl;
break;

}

cout <<endl;
}

while (secim != 0);

system ("PAUSE");
return 0;


}





< Bu mesaj bu kişi tarafından değiştirildi Seviyeli Yarbay -- 3 Şubat 2013; 22:09:07 >
Bu mesaja 1 cevap geldi.
-
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: Seviyeli Yarbay

@source aslında çözmüştü fakat henüz array işlemediğimiz için array kullanılmadan yapılması gerekiyormuş. ben de array'siz yapmaya çalıştım fakat yine tıkandım.

1-2 sorum olacak size

< Resime gitmek için tıklayın >

1- 2.maddeyi hiç yapamadım, 1 olursa 2 olmuyor 2 olursa 1 olmuyor.
2- biraz önce not'u yazdırırken sorun yoktu ama şimdi çalıştırınca 1,2,3.maddelerdeki not ortalaması ya da diğer maddelerdeki not ortalamalarını yazmıyor.

yarın teslim etmem lazım yardımcı olacak olursa çok çok çok sevinirim.

#include <iostream>  
#include "ogrenci.h"
using namespace std;

class ogrenci

{

double siniftopnot ;
double mevcut2;
double maks;

public:

int maxbul(){return maks;}

int ortbul(double sinitopnot, double mevcut2){return siniftopnot/mevcut2 ; }

};


int min,maks;
int mevcut,mevcut2;
int maxno, maxisim, maxharf;
int isim;
char harf;
int numara,odevnot,finalnot,vizenot,katilimnot;
double orta1;
int A,B,C,D,F;
double siniftopnot;

int main(){




int ort=0;

ogrenci p;
siniftopnot=0;
cout<<"Sinif Mevcudunu Giriniz : ";
cin >>mevcut;
mevcut2=mevcut;
while (mevcut >0){


cout <<"Ogrenci Numarasi :"<<endl;
cin >> numara;
cout <<"Adi Soyad :"<<endl;
cin >> isim;
cout<<"Vize Notu Giriniz :"<<endl;
cin >> vizenot;
cout<<"Odev Notu Giriniz "<<endl;
cin >> odevnot;
cout<<"Katilim Notu Giriniz "<<endl;
cin >> katilimnot;
cout<<"Final Notu Giriniz "<<endl;
cin >> finalnot;
system("cls");
mevcut--;

orta1 =((0.3)*vizenot + (0.2)*odevnot + (0.1)*katilimnot + (0.4)*finalnot );

siniftopnot=(siniftopnot+orta1);

if (orta1 >= 90){
harf = 'A';
A++;

}
else if (orta1 >=80){
harf= 'B';
B++;
}
else if (orta1 >=70){
harf ='C';
C++;

}
else if (orta1 >=60){
harf = 'D';
D++;

}
else{
harf ='F';
F++;

}

}
system("cls");
if (orta1>maks){
maks=orta1;

maxisim=isim;
maxno=numara;
maxharf=harf;
}




int secim;

do {

cout << "1. Ortalamasi En Yuksek Ogrenci Bilgileri : "<<endl;
cout << "2. Ortalamasi En Dusuk Ogrenci Bilgileri : "<<endl;
cout << "3. Sinif Ortalamasi : "<<endl;
cout << "4. A Harfi Notu Alan Ogrenci Sayisi : "<<endl;
cout << "5. B Harfi Notu Alan Ogrenci Sayisi : "<<endl;
cout << "6. C Harfi Notu Alan Ogrenci Sayisi : "<<endl;
cout << "7. D Harfi Notu Alan Ogrenci Sayisi : "<<endl;
cout << "8. F Harfi Notu Alan Ogrenci Sayisi : "<<endl;
cout << "9. Basarili Ogrenci Sayisi (A+B+C) : "<<endl;
cout << "10.Basarisiz Ogrenci Sayisi (D+F) : "<<endl;
cout << "Islem Turunu Seciniz (1...10, Cikis Icin 0 Giriniz) :"<<endl;

cin>>secim;


switch(secim){
case 1:
cout << "Ortalamasi En Yuksek Ogrenci Bilgileri " <<endl;
cout << "********************************************"<<endl;
cout<< "Isim :" <<maxisim<< " Numara : " <<maxno <<" Not : " <<p.maxbul() << " Harf : "<<maxharf<<endl;
break;

case 2:
cout << "tey"<<endl;
break;

case 3:
cout<<"Sinif Ortalamasi : "<<p.ortbul(siniftopnot,mevcut2)<<endl;
break;

case 4:
cout<<"A Harfi Notu Alan Ogrenci Sayisi : "<<A<<endl;
break;

case 5:
cout<<"B Harfi Notu Alan Ogrenci Sayisi : "<<B<<endl;
break;

case 6:
cout<<"C Harfi Notu Alan Ogrenci Sayisi : "<<C<<endl;
break;

case 7:
cout<<"D Harfi Notu Alan Ogrenci Sayisi : "<<D<<endl;
break;

case 8:
cout<<"F Harfi Notu Alan Ogrenci Sayisi : "<<F<<endl;
break;

case 9:
cout<<"Basarili Ogrenci Sayisi (A+B+C) : "<<A+B+C<<endl;
break;

case 10:
cout<<"Basarisiz Ogrenci Sayisi (D+F) : "<<D+F<<endl;
break;

}

cout <<endl;
}

while (secim != -1);

system ("PAUSE");
return 0;


}


A++, B++ yazmışsın ama sen bu değişkenleri tanımlarken ilklendirmemişsin.
int A, B, C, D, F, G;
A = B = C = D = F = G = 0;
demen gerekiyor. Yoksa içlerinde çöp değer olur.

ogrenci sınıfındaki maxbul fonksiyonun bir işe yaramaz. Sadece isim olarak max ama yaptığı bir işlem yok.

f (orta1>maks){
maks=orta1;

Demişsin ama maks'ı yine ilklendirmeden kullanmışsın. İçinde çöp değer var. Ayrıca bu maks, ogrenci sınıfında ki maks'dan farklı bir değişken. Bu yüzden 1. ve 2. şıkkın doğru çalışmıyor.

Şıkkalara gelirsek 1. şıkkının cevabında p.maxbul() demişsin ama sana ogrenci sınıfında ki içinde çöp değer olan maks değişkenini dönderecek. Doğal olarak sonuç yanlış olacak. Maxisim maxno yu yazdırmaa çalışmıssın ama yukarda bahsettigim sebepten dolayı( if(orta1 > maks) da ki maks değişkenin içi çöp olduğundan değerinin ne olacağı belli değil. Bazen if'in içine girecek bazen de girmeyecek.) hatalı.
4,5,6,7,8,9,10. şıkklarında ki cevaplarında ilk başta bahsettiğim yanlışdan dolayı hatalı.





< Bu mesaj bu kişi tarafından değiştirildi -Source- -- 3 Şubat 2013; 22:11:23 >
Bu mesaja 1 cevap geldi.
S
12 yıl
Yarbay

quote:

Orijinalden alıntı: -Source-


değerleri ilklendirdim fakat fonksiyonları yine de beceremedim, ilk 3'ü çalışmıyor :/


Bu mesaja 1 cevap geldi.
-
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: Seviyeli Yarbay

quote:

Orijinalden alıntı: -Source-


değerleri ilklendirdim fakat fonksiyonları yine de beceremedim, ilk 3'ü çalışmıyor :/

system("cls");
if (orta1>maks){
maks=orta1;

maxisim=isim;
maxno=numara;
maxharf=harf;
}
bu kısımı hemen bunun üstünde ki } içine yaz yani while'ın içinde olacak ama en altında.

Bu şekilde yazdırabilirsin. En yüksek notu olan öğrencinin ismini notunu felan.

2. şık içinde yine while'ın içine maks'ı buldugun yerin hemen altına min kodunu yazcan.
(min değişkeni ilklendirilmiş olacak üst tarafta.)
if(orta1 < min)
{
min=orta1;

minisim=isim;
minno=numara;
minharf=harf;
}

Özetlersem söyle görünecek kodun

while()
{
// ...

system("cls");
if (orta1>maks){
maks=orta1;

maxisim=isim;
maxno=numara;
maxharf=harf;
}
if(orta1 < min)
{
min=orta1;

minisim=isim;
minno=numara;
minharf=harf;
}
}

// Devamında da do ..while içinde switch



S
12 yıl
Yarbay

hallettim, çalışıyor program teşekkür ederim yardımcı olanlara :)



< Bu ileti mobil sürüm kullanılarak atıldı >

G
12 yıl
Yarbay

getchar ve putchar ne işe yarıyor biri lütfen anlatsın.



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 2 cevap geldi.
-
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: Tolgá

getchar ve putchar ne işe yarıyor biri lütfen anlatsın.


http://en.cppreference.com/w/c/io/getchar
Standart giriş akımından(stdin) bir karakter okur.

http://en.cppreference.com/w/c/io/putchar
Standart çıkış akımına(stdout) bir karakter yazar. Aldığı parametre yazılacak karakter.

Küçük bir örnek. Eğer kelime girilirse sadece ilk harfini alır.
 
#include <stdio.h>
int main()
{
// Bir karakter oku
char giris = getchar();
// Okunan karakteri ekrana yazdir.
putchar(giris);
return 0;
}






< Bu mesaj bu kişi tarafından değiştirildi -Source- -- 4 Şubat 2013; 16:12:06 >
Bu mesaja 1 cevap geldi.
L
12 yıl
Yarbay

Şuan döngüler, array, pointerlar, classlar,operatorler(clsslardaki operatörler falan) hakkında biraz bilgim var, yani sınırlarını bilmediğim için biliyorum diyemiyorum :) bundan sonra nasıl devam etmeliyim? ilerisi için napcğaımla ilgili hiç bi fikrim yok.

ayrıca birde sorum var;
this pointerı ne işe yarıyor alamadım tam olarak? küçük bi örnek kod falan göstereiblirseniz çok sevinirim





< Bu mesaj bu kişi tarafından değiştirildi Lord Nibbler -- 4 Şubat 2013; 16:51:59 >
Bu mesaja 3 cevap geldi.
-
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: GhilleintheMist

Şuan döngüler, array, pointerlar, classlar,operatorler(clsslardaki operatörler falan) hakkında biraz bilgim var, yani sınırlarını bilmediğim için biliyorum diyemiyorum :) bundan sonra nasıl devam etmeliyim? ilerisi için napcğaımla ilgili hiç bi fikrim yok.

ayrıca birde sorum var;
this pointerı ne işe yarıyor alamadım tam olarak? küçük bi örnek kod falan göstereiblirseniz çok sevinirim

Aslında ben de senin gibiyim biraz biliyorum ama daha fazlasını öğrenmek için yaptığım yöntemi söyleyeyim. C++ forumlarını takip ediyorum. Buralarda sorulan sorulara cevap vermeye çalışıyorum. Yanlış cevap vermemek için bildiğim bir şeyi tekrar araştırıyorum. Böylece onun hakkında daha fazla şey öğrenebiliyorum. Ayrıca bol bol alıştırma yapmak, kod yazmak lazım bildiklermizin iyice oturması için. Bunun için projecteuler.net gibi sitelere bakabilirsin. Analitik düşünme yeteneği kazandırır sana ilerde karşına çıkacak sorunlarla daha kolay başa çıkmanı sağlar. Ayrıca internette gezerken C++'da bildiğin bir konuda makale karşına çıktı diyelim. Ben bunu biliyorum diyerek okumamazlık etme, gördüğün her bir şeyi oku. Ayrıca bu kouların yanında STL'e bak. C++11'i incele kullanmayı dene. Ne gibi değişiklikler olduğunu kendin gör. Şimdilik aklıma gelenler bunlar.

Sorun için küçük bir örnek yazdım.
Burada setX fonksiyonundan gelen parametre ile sınıfın private üyesi olan x aynı isimli. Bununla herhangi bir çakışma, karmaşıklık olmaması için, sınıfında ki x'e ulaşmak için this->x diyoruz. Kısaca burada ki this senin o sınıfını ifade ediyor.
 
#include <iostream>
using namespace std;

class A
{
private:
int x;
public:
void setX(int x)
{
this->x = x;
}

int getX() { return x; }
};

int main()
{
A a;
a.setX(5);
cout << a.getX() << endl;
return 0;
}



Daha geniş bilgi için: MSDN, IBM





< Bu mesaj bu kişi tarafından değiştirildi -Source- -- 4 Şubat 2013; 17:25:53 >
Bu mesaja 2 cevap geldi.
S
12 yıl
Yüzbaşı

#include <iostream>
#include <conio.h>
using namespace std;
main(){


int a,b;
char c[][80]={"Pazartesi","Sali","Carsamba"};
for (a=0;a<=c[a][0];a++){
cout << "\n";
for(b=0;b<=c[a];b++){
cout << c [a] << "\n";
}

}
getch();
return 0;



}
Arkadaşlar bu dizideki a[][80]: Bunun anlamı nedir neden böyle yaptık birde ilk for döngsünde c[a][0] yazdık .Bunları açıklayabilicek varmı şimdiden teşekkür ederim.Genel olarak kısa özet geçseniz yeterli 1-2 cümle


Bu mesaja 1 cevap geldi.
G
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: Servius

#include <iostream> 
#include <conio.h>
using namespace std;
main(){


int a,b;
char c[][80]={"Pazartesi","Sali","Carsamba"};
for (a=0;a<=c[a][0];a++){
cout << "\n";
for(b=0;b<=c[a][b];b++){
cout << c [a][b] << "\n";
}

}
getch();
return 0;



}

Arkadaşlar bu dizideki a[][80]: Bunun anlamı nedir neden böyle yaptık birde ilk for döngsünde c[a][0] yazdık .Bunları açıklayabilicek varmı şimdiden teşekkür ederim.Genel olarak kısa özet geçseniz yeterli 1-2 cümle


char c[3][80]={"Pazartesi","Sali","Carsamba"}; esittir char c[][80]={"Pazartesi","Sali","Carsamba"}; diyebiliriz.

char d[3] = "ab"; esittir char d[] = "ab"; demek gibi.

Matris yapisi kullaniliyor burada.Sadece sen tanimlarken belirtmiyorsun, compiler otomatik olarak islemi gerceklestiriyor diyebiliriz.



c[a][0] yontemini biraz karisik olmus ama soyle diyim ASCII tablosundan yararlanmis(Cok kullanisli bir yontem degil matris boyu 65 ustune dayanirsa hatalar ortaya cikma ihtimali var diye tahmin ediyorum.). P 80(Dec) demektir.ASCII tablosunda [a-zA-Z] 65 -122 arasinda degerlerdedir. c[a][0] matris pozisyonu a=0 iken P karakterini gosterir. 0 <= 80 oldugundan dongu devam edecektir. c[a][0] a=3 iken matris boundry disina cikar ve for dongusu sonlanir.





< Bu mesaj bu kişi tarafından değiştirildi garui -- 4 Şubat 2013; 18:00:40 >
Bu mesaja 1 cevap geldi.
L
12 yıl
Yarbay

quote:

Orijinalden alıntı: -Source-

quote:

Orijinalden alıntı: GhilleintheMist

Şuan döngüler, array, pointerlar, classlar,operatorler(clsslardaki operatörler falan) hakkında biraz bilgim var, yani sınırlarını bilmediğim için biliyorum diyemiyorum :) bundan sonra nasıl devam etmeliyim? ilerisi için napcğaımla ilgili hiç bi fikrim yok.

ayrıca birde sorum var;
this pointerı ne işe yarıyor alamadım tam olarak? küçük bi örnek kod falan göstereiblirseniz çok sevinirim

Aslında ben de senin gibiyim biraz biliyorum ama daha fazlasını öğrenmek için yaptığım yöntemi söyleyeyim. C++ forumlarını takip ediyorum. Buralarda sorulan sorulara cevap vermeye çalışıyorum. Yanlış cevap vermemek için bildiğim bir şeyi tekrar araştırıyorum. Böylece onun hakkında daha fazla şey öğrenebiliyorum. Ayrıca bol bol alıştırma yapmak, kod yazmak lazım bildiklermizin iyice oturması için. Bunun için projecteuler.net gibi sitelere bakabilirsin. Analitik düşünme yeteneği kazandırır sana ilerde karşına çıkacak sorunlarla daha kolay başa çıkmanı sağlar. Ayrıca internette gezerken C++'da bildiğin bir konuda makale karşına çıktı diyelim. Ben bunu biliyorum diyerek okumamazlık etme, gördüğün her bir şeyi oku. Ayrıca bu kouların yanında STL'e bak. C++11'i incele kullanmayı dene. Ne gibi değişiklikler olduğunu kendin gör. Şimdilik aklıma gelenler bunlar.

Sorun için küçük bir örnek yazdım.
Burada setX fonksiyonundan gelen parametre ile sınıfın private üyesi olan x aynı isimli. Bununla herhangi bir çakışma, karmaşıklık olmaması için, sınıfında ki x'e ulaşmak için this->x diyoruz. Kısaca burada ki this senin o sınıfını ifade ediyor.
 
#include <iostream>
using namespace std;

class A
{
private:
int x;
public:
void setX(int x)
{
this->x = x;
}

int getX() { return x; }
};

int main()
{
A a;
a.setX(5);
cout << a.getX() << endl;
return 0;
}



Daha geniş bilgi için: MSDN, IBM

Her iki sorumada sayenizde cevap buldum teşekkürler :)

O verdiğiniz kodu compile ettikten sonra bide this olmadan compile ettim. O zaman memoryde eski bir uygulamadan kalan bi değer geldi. Anladığım kadarıyla değişken isimlerini ayrı koyarsak sorun yok. yani


  #include <iostream> 
using namespace std;
class A
{
private:
int x;
public:
void setX(int y)
{
x = y;
}

int getX() { return x; }
};

int main()
{
A a;
a.setX(5);
cout << a.getX() << endl;
return 0;
}

yapsak. Açıkçası bu tip bi kullanım bana daha düzgün geldi. değişken ismi mi kalmadı da aynı ismi kullanıyoruz :P





< Bu mesaj bu kişi tarafından değiştirildi Lord Nibbler -- 4 Şubat 2013; 18:01:37 >
Bu mesaja 1 cevap geldi.
S
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: garui

quote:

Orijinalden alıntı: Servius

#include <iostream> 
#include <conio.h>
using namespace std;
main(){


int a,b;
char c[][80]={"Pazartesi","Sali","Carsamba"};
for (a=0;a<=c[a][0];a++){
cout << "\n";
for(b=0;b<=c[a][b];b++){
cout << c [a][b] << "\n";
}

}
getch();
return 0;



}

Arkadaşlar bu dizideki a[][80]: Bunun anlamı nedir neden böyle yaptık birde ilk for döngsünde c[a][0] yazdık .Bunları açıklayabilicek varmı şimdiden teşekkür ederim.Genel olarak kısa özet geçseniz yeterli 1-2 cümle


char c[3][80]={"Pazartesi","Sali","Carsamba"}; esittir char c[][80]={"Pazartesi","Sali","Carsamba"}; diyebiliriz.

char d[3] = "ab"; esittir char d[] = "ab"; demek gibi.

Matris yapisi kullaniliyor burada.Sadece sen tanimlarken belirtmiyorsun, compiler otomatik olarak islemi gerceklestiriyor diyebiliriz.



c[a][0] yontemini biraz karisik olmus ama soyle diyim ASCII tablosundan yararlanmis(Cok kullanisli bir yontem degil matris boyu 65 ustune dayanirsa hatalar ortaya cikma ihtimali var diye tahmin ediyorum.). P 80(Dec) demektir.ASCII tablosunda [a-zA-Z] 65 -122 arasinda degerlerdedir. c[a][0] matris pozisyonu a=0 iken P karakterini gosterir. 0 <= 80 oldugundan dongu devam edecektir. c[a][0] a=3 iken matris boundry disina cikar ve for dongusu sonlanir.

Çok teşekkür ederim cevabınız için gayet anlaşılır olmuş.

-Şimdi benim anlamadım bir olay var
1- c[a][0] a=3 iken matris boundry disina cikar ve for dongusu sonlanir.--> Bunu anlamadım eğer zahmet olmassa anlatırmınız.
2-Hocam birde 2. forda c[a] yaptık.burda neden c[0] yapmadık.

Cahilliğime verin başlayalı çok olmadı daha bazı şeyleri anlamakta güçlük çekiyorum .


Bu mesaja 1 cevap geldi.
-
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: GhilleintheMist

Her iki sorumada sayenizde cevap buldum teşekkürler :)

O verdiğiniz kodu compile ettikten sonra bide this olmadan compile ettim. O zaman memoryde eski bir uygulamadan kalan bi değer geldi. Anladığım kadarıyla değişken isimlerini ayrı koyarsak sorun yok. yani


  #include <iostream> 
using namespace std;
class A
{
private:
int x;
public:
void setX(int y)
{
x = y;
}

int getX() { return x; }
};

int main()
{
A a;
a.setX(5);
cout << a.getX() << endl;
return 0;
}

yapsak. Açıkçası bu tip bi kullanım bana daha düzgün geldi. değişken ismi mi kalmadı da aynı ismi kullanıyoruz :P

Çöp değerin gelmesinin sebebi her değişken kendi bloğunda aktif olduğu için this'i kaldırırsan yani x = x olursa, fonksiyona parametre ile gelen x'e yine parametreyi atıyor.
Yani sınıfın üyesi olan x'e atama yapmıyor. getX() ile de içinde çöp değer olan sınıfın üyesi olan x'i çağırıyor.

Dediğin gibi başka bir değişken ismi vermek daha iyi. Aşağıda ki gibi kullananlarda var.
  #include <iostream> 
using namespace std;
class A
{
private:
int m_x;
public:
void setX(int x)
{
m_x = x;
}

int getX() { return m_x; }
};

int main()
{
A a;
a.setX(5);
cout << a.getX() << endl;
return 0;
}


Bu mesaja 1 cevap geldi.
L
12 yıl
Yarbay

quote:

Orijinalden alıntı: -Source-

quote:

Orijinalden alıntı: GhilleintheMist

Her iki sorumada sayenizde cevap buldum teşekkürler :)

O verdiğiniz kodu compile ettikten sonra bide this olmadan compile ettim. O zaman memoryde eski bir uygulamadan kalan bi değer geldi. Anladığım kadarıyla değişken isimlerini ayrı koyarsak sorun yok. yani


  #include <iostream> 
using namespace std;
class A
{
private:
int x;
public:
void setX(int y)
{
x = y;
}

int getX() { return x; }
};

int main()
{
A a;
a.setX(5);
cout << a.getX() << endl;
return 0;
}

yapsak. Açıkçası bu tip bi kullanım bana daha düzgün geldi. değişken ismi mi kalmadı da aynı ismi kullanıyoruz :P

Çöp değerin gelmesinin sebebi her değişken kendi bloğunda aktif olduğu için this'i kaldırırsan yani x = x olursa, fonksiyona parametre ile gelen x'e yine parametreyi atıyor.
Yani sınıfın üyesi olan x'e atama yapmıyor. getX() ile de içinde çöp değer olan sınıfın üyesi olan x'i çağırıyor.

Dediğin gibi başka bir değişken ismi vermek daha iyi. Aşağıda ki gibi kullananlarda var.
  #include <iostream> 
using namespace std;
class A
{
private:
int m_x;
public:
void setX(int x)
{
m_x = x;
}

int getX() { return m_x; }
};

int main()
{
A a;
a.setX(5);
cout << a.getX() << endl;
return 0;
}


Yalnız garip bişey farkettim;
dev c++'ta aynı kodu iki farklı bilgisayarda derledim. Daha sonra x'in pointerını return eden bi function yazıp cout la yazdırdım. Ama tüm bilgisayarlarda aynı address çıktı. Hatta tüm bilgisayarlarda this'i kaldırınca x değeri aynı geldi. (yani tüm dediğim 2:P) Ama visual studio'da programı her çalıştırışımda address değişti ve değerde değişik geliyordu. Çok saçma ve gereksiz bulabilirsniz ama kodun her kısmını böyle deneyince bunları bulup şaşırıyorum :D


Bu mesaja 1 cevap geldi.
-
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: GhilleintheMist


Yalnız garip bişey farkettim;
dev c++'ta aynı kodu iki farklı bilgisayarda derledim. Daha sonra x'in pointerını return eden bi function yazıp cout la yazdırdım. Ama tüm bilgisayarlarda aynı address çıktı. Hatta tüm bilgisayarlarda this'i kaldırınca x değeri aynı geldi. (yani tüm dediğim 2:P) Ama visual studio'da programı her çalıştırışımda address değişti ve değerde değişik geliyordu. Çok saçma ve gereksiz bulabilirsniz ama kodun her kısmını böyle deneyince bunları bulup şaşırıyorum :D

Denemek güzeldir, böyle böyle öğreniliyor. Aynı değer çıkmalarına tesadüf diyeceğim ama bu kadarı da fazla :D. Dev-C++'ı tavsiye etmiyorum onun bir eksikliğinden, hatasından dolayı da aynı değerler çıkabilir.


Bu mesaja 1 cevap geldi.
L
12 yıl
Yarbay

quote:

Orijinalden alıntı: -Source-

quote:

Orijinalden alıntı: GhilleintheMist


Yalnız garip bişey farkettim;
dev c++'ta aynı kodu iki farklı bilgisayarda derledim. Daha sonra x'in pointerını return eden bi function yazıp cout la yazdırdım. Ama tüm bilgisayarlarda aynı address çıktı. Hatta tüm bilgisayarlarda this'i kaldırınca x değeri aynı geldi. (yani tüm dediğim 2:P) Ama visual studio'da programı her çalıştırışımda address değişti ve değerde değişik geliyordu. Çok saçma ve gereksiz bulabilirsniz ama kodun her kısmını böyle deneyince bunları bulup şaşırıyorum :D

Denemek güzeldir, böyle böyle öğreniliyor. Aynı değer çıkmalarına tesadüf diyeceğim ama bu kadarı da fazla :D. Dev-C++'ı tavsiye etmiyorum onun bir eksikliğinden, hatasından dolayı da aynı değerler çıkabilir.

compile ederken o x değerini programın içine kaydedip aynı zamanda pointerını kaydedip hep aslıdna bi bakıma cacheden yazdırıyo gibi geldi.





< Bu mesaj bu kişi tarafından değiştirildi Lord Nibbler -- 4 Şubat 2013; 20:22:54 >

G
12 yıl
Yarbay

quote:

Orijinalden alıntı: -Source-

quote:

Orijinalden alıntı: Tolgá

getchar ve putchar ne işe yarıyor biri lütfen anlatsın.


http://en.cppreference.com/w/c/io/getchar
Standart giriş akımından(stdin) bir karakter okur.

http://en.cppreference.com/w/c/io/putchar
Standart çıkış akımına(stdout) bir karakter yazar. Aldığı parametre yazılacak karakter.

Küçük bir örnek. Eğer kelime girilirse sadece ilk harfini alır.
 
#include <stdio.h>
int main()
{
// Bir karakter oku
char giris = getchar();
// Okunan karakteri ekrana yazdir.
putchar(giris);
return 0;
}



Teşekkkürler.



< Bu ileti mobil sürüm kullanılarak atıldı >