Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

C# bilen var mı? (ya da C ve C++ ile kıyaslanması)


Bone

Öne çıkan mesajlar

Aynı sayfada ikinci C# topiği olacak ama benimki C#'a giriş hakkında olacak.

C ve C++ konusunda File'lara kadar konuları biliyorum. Function, Array, Class, Inheritance, biraz da File.

C ve C++'ya bu şekilde aşinalığım var, ama C#'ta çok zorlandım. Acaba önce Java öğrenmek mi lazım, onu merak ettim.

C veya C++ bilen birisi için C#'a girişi kolaylaştıracak bir tablo, tutorial, guide felan var mıdır? (örneğin int'in karşılığı budur, cin'in karşılığı budur, printf'in karşılığı budur gibi...)

Bunun dışında şu problemi nasıl yapacağımızı, yaptıklarımızı da neden yaptığımızı (bunu koyduk ama şu gerekçeyle koyduk gibi) anlatabilecek var mı?
said:
Write a function named syms which accept a string (a sentence) and returns the number of palindromes.
Palindrome: A word or phrase that reads the same both forward and backward is called a palindrome
Example:
NOON
RADAR

Rule: a word with a single character can not be a palindrome. (Example: A)
Hint: Split method of string class can be used to simplify the process.


Fazla uzun gelebilir belki ama bir iki kelime bile olsa birşeyler yazan olursa o bile yeter.
Link to comment
Sosyal ağlarda paylaş

Java'da yazayim, C# ile asiri benziyor Java. C# bilmiyorum yazin yazmam gerekicek calismaya baslayinca ama takma kafana bi gununu almaz dedi ordaki calisanlar.

Bu arada C++'dan C#'a gecme meselesine gelince, programlama temeli biliyorsun diye dusun, oyle bi gecis yapmaya calisirsan olmaz o, C++'da OOP konseptleri olsa da, C# ve Java cok daha farkli bir mantik uzerine dayali, guzel bi kitap alip bastan basla zaten zipla ziplaya gidersin temelden ogrenirsin guzel olur

Compile etmeyebilir bir iki syntax hatasi cikarsa, ama cikmamasi lazim :P direk browsera yaziyorum ama zaten yol gostermesi onemli olan

edit: anasini satiim bu code taginin bi sokamadim kodu sayfanin icine

public static int sym(String sentence) {
//wordlere ayir, bosluklardan ayirip arraye at diyorum burada
String words[] = sentence.split(" ");

// words arrayindeki her word icin (amacim teker teker bakmak palindrom mu diye
int palCount = 0;
for(String word: words) {
// palindrom diye bi booleani true yapiyorum
// eger asagidaki kodlardan gecip hala true kalirsa palindrom bu kelime diyecegim
boolean palindrom = true;
// word un baslangic ve bitis indexini tut
int a = 0;
int b = word.length() -1;

// eger b'nin gosterdigi index 0 ise bu kelime bir harfli demek, gec o zaman hic islem yapmadan bi soraki kelimeye
if(b == 0)
continue;

// basi ve sonu gosteren indexler birbirini gecene kadar, yani kelimenin ortasini gecene kadar
while(a < b) {
//bastaki ve sondaki karakter ayni degilse palindrom degil
if(word.charAt(a) != word.charAt(b)) {
// palindrom degil de ve looptan cik, artik donmenin anlami yok
palindrom = false;
break;
}
// baslangici bir saga, sonu bir sola kaydir
a++;
b--;
}
// palindrom olmasina karsit bi durum olusmadan tum harf ciftlerini gectiysek, palindrom sayisini artir
if(palindrom)
palCount++;

}

//palcount u dondur
return palCount;
}
Link to comment
Sosyal ağlarda paylaş

C# tamamen OOP'tur o yüzden C, C++ gibi prosedürel dilleri kullandıktan sonra alışması biraz zor gelebilir belki.
C# kullanmanın insanlara kolay gelmesinin, ya da salt OOP'a alışma sürecini es geçmelerinin sebebi IntelliSense olabilir. Bi class yazdıktan sonra bundan bi nesne yaratıp, "." koyunca her şeyin pat diye karşına gelmesi hepimizin hoşuna gidiyo. Nokta koyduğumuzda bi şeyler gelmiyosa bi şeyler yanlıştır diye düşünüyoruz, classımıza gidiyoruz ve bi bakıyoruz, erişim anahtarını koymamışız falan. Kanımca böyle böyle alışılıyo C#'a. Hoş değil pek aslında :)
Eğer şu an yaşadığın sorun, yazdığın konsol uygulamasında Program sınıfının altında bi metod tanımlamak ve bu metodun "static void Main(string[] args)" imzalı metodda gözükmemesi ise, bunun sebebi muhtemelen yazdığın metodun static olmamasıdır. Eğer böyle bi durum varsa da, OOP üzerine biraz daha odaklanman gerekiyo C#'a daha fazla eğilmeden önce.

