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

quote:

Orijinalden alıntı: ahmet_k06

arkadaşlar c de girdiğim değerleri yer değiştirecek bir programa ihtiyacım var...
mesela....: 1 2 3 4 5 diye girdik..ekrana....:5 4 3 2 1 diye yazacak...Basit program istiyorum..yardımcı olursanız sevinirim...

anlamak için strtok kullanabilirsin ama projende kullanma


Bu mesaja 2 cevap geldi.
C
12 yıl
Yarbay

Takıldığın yer olursa sorarsın.

 
#include <stdio.h>

int main()
{
int n;
int degistir = 0;

printf("Degistirilecek sayiyi giriniz = ");
scanf_s("%d", &n);

while (n != 0)
{
degistir = degistir * 10;
degistir = degistir + n % 10;
n = n / 10;
}

printf("Degistirilen sayi = %d\n", degistir);

return 0;
}




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

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.


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

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.

Hocam yanlış anladınız sanırım... benim yapmak istediğim şu şekilde... mesela ben 5 tane ayı giriyorum klavyeden... 1 2 7 3 9 diye.... program bunu daha sonra 9 3 7 2 1 diye ekrana yazacak ..yani ekranda
1 2 7 3 9
9 3 7 2 1
yazacak..

Anlatabildim mi? Daha yeniyim o yüzden basit bir şey arıyorum..



-
12 yıl
Yüzbaşı

@ahmet_k06
Direk kodu yazıp vermeyeceğim gidiş yollarından bahsedeceğim sadece.

İlk önce 5 elemanlı bir dizi tanımla ve bu dizinin elemanları kullancıdan aldıgın degerler ile doldur.
Sonra bir for döngüsü tanımlayacaksın. For döngün 0'dan başlayıp 2'e kadar gidecek. Neden 2'e kadar gittiğini sana bırakıyorum.
Eğer çözemezsen haber ver anlatayım.
Sonra dizinin ilk elemanı ile son elemanını swap yapacaksın yani yer değiştireceksin.
Bunun için küçük bir fonksiyon yazabilirsin. Swap fonksiyonun şöyle olacak.
void swap(int &a, int &b)
{
int tmp = b;
b = a;
a = tmp;
}
Şimdi gelelim for indexi ile 0. index ile 4. indexi nasıl yer değiştireceğine
swap(dizi, dizi[4 - i]);
Böyle dersen for döngüsünün içinde for'un ilk döngüsünde swap(dizi[0], dizi[4]),
ikinci döngüsünde ise swap(dizi[1], dizi[3])'ü yer değiştirmiş olursun.

Yapacağın işlem bu kadar. Bu tür ödevlerinizde direk kod yazmak yerine biraz düşünüp, düşündüklerinizi kağıt üzerine dökerseniz daha rahat sonuca ulaşırsınız.





< Bu mesaj bu kişi tarafından değiştirildi -Source- -- 18 Ekim 2013; 0:53:14 >
Bu mesaja 1 cevap geldi.

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

quote:

Orijinalden alıntı: -Source-

@ahmet_k06
Direk kodu yazıp vermeyeceğim gidiş yollarından bahsedeceğim sadece.

İlk önce 5 elemanlı bir dizi tanımla ve bu dizinin elemanları kullancıdan aldıgın degerler ile doldur.
Sonra bir for döngüsü tanımlayacaksın. For döngün 0'dan başlayıp 2'e kadar gidecek. Neden 2'e kadar gittiğini sana bırakıyorum.
Eğer çözemezsen haber ver anlatayım.
Sonra dizinin ilk elemanı ile son elemanını swap yapacaksın yani yer değiştireceksin.
Bunun için küçük bir fonksiyon yazabilirsin. Swap fonksiyonun şöyle olacak.
void swap(int &a, int &b)
{
int tmp = b;
b = a;
a = tmp;
}
Şimdi gelelim for indexi ile 0. index ile 4. indexi nasıl yer değiştireceğine
swap(dizi, dizi[4 - i]);
Böyle dersen for döngüsünün içinde for'un ilk döngüsünde swap(dizi[0], dizi[4]),
ikinci döngüsünde ise swap(dizi[1], dizi[3])'ü yer değiştirmiş olursun.

Yapacağın işlem bu kadar. Bu tür ödevlerinizde direk kod yazmak yerine biraz düşünüp, düşündüklerinizi kağıt üzerine dökerseniz daha rahat sonuca ulaşırsınız.

öncelikle anlatımınız için teşekkür ederim.. Lakin okulda çok fazla bir şey görmedik... yani anlattıklarınızı uygulamaya döküp hocaya veremem..
Elde olanlarla bir şeyler yapmamızı istiyor.
alttaki kodu ben yazdım.. ilerisinde -görüdklerim dahilinde- birçok şey denedim olmadı.. değerleri ve kaç değer gireceğime ben karar veriyorum..

#include<stdio.h> 
#include<stdlib.h>
int main()
{
int limit,i;
int deger[100];
int deger2[100];
int k[100];


printf("KAC DEGER GIRMEK ISTIYORSUNUZ..: ");
scanf("%d",&limit);

for(i=0;i<limit;i++){
printf("[%d]. DEGER..:",i+1);
scanf("%d",deger[i]);
}

printf("\nGIRDIGINIZ DEGERLER\n");
for(i=0;i<limit;i++)
printf("%d\t",deger[i]);
printf("\n\n");








system("PAUSE");
return 0;
}





< Bu mesaj bu kişi tarafından değiştirildi ahmet_k06 -- 18 Ekim 2013; 1:35:37 >

-
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