Arama butonu
Bu konudaki kullanıcılar: 3 misafir, 2 mobil kullanıcı
4171
Cevap
168194
Tıklama
3
Öne Çıkarma
Cevap: C/C++/C# Sorularınız Buraya. . .(GÜNCEL) (118. sayfa)
G
12 yıl
Yarbay

Ukalalık etmek istemem ama bildiğim kadarıyla yanlış olan şeyler yazmışsınız. C' de stringler read-only değildir. "DonanimHaber" gibi bir stringin değiştirilemez olmasının sebebi derleyicinin bellekten kazanmak için stringi program koduna gömmesi. Bu stringi değiştirmeye çalışmak program kodunu değiştirmeye çalışmak anlamına gelir ve seg-fault yersiniz.

Bir char dizisi tanımlarken;
char str[] = "DonanimHaber"; ifadesindeki stringi derleyici str nin gösterdiği yere yazar çünkü bilir ki str dizisi değişkendir ve içeriği değişebilmelidir.

Fakat;
const char str[] = ... ya da
const char *str = ... gibi bir bildirimde string code segmente yazılır çünkü değişmeyecek olan bir verinin bellekte yer kaplamasına gerek yoktur.

Bu arada c++ ta da stringler aynı mantıkla çalışır. const olmayanlar istenildiği gibi modifiye edilebilir.


Bu mesaja 2 cevap geldi.

Bu mesajda bahsedilenler: @4kalan
4
12 yıl
Teğmen

Estağfurullah. Siz yanlış anladınız ya da ben eksik yazdım. Stringlerden kastımı biraz daraltıp anlattım, örneklerde görüldüğü gibi
char *cptr = "DonanimHaber"; gibi stringlerdi.

Doğrudan diziye atanan string ler tabiki değiştirilebilir.
char c[] = "DonanimHaber"; gibi.

Stringlerin program koduna gömüldüğünü de okumuştum ama yukarıdaki anlattığım undefined behaviour durumundan kesinlikle eminim. (Zaten kesin bilmediğim yerlerde özellikle belirtiyorum)

Sonuç olarak sizin yazdığınız
"char str[] = "DonanimHaber"; ifadesindeki stringi derleyici str nin gösterdiği yere yazar çünkü bilir ki str dizisi değişkendir ve içeriği değişebilmelidir." Buna zaten katılıyorum tersini de yazmadım.

Bahsettiğim,
char *str = "DonanimHaber"; in değiştirilmesinin undefined behaviour olduğuydu. (Hepsini yazayım da karışıklık kalmasın)
const char *str = "DonanimHaber"; bunu zaten değiştirmeye kalkmak compile-time hatası.
char str[] = "DonanimHaber"; istenilen şekilde değiştirilebilir.
const char str[] = "DonanimHaber"; değiştirilemez const keyword ünden dolayı.

Not: Belki gözünüzden kaçmıştır üstte birkaç mesaj daha var, onlara da bakabilirsiniz.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @elektro_gadget
G
12 yıl
Yarbay

Olsun tartışmak iyidir. Burada yazılanlar konuyla ilgili türkçe kaynaktır aynı zamanda.

Önemli birşeyi belirtmeyi unuttum.
char *str = "DonanimHaber"; komple hatalı bir ifade. Normalde bunun derlenmemesi lazım ama ne hikmetse gcc bunu warning bile vermeden derliyor. Yaptığı şey ise şu. Stringi program koduna yazıp adresini str ye atıyor. str const olmadığı için str[0] = 'A'; ataması da yasak değil. Ama sonuçta malum sebepten çakılıyor.

Kısacası bu bildirim şeklini kullanmayın. Zaten kimse tavsiye etmiyor.


Bu mesaja 2 cevap geldi.
4
12 yıl
Teğmen

Derlenmemesi için dilin kuralları açısından bir engel yok ki, mantıksal bir hata. Adresi ataması da tamam. str[0] = 'A'; ataması derleme zamanında hata değil, evet. Kullanılmaması gerekir, const belirteci yazılmalıdır başına okunabilirlik olarak. Ama verdiğim cevaplar dilin kuralları dahilinde olan cevaplardı, aynı şeyleri söylüyoruz. Sadece son mesajımı okuduğunuzdan şüpheleniyorum




Bu mesajda bahsedilenler: @elektro_gadget
G
12 yıl
Yarbay

Okudum. Size karşı yazılmış birşey değil zaten o. Sadece önceki mesajımda unuttuğum şeyi ek olarak yazdım. Uykum geldi ve biraz daha konuşursam saçmalamaya başlayacam.
İyi geceler.




Bu mesajda bahsedilenler: @4kalan
B
12 yıl
Yarbay

@4kalan Teşekkürler hocam.

Bu arada üslubune uygun bir şekilde tartışmak iyidir

@elektro_gadget yine sen iyisin hocam benim 10'dan sonra beyin off moduna geçiyor.

