Arama butonu
Bu konudaki kullanıcılar: 2 misafir
4171
Cevap
168262
Tıklama
3
Öne Çıkarma
Cevap: C/C++/C# Sorularınız Buraya. . .(GÜNCEL) (105. sayfa)
-
12 yıl
Yüzbaşı

@ahmet_k06
O zaman daha basit halini yapalım.

for(int i = limit - 1; i >= 0; i--)
{
deger2[limit - i - 1] = deger;
}

Yukarıdaki kod ile deger2 dizisine deger dizisindeki değerleri tersten eklemiş oluruz.
printf("\nGIRDIGINIZ DEGERLERIN YER DEGISTIRILMIS HALI\n");
for(i=0;i<limit;i++)
printf("%d\t",deger2);
printf("\n\n");


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @ahmet_k06
A
12 yıl
Onbaşı

quote:

Orijinalden alıntı: -Source-

@ahmet_k06
O zaman daha basit halini yapalım.

for(int i = limit - 1; i >= 0; i--)
{
deger2[limit - i - 1] = deger;
}

Yukarıdaki kod ile deger2 dizisine deger dizisindeki değerleri tersten eklemiş oluruz.
printf("\nGIRDIGINIZ DEGERLERIN YER DEGISTIRILMIS HALI\n");
for(i=0;i<limit;i++)
printf("%d\t",deger2);
printf("\n\n");

EYVALLAH kardeşim.. yapmak istediğim tam da böyle bir şeydi... her şey için sağol..


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

Arkadaşlar girdiğim karakter dizisinin baştan ve sondan bakarak aynı ise yazdırıan bir proğram yapmaya çalıştım.. Ama yine başarılı olamadım.. amacım şu mesela: 'adebdega' diye bir karakterimiz var.. burda baştan ve sondan baktığımızda her iki yerde de 'a' var. elde 1. sonra bakmaya devam ediyoruz. 3. sırada e var ve sondan 3. sırada yine e var.. Elde oldu 2. başka yok.... sonuç 2.... bu şekil bir program.. kendi yaptığım programda 2. for döngüsünü yanlış yaptığımı düşünüyorum yardım edin

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

int main()
{
char ktr[200];
int i,j;

printf("LUTFEN BIR SEYLER GIRIN..:");
scanf("%s",&ktr);

for (i=0;ktr[i];i++){
for(j=0;ktr[j];j--)
if(ktr[i]==ktr[j])
i=i+1;
printf("%d",i);
}
printf("\n");
system("PAUSE");
return 0;

}



-
12 yıl
Yüzbaşı

@ahmet_k06

İki for'a ihtiyacın yok zaten.

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

int main()
{
char ktr[200];
int i,j,k, lenght;

printf("LUTFEN BIR SEYLER GIRIN..:");
scanf("%s",ktr);

lenght = strlen(ktr);
k = 0;
for (i = 0; i <= lenght / 2; i++)
{
if(ktr[i] == ktr[lenght - i - 1])
k = k + 1;
}
printf("Sonuc: %d", k);
printf("\n");
system("PAUSE");
return 0;

}



Bu mesaja 1 cevap geldi.

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

ödevime bir yardım edebilir misiniz ? c de böyle bir görüntü oluşturmam gerekiyor açıları gircem üçgenmi değilmi söyleyecek üçgense eşkenar mı ikizkenarmı birde bunlar için hangi kodları kullanmam gerekir if lerle mi oluyor while larla mı oluyor kusra bakmayın daha 2-3 hafta olduğu öğrenmeye başlayalı

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


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

arkadaşlar probemim şu aşağıdaki programda ikinci printf satırı olayınca program 0 dan 256 ya kadar olan sayıların tamamının sonuclarını gösteriyor ama ikinci printf olunca 108 ve sonrasını gösteriyor.
ikinci printf varken bütün sonucları nasıl görebilirim?
#include<stdio.h>
int main(void)
{
int d1;
d1=0;
for(d1=0;d1<256;d1=d1+1)
{
printf("AScII kodu %d olan karakter :%c \n",d1,d1);
printf("------------------------------------\n");

}
}


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

quote:

Orijinalden alıntı: just_ks

arkadaşlar probemim şu aşağıdaki programda ikinci printf satırı olayınca program 0 dan 256 ya kadar olan sayıların tamamının sonuclarını gösteriyor ama ikinci printf olunca 108 ve sonrasını gösteriyor.
ikinci printf varken bütün sonucları nasıl görebilirim?
#include<stdio.h>
int main(void)
{
int d1;
d1=0;
for(d1=0;d1<256;d1=d1+1)
{
printf("AScII kodu %d olan karakter :%c \n",d1,d1);
printf("------------------------------------\n");

}
}


