C'de Do-while ile Girilen Sayıları Küçükten Büyüğe Sıralama

furkansaridiken

Kilopat
Katılım
25 Mayıs 2017
Mesajlar
139
Daha fazla  
Cinsiyet
Erkek
Merhaba. Do-while ile girilen sayıları küçükten büyüğe sıralamam gerekiyor. Kodu yazdım ancak çalıştırdığımda gelen ekran sadece siyah ve imleç yanıp sönen bir ekran. Kodun yanlış yerini göremedim. Yardımcı olabilecek var mı?

C:
#include<stdio.h>

int main()
{
    int i,k,j,m,n;
    int size;
    int arr[size];
    int temp=0;
  
    printf("How many numbers do you want in your array?\n");
    scanf("%d",&size);
    i=0;
    do
    {
        printf("Enter your %d. number of array.\n",i+1);
        scanf("%d",&arr[i]);
        i++;
    }
    while(i<=size-1);
   
    printf("Your original array:\n");
    k=0;
    do
    {
        printf("%d ",arr[k]);
        k++;
    }
    while(k<=size-1);
    printf("\n");
    j=1;
    do
    {
        m=(size-1);
        do
        {
            if(arr[m-1]>arr[m])
            {
                temp=arr[m];
                arr[m-1]=arr[m];
                arr[m-1]=temp;
            }
            m--;
        }
        while(m>=j);
        j++;
    }
    while(j<=size);
   
    printf("Sorted version of your array:\n");
    n=0;
    do
    {
        printf("%d ",arr[n]);
        n++;
    }
    while(n<=size-1);
    printf("\n");
}
 
Son düzenleme:
C:
int size;
int arr[size];

printf("How many numbers do you want in your array?\n");
scanf("%d",&size);

Bu çok yanlış bir kullanım şekli, dizinin boyutunu kullanıcıdan almak istiyorsan dynamic memory allocation kullanman gerekiyor, bu kullanım tarzı gcc extension'udur ve stack overflow'a sebep olabilir. Ek olarak scanf fonksiyonunda formattan önce bir boşluk bırakarak kullan scanf(" %d"); şeklinde.
 
C:
int size;
int arr[size];

printf("How many numbers do you want in your array?\n");
scanf("%d",&size);

Bu çok yanlış bir kullanım şekli, dizinin boyutunu kullanıcıdan almak istiyorsan dynamic memory allocation kullanman gerekiyor, bu kullanım tarzı gcc extension'udur ve stack overflow'a sebep olabilir. Ek olarak scanf fonksiyonunda formattan önce bir boşluk bırakarak kullan scanf(" %d"); şeklinde.
Dediğiniz konuyu bilmediğim için kullanamıyorum. Öğrensem de burada uygulayamam. Yazılım dersi ödevi olduğu için göstermediği bir şeyle yapınca maalesef not kırıyor. Bu yüzden bu şekilde düzeltmenin bir yolu var mı diye bilmek istiyorum.
 
C'de öyle array tanımlanmaz. Array boyutu compile time'da kesin olmalıdır. Diğer türlü dinamik array alman gerekir.

İsterse büyük boyut verip hepsini kullanma, istersen malloc ile al.
Değişkenleri her zaman ama her zaman ilklendir.
Malloc ile yer almayıp buffer kullanırsan boyutu da tutarsın, olur biter. Sıralarken tüm buffer'ı gezmemiş olursun.
Do-while kullanmak gereksiz geldi bana. Çok spesifik durumlar dışında kullanılmasına gerek olmayan bir şey.
Anlamadığın yerleri sorabilirsin.

Kod:
#include <stdio.h>
#include <stdlib.h>

void printArr(int* arr, int size) {
    for(int i = 0; i < size; ++i)
        printf("%d ", arr[i]);
   
    printf("\n");
}

void sortArr(int* arr, int size) {
    int temp = 0;
   
    for (int i = 0; i < size; ++i) {
        for (int j = 0; j < size - i - 1; ++j) {
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int main() {
    int arrSize = 0;
   
    printf("How many numbers do you want in your array? ");
    scanf("%d", &arrSize);
   
    int* arr = (int*)malloc(arrSize * sizeof(int));
   
    for (int i = 0; i < arrSize; ++i) {
        printf("Enter your %d. number of array: ", i + 1);
        scanf("%d", arr + i);
    }
 
    printf("Your original array:\n");
    printArr(arr, arrSize);
    sortArr(arr, arrSize);
    printf("Sorted version of your array:\n");
    printArr(arr, arrSize);
}
 
C'de öyle array tanımlanmaz. Array boyutu compile time'da kesin olmalıdır. Diğer türlü dinamik array alman gerekir.

İsterse büyük boyut verip hepsini kullanma, istersen malloc ile al.
Değişkenleri her zaman ama her zaman ilklendir.
Malloc ile yer almayıp buffer kullanırsan boyutu da tutarsın, olur biter. Sıralarken tüm buffer'ı gezmemiş olursun.
Do-while kullanmak gereksiz geldi bana. Çok spesifik durumlar dışında kullanılmasına gerek olmayan bir şey.
Anlamadığın yerleri sorabilirsin.

Kod:
#include <stdio.h>
#include <stdlib.h>

void printArr(int* arr, int size) {
    for(int i = 0; i < size; ++i)
        printf("%d ", arr[i]);
  
    printf("\n");
}

void sortArr(int* arr, int size) {
    int temp = 0;
  
    for (int i = 0; i < size; ++i) {
        for (int j = 0; j < size - i - 1; ++j) {
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int main() {
    int arrSize = 0;
  
    printf("How many numbers do you want in your array? ");
    scanf("%d", &arrSize);
  
    int* arr = (int*)malloc(arrSize * sizeof(int));
  
    for (int i = 0; i < arrSize; ++i) {
        printf("Enter your %d. number of array: ", i + 1);
        scanf("%d", arr + i);
    }
 
    printf("Your original array:\n");
    printArr(arr, arrSize);
    sortArr(arr, arrSize);
    printf("Sorted version of your array:\n");
    printArr(arr, arrSize);
}
Hocam sıkıntımı tam aktaramadım sanırım kusura bakmayın. Şuan önemli olan do-while verimli mi verimsiz mi konusu değil. Bu programı hali hazırda for ile yazdım zaten. Ancak çok saygıdeğer programlama hocam bunu do-while ile malloc, sortArr, printArr gibi göstermediği konuları kullanmadan yazmamı istiyor. Gösterdiği ve bildiğimiz varsaydığı şeyler sadece if-else,for,while,do-while,switch-case.
Yine de kodunuz için teşekkür ederim.
 
Gösterdiği ve bildiğimiz varsaydığı şeyler sadece if-else, for, while, do-while, switch-case.
O zaman for kullan. For döngüsünü okuyunca nereden nereye çalışacağını anlayabiliyorsun. Do-while'a bakınca ise do görüyorsun. O kadar.
İlk satıra int arr[1024] de. Sonra boyut isteyip döngülerde o boyuta kadar gez. Fonksiyonları da çağrıldıkları yerlerde kopyala yapıştır yap.
 

Yeni konular

Geri
Yukarı