Bu arada C programlamayı CodeBlocks ile yapıyorum.String ifadeler içerisindeki türkçe karkaterleri göstermiyorİnternette türkçe bir kaç sitedeki denilenleri yaptım ama değişen birşey olmadı.





< Bu mesaj bu kişi tarafından değiştirildi Bilgisayar Bağımlısı -- 17 Kasım 2013; 8:29:59 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @elektro_gadget , @4kalan
Ö
12 yıl
Yüzbaşı

Okuduğum kitap'da yer alan ve konu ile ilgili olabileceğini düşündüğüm bir sayfayı paylaşmak istedim.

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

Head First C(http://www.it-ebooks.info/book/704/) kitabı, sayfa 73, memory ve pointers konusu.





< Bu mesaj bu kişi tarafından değiştirildi özgür beyin -- 17 Kasım 2013; 9:58:50 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @elektro_gadget , @4kalan
B
12 yıl
Yarbay

quote:

Orijinalden alıntı: özgür beyin

Okuduğum kitap'da yer alan ve konu ile ilgili olabileceğini düşündüğüm bir sayfayı paylaşmak istedim.

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

Head First C(http://www.it-ebooks.info/book/704/) kitabı, sayfa 73, memory ve pointers konusu.

Ah ingilizce ah


Bu mesaja 1 cevap geldi.
-
12 yıl
Binbaşı

Arkadaslar merhaba,
Diziler konusunu hiç anlamadım.Videolu anlatım gibi bir şey bar mı elinizde? Ya da bildiğiniz?


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

quote:

Orijinalden alıntı: lahm

Arkadaslar merhaba,
Diziler konusunu hiç anlamadım.Videolu anlatım gibi bir şey bar mı elinizde? Ya da bildiğiniz?

Hangi dil?


Bu mesaja 1 cevap geldi.
-
12 yıl
Binbaşı

quote:

Orijinalden alıntı: MrOwl

quote:

Orijinalden alıntı: lahm

Arkadaslar merhaba,
Diziler konusunu hiç anlamadım.Videolu anlatım gibi bir şey bar mı elinizde? Ya da bildiğiniz?

Hangi dil?

C#


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

Arkadaşlar çok önemli bir ricam ödev var C den ödevi yaptım kod hazır yanlız program şuanki bulunduğum bilgisayarda yok o yüzden bilgisayarında visual studio bulunan birine kodu atsam kaydedip source file ını bana gönderebilir mi acaba? PM bekliyorum ltfen teşekkürler şimdiden.


Bu mesaja 1 cevap geldi.
A
12 yıl
Onbaşı

arkadaşlar bir küçük sorunum var... Sessiz harfleri yazarken proğram gereği ses dizisin içindeki tüm harfleri kontrol ediyor ve o kadar ekrana basıyor... Bunu while ile düzeltmeye çalıştım olmadı.. çözüm önerecek var mı? lütfen tek tek sesli harf sorgulatması önermeyin..!!

#include<stdio.h> 
#include<stdlib.h>

//Girilen kelimede ki sesli ve sessiz harfleri ekrana basan proğram..
main()
{
int i,j;
char klm[100];
char ses[11]="aeiouAEIOU";
printf("kelime..:");
scanf("%s",klm);

printf("sesli harfler..:");
for(i=0;klm[i];i++){for(j=0;ses[j];j++)
if(klm[i]==ses[j])
printf("%c ",klm[i]);
}


printf("\nsessiz harfler..:");
for(i=0;klm[i];i++){for(j=0;ses[j];j++)
if(klm[i]!=ses[j])
printf("%c ",klm[i]);
}
system("PAUSE");
return 0;
}



G
12 yıl
Yarbay

Daha verimli bir yol önerebilirim. Hem sorununa da çare olur. Ama sadece ipucu, gerisini sen yazarsın. Olmazsa söyle.

char ses[122] = {0};
ses['a'] = ses['e'] = ses['i'] = ses['o'] = ses['u'] = ses['A'] = ses['E'] = ses['I'] = ses['O'] = ses['U'] = 1;


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @ahmet_k06
P
12 yıl
Binbaşı

Arkadaşlar şöyle bir sorum var:
Girilen bir sayıya kadar olan tüm sayıları teker teker yazan bir program yazmak istiyorum.
Örneğin 5 yazdım, ekranda 1 2 3 4 5 görünmesini istiyorum ve bu programin while döngüsüyle yazılması gerekiyor.
Nasıl yapabilirim?

#include<stdio.h> 
int main(){
int b,i;
scanf("%d",b);
i=1;
while (i<b){
i=i+1;
printf("%d",i);
}
return 0;
}





< Bu mesaj bu kişi tarafından değiştirildi Psydia -- 19 Kasım 2013; 16:46:25 >
Bu mesaja 1 cevap geldi.
T
12 yıl
Yarbay

quote:

Orijinalden alıntı: elektro_gadget

Olsun tartışmak iyidir. Burada yazılanlar konuyla ilgili türkçe kaynaktır aynı zamanda.

Önemli birşeyi belirtmeyi unuttum.
char *str = "DonanimHaber"; komple hatalı bir ifade. Normalde bunun derlenmemesi lazım ama ne hikmetse gcc bunu warning bile vermeden derliyor. Yaptığı şey ise şu. Stringi program koduna yazıp adresini str ye atıyor. str const olmadığı için str[0] = 'A'; ataması da yasak değil. Ama sonuçta malum sebepten çakılıyor.

Kısacası bu bildirim şeklini kullanmayın. Zaten kimse tavsiye etmiyor.

Aynen buna katiliyorum, char *str = "Blabla" kullanmayin, kullandirmayin, hatta ornekte gostermeyin millet ordan burdan goruyor sonra kendi koduna ekliyor. strcpy() bosuna mi var?



T
12 yıl
Yarbay

quote:

Orijinalden alıntı: Psydia

Arkadaşlar şöyle bir sorum var:
Girilen bir sayıya kadar olan tüm sayıları teker teker yazan bir program yazmak istiyorum.
Örneğin 5 yazdım, ekranda 1 2 3 4 5 görünmesini istiyorum ve bu programin while döngüsüyle yazılması gerekiyor.
Nasıl yapabilirim?

#include<stdio.h> 
int main(){
int b,i;
scanf("%d",b);
i=1;
while (i<b){
i=i+1;
printf("%d",i);
}
return 0;
}


while dongusunun icindeki iki satiri tam tersi yapman gerekiyor. Yani printf i once i=i+1 i sonra yapman gerekiyor.
bide while loopdaki kondisyonu kucuktur degil kucuk esit(<=) yapman gerekiyor.


Bu mesaja 1 cevap geldi.
H
12 yıl
Onbaşı

Yardım Edermisinizz ??

Bir dizi tamsayıyı toplayacak bir program yazınız;
şöyleki:
1. Scanf ile okunan ilk sayı bundan sonra okunacak sayıların sayısını belirtiyor;
2. Program her scanf işletildiğinde yalnızca bir sayı okuyacaktır;
3. Örnek bir dizi şöyle olabilir: 4 35 23 33 715. Bu örnekteki 4 sayısı ardından gelen sayıların
sayısını belirtmektedir; bu dört sayı teker teker okunac ak ve toplamı bulunacaktır;
4. Her biriniz yukarıdaki örneği değil, kendinizin belirlediği sayı dizisini kullanacaksınız.


Bu mesaja 3 cevap geldi.
Ö
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: hann1qan

Yardım Edermisinizz ??

Bir dizi tamsayıyı toplayacak bir program yazınız;
şöyleki:
1. Scanf ile okunan ilk sayı bundan sonra okunacak sayıların sayısını belirtiyor;
2. Program her scanf işletildiğinde yalnızca bir sayı okuyacaktır;
3. Örnek bir dizi şöyle olabilir: 4 35 23 33 715. Bu örnekteki 4 sayısı ardından gelen sayıların
sayısını belirtmektedir; bu dört sayı teker teker okunac ak ve toplamı bulunacaktır;
4. Her biriniz yukarıdaki örneği değil, kendinizin belirlediği sayı dizisini kullanacaksınız.

Merhaba,

Yapamadığınız yer neresi? Orayı yazarsanız yardımcı olmaya çalışalım.



Ö
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: hann1qan

quote:

Orijinalden alıntı: özgür beyin

quote:

Orijinalden alıntı: hann1qan

Yardım Edermisinizz ??

Bir dizi tamsayıyı toplayacak bir program yazınız;
şöyleki:
1. Scanf ile okunan ilk sayı bundan sonra okunacak sayıların sayısını belirtiyor;
2. Program her scanf işletildiğinde yalnızca bir sayı okuyacaktır;
3. Örnek bir dizi şöyle olabilir: 4 35 23 33 715. Bu örnekteki 4 sayısı ardından gelen sayıların
sayısını belirtmektedir; bu dört sayı teker teker okunac ak ve toplamı bulunacaktır;
4. Her biriniz yukarıdaki örneği değil, kendinizin belirlediği sayı dizisini kullanacaksınız.

Merhaba,

Yapamadığınız yer neresi? Orayı yazarsanız yardımcı olmaya çalışalım.

bir dizi tam sayı toplama ıslemını yaparım ancak verilen maddeleri anlamadım 3.madde mesela ??

Orada anlatılmak istenen şu; ilk hangi değer girilirse dizinin boyutuda o olacak. Örneğin ilk 5 girildiyse kendisinden sonra 5 tane daha sayı girilecek ve dizi 5 25 22 55 22 66 gibi bişey olacak. Daha sonrada dizideki elemanları getirip toplama işlemi yaptıracaksınız.