Toplam 512 satır olduğu için ve işlemler çok hızlı yapıldığı için 108 den öncekiler yukarıda kalıyodur.


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

Arkadaşlar, arka arkaya 3 defa girilen karakterlerin toplamını söyleyen bir program yapmak istedim... mesela 11123334 bu dizide 2 tane var... ama ben programımda toplamını almayı ve ekrana yazdırmayı beceremedim... !

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

int main()
{
char dizi[100];
int i,k=0;

printf("SAYI DIZISINI GIRINIZ..:");
scanf("%s",&dizi);

for(i=0;dizi[i];i+1){
if(dizi[i]==dizi[i+1]){
if(dizi[i]==dizi[i+1])
}







system("PAUSE");
return 0;
}



J
12 yıl
Onbaşı

quote:

Orijinalden alıntı: 4kalan

quote:

Orijinalden alıntı: just_ks

arkadaşlar probemim şu aşağıdaki programda ikinci printf satırı olayınca program 0 dan 256 ya kadar olan sayıların tamamının sonuclarını gösteriyor ama ikinci printf olunca 108 ve sonrasını gösteriyor.
ikinci printf varken bütün sonucları nasıl görebilirim?
#include<stdio.h>
int main(void)
{
int d1;
d1=0;
for(d1=0;d1<256;d1=d1+1)
{
printf("AScII kodu %d olan karakter :%c \n",d1,d1);
printf("------------------------------------\n");

}
}


Toplam 512 satır olduğu için ve işlemler çok hızlı yapıldığı için 108 den öncekiler yukarıda kalıyodur.

hocam peki sonuçların tamamını göreilmek için yapabileceğim bir şey varmı?


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

quote:

Orijinalden alıntı: just_ks

quote:

Orijinalden alıntı: 4kalan

quote:

Orijinalden alıntı: just_ks

arkadaşlar probemim şu aşağıdaki programda ikinci printf satırı olayınca program 0 dan 256 ya kadar olan sayıların tamamının sonuclarını gösteriyor ama ikinci printf olunca 108 ve sonrasını gösteriyor.
ikinci printf varken bütün sonucları nasıl görebilirim?
#include<stdio.h>
int main(void)
{
int d1;
d1=0;
for(d1=0;d1<256;d1=d1+1)
{
printf("AScII kodu %d olan karakter :%c \n",d1,d1);
printf("------------------------------------\n");

}
}


Toplam 512 satır olduğu için ve işlemler çok hızlı yapıldığı için 108 den öncekiler yukarıda kalıyodur.

hocam peki sonuçların tamamını göreilmek için yapabileceğim bir şey varmı?

output'u bi dosyaya alabilirsin. output.txt gibi


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

Arkadaşlar klavyeden girilen bir dizide arka arkaya 3 defa tekrar eden sayıların toplamını bulan bir program yapmaya çalştım.. Ama bir sorun var ilk 3 satırda doğruysa alıyor diğerlerini almıyor ? yardım!

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

int main()
{
char dizi[100];
int i,sayac;

printf("SAYI DIZISINI GIRINIZ..:");
scanf("%s",&dizi);

for(i=0;dizi[i];i+1){
if(dizi[i]==dizi[i+1]&&dizi[i+1]==dizi[i+2])
sayac++;
printf("TOPLAM...:%d",sayac);
break;
}
printf("\n");

system("PAUSE");
return 0;
}


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

Linux'ta kullanmak için hangi C/C++ IDE/Editör'ü önerirsiniz? Kullandığım Linux dağıtımı, Arch Linux (32-bit) Code::Blocks düşünüyorum şuan ama belki Linux ortamına özgü daha iyi bi IDE vardır ondan sorayım dedim


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

Hocam daha iyi mi bilemem de ben Geany kullanıyorum, alışınca fazlasıyla rahat bence.


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

@GhilleintheMist
Ben bir ara vim ve eklentilerini kullanmıştım. Ama şimdi QT Creator kullanıyorum. Code::Blocks'da copy-paste yapamıyorum o yüzden kullanamıyorum. KDevelop'u da denedim pek ısınamadım.




Bu mesajda bahsedilenler: @GhilleintheMist
L
12 yıl
Yarbay

Geany'i deneyeceğim :)
Qt Creator'u ben de beğenmiştim fakat tek dosya ile çalışmayı bulamadım. İlla ki proje şeklinde yapmak gerekiyor sanırım. O da pek hoşuma gitmedi benim açıkçası. Öneirleriniz için teşekkürler:)


@Mtntk @-Source-





< Bu mesaj bu kişi tarafından değiştirildi Lord Nibbler -- 21 Ekim 2013; 22:36:21 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Mtntk , @-Source-
R
12 yıl
Yüzbaşı

arkadaşlar ben daha yeni yeni c öğreniyorum. basit bir sorum var.
scanf ile bir sayı alırken bunun sayı dışında bir karakter olduğunda programın uyarı vermesini istiyorum.
nasıl yapabilirim? teşekkürler.


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

quote:

Orijinalden alıntı: reojuve

arkadaşlar ben daha yeni yeni c öğreniyorum. basit bir sorum var.
scanf ile bir sayı alırken bunun sayı dışında bir karakter olduğunda programın uyarı vermesini istiyorum.
nasıl yapabilirim? teşekkürler.

Merhaba,

Aşağıya ekleyeceğim kodlar sayesinde bu istediğiniz şeyi yapabilirsiniz hocam.

Kolay gelsin...

Kodlar:
 
int input;

printf("değer yazın: ");
if(scanf("%i",&input) == 1)
printf("doğru veri");
else
printf("yanlış veri");



M
12 yıl
Yarbay

quote:

Orijinalden alıntı: reojuve

arkadaşlar ben daha yeni yeni c öğreniyorum. basit bir sorum var.
scanf ile bir sayı alırken bunun sayı dışında bir karakter olduğunda programın uyarı vermesini istiyorum.
nasıl yapabilirim? teşekkürler.

isdigit() fonksiyonunu kullanabilirsin.Fonksiyonu kullanmak için ctype.h kütüphanesini include etmelisin.
Örnek bir uygulama yazdım.

#include <stdio.h> 
#include <ctype.h>
#include <conio.h>

int main()
{
char sayi;

printf("Birsey giriniz: ");
scanf("%c",&sayi);

if(isdigit(sayi))
{
printf("Sayi girdin");
}
else
{
printf("Harf girdin);
}
getche();
}




R
12 yıl
Yüzbaşı

teşekkürler.




Bu mesajda bahsedilenler: @Muco53 , @özgür beyin
F
12 yıl
Binbaşı

quote:

Orijinalden alıntı: elektro_gadget

quote:

Normal şartlarda evet, fakat birisi disassemble edip büyük bir projenizi 1 dakika içinde değiştirdiğinde bu sözleri bir daha edemezsiniz.


Tecrübeli bir cracker'ı calloc ile mi engelleyeceksin? Güvenli endişesi duyulan projelerde zaten uzman desteği alınır. Öyle onu bunu kullanma demekle güvenlik sağlanmaz. Adamlar bu işlere milyon dolarlar harcadığı halde yetersiz kalıyor.

quote:

overflow için ise isterseniz örneğini verebilirim.


İyi olur.

quote:

adam ileriki aşamalarda memcpy(mesela iki str ve karakterbirleştirip , veya binary bloğunu temiz alana taşımak isteyebilir) ile bir şeyler taşıyabilir bu durumda sonlandırıcı eklemekle uğraşmamak için zaten hazır olan sonlandırıcılar kullanılır. daha sonra adresi bellekte tutmadan basit bir for döngüsü ile attığı şeylere ulaşabilir)
malloc da kullanılabilir fakat bu sefer de pozisyon tutmak gerekir


Burada güvenlikle ilgili herhangi birşey söylememişsin. Zaten ağır string işlemlerinde bu fonksiyonlar çok yorar ve C uygun dil olmaktan çıkar. C++ ile mis gibi string sınıfları kullanılabilir. Fazla kasmaya gerek yok. Herşeyi yerinde kullanacaksın.

quote:

O güvenli denilen fonksiyonlar illegal olan bölgeye yazmıyor ama kopyalamayı eksik bırakıyor. Bunun neresi güvenli?

Burada anlatılmak isteneni anlamadım.


Mesela harici bir kaynaktan string bilgisi alınacak ve bir yere kopyalanacak diyelim. Bunun için güvenli olduğunu düşündüğün strcpy_s kullandın ve buffer uzunluğunu da verdin. Gelen string buffer ı aşıyorsa yarım kalır ve kopyalanmaz. Uygulama çökmez ama hatalı işleyişe sebep olur. Bunun çözümü _s takılı "güvenli!" fonksiyonlar kullanmak değil buffer uzunluğunu garanti altına almaktır.

quote:

işlemci kullanıcıdan aldığı her metindeki % leri %% olarak mı değiştirsin? Ekstra zaman kaybı.


Emin ol oradaki zaman kaybı senin o gereksiz kodları yazarken kaybettiğin zamandan çok çok daha kısadır.

quote:

C++ ın çoğu fonksiyonu C den daha yavaştır.
C++ ı C++ yapan özellikleri çıkartınca zaten hız farkı kalmaz.


Örnek? Kastettiğin virtual fonksiyonlar ise onu C ile gerçeklediğin zaman yine aynı şey olacak. Şablonlarda da hız kaybı değil bilakis hız kazancı ve üzerine tip güvenliği var. Birşey yazıyorsan onu somutlaştır ki havada kalmasın.

Konuyu gezerken gördüm cevabı bildirim gelmemiş o yüzden şimdi yanıtlayayım.
===
-Tecrübeli bir cracker'ı calloc ile mi engelleyeceksin? Güvenli endişesi duyulan projelerde zaten uzman desteği alınır. Öyle onu bunu kullanma demekle güvenlik sağlanmaz. Adamlar bu işlere milyon dolarlar harcadığı halde yetersiz kalıyor.

>İsteyen istediği gibi yazar zaten ben sadece uyardım.

Overflow:
return printf("%200000000000000c",'a') < 0;

Normalde overflow hatası vermesi lazım ancak daha kötüsü kod yanlış yorumlanıp sadece a harfinin yazıldığını göreceksiniz. Üstelik hata bile vermeyecek.
Bu kodu msvc11 derlediğinde düzgün çalıştığını ama Gnu(mingw) derlediğinde yukarıdaki gibi olduğunu göreceksiniz. Yani sorun daha da büyük.

Ayrıca şuna bakın:

int val;
val = 0x7fffffff; /* 2147483647*/
printf("val = %d (0x%x)\n", val, val);
printf("val + 1 = %d (0x%x)\n", val + 1 , val + 1); /*Overflow the int*/
return 0;

bunu cout ile denersek

---
Burada güvenlikle ilgili herhangi birşey söylememişsin. Zaten ağır string işlemlerinde bu fonksiyonlar çok yorar ve C uygun dil olmaktan çıkar. C++ ile mis gibi string sınıfları kullanılabilir. Fazla kasmaya gerek yok. Herşeyi yerinde kullanacaksın.

>güvenlikten dolaylı olarak bahsettim orada o işlemler yapılırsa adam malloc kullanıp pozisyon tutmazsa yine ciddi sorunlar ortaya çıkacak. Bu dönemde projelerde C++ nin kullanılması bence de dediğin gibi daha doğru.
---
Mesela harici bir kaynaktan string bilgisi alınacak ve bir yere kopyalanacak diyelim. Bunun için güvenli olduğunu düşündüğün strcpy_s kullandın ve buffer uzunluğunu da verdin. Gelen string buffer ı aşıyorsa yarım kalır ve kopyalanmaz. Uygulama çökmez ama hatalı işleyişe sebep olur. Bunun çözümü _s takılı "güvenli!" fonksiyonlar kullanmak değil buffer uzunluğunu garanti altına almaktır.

hiç düzgün olarak _s kullanmadığım ve yakın zamanda kullanmayacağım için bu konuda fazla konuşamam ama zaten _s kullanılmamalı. (microsoft özel)
---
Emin ol oradaki zaman kaybı senin o gereksiz kodları yazarken kaybettiğin zamandan çok çok daha kısadır.

>Ben orda güvenliği düşünerek öyle demiştim. Ayrıca fazla güvenlik istemezse şöyle deneyebilir
printf(str);
/*burada % gibi karakterleri ele*/

veya sadece

printf("%s",str);
---
Örnek? Kastettiğin virtual fonksiyonlar ise onu C ile gerçeklediğin zaman yine aynı şey olacak. Şablonlarda da hız kaybı değil bilakis hız kazancı ve üzerine tip güvenliği var. Birşey yazıyorsan onu somutlaştır ki havada kalmasın.

>derleyici optimizasyonlarını hesaba katmazsak (Mesela msvc c++ için çok fazla optimizasyon yapar) öyle olduğu düşünülüyor. Ben hiç test yapmadım. İnternet üzerinde çeşitli kaynaklara baktım 20-30 dakika bir tanesi bile c++ ın hız konusunda daha iyi olduğunu söylemedi.


Bu mesaja 1 cevap geldi.