İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Programlama
  4. Programlama Dilleri
Programlama Dilleri

C#Ödevime Yardım Edin!!!

04.01.201218 cevap3.382 görüntüleme
Misafir
#1
Soru:
Kullanıcı tarafından girilen bir kelimenin içinde bulunan harflerden kaç tane varsa onu bize bildirecek program
Cevaplar
2007'den beri29 bin mesaj
#2
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
2010'den beri239 mesaj
#3
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.
Misafir
#4
__kadıköyRAP__ dedi: ↑
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 ---

mcht_z dedi: ↑
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 :)
2007'den beri29 bin mesaj
#5
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
2007'den beri291 mesaj
#6
Bak bakalım böyle oluyor mu?
            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();
2011'den beri38 mesaj
#7
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:

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
2007'den beri29 bin mesaj
#8
haklısın cümleyi her harf için baştan taramaktansa bu çok daha iyi
Misafir
#9
totleben dedi: ↑
Bak bakalım böyle oluyor mu?
            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.
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 ---

sithlord dedi: ↑
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:


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
2009'den beri1.039 mesaj
#10
ş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 :)
2011'den beri38 mesaj
#11
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

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());
    }
   }
}
Misafir
#12
crazzy.x dedi: ↑
ş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 ---

sithlord dedi: ↑
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

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.
2011'den beri38 mesaj
#13
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
Misafir
#14
sithlord dedi: ↑
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.
2009'den beri2 mesaj
#16
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";
}
}
}
}
2008'den beri311 mesaj
#17
sithlord dedi: ↑
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:

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.
2012'den beri2 mesaj
#18
IndexOf metodunu kullanarak yapabilirsin.
2011'den beri15 mesaj
#19
ilgilenen arkadaşlara teşekkürler.

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.