Algoritmalar benim kafamı çok karıştırıyor. Mantıksız gelen kısımları var. Soracağım soruda bunlardan bir tanesi. Derste hocanın gösterdiği bana mantıksız geldi bende kendim yazdım. Sizce doğrusu nasıl olmalı.
Soru : Girilen 3 değerden en büyüğünü bulduran algoritmayı yazınız.
Hocanın cevabı:
1) Başla
2) A,B,C değerlerini gir.
3) A>B ise Enb=A
4) B>C ise Enb=A
5)Değilse A>C Enb=A
6)Değilse Enb=C
7)Ekrana yaz Enb
8)Bitir
Hocanın verdiği cevap bu. Bana mantıksız gelen kısım, en büyük değerin hiçbir zaman B çıkmaması. Bende bu yanlışı şu şekilde düzeltmeye çalıştım.
Benim cevabım.
1)Başla
2)A>B ve A>C ise Enb=A ise 7. adıma git
3)Değilse 4.adıma git
4)B>A ve B>C ise Enb=B ise 7.adıma
5)Değilse 6.adıma git
6)C>A ve C>B ise Enb=C ise 7. adıma git
7)Enb Ekrana yaz
8)Bitir
Bu şekilde yazılması bana mantıklı geliyor. Sınavımız var ona çalışıyoruz .
Sizce nasıl olması gerekiyor. Şimdiden cevaplar için teşekkürler.
Cevaplar
X
Senin sorunun ne ha.
Senin sorunun ne ha.
Doğru algoritmanın nasıl olması gerektiğini soruyorum. Konuyu biraz daha dikkatli okumanı öneririm.
K
Hocanınkinde problem var bence. 3. satırdaki kıyas eksik olduğu gibi 3 doğru çıksa bile 4. satır kıyas için yetersiz.
Sizin algoritmada bir sayı diğer ikisi ile karşılaştırılıyor ve kesin sonuca gider.
Bu arada hangi dil bu
Programlamaya giriş ve algoritma konusu . "Sözde" kod yazma mantığını öğrenmemiz gerekiyor ancak mantık hatalı. Bir programlama dili değil. Ancak "C" dilini görmeye başladık.
Sınavda böyle bir soruda benim cevabımı versem acaba hoca doğru kabul edermi.
Birde bu algoritma maddelerini , akış şemasında gösterme durumu var. İlginç....
Matematiksel olarak soyle yapariz:
A > B
ve A > C ise Enb = A
ve C > A ise Enb = C
B > C
ve A > B ise Enb = A
ve B > A ise Enb = B
1. Basla
2. A, B, C degerlerini gir
2. A > B degilse 6. adima git
3. A > C ise Enb = A
4. degilse Enb = C
5. 8. adima git
6. A > B ise Enb = A
7. degilse Enb = B
8. Bitir
Gercek program yazarken, sayilarin esit olmasi gibi bir durumda hatali olur bu algoritma. Farkli oldugunuu varsaydim.
Evet sayılar farklı. Aslında algoritmanın başında sayılarının birbiriyle eşit olmamasıyla ilgili bir kontrol de yapılması gerekiyor. Ancak algoritmada bazı şeylerin atlanması gerekiyor sanırım mantıksal olarak.
Kod yazmaya uzun zaman önce başladığımdan şimdi tekrar programcılığa giriş olsun algoritma olsun bazı şeyleri görmezden gelmemiz gerektiğinden sanırım, mantıksız geliyor bana.
--------------------------------------------------------------------------------
@
tolgacakirogluSizin cevabınızda doğru olabilir ancak fazla karmaşık gibi geldi . yinede teşekkürler cevabınız için.
K
Matematiksel olarak soyle yapariz:
A > B
ve A > C ise Enb = A
ve C > A ise Enb = C
B > C
ve A > B ise Enb = A
ve B > A ise Enb = B
1. Basla
2. A, B, C degerlerini gir
2. A > B degilse 6. adima git
3. A > C ise Enb = A
4. degilse Enb = C
5. 8. adima git
6. A > B ise Enb = A
7. degilse Enb = B
8. Bitir
Gercek program yazarken, sayilarin esit olmasi gibi bir durumda hatali olur bu algoritma. Farkli oldugunuu varsaydim.
Senin algoritma da eksik olmamış mı. 2. adım doğru değilse 6 ya git demişin.6 ya gittiğinde ise aksi durum olursa en büyük B diyorsun.Yani B yi C ile kıyas etmeden büyük ilan ediyorsun.
Benim yazdığım
[I]1)Başla
2)A>B ve A>C ise Enb=A ise 7. adıma git
3)Değilse 4.adıma git
4)B>A ve B>C ise Enb=B ise 7.adıma
5)Değilse 6.adıma git
6)C>A ve C>B ise Enb=C ise 7. adıma git
7)Enb Ekrana yaz
8)Bitir[/I]
Ben ve dedim yani. 2 karşılaştırmada doğruysa ki A sayısını aynı satırda hem B ile hemde C ile karşılaştırıyorum. Buda A'nın kesin doğru olduğunu göstermez mi ? Böylece diğer karşılaştırmaları yapmaya gerek yok diye düşünüyorum. Direk sayıyı yazdırıp programdan çıksın.
A büyük değilsede yani yine "ve" olduğumdan karşılaştırmalardan 1 tanesi de yanlış olursa sonuç yanlış çıkıyor. Böylece bir alt satıra iniyor. Bu doğru olana kadar tekrarlanıyor.
(Not: değilse kısımlarını bir alt satıra yazdım daha sonradan.)3 sayıyıda birbiriyle kıyas ediyorum .onda bir sorunun olduğunu düşünmüyorum.
if
A>B
then
if
A>C
then
enbyk=A
else
enbyk=C
else
if
B>c
then
enbyk=B
else
enbyk=C
ben böyle bişey yazdım doğru gibi geliyo bana
K
Sana değil arkadaşım Tolga ya dedim ben eksik diye:)
@özgün87
Evet senin dediğinde doğru ve mantıklı. Kod mantığıyla düşününce böyle bir sonuç ortaya çıkıyor. Herşeyi karşılaştırıyorsun benim yazdığım gibi. A yı önce B ile daha sonrada C ile karşılaştırmışsın.
Ancak A'yı B ile karşılaştırdıktan sonra tekrar if demişsin.
if
A>B and A>C then Enb=A
elseif
B>A and B>C then Enb=B
elseif
C>A and C>B then Enb=C
bende kod mantığıyla böyle düşündüğümden algoritmasını o şekilde yazdım.
Sana değil arkadaşım Tolga ya dedim ben eksik diye:)
:) tamam . Ben yinede açıklamak zorunda hissettim kendimi :)
C
2007'den beri17 bin mesaj
şu da yapılabilir
bir tane değişken tanımlanır
tek tek kontrol ile a değişkenden büyükse değişkene a'nın verisi atanır.
bundan sonraki kontrolde b değişkenden büyükse değişkene b'nin verisi atanır
daha sonraki kontrolde ise c değişkenden büyükse değişkene c'nin verisi atanır
sonuçta değişkende kalan veri en büyük veri olmuş olur...
Değişken tanımlayacağız peki tamam.
Ancak baştan A,B ve C'yi girmeden sayıları birbiriyle nasıl karşılaştırabileceğiz ?
Programın en başında verileri girmemiz isteniyor. A B C birbirinden farklı olacak. Ardışık olmasıda gerkemiyor. B veya C de en büyük olabilir.
A - B - C 'nin değerleri zaten var. Karşılaşma işleminden sonra tekrar değer atamanın veya tamamen farklı bir değer vermenin mantığını çözemedim.
Yada ne demek istediğini anlayamadım
C
2007'den beri17 bin mesaj
kullanıcıdan sayıları girmesini isteyeceksin ilk önce. daha sonra kontrol ettireceksin.
sayılar olmadan nasıl kontrol edebilirsin ki. az önceki yazdığımı da şöyle değiştirebilirsin. ilk girilen veri en büyüğün değişkenine eşitlenir daha sonra b ve c kontrol edilip en büyük sayının tanımlanan değişkende kalması sağlanır...
eğer istersen c# kodunu yazabilirim...
soruda zaten girilen 3 değerden bahsediyor. O yüzden algoritmasıında tekrar A,B,C yi gir denmemiş sanırım.
Kodunu yazabilirsen daha açıklayıcı olur sanırım demek istediğin.
C
2007'den beri17 bin mesaj
a'yı en büyüğü ölçtüğüm değişken olarak düşünürsem kod şöyle olmalı :
int a,b,c;
a = int.Parse(Console.ReadLine());
b = int.Parse(Sonsole.ReadLıne());
c = int.Parse(Console.ReadLine());
if(b > a)
a = b;
if(c > a)
a = c;
Console.WriteLine("En büyük sayı : {0}",a);
Not : Kod'u denemedim direk buraya yazdım...
a'yı en büyüğü ölçtüğüm değişken olarak düşünürsem kod şöyle olmalı :
int a,b,c;
a = int.Parse(Console.ReadLine());
b = int.Parse(Sonsole.ReadLıne());
c = int.Parse(Console.ReadLine());
if(b > a)
a = b;
if(c > a)
a = c;
Console.WriteLine("En büyük sayı : {0}",a);
Not : Kod'u denemedim direk buraya yazdım...
kod olarak yazilacaksa ben de Delphi'de yazayim o halde. Bu arada evet. Matematiksel olarak dedigim kismi, algoritmaya cevirirken hata yapmisim.
var
a, b, c: Integer;
begin
write( 'a degerini giriniz: ' );
readln( a );
write( 'b degerini giriniz: ' );
readln( b );
write( 'c degerini giriniz: ' );
readln( c );
if a > b then begin
if a > c then
writeln( 'en buyuk deger: ', a )
else
writeln( 'en buyuk deger: ', c );
end else
if c > b then
writeln( 'en buyuk deger: ', c )
else
writeln( 'en buyuk deger: ', b );
end;
end;
Evet kodlar ile mantıklı oldu. Teşekkürler cevaplarınız için.
1) Başla
2) Sayıları gir(a,b,c)
3) İşlemi yap(enbuyuk=a)
4) Eğer(enbuyuk<b) enb=b
5) Eğer(enbuyuk<c) enb=c
6) Ekrana yaz(enbuyuk)
7) Bitir
;) Biz böyle öğrenmiştik zamanında:D
U
1) Başla
2) Sayıları gir(a,b,c)
3) İşlemi yap(enbuyuk=a)
4) Eğer(enbuyuk<b) enb=b
5) Eğer(enbuyuk<c) enb=c
6) Ekrana yaz(enbuyuk)
7) Bitir
;) Biz böyle öğrenmiştik zamanında:D
En iyisi bu :)
@serious
Senin yazdığın algoritmada da A değeri en büyük çıkmıyor. A 'yı karşılaştırmayı unutmuşsun :)
Klavyeden girilen ilk sayıyı direk kendisine enbuyuk değişkeni enbüyük olarak alıyor, diğer ikisiyle karşılaştırıyor zaten onlardan küçükse enbuyuk, o değişkenlerin değerini alıyor:) Biraz daha dikkatli bak:)
Satır satır çalıştır kodu sonra:):)
gördüğün ilk kıza aşık olmak gibi düşün:) daha güzelini görünce öncekini bırakıp, yenisine aşık oluyorsun:):) en güzeli bulana kadar:D:D:D
---------- saat 00:41 eklendi ---------- önceki mesaj saat 00:39 eklenmişti ----------
6. satır da nikah oluyor:D:D:D
Evet haklı olabilirsin :) İlginç bir yol. Algoritmanın kendisi ilginç zaten. Onun yerine koda yönelmek çok daha iyi :)
algoritmada ilk başta havada kalıyo, kod yazarken algoritmanın ne demek olduğunu daha iyi anlıyorsun. Ki kod yazdığını söylemişsin, geriye gitmek mi istedi canın:D
Çok kod bilgim olduğunu söyleyemem. Asp-Php ile kodlamıştım zamanında. Web Tasarım derslerimiz vardı. Üniversite'dede "C" dili karşımıza çıktı. Algoritma dersi olmasa hiç algoritma ile uğraşmam :)
Nerde ne yapacağımı önceden belirleyeceksemde // komutu var :) açıklamasını yazarım sonra kodlarım :)
Sınavım var pazartesi günü. Umarım hoca ezbere değilde benim mantığıma puan verir :)
başta herkese geldiği gibişu an sana gereksiz geliyo ama bu işte ilerledikçe algoritmanın neden bu kadar önemli olduğunu anlıycaksın;) illa açıklama olarak görme algoritmayı, izlediğin mantık sırası. 3 sayının büyüğünde belki önemli değil ama kapsamlı bi programda karşılaşılabilecek bütün durumların listelenerek gözünün önünde olmasını sağlar. Ve algoritmasını önceden tahmin edince kullanacağın değişken türünden tut, sayısına kadar herşeyi başta doğrudan ayarlarsın. Sorun çıktıkça bütün satırları bi daha değiştir saçmalığından kurtulursun ufaklık;) dediğim gibi zmanla:)
neyse sana kolay gelsin yarınki sınavında. Eğer doğru anladığını düşünüyosan aynı olmasına gerek yok hocanınkiyle, seninki de puanını alır merak etme:) Herkesin yolu farklıdır, yeter ki gideceğin yere götürsün seni o kod:) hadi rasgele:D
Teşekkürler verdiğiniz bilgiler için :)
T
visual basic mantığıyla bence şöyle:
1)Başla
2)A,B,C değerlerini gir
3)A > B ve A > C ise Enb=A
4)Değilse B > A ve B > C ise Enb=B
5)Değilse C > B ve C > A ise Enb=C
6)Enb=Textbox1.Text
7)Bitir
---------- saat 10:49 eklendi ---------- önceki mesaj saat 09:49 eklenmişti ----------
bende visual basic'te bir örneğini yaptım. denedim çalışıyor. isterseniz sizde deneyebilirsiniz:
http://hotfile.com/dl/24403958/c592343/Byk_Olan_Bul.rar.htmlprojeyi kendiniz yapmak istiyorsanız rarın içinde kodlar mevcut, yapmanız gereken 4 label ve 2 buton eklemek.
kardes sen ogrenmek istiyorsan kendin cozumu bulmusun ama dersten gecmek istiyosan hocanin dedigi gibi yap biraz mantiksiz olsun:)
Cevabını yaz
Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.