Ödev konusunda acil yardımlarınıza ihtiyacım var arkadaşlar bir el atın

0
Onaylı Üye
Üye
Katılım
9 Nisan 2012
Mesajlar
18
Tepki puanı
0
Merhaba arkadaşlar bizim hoca bir ödev verdi kaç gündür kafa patlatıyorum fakat hep bir yerde hata yapıyorum galiba bir türlü sonunu getiremedim yardımcı olursanız çok sevinirim ödev kısaca şöyle:

Bilgisayar rastgele 4 basamaklı bir sayı tutar ve bizden de bir sayı girmemizi ister girdiğimiz sayının doğru basamağını aynen yazar küçük olanlar için artır anlamında + ve büyük olanlar için azalt anlamında - yazar ve bizde bu sayıyı böylece bulmaya çalışırız

Örneğin bilgisayar 4538 sayısı tutsun ve bizde 2561 girelim ekrana +5-+ yazar ve yeni sayıyı bekler ve biz de bu şekilde
bilgisayarın tuttuğu sayıyı buluruz

Arkadaşlar yardımlarınız emin olun çok makbule geçecek bu performans ödevi gibi birşey önemi fazla şimdiden sağolun yardımlarınız için :) :)
 
0
Onaylı Üye
Üye
Katılım
2 Nisan 2012
Mesajlar
94
Tepki puanı
0
Sanırım ödevin c# ile ilgili, c#'ın sahibi microsoft gibi piyasanın tek hakimi zanneder gibi sorulmuş çünkü. Yoksa Java, JSP ve C# aynı yazım kuralları ile mi işliyor ?
 
0
Onaylı Üye
Üye
Katılım
2 Nisan 2012
Mesajlar
94
Tepki puanı
0
4 tane değişken tanımla tam sayı olarak. sayıyı önce bine bölüp tam sayı değerini al. ikinci için ana sayıyı ilk sayı*1000 den çıkararak bul. Önce 4 hanenin 4'ünü de değişkenlere ata.

kullanıcının verdiği sayıyı da bu şekilde basamak basamak 4 farklı değişkene ata.

her basamak için değerler aynı mı büyük mü küçük mü kontrol et.

Burada önemli konu tam sayı kısmını alan komut özellikle 4,999999 sayısını bile 4 olarak alan cinsten olmalı.
 
0
Onaylı Üye
Üye
Katılım
9 Nisan 2012
Mesajlar
18
Tepki puanı
0
Sanırım ödevin c# ile ilgili, c#'ın sahibi microsoft gibi piyasanın tek hakimi zanneder gibi sorulmuş çünkü. Yoksa Java, JSP ve C# aynı yazım kuralları ile mi işliyor ?
öyle bir iddam yok bölümün sadece c# için olduğunu zannedip açmıştım konuyu sonradan farkettim kusura bakmayın
 
0
Onaylı Üye
Üye
Katılım
9 Nisan 2012
Mesajlar
18
Tepki puanı
0
4 tane değişken tanımla tam sayı olarak. sayıyı önce bine bölüp tam sayı değerini al. ikinci için ana sayıyı ilk sayı*1000 den çıkararak bul. Önce 4 hanenin 4'ünü de değişkenlere ata.

kullanıcının verdiği sayıyı da bu şekilde basamak basamak 4 farklı değişkene ata.

her basamak için değerler aynı mı büyük mü küçük mü kontrol et.

Burada önemli konu tam sayı kısmını alan komut özellikle 4,999999 sayısını bile 4 olarak alan cinsten olmalı.

sağolun ben her basamağı 4 elemanlı bir diziye aktarmaya çalışıyordum birde böyle deneyeyim
 
0
Onaylı Üye
Üye
Katılım
2 Nisan 2012
Mesajlar
94
Tepki puanı
0
Diziye atamak ile benim dediğim arasında herhangi bir fark olmaz aslında. Bu tarz programlarda, her aşamada değişkenlerin değerlerini ekrana bir açıklama ile yazdırırsan arada değişkenleri görerek hatalarını da kolaylıkla bulabilirsin. Sonuca ulaşamamışsan, programını buraya pastelersen, yardımcı olmaya çalışırım.
 
