klavyeden girilen 4 haneli bir sayinin ekrana acilisini yazicaz ancak algoritma ve akıs semasi olarak örnek: a1:basla a2:sayi gir gibi
not:ilk olarak sayi 4 haneli olmali bunu kontrol etmeli not2:ekrana su sekilde yazilacak mesela 9324 girdim ekrana 9000 300 20 4 olarak gelicek . bunu nasil yapicam yardimci olabilirmisiniz tskler ederim.
a1.basşa a2.a sayısını girin a3.eger a 9999 dan byük ise tekrar sayi giridiniz veya 1000den kücük ise a4.burdan sonrasi yok iste bu girilen 4 haneli sayiyi nasil algoritmada nasil anlaticam
1. çözüm : sistemde tamsayı fonksiyonu olduğu varsayılıyor ve girilen sayı işaretsiz tamsayı olacak : - başla - sayı oku (işaretsiz tamsayı giriş ) - sayı sıfır ise bitir'e git - sayı < 0 ise HATA'ya git - sayı < 1000 ya da sayı > 9999 ise HATA'ya git - sayıyı hanelere ayır : - - - H1 <- tamsayıfonksiyonu(sayı /1000) * 1000 // sayı 9876 ise 9000 - - - H2 <- tamsayıfonksiyonu(sayı /100) * 100 - H1// sayı 9876 ise 9800-9000=800 - - - H3 <- tamsayıfonksiyonu(sayı /10) * 10 - H1 - H2 // sayı 9876 ise 9870-9000-800=70 - - - H4 <- sayı - H1 - H2 - H3 // ... - ekrana H1, H2, H3 ,H4 yazdır - başla'ya git - HATA : ekrana "4 haneli pozitif sayı girin, çıkış için sıfır girin" yaz, başla'ya git - bitir
eğer "tamsayı fonksiyonu" tanımlı değil ya da kullanamıyorsak, girilen değeri dizgi (string) olarak kabul edebiliriz : 2. - başla - sayı oku (dizgi - string) - sayı "0" (sıfır) ise bitir'e git - eğer sayının dizgi uzunluğu (örn. length, strlen vb.) 4 değilse HATA'ya git - eğer dizginin 1. karakteri "+" ya da "-" ise HATA'ya git - - - dizginin 1. karakterini ve "000" ekrana yaz // örn. "9" ise "9000" yazılacak - - - dizginin 2. karakterini ve "00" ekrana yaz // örn. "8" ise "800" yazılacak - - - dizginin 3. karakterini ve "0" ekrana yaz // örn. "7" ise "70" yazılacak - - - dizginin 4. karakterini ekrana yaz // ... - başla'ya git - HATA : ekrana "4 haneli pozitif sayı girin, çıkış için sıfır girin" yaz, BASLA'ya git - bitir
Sayının 4 haneye ayrılmasının kodlaması ise, eğer tamsayı işlevi varsa (kullandığın dile ait "div", "trunc", "int", gibi bir fonksiyon) 1. algoritmadaki tamsayı işlevi ile olabilir örn. delphi için yazalım (trunc ya da div kullanabiliriz) H1 := (sayi div 1000) * 1000; H2 := (sayi div 100) * 100 - H1; :
Eğer string isteniyorsa , yine delphiden (pascal) örnek verelim :
sayi[1] içinde 1. hane olacak, sayi[2] içinde 2. hane vb.. indisi kullanarak, ilgili haneye ulaşabilirsin. Ancak burada hanenin katsayısı vardır, gerçek değeri değil. Hanenin sırasına göre ekrana yazdırırken peşine sıfır yazdırmalısın. örn. writeln(sayi[1] + "000"); writeln(sayi[2] + "00"); gibi.. Delphi dışında örn. C ile yazacaksan, indis değeri 1'den değil 0'dan başlar...
1. çözüm : sistemde tamsayı fonksiyonu olduğu varsayılıyor ve girilen sayı işaretsiz tamsayı olacak : - başla - sayı oku (işaretsiz tamsayı giriş ) - sayı sıfır ise bitir'e git - sayı < 0 ise HATA'ya git - sayı < 1000 ya da sayı > 9999 ise HATA'ya git - sayıyı hanelere ayır : - - - H1 <- tamsayıfonksiyonu(sayı /1000) * 1000 // sayı 9876 ise 9000 - - - H2 <- tamsayıfonksiyonu(sayı /100) * 100 - H1// sayı 9876 ise 9800-9000=800 - - - H3 <- tamsayıfonksiyonu(sayı /10) * 10 - H1 - H2 // sayı 9876 ise 9870-9000-800=70 - - - H4 <- sayı - H1 - H2 - H3 // ... - ekrana H1, H2, H3 ,H4 yazdır - başla'ya git - HATA : ekrana "4 haneli pozitif sayı girin, çıkış için sıfır girin" yaz, başla'ya git - bitir
eğer "tamsayı fonksiyonu" tanımlı değil ya da kullanamıyorsak, girilen değeri dizgi (string) olarak kabul edebiliriz : 2. - başla - sayı oku (dizgi - string) - sayı "0" (sıfır) ise bitir'e git - eğer sayının dizgi uzunluğu (örn. length, strlen vb.) 4 değilse HATA'ya git - eğer dizginin 1. karakteri "+" ya da "-" ise HATA'ya git - - - dizginin 1. karakterini ve "000" ekrana yaz // örn. "9" ise "9000" yazılacak - - - dizginin 2. karakterini ve "00" ekrana yaz // örn. "8" ise "800" yazılacak - - - dizginin 3. karakterini ve "0" ekrana yaz // örn. "7" ise "70" yazılacak - - - dizginin 4. karakterini ekrana yaz // ... - başla'ya git - HATA : ekrana "4 haneli pozitif sayı girin, çıkış için sıfır girin" yaz, BASLA'ya git - bitir
Sayının 4 haneye ayrılmasının kodlaması ise, eğer tamsayı işlevi varsa (kullandığın dile ait "div", "trunc", "int", gibi bir fonksiyon) 1. algoritmadaki tamsayı işlevi ile olabilir örn. delphi için yazalım (trunc ya da div kullanabiliriz) H1 := (sayi div 1000) * 1000; H2 := (sayi div 100) * 100 - H1; :
Eğer string isteniyorsa , yine delphiden (pascal) örnek verelim :
sayi[1] içinde 1. hane olacak, sayi[2] içinde 2. hane vb.. indisi kullanarak, ilgili haneye ulaşabilirsin. Ancak burada hanenin katsayısı vardır, gerçek değeri değil. Hanenin sırasına göre ekrana yazdırırken peşine sıfır yazdırmalısın. örn. writeln(sayi[1] + "000"); writeln(sayi[2] + "00"); gibi.. Delphi dışında örn. C ile yazacaksan, indis değeri 1'den değil 0'dan başlar...
Evet aralarında en profesyoneli budur yukarıalrdaki gibi başla eğer 4 ten küçükse filan olan mantığıdır ama yapay kod değildir.
Lythari Kolay gelsin; umarın işine yaramıştır. Ben üni.deyken, 2 haftada bir ödev teslim ederdik... Bunlar ileride önüne çıkacak sorunlara kağıt-kalem kullanmadan zihninde çözüm yolları bulman için çok iyi alıştırmalar. Elinden geldiğince okuldaki konulara vakit ayır. Üni. aslında okuyanlar için gerçek hayat öncesi "son sığınak".. Ne kadar zor ve sıkıcı da gelse; sakın boşverme..
Ulas_KAMACI Sağolasın. Çözümüm en profesyonel olanı değil.. Bir çok noktaya dikkat etmeden yazdım çünkü Lythari'ye hemen bir çözüm gerektiğini düşündüm. Daha çok hanelerin nasıl ayrılacağına odaklanmıştı. Ben de o alana yoğunlaştım.. Ama örn. dizgi olarak girilmesi gerekiyorsa, sayının başında ve sonunda boşluk olabilir; bunun silinmesine hiç değinmedim.. vb.
Sonuçta algoritma geliştirmenin formal bir mantığı yok. Hem düşünce yapımızla ilgili hem de çokça deneyim. Bir de herhangi bir sorunu daha küçük parçalara ayırmamız için zihnimizde "modüler" teknikler geliştirmemize önayak oluyor.. Daha kaba bir ifade ile "böl ve yönet"i öğreniyoruz..
hepinize cok cok tesekkür ederim ancak dizileri daha görmedigimiz icin onu kullanamiyorum =) digerinide tam cözemedim =) okuldan yeni geldim sanirim ondan