İç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

Basit bir Algoritma Sorusu

mcb7701.01.201032 cevap7.893 görüntüleme
2009'den beri85 mesaj
#1
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
2008'den beri1.217 mesaj
#2
Senin sorunun ne ha.
mcb77 Konuyu açan
2009'den beri85 mesaj
#3
X_Codesia dedi: ↑
Senin sorunun ne ha.
Doğru algoritmanın nasıl olması gerektiğini soruyorum. Konuyu biraz daha dikkatli okumanı öneririm.
2008'den beri322 mesaj
#4
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
mcb77 Konuyu açan
2009'den beri85 mesaj
#5
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ç....
2009'den beri312 mesaj
#6
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.
mcb77 Konuyu açan
2009'den beri85 mesaj
#7
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.

--------------------------------------------------------------------------------
@tolgacakiroglu

Sizin cevabınızda doğru olabilir ancak fazla karmaşık gibi geldi . yinede teşekkürler cevabınız için.
2008'den beri322 mesaj
#8
tolgacakiroglu dedi: ↑
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.
mcb77 Konuyu açan
2009'den beri85 mesaj
#9
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.
2009'den beri222 mesaj
#10
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
2008'den beri322 mesaj
#11
Sana değil arkadaşım Tolga ya dedim ben eksik diye:)
mcb77 Konuyu açan
2009'den beri85 mesaj
#12
@ö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.
ktohan dedi: ↑
Sana değil arkadaşım Tolga ya dedim ben eksik diye:)
:) tamam . Ben yinede açıklamak zorunda hissettim kendimi :)
2007'den beri17 bin mesaj
#13
ş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...
mcb77 Konuyu açan
2009'den beri85 mesaj
#14
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
2007'den beri17 bin mesaj
#15
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...
mcb77 Konuyu açan
2009'den beri85 mesaj
#16
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.
2007'den beri17 bin mesaj
#17
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...
2009'den beri312 mesaj
#18
cgrszone dedi: ↑
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;
mcb77 Konuyu açan
2009'den beri85 mesaj
#19
Evet kodlar ile mantıklı oldu. Teşekkürler cevaplarınız için.
2007'den beri207 mesaj
#20
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
2008'den beri6.467 mesaj
#21
serious dedi: ↑
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 :)
mcb77 Konuyu açan
2009'den beri85 mesaj
#22
@serious

Senin yazdığın algoritmada da A değeri en büyük çıkmıyor. A 'yı karşılaştırmayı unutmuşsun :)
2007'den beri207 mesaj
#23
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
mcb77 Konuyu açan
2009'den beri85 mesaj
#24
Evet haklı olabilirsin :) İlginç bir yol. Algoritmanın kendisi ilginç zaten. Onun yerine koda yönelmek çok daha iyi :)
2007'den beri207 mesaj
#25
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
mcb77 Konuyu açan
2009'den beri85 mesaj
#26
Ç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 :)
2007'den beri207 mesaj
#27
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
mcb77 Konuyu açan
2009'den beri85 mesaj
#28
Teşekkürler verdiğiniz bilgiler için :)
2009'den beri726 mesaj
#29
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.html
projeyi kendiniz yapmak istiyorsanız rarın içinde kodlar mevcut, yapmanız gereken 4 label ve 2 buton eklemek.
2009'den beri5 mesaj
#30
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.