İç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 Sinema Dizi Akıllı Ev Motosiklet Mikromobilite Kripto Para Sağlık Teknolojileri Son dakika Yazarlar
  1. Ana sayfa
  2. SDN Forum
  3. Programlama
  4. Programlama Dilleri
Programlama Dilleri

Basit bir Algoritma Sorusu

Konu bilgisi

32cevap
7.895görüntüleme
01.2010açıldı
21.03.2010son cevap
Sayfa 11–30Sayfa 231–33

#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
#2
Senin sorunun ne ha.
mcb77 Konuyu açan
#3
X_Codesia dedi: ↑
Senin sorunun ne ha.
Doğru algoritmanın nasıl olması gerektiğini soruyorum. Konuyu biraz daha dikkatli okumanı öneririm.
#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
#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ç....
#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
#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.
#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
#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.
#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
#11
Sana değil arkadaşım Tolga ya dedim ben eksik diye:)
mcb77 Konuyu açan
#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 :)
#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
#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
#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
#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.
#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...
#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
#19
Evet kodlar ile mantıklı oldu. Teşekkürler cevaplarınız için.
#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
#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
#22
@serious

Senin yazdığın algoritmada da A değeri en büyük çıkmıyor. A 'yı karşılaştırmayı unutmuşsun :)
#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
#24
Evet haklı olabilirsin :) İlginç bir yol. Algoritmanın kendisi ilginç zaten. Onun yerine koda yönelmek çok daha iyi :)
#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
#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 :)
#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
#28
Teşekkürler verdiğiniz bilgiler için :)
#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.
#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.

Reklam