Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
Birbirinden değerli Türkçe Blog yazarlarını takip edebilmek için ziyaret edebileceğiniz bir internet sitesi. yazarlar.hasscript.com
0 oy
30 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)

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.

alekta movik movik
(3.7k 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 35 gösterim
0 oy
1 cevap 63 gösterim
63 gösterim 21 Ocak 2016 C/C++ kategorisinde hasscript (131 puan) sordu
0 oy
0 cevap 29 gösterim
29 gösterim 20 Aralık 2017 Veri Tabanı kategorisinde Burak A. (103 puan) sordu
0 oy
1 cevap 27 gösterim
27 gösterim 3 Ocak 2017 Java kategorisinde rusty (104 puan) sordu
0 oy
1 cevap 61 gösterim
61 gösterim 5 Aralık 2016 Web Programlama kategorisinde kenan (3.7k puan) sordu
...