Şimdi Ara

Bu program for kullanmadan nasıl yazılır ?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
15
Cevap
0
Favori
304
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Bir dizinin 10 elemanı olacak. Elemanlar 100e kadar olabilir. Random ile 10 eleman gelecek ve küçükten büyüğe doğru sıralayacak. Ama bu program hem for kullanarak hem de for kullanmadan yazılması gerekiyormuş. For kullanarak tamam onu hallettim ama For kullanmadan yapamadım. Yardım edebilirseniz çok sevinirim.



    public class BubblesortExample {


    private static int []a;

    public static void main(String[] args) {


    a = getArray();

    printArray();

    sort();

    System.out.println();

    printArray();

    }

    public static void sort(){

    int left = 0;

    int right = a.length-1;

    bubbleSort(left,right);

    }

    private static void bubbleSort(int left,int right){


    for(int i=right;i>1;i--){


    for(int j=left;j<i;j++){


    if(a[j] > a[j+1]){

    swap(j, j+1);
    }

    }

    }

    }


    public static void swap(int left,int right){

    int temp = a[left];

    a[left] = a[right];

    a[right] = temp;

    }


    public static void printArray(){

    for(int i : a){

    System.out.print(i+" ");

    }

    }


    public static int[] getArray(){

    int size=10;

    int []array = new int[size];

    int item = 0;

    for(int i=0;i<size;i++){

    item = (int)(Math.random()*100);

    array[i] = item;

    }

    return array;

    }



    < Bu mesaj bu kişi tarafından değiştirildi ozgur561 -- 3 Nisan 2017; 23:56:41 >







  • Kodun darmadağın olmuş, kırmızı çizgili butonu kullamıyorsun galiba?
    Bu program for kullanmadan nasıl yazılır ?
  • Doğru. Onu kullanmayı unutmuşum. Şimdi düzgün görünüyor mu ?
  • recursive kullanmayı denedin mi ?
  • İşte onu yapmayı bilmiyorum. Derse gidemedim çünkü. Araştırdım internetten ama beceremedim. :(
  • https://www.google.com.tr/search?q=bubblesort+recursive+java

    52.000 sonuç birinden birini uygula işte.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Yukarda söyledim ama internetten araştırdığımı. O sayfalara da baktım ama her birinde for vardı. Kendim de bişeyler yapmayı denedim ama hata verdi sürekli. Konuya da tam hakim değilim gidemedim çünkü. Yoksa sormazdım zaten burda.



    < Bu mesaj bu kişi tarafından değiştirildi ozgur561 -- 4 Nisan 2017; 0:45:9 >
  • ha anladım yanlız şu sıralarda zamanım yok; düzenleme zaman isteyen iş yoksa dükkan senin :

    < Bu ileti mini sürüm kullanılarak atıldı >
  • İki farklı fonksiyon yazmanız lazım, dış for için bir iç for için iki. Ayrıca iki fonksiyon kendilerini yinelemekle(recursive) beraber birbirlerini de çağıracaklar. Biraz zor bir kod olur, sınavlarım bittikten sonra öbür hafta ben yazabilirim ama geç mi olur bilmem.

    Şimdi internette baktım c++ ile yazılmışı var, kontrol etmedim ama çalışıyordur sanırım.https://cboard.cprogramming.com/cplusplus-programming/146864-bubble-sorting-array-using-no-loops.html
    Bu linkteki son mesajlarda iki farklı kod var, ikincisi tek fonksiyonla yazılmış birebir javaya uyarlanabilir.
    İlki iki fonksiyonla yazılmış, javada olmayan tek şey Innerloop fonksiyonundaki int& min ifadesi, siz bunu static bir değişken olarak yazarsanız geri kalanı aynen javaya uyarlayabilirsiniz.



    < Bu mesaj bu kişi tarafından değiştirildi Guest-D639AD061 -- 4 Nisan 2017; 23:58:17 >




  • Hocam maalesef ne yaptıysam olmadı for olmadan sorduğum kodlar. Konuyu tam bilmiyorum demiştim. Yeni bi program ile yapayım dedim. Yine küçükten büyüğe sıralıyor ama if else yok. Bu program bubble sort özyinelemeli fonksiyon sayılır mı ?

     
    package javaapplication63;

    import java.util.Arrays;

    public class JavaApplication63 {


    public static void main(String[] args) {
    int [] array = new int[10];

    array[0] = ((int)(Math.random()*100+1));
    array[1] = ((int)(Math.random()*100+1));
    array[2] = ((int)(Math.random()*100+1));
    array[3] = ((int)(Math.random()*100+1));
    array[4] = ((int)(Math.random()*100+1));
    array[5] = ((int)(Math.random()*100+1));
    array[6] = ((int)(Math.random()*100+1));
    array[7] = ((int)(Math.random()*100+1));
    array[8] = ((int)(Math.random()*100+1));
    array[9] = ((int)(Math.random()*100+1));

    Arrays.sort( array );

    System.out.println(array[0] +" " + array[1] +" " + array[2] +" " + array[3]
    +" " + array[4] +" " + array[5]+" " + array[6]+" " + array[7]+" "
    + array[8]+" " + array[9] );

    }
    }




  • for kullanarak yazdığın programda da gereksiz kodlar vardı; birkaçını sildim. Ayrıca bubble sort algoritmasında 2. for döngüsü 1. döngünün sayacına kadar ilerliyor ki onu da ProgrammingSimplified.com adlı tutorial sitesinde gördüm ve onu da uyguladım cok daha sade ve temiz çalışıyor. İstesem şimdi rekürsif hale de getiririm ancak mesele bu değil; mesele senin araştırarak yapman cunku gönderdiğin kodlar araştırma yapman ve daha cok çalışman gerektiğini söylüyor : )



    Bu program for kullanmadan nasıl yazılır ?

    < Bu ileti mini sürüm kullanılarak atıldı >




  • Size gönderdiğim linkteki ilk kodu aynen javaya uyarladım, karşılaştırma yapın neredeyse hiçbir şeyi değiştirmeden aynen bıraktım. Ya siz derse çalışmamışsınız ya da hocanız öğretmeden ödev vermiş.

     
    public class denemeler {
    static int MAX = 10;
    static int min;

    static void InnerLoop(int[] values, int j)
    {
    if(j != MAX)
    {
    if(values[min] > values[j])
    {
    min = j;
    }
    InnerLoop(values, j+1);

    }

    }

    static void OuterLoop(int[] values, int i)
    {
    min = i;
    int tempVal = 0;
    if(i != MAX)
    {
    int j = i;
    InnerLoop(values, j);
    tempVal = values[i];
    values[i] = values[min];
    values[min] = tempVal;
    OuterLoop(values, i+1);

    }
    }

    public static void main(String args[]) {
    int values[] = { 25, 3, 17, 12, 9, 22, 4, 16, 8, 56 };
    for(int i: values)
    System.out.print(i + " ");
    OuterLoop(values, 0);
    System.out.println();
    for(int i: values)
    System.out.print(i + " ");
    }
    }




  • Teşekkür ederim ama bu bir ödev değildi. Sadece alıştırma yapmaya çalışıyordum. Derse gitmemiştim özyinelemeleri işlemiş örnek olarak random kullanmış. Döngü olanı yapmış ama diğerini yapmamış. İki şekilde yapılabilir demiş yani. Tekrar teşekkürler.



    < Bu mesaj bu kişi tarafından değiştirildi ozgur561 -- 5 Nisan 2017; 23:42:42 >
  • Anladım bu arada linkteki ikinci kodu şimdi çalıştırdım ama çalışmıyor, sanırım ikinci kod yanlış algoritmasını çözmekle uğraşmadım, zaten n karmaşıklıkla sıralama yapmak mümkün değil yanlış bakmıyorsam n karmaşıklıkta o kod. Neyse...
    Son yazdığınız kod bubble sort değil, recursive de değil.
    Öncelikle kodu o şekilde yazmamalısınız, 100 eleman olsa tek tek atama mı yapacaksınız, boşu yere hamallık. Sıralama algoritmalarından önce bu basit şeyleri öğrenmiş olmanız gerekli.

     
    import java.util.Arrays;

    public class JavaApplication63 {

    public static void main(String[] args) {
    int [] array = new int[10];

    for(int i=0; i<10; i++) {
    array[i] = ((int)(Math.random()*100+1));
    }

    Arrays.sort(array);

    for(int i=0; i<10; i++) {
    System.out.println(array[i]);
    }
    }
    }

    Bu kod sizin yazdığınızın aynısı sadece tek tek atama veya yazdırma yerine döngü kullanılmış hali.
    İncelerseniz sıralamaya dair tek kod Arrays.sort(array) satırı. Bu javanın Arrays sınıfının içindeki hazır metod, yani sıralama metodu zaten mevcut bu metod DualPivotQuickSort yöntemiyle sıralama yapıyor, kısaca quicksort kullanıyor.
    Bu yüzden bu kod ne bubble sort ne de recursive, yani bizim yaptığımız hiçbir şey yok.
    Yazdığınız kodlardan henüz çok acemi olduğunuz belli oluyor, eğer algoritmalarda ve javada ilerlemek istiyorsanız sizehttp://introcs.cs.princeton.edu/java/home/ bu siteyi tavsiye ederim. Sıfırdan başlayıp ileri konulara kadar adım adım ilerlemiş. Umarım İngilizce biliyorsunuzdur, bilmiyorsanız başka bir şeyler buluruz. Kolay gelsin.




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.