0
Onaylı Üye
Üye
Katılım
9 Nisan 2012
Mesajlar
18
Tepki puanı
0
Diziye atamak ile benim dediğim arasında herhangi bir fark olmaz aslında. Bu tarz programlarda, her aşamada değişkenlerin değerlerini ekrana bir açıklama ile yazdırırsan arada değişkenleri görerek hatalarını da kolaylıkla bulabilirsin. Sonuca ulaşamamışsan, programını buraya pastelersen, yardımcı olmaya çalışırım.
Benim sorunum çıktıyı bir kez aldıktan sonra döngüyü devam ettirememem yani tekrardan sayı girilmesini istemek ve tekrardan ekrana benzer şeyleri basmak burada mantık hatası yapıyorum galiba kodlar şu şekilde bu arada consol application ile yapıyorum:
 
0
Onaylı Üye
Üye
Katılım
2 Nisan 2012
Mesajlar
94
Tepki puanı
0
int sayi2 = Convert.ToInt16(Console.ReadLine());

Sanırım sayıyı buradaki komut ile klavyeden çekiyorsun. Bu sayıyı en üstte değil de. Bir koşullu döngü aç koşul oluşana kadar dönsün. Bir karmaşa yaratarak çözüme ulaşayım, sen düzgün bir hale getirirsin istersen.


Random r = new Random();
int sayi1 = r.Next(1000, 10000);

int[] gecici1 = new int[4]; int[] gecici2 = new int[4];
string deger1 = sayi1.ToString();


for (int k =0; k <1; k++)
{
k--;

int sayi2 = Convert.ToInt16(Console.ReadLine());
string deger2 = sayi2.ToString();

for (int a = 0; a < 4; a++)
{

gecici1[a] = Convert.ToInt16(deger1[a].ToString());
gecici2[a] = Convert.ToInt16(deger2[a].ToString());
}

for (int a = 0; a < 4; a++)
{
if ((gecici1[0] != gecici2[0]) || (gecici1[1] != gecici2[1]) || (gecici1[2] != gecici2[2]) || (gecici1[3] != gecici2[3]))
{

if (gecici1[a] > gecici2[a])
{
gecici2[a] = Convert.ToChar('+');
Console.Write(Convert.ToChar(gecici2[a]));
}
else if (gecici1[a] < gecici2[a])
{
gecici2[a] = Convert.ToChar('-');
Console.Write(Convert.ToChar(gecici2[a]));
}
else
{
k=7;
Console.Write(Convert.ToString(gecici2[a]));
}

}

}
}
Console.ReadLine();


................................
Şayet tek sorun tekrar tekrar sordurmak ise bu bile çözüm olur sanırım. her seferinde a değişkenini "int" diye tanımayıp durmak sorun çıkarabilir, "k--;" ve "k=7" diye yazdıklarım c# için uyumlu değilse onu da düzeltirsin.
 
0
Onaylı Üye
Üye
Katılım
2 Nisan 2012
Mesajlar
94
Tepki puanı
0
tabi

gecici1[a] = Convert.ToInt16(deger1[a].ToString());

Bunu en başta bir döngüye bağlayıp tanımlayarak, her seferinde tekrar tekrar tanımlamazsan cpu sevinir :) (benim k döngüsünden önce) gecici2 için yapılan işlem k döngüsünün içinde olsun.
 
0
Onaylı Üye
Üye
Katılım
9 Nisan 2012
Mesajlar
18
Tepki puanı
0
int sayi2 = Convert.ToInt16(Console.ReadLine());

Sanırım sayıyı buradaki komut ile klavyeden çekiyorsun. Bu sayıyı en üstte değil de. Bir koşullu döngü aç koşul oluşana kadar dönsün. Bir karmaşa yaratarak çözüme ulaşayım, sen düzgün bir hale getirirsin istersen.


Random r = new Random();
int sayi1 = r.Next(1000, 10000);

int[] gecici1 = new int[4]; int[] gecici2 = new int[4];
string deger1 = sayi1.ToString();


