C#Ödevime Yardım Edin!!!

  • Konuyu başlatan Deleted member 216045
  • Başlangıç tarihi
D

Deleted member 216045

SDN Okuru
Soru:
Kullanıcı tarafından girilen bir kelimenin içinde bulunan harflerden kaç tane varsa onu bize bildirecek program
 
Katılım
3 Mart 2007
Mesajlar
29,207
Reaksiyon puanı
2,146
Puanları
113
bi fikir vereyim

bi döngü kuracaksın, önce a harfine bakacaksın, hepsini sayıp a'dan kaç tane var yazdırıcaksın, sonra sıra döngüde b'ye gelecek onu da sayıp yazdıracaksın böyle böyle tüm harfleri saydırıp yazdıracaksın
 

mcht_z

Asistan
Katılım
12 Kasım 2010
Mesajlar
239
Reaksiyon puanı
0
Puanları
0
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


private void button1_Click(object sender, EventArgs e)
{
label1.Text = textBox1.TextLength.ToString();
}
}
}


Ben karakter sayısını sorduğunu sanmıştım bir an dalgınlıkla :) Bu kod işini görmez.
 
D

Deleted member 216045

SDN Okuru
bi fikir vereyim

bi döngü kuracaksın, önce a harfine bakacaksın, hepsini sayıp a'dan kaç tane var yazdırıcaksın, sonra sıra döngüde b'ye gelecek onu da sayıp yazdıracaksın böyle böyle tüm harfleri saydırıp yazdıracaksın
bende böyle düşünmüşdüm fakat çok uraştırıcı. kesin bir kısa yolu vardır diye düşünüyorum. ama yinede bunu yapayım.

--- Mesaj Güncellendi ---

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


private void button1_Click(object sender, EventArgs e)
{
label1.Text = textBox1.TextLength.ToString();
}
}
}


Ben karakter sayısını sorduğunu sanmıştım bir an dalgınlıkla :) Bu kod işini görmez.
sağol düşünmen yeterli :)
 
Katılım
3 Mart 2007
Mesajlar
29,207
Reaksiyon puanı
2,146
Puanları
113
pek de uğraştırıcı değil yapmaya çalış sen :)

--- Mesaj Güncellendi ---

harfleri tek tek yazmayacaksın harfler de döngüyle artacak onu da hatırlatayım
 

totleben

Asistan
Katılım
25 Mayıs 2007
Mesajlar
291
Reaksiyon puanı
0
Puanları
16
Bak bakalım böyle oluyor mu?

Kod:
            foreach (var karakter in (from k in "ddddabbccc".ToCharArray()
                                      group k by k into grup
                                      orderby grup.Key
                                      select new { KarakterAdı = grup.Key, KarakterSayısı = grup.Count() }).ToArray())
            {
                Console.WriteLine(karakter.KarakterAdı + " karakterinden " + karakter.KarakterSayısı + " adet bulundu.");
            };
            Console.ReadLine();
 

sithlord

Öğrenci
Katılım
6 Ekim 2011
Mesajlar
38
Reaksiyon puanı
1
Puanları
0
once a harfine sonra b harfine ve sirayla z harfine kadar her harf icin tum kelimeyi taramak cok buyuk harf sayisina sahip kelimeler (veya cumleler) icin dogru bir yontem degildir. Algoritma dersini aldiysaniz bu cozum O(n^2) dir oysa lineer O(n) zamanda cozum icin hash tablosu kullanmaniz lazim. soyleki:

Kod:
int hashtablo[29];

for(int i =0 ; i< strlen(cumle); i++) {
  char harf = cumle[i];
  int harfindex = harf -65; // Turkce karakterler icin bu sekilde index bulamazsin ama ingilzice karakterler icin 65 ten baslayabilirsin
  hashtable[harfindex] ++; //bu karakterin degerini bir artiriyoruz.
}

Yukarida goruldugu gibi sadece bir dongu ile tum harflerin kelime icerisinde kac defa gozuktugu bulunabilir. Simdi sen C# ta istemissin rahatca C# kodunu yazabilmen lazim. strlen yerine String.Length , cumle yerine String.charAt(i) fonksiyornlarini kullanabilirsin.

Kolay gelsin
 
Katılım
3 Mart 2007
Mesajlar
29,207
Reaksiyon puanı
2,146
Puanları
113
haklısın cümleyi her harf için baştan taramaktansa bu çok daha iyi
 
D

Deleted member 216045

SDN Okuru
Bak bakalım böyle oluyor mu?

Kod:
            foreach (var karakter in (from k in "ddddabbccc".ToCharArray()
                                      group k by k into grup
                                      orderby grup.Key
                                      select new { KarakterAdı = grup.Key, KarakterSayısı = grup.Count() }).ToArray())
            {
                Console.WriteLine(karakter.KarakterAdı + " karakterinden " + karakter.KarakterSayısı + " adet bulundu.");
            };
            Console.ReadLine();