Soruya gelince. Palindrom demek, bi kelimenin kendisi ile tersinin aynı olması demek senin de dediin gibi. Verilen cümledeki kelimelerden palindrom olanları bulacaamıza göre de, cümleyi parçalamamız lazım. C#'ta string sınıfının işimizi görecek 2 metodu var: string.split() ve string.compare(). Split() metodu bi stringi parametre olarak girilen karakterlere göre ayırır ve bi string dizisine atıp bu diziyi döndürür. Compare() ise iki stringi karşılaştırır ve bu stringler birbirlerinin aynı ise 0, değilse 0'dan farklı bi sayı döndürür.
Yapacağımız şeyler:
- Bi string'i tersine çevircek bi fonksiyon/metod yazmak
- Cümleyi boşluk karakterine göre ayırmak
- Bu dizideki tüm kelimeleri, az önce yazdıımız metodla terslerini bulup bunlarla karşılaştırmak, eğer palindrom iseler bu kelimeleri yazdırmak
- Tüm bu işlemlerden sonra bi de toplam palindrom sayısını döndürmek ki, hiç palindrom yoksa kullanıcı da bilsin.
Kod buraya sığmaz, sığsa bile çok yer kaplar diye internette bi yere attım. Projenin tamamı içi http://www.kojikun.org/Palindrom.rar , sadece kaynak kodu için http://www.kojikun.org/Program.rar adresine bakabilirsin.
Bu programı geliştirmek için yapılabilcek şeyler var. Örneğin, cümlede yalnızca boşluk ve kelime olmadığı için cümle stringinden nokta, virgül gibi noktalama işaretlerini kaldırmak, birden fazla boşluk yan yana geldiyse bunları birer boşluğa indirgemek, vs.

Kısa not: C ve C++'ta yer alan biçok veritipi C#'ta da aynı isimlerle var. cin'in C# karşılığı System.Console.Read, print'in karşılığı System.Console.Write'tır.
Link to comment
Sosyal ağlarda paylaş

object oriented programming mantığını biliyorsan herşey aynı geri kalan

int yine int
char yine char
string yine string :)
pointer gene pointer bişey yok yani

herşeyi class olarak görceksin sadece, 1-2 bişey yaptıktan sonra olayı kaparsın zaten
Link to comment
Sosyal ağlarda paylaş

syntax aynı diye, arkada da her şey aynı yürütülüyor demek değil aslında. ama başlangıç olarak aynı farzedilebilir yine de.. diğer türlü .net developer, java developer gibi kavramlar olmazdı zaten. ama yazılım geliştirme sadece syntax bilmekten oluşan bir şey değil. neyse bu biraz offtopic oldu.

onun dışında penth'in örneği güzel, c#'a çevirdim yardımcı olması açısından:


private int syms(string sentence)
{
int palCount = 0;
string[] words = sentence.Split(' ');

foreach (string word in words)
{
bool palindrom = true;
int a = 0;
int b = word.Length - 1;

if (b == 0)
continue;

while (a < b)
{
if (word[a] != word[b])
{
palindrom = false;
break;
}
a++;
b--;
}

if (palindrom)
palCount++;
}

return palCount;
}

yorumları kaldırdım, zaten penth yapmış. oradan okuyabilirsin.

bu metodu şöyle çağırabilirsin:

syms("bu benim taramak istediğim cümle");


ve sana integer (int) tipinde değer döndürür. yani şöyle kullanabilirsin:

int i = syms("bu benim taramak istediğim cümle");


not: syms çok kötü bir isimlendirme yahu..
edit: bbcode..
edit2: bbcode değil lan, smiley =P
Link to comment
Sosyal ağlarda paylaş

ben string'i ikiye bolup her iki tarafi da ayni mi diye bakardim.


