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

Sorunuz mu var? Belki de çoktan soruldu..

0
C'de dizi problemi

Açık 1 Cevaplar 84 Gösterim C/C++
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.)

1 cevap

0
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.
(4.2k puan)
3Yorumlar
(102 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.

(4.2k puan)
Şö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.
(102 puan)
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;

}