dostum tüm harfleri vermior. sadece 1 harfi veriyor.
Kod:
string cumle = textBox1.Text;            foreach (var karakter in (from k in cumle.ToCharArray()
                                      group k by k into grup
                                      orderby grup.Key
                                      select new { KarakterAdı = grup.Key, KarakterSayısı = grup.Count() }).ToArray())
            {
               label1.Text=string.Format(karakter.KarakterAdı + " karakterinden " + karakter.KarakterSayısı + " adet bulundu.");
            };

mesela girdiğim kelime "selam" s harfinden 1 adet bulundu diyor? acaba alfabedeki son harfimi söylüyor?

--- Mesaj Güncellendi ---

once a harfine sonra b harfine ve sirayla z harfine kadar her harf icin tum kelimeyi taramak cok buyuk harf sayisina sahip kelimeler (veya cumleler) icin dogru bir yontem degildir. Algoritma dersini aldiysaniz bu cozum O(n^2) dir oysa lineer O(n) zamanda cozum icin hash tablosu kullanmaniz lazim. soyleki:

Kod:
int hashtablo[29];

for(int i =0 ; i< strlen(cumle); i++) {
  char harf = cumle[i];
  int harfindex = harf -65; // Turkce karakterler icin bu sekilde index bulamazsin ama ingilzice karakterler icin 65 ten baslayabilirsin
  hashtable[harfindex] ++; //bu karakterin degerini bir artiriyoruz.
}

Yukarida goruldugu gibi sadece bir dongu ile tum harflerin kelime icerisinde kac defa gozuktugu bulunabilir. Simdi sen C# ta istemissin rahatca C# kodunu yazabilmen lazim. strlen yerine String.Length , cumle yerine String.charAt(i) fonksiyornlarini kullanabilirsin.

Kolay gelsin

dostum kodları yapıştırdım. dediğin gibide string.length yapmaya çalıştım fakat olmadı. hata resmi
adszuqr.jpg
 

yunasyus

Profesör
Katılım
12 Mart 2009
Mesajlar
1,041
Reaksiyon puanı
6
Puanları
38
şu an 3 arkadaş oturduk yarın son finalimiz olmasına rağmen bu sorunun cevabı nasıl daha kısa sürede yapılır onu tartışıyoruz bu tartışmanın sonu iyi bitecek gibi :)
 

sithlord

Öğrenci
Katılım
6 Ekim 2011
Mesajlar
38
Reaksiyon puanı
1
Puanları
0
Asagida calisan kodu veriyorum, yalniz odevin olma ihtimaline karsi bazi eksikler var

1. Asgidaki kod yalnizca kucuk harfler icin calisir
2.Asagidaki kod turkce karakterler kullanildiysa calismaz

yukaridaki iki kusur disinda kodu derledim, calisiyor.

Kolay gelsin
Kod:
using System;

public class Hello3
{
   public static void Main(string[] args)
   {
    int[] hashlist = new int[29];

    string kelime = "sithlord";

    for(int i = 0 ; i < kelime.Length; i++) {
        hashlist[(int)kelime[i] - 97] ++;
    }
    
    
    for(int i = 0 ; i < 29; i++) {
        if(hashlist[i] > 0) Console.WriteLine((char)(i+97)+" "+ hashlist[i].ToString());
    }
   }
}
 
D

Deleted member 216045

SDN Okuru
şu an 3 arkadaş oturduk yarın son finalimiz olmasına rağmen bu sorunun cevabı nasıl daha kısa sürede yapılır onu tartışıyoruz bu tartışmanın sonu iyi bitecek gibi :)
hocam sonrada yapsanız olur. sinavınız daha önemli.

--- Mesaj Güncellendi ---

Asagida calisan kodu veriyorum, yalniz odevin olma ihtimaline karsi bazi eksikler var

1. Asgidaki kod yalnizca kucuk harfler icin calisir
2.Asagidaki kod turkce karakterler kullanildiysa calismaz

yukaridaki iki kusur disinda kodu derledim, calisiyor.

Kolay gelsin
Kod:
using System;

public class Hello3
{
   public static void Main(string[] args)
   {
    int[] hashlist = new int[29];

    string kelime = "sithlord";

    for(int i = 0 ; i < kelime.Length; i++) {
        hashlist[(int)kelime[i] - 97] ++;
    }
    
    
    for(int i = 0 ; i < 29; i++) {
        if(hashlist[i] > 0) Console.WriteLine((char)(i+97)+" "+ hashlist[i].ToString());
    }
   }
}
hocam kod çalışıyor fakat sadece bir harf söylüyor. geçen mesajımdada yazmısdım. mesela abc kelimesi için c kelimesi 1 adet vardır diyor. bana 1 tane b 1 tane c 1 tane vardır yazan kod lazım.
 