for (int k =0; k <1; k++)
{
k--;

int sayi2 = Convert.ToInt16(Console.ReadLine());
string deger2 = sayi2.ToString();

for (int a = 0; a < 4; a++)
{

gecici1[a] = Convert.ToInt16(deger1[a].ToString());
gecici2[a] = Convert.ToInt16(deger2[a].ToString());
}

for (int a = 0; a < 4; a++)
{
if ((gecici1[0] != gecici2[0]) || (gecici1[1] != gecici2[1]) || (gecici1[2] != gecici2[2]) || (gecici1[3] != gecici2[3]))
{

if (gecici1[a] > gecici2[a])
{
gecici2[a] = Convert.ToChar('+');
Console.Write(Convert.ToChar(gecici2[a]));
}
else if (gecici1[a] < gecici2[a])
{
gecici2[a] = Convert.ToChar('-');
Console.Write(Convert.ToChar(gecici2[a]));
}
else
{
k=7;
Console.Write(Convert.ToString(gecici2[a]));
}

}

}
}
Console.ReadLine();


................................
Şayet tek sorun tekrar tekrar sordurmak ise bu bile çözüm olur sanırım. her seferinde a değişkenini "int" diye tanımayıp durmak sorun çıkarabilir, "k--;" ve "k=7" diye yazdıklarım c# için uyumlu değilse onu da düzeltirsin.

burada acaba neden k=7 dediniz program çalışıyor ama sanırım 7 tane sayı girildikten sonra kapanıp hata veriyor ben bilgisayarın tuttuğu sayıyı bulana kadar devam etmesini istiyorum böylece deneme sayısınıda bulmam lazım acaba while döngüsümü kullanmalıyım daha önce kullandım fakat döngü bittiğinde tekrar sayi2 yi girdiriyorum ama program sonlanıyor biraz karışık oldu ama kusura bakmayın olmazsa yazıp öyle vereyim :):)
 
0
Onaylı Üye
Üye
Katılım
2 Nisan 2012
Mesajlar
94
Tepki puanı
0
Orada sayıyı salladım sadece while komutu nasıl işler bilmediğimden, for döngüsünü bitirmek için oradaki değer olan k<1 değerine uygun sallama bir sayı oldu. Başka bir amacı yoktu. while döngüsü ile gönderirsen, oradan daha net bir sonuca ulaşabiliriz.

Programı yanlış anlamışım.

if ((gecici1[0] != gecici2[0]) || (gecici1[1] != gecici2[1]) || (gecici1[2] != gecici2[2]) || (gecici1[3] != gecici2[3]))

Ben bunun else'sine k=7 demek istemiştim. While döngüsü gibi çalışsın diye. bu hali ile rakamlardan sadece birini bulduğunda döngü bitiyor. :(

Sanırım alttan iki tane } yukarı çıkıp else k=7 dersen sorunsuz çalışır. while ile tabiki daha sağlıklı olur. while döngüsünü de oradan koparabilirsin.
}
else {K=7;}
}
}
Console.ReadLine();
 
0
Onaylı Üye
Üye
Katılım
9 Nisan 2012
Mesajlar
18
Tepki puanı
0
Orada sayıyı salladım sadece while komutu nasıl işler bilmediğimden, for döngüsünü bitirmek için oradaki değer olan k<1 değerine uygun sallama bir sayı oldu. Başka bir amacı yoktu. while döngüsü ile gönderirsen, oradan daha net bir sonuca ulaşabiliriz.

Programı yanlış anlamışım.

if ((gecici1[0] != gecici2[0]) || (gecici1[1] != gecici2[1]) || (gecici1[2] != gecici2[2]) || (gecici1[3] != gecici2[3]))

Ben bunun else'sine k=7 demek istemiştim. While döngüsü gibi çalışsın diye. bu hali ile rakamlardan sadece birini bulduğunda döngü bitiyor. :(

Sanırım alttan iki tane } yukarı çıkıp else k=7 dersen sorunsuz çalışır. while ile tabiki daha sağlıklı olur. while döngüsünü de oradan koparabilirsin.
}
else {K=7;}
}
}
Console.ReadLine();
peki ilginiz için çok sağolun :)
 
0
Onaylı Üye
Üye
Katılım
2 Nisan 2012
Mesajlar
94
Tepki puanı
0
Java olsa yazar kontrol de eder gönderirdim. Yardımcı olabilseydim keşke :)
 
Geri
Üst