0 oy
51 gösterim
Sayılar dizisi şağıdaki gibi olsun.

sayİlar(25,22,17,19,47,3,98,5,124,10)

-Kullanıcıdan 1 ile 10 arasında bir sayı girilsin.

-Kullanıcı N degerini girmiş ise, programımız dizideki en kucuk N.sayiyi ekrana yazdırsın. Örneğin; kullanıcı 2 sayisini girdiğinde, programımız dizideki en kucuk ikinci sayı olan 5 sayısını ekrana yazdirsin. Kullanıcı 10 degerini girmis ise dizideki en buyuk sayı olan 124 değeri ekrana basılsın.

PROGRAMI SIRALAMA ALGORİTMALARINDAN HERHANGİ BİRİNİ KULLANMADAN YAZINIZ.

(Bu programı cozememe nedenim bu oldugu icin büyük harflerle yazdim.Yoksa kabarcık algoritmasıyla kolayca çözülebiliyor.)
C/C++ kategorisinde (102 puan) | 51 gösterim

1 cevap

0 oy
Probleminin çözümünü direk kod olarak yazmayacağım ama bir yöntem söyleyebilirim :)

- İki tane fonksiyon yazıyorsun. Birincisi dizideki en küçük sayıyı bulacak.
- İkincisi de bu sayıyı parametre olarak alıp dizideki bu sayıdan büyük en küçük sayıyı bulacak. İkinci parametresi de bu işlemi kaç kez yapacağı. Bu fonksiyon özyinelemeli (recursive) olarak ikinci parametre miktarınca çağrılacak. O zaman bulmuş oluyorsun.

Yazmaya çalış. Sorun yaşarsan buradan yorumlar üzerinden konuşuruz.
(4k puan)

Teşekkürler, kafamda bir şeyler oluştu. 

Lakin ikinci fonksiyonda birinci fonksiyondan almış olduğumuz parametrenin yani kucuk sayinin burada " dizideki bu sayıdan büyük en küçük sayıyı bulacak"  koşul ifadesini nasıl tasarlayamadım.

Şöyle;

En başında dizinin hangi elemanının en küçük eleman olduğunu bulmak zorundasın ki o elemandan başlayarak işlemine devam edebilesin.

Mesela örnek verdiğin dizide önce 3 sayısını bulacaksın. Sonra ikinci fonksiyonuna 3 den büyük olan en küçük sayıyı bulması için bir kod yazacaksın. O zaman sana 5 dönmeli sonra da 5 den büyük olup geriye kalanların en küçüğünü bulmalısın. İstediğin sayıda adımı gerçekleştirene kadar yazabilirsin. Recursive de yazabilirsin, iterative de fark etmez. Bence ödev için recursive yazman daha güzel olabilir.
Hocam çok teşekkürler tekrardan.

Açıkçası sizin söylediğiniz yoldan gitmeye çalıştım ama fonksiyonlarda çok eksiğim var malesef. Bu nedenle fonksiyon yazmadan yazdım;

#include <stdio.h>

int main(int argc,const char argv[]){

    int sayilar[10]={25,22,17,19,47,3,98,5,124,10};

    int sayi,tkucuk,kucuk,kontrol=0;

    printf("1 ila 10 arasinda bir sayi giriniz:\n");

    scanf("%d",&sayi);

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

        if(kontrol==0){

            tkucuk=9999;

            kontrol=1;

            for(int j=0;j<10;j++){

                if(sayilar[j]<tkucuk)

                {

                    tkucuk=sayilar[j];

                }

            }

        }

        kucuk=tkucuk;

        tkucuk=9999;

        for(int k=0;k<10;k++){

            if(sayilar[k]>kucuk){

                if(sayilar[k]<tkucuk){

                    tkucuk=sayilar[k];

                }

            }

        }

    }

    printf("%d",kucuk);

    return 0;

}

İlgili sorular

0 oy
1 cevap
20 Mart 2017 C/C++ kategorisinde Joseph (102 puan) sordu | 44 gösterim
0 oy
1 cevap
21 Ocak 2016 C/C++ kategorisinde hasscript (131 puan) sordu | 87 gösterim
0 oy
0 cevap
20 Aralık 2017 Veri Tabanı kategorisinde Burak A. (103 puan) sordu | 38 gösterim
0 oy
1 cevap
3 Ocak 2017 Java kategorisinde rusty (104 puan) sordu | 31 gösterim
0 oy
1 cevap
5 Aralık 2016 Web Programlama kategorisinde kenan (4k puan) sordu | 103 gösterim