sithlord

Öğrenci
Katılım
6 Ekim 2011
Mesajlar
38
Reaksiyon puanı
1
Puanları
0
yukaridaki kod sadece bir harf icin degil tum harfler icin yaziyor cevabi ornegin yukaridaki kodun bendeki ciktisi sudur:

# mcs hello.cs ; mono hello.exe
d 1
h 1
i 1
l 1
o 1
r 1
s 1
t 1

Eger sithlord yerine "karadirkaslarinkara" cumlesi verilirse bu defa bendeki ciktisi su :

a 6
d 1
i 2
k 3
l 1
n 1
r 4
s 1


kod calisiyor, baska bir problemin olsa gerek
 
D

Deleted member 216045

SDN Okuru
yukaridaki kod sadece bir harf icin degil tum harfler icin yaziyor cevabi ornegin yukaridaki kodun bendeki ciktisi sudur:

# mcs hello.cs ; mono hello.exe
d 1
h 1
i 1
l 1
o 1
r 1
s 1
t 1

Eger sithlord yerine "karadirkaslarinkara" cumlesi verilirse bu defa bendeki ciktisi su :

a 6
d 1
i 2
k 3
l 1
n 1
r 4
s 1


kod calisiyor, baska bir problemin olsa gerek
evet hocam messagebox'da teker teker a,b,c diye verdi. label'da ve textbox'da son harfi veriyor.
 

researcher

Öğrenci
Katılım
8 Mart 2009
Mesajlar
2
Reaksiyon puanı
0
Puanları
0
Forma bir tane label, adı bildir olsun. Label'ın AutoSİze özelliği False olsun ve boyutunu artır ve rengini değiştir.
Bir tane textBox, adı yazi olsun
ve bir tane de button ekle adı say olsun
Sonra da bu kodu yaz ve derle çalışıyor.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace Kac_Harf
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

char[] dizi = new char[100];

private void say_Click(object sender, EventArgs e)
{
bildir.Text = "";

int a = 0;
int b = 0;
int i = 1;

dizi = yazi.Text.ToCharArray();

for (a = 0; a < yazi.Text.Length - 1; a++)
{
for (b = a + 1; b < yazi.Text.Length; b++)
{
if(dizi[a] != ' ')
{
if (dizi[a] == dizi)
{
dizi = ' ';
i += 1;

if (b == yazi.Text.Length - 1)
{
bildir.Text += dizi[a].ToString() + " harfi " + i.ToString() + " tane" + '\n';
i = 1;
}
}
else
{
if (b == yazi.Text.Length - 1)
{
bildir.Text += dizi[a].ToString() + " harfi " + i.ToString() + " tane" + '\n';
i = 1;
}
}
}
}
}
if (dizi[yazi.Text.Length - 1] != ' ')
{
bildir.Text += dizi[a].ToString() + " harfi " + i.ToString() + " tane";
}
}
}
}
 

cycloner

Asistan
Katılım
21 Eylül 2008
Mesajlar
311
Reaksiyon puanı
5
Puanları
18
once a harfine sonra b harfine ve sirayla z harfine kadar her harf icin tum kelimeyi taramak cok buyuk harf sayisina sahip kelimeler (veya cumleler) icin dogru bir yontem degildir. Algoritma dersini aldiysaniz bu cozum O(n^2) dir oysa lineer O(n) zamanda cozum icin hash tablosu kullanmaniz lazim. soyleki:

Kod:
int hashtablo[29];


for(int i =0 ; i< strlen(cumle); i++) {
  char harf = cumle[i];
  int harfindex = harf -65; // Turkce karakterler icin bu sekilde index bulamazsin ama ingilzice karakterler icin 65 ten baslayabilirsin
  hashtable[harfindex] ++; //bu karakterin degerini bir artiriyoruz.
}

Yukarida goruldugu gibi sadece bir dongu ile tum harflerin kelime icerisinde kac defa gozuktugu bulunabilir. Simdi sen C# ta istemissin rahatca C# kodunu yazabilmen lazim. strlen yerine String.Length , cumle yerine String.charAt(i) fonksiyornlarini kullanabilirsin.

Kolay gelsin


Arkadas tamamen dogru anlatmis. Eger cikti sadece bulunan harfleri gostermesini istiyorsan hashtabale dizinde 0'dan haric olanlari ekrana yazdir o kadar kolay.
 

csharp

Öğrenci
Katılım
8 Ocak 2012
Mesajlar
2
Reaksiyon puanı
0
Puanları
0
IndexOf metodunu kullanarak yapabilirsin.
 
Üst