static int syms(string sentence)
{
int palCount = 0;
string[] words = sentence.Split(' ');

foreach (string word in words)
{
if (word.Length - 1 == 0)
continue;

// direkt ikiye bolemiyoruz cunku kelime tek haneli sayida harf
// icerebilir. ikiye bolup, asagiya yuvarliyoruz. boylece ortadaki
// harfe bakmamiz gerekmeyecek
int splitPoint = (int)System.Math.Floor((double)(word.Length / 2));

// kelimenin ilk yarisini kaydediyoruz
string firstHalf = word.Substring(0, splitPoint);

// kelimeyi harflerine ayirip ters ceviriyoruz
char[] chars = word.ToCharArray();
Array.Reverse(chars);

// harfleri yine stringe cevirip tersten ilk yariyi aliyoruz.
string secondHalf = new string(chars).Substring(0, splitPoint);

if (firstHalf == secondHalf)
palCount++;
}

return palCount;
}
Link to comment
Sosyal ağlarda paylaş

Syntaxı öğrenmek sorun değil, c# da java da gayet rahat diller o konuda. zaten çok benziyo syntaxları. OOP konusunda eksiğin varsa önce temel kavramları (class, interface, inheritance vs.) öğren dilden bağımsız olarak. bunları bildikten sonra hangi dili istiyosan ona yoğunlaşabilirsin. bazı şeyler farklı dillerde farklı şeylerle yapılıyor ama olay aynı sonuçta. mesela javada multiple inheritance yok, c++'da var, ama onda da doğrudan interface diye bişi yok multiple inheritance'dan faydalanıyosun öyle bişi yapmak istediğinde falan. OOP bildikten sonra aradaki bu farkları öğrenirsin birbirleriyle karşılaştırarak.

C# öğrencem diyosan bunların yanında önce .Net teknolojisini incele, CLR nedir vs. , C++'dan farklı şekilde işliyor çünkü. Benzer şekilde java için virtual machine var falan. Syntax en kolay kısmı yani. Takıldığın yer olursa sorarsın yine.
Link to comment
Sosyal ağlarda paylaş

Evet interface yok, C# ve Javadaki Object gibi bi root class da yok. Abstract class yaratıp ondan inherit ederek yapıyosun aynı işi.

Penthesilea said:

bu arada multiple inheritance denilen dunyanin en gereksiz seyinin olmamasi kotu degil iyi bisey bence. tam bir bas belasi kim icat etti bilmiyorum. oysa java interfaceleri, mmm <3


yok abi zaten kötü diye demedim aradaki farkı söylüyodum :) javanınki çok daha anlaşılır.
Link to comment
Sosyal ağlarda paylaş

Bu arada Bone, google is your friend hesabi buyur:

aradigin sey
http://media.wiley.com/assets/264/22/0764557599_bonus_AppD.pdf

genel bilgiler
http://msdn.microsoft.com/en-us/magazine/cc301520.aspx
http://andymcm.com/csharpfaq.htm

burada da oneriler var
http://forums.randi.org/archive/index.php/t-55811.html
Link to comment
Sosyal ağlarda paylaş

Mum_Chamber said:


...
// kelimeyi harflerine ayirip ters ceviriyoruz
char[] chars = word.ToCharArray();
Array.Reverse(chars);

// harfleri yine stringe cevirip tersten ilk yariyi aliyoruz.
string secondHalf = new string(chars).Substring(0, splitPoint);

...
}

onu şöyle yapsak daha iyi sanki?


string secondHalf = word.Substring(splitPoint, word.Length - splitPoint);


edit: tek sayı muhabbeti çakıyor doğru. neyse oraya da bir kontrol koyulabilir vs.

(word.Length - splitPoint, splitPoint)
Link to comment
Sosyal ağlarda paylaş

ehueheu ya benim yazdigim kodun soyle bir salakligi var, hicbiriniz de cikip ses etmemissiniz, simdi bakarken farkettim; hazir harfleri ters ceviriyorsak, niye ters cevrilmis haliyle normal halini karsilastirmiyoruz ki? hani ikiye bol, uc takla attir, sonra karsilastir niye?


static int syms(string sentence)
{
int palCount = 0;
string[] words = sentence.Split(' ');

foreach (string word in words)
{
char[] chars = word.ToCharArray();
Array.Reverse(chars);
reversed = new string(chars);

if (word == reversed)
palCount++;
}

return palCount;
}
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...