• 11-07-2021, 16:54:06
    #1
    merhaba hocalarım, uğraştığım bir şey var ama tam olarak nerede hata yapıyorum bulamadım. Kod dizini ve istenilen aşağıda. yardımcı olabilirseniz çok memnun olurum.

    yönerge:
    Dosyasında main fonksiyonu içerisinde sabit bir dizi verilmiştir. Klavyeden bir hedef değer girişi yapılacak. Hedef değer verilen dizinin en küçük elemanından büyük, dizinin toplamından ise küçük olacak. Eğer değilse kullanıcıdan yeni bir değer girmesi istenecek. Yazılacak olan program size verilen dizinin elemanlarını kullanarak 2 tane çözüm dizisi oluşturacak. 1.Çözüm dizisi; Dizi içerisinden minimum sayıda eleman seçerek ve bu seçilen elemanların toplamı hedef değerden büyük olmamak koşulu ile elemanların toplamının hedef değere en yakın olacak biçimde bir çözüm dizisi oluşturulacak. Örneğin : Hedef değer 2020 girilmiş olsun. Toplamaları hedef değerden küçük ve aradaki fark en az olacak biçimde verilen diziden 1000-750-250 değerleri seçilebilir. Eğer bu sayılar dizi içerisinden seçilirse toplamları (2000) hedef değere en yakın olan değer seçilmiş olur. Minimum sayıda eleman seçerek (3 eleman) aradaki farkı minimum yapacak ( 2020 - 2000 = 20 ) değerler program tarafından seçilmiş olur.

    benim yaptığım:

    #include<stdio.h>
    #include<stdint.h>
    
    int topla(int degerler[]){
        int i,sum=0;
        for(i=0;i<10;i++){
            sum+=degerler[i];
        }
        return sum;
    }
    
    int altsinir(int degerler[],int control){
        int i,temp;
        temp=control;
        int sum=0;
        for(i=9;i>=0;i--){            
            sum+=degerler[i];
            control-=sum;
            if(control<50){
                printf("\nS1[0]:%d \nS2[1]:%d \nS3[2]:%d",degerler[i],degerler[i+1],degerler[i+2]);
                break;
            }
            else{
                continue;
            }    
        }
        printf("---------------");
        printf("\n\nS1 Total Value:%d \nTarget Value:%d \nDifference:%d",control,temp,i);
    }
        
    
    int main()
    {
    
        int AvailableValues[10] = {50,100,150,250,400,500,600,750,850,1000};
        int sum,target;
        int i;
        sum=topla(AvailableValues);    
        printf("Lutfen bir sayi giriniz: ");
        scanf("%d",&target);
    
        for(i=0;i<15;i++){
            if(target>AvailableValues[0] && target<sum){
                printf("\n");
                break;
            }
            else{
                printf("Tekrar Deneyin: ");
                scanf("%d",&target);
            }
        }
        
        printf("Sayiniz---> %d\n\n",target);
        printf("First Solution List\n--------------------");    
    
        altsinir(AvailableValues,target);
    
        
        return 0;
    }

    Elde etmem gereken ekran örneği aşağıdadır:
  • 11-07-2021, 20:29:10
    #2
    Sorun devam ediyor mu ?
  • 11-07-2021, 22:08:17
    #3
    Lecter41 adlı üyeden alıntı: mesajı görüntüle
    Sorun devam ediyor mu ?
    Evet. Sorun devam ediyor.
  • 11-07-2021, 22:31:16
    #4
    mucahituzman adlı üyeden alıntı: mesajı görüntüle
    Evet. Sorun devam ediyor.
    #include<stdio.h>
    #include<stdint.h>
    
    int topla(int degerler[])
    {
        int i,sum=0;
        for(i=0; i<10; i++)
        {
            sum+=degerler[i];
        }
        return sum;
    }
    
    int altsinir(int degerler[],int control)
    {
        int i,temp;
        temp=control;
        int sum=0;
        int bulunanDegerler = 0;
        for(i=9; i>=0; i--)
        {
            if(control < 50)
            {
                break;
            }
            if(degerler[i] <= control)
            {
    
                sum+=degerler[i];
                control-=degerler[i];
                printf("S1[%d]:%d\n",bulunanDegerler,degerler[i]);
                bulunanDegerler++;
            }
    
        }
        printf("---------------");
        printf("\nS1 Total Value:%d \nTarget Value:%d \nDifference:%d",sum,temp,control);
    }
    
    
    int main()
    {
    
        int AvailableValues[10] = {50,100,150,250,400,500,600,750,850,1000};
        int sum,target;
        sum=topla(AvailableValues);
        printf("Lutfen bir sayi giriniz: ");
        scanf("%d",&target);
    
        while(1==1)
        {
            if(target>AvailableValues[0] && target<sum)
            {
                printf("\n");
                break;
            }
            else
            {
                printf("Tekrar Deneyin: ");
                scanf("%d",&target);
            }
        }
    
        printf("Sayiniz---> %d\n\n",target);
        printf("First Solution List\n--------------------\n");
    
        altsinir(AvailableValues,target);
    
    
        return 0;
    }
  • 11-07-2021, 23:04:57
    #5
    Lecter41 adlı üyeden alıntı: mesajı görüntüle
    #include<stdio.h>
    #include<stdint.h>
    
    int topla(int degerler[])
    {
        int i,sum=0;
        for(i=0; i<10; i++)
        {
            sum+=degerler[i];
        }
        return sum;
    }
    
    int altsinir(int degerler[],int control)
    {
        int i,temp;
        temp=control;
        int sum=0;
        int bulunanDegerler = 0;
        for(i=9; i>=0; i--)
        {
            if(control < 50)
            {
                break;
            }
            if(degerler[i] <= control)
            {
    
                sum+=degerler[i];
                control-=degerler[i];
                printf("S1[%d]:%d\n",bulunanDegerler,degerler[i]);
                bulunanDegerler++;
            }
    
        }
        printf("---------------");
        printf("\nS1 Total Value:%d \nTarget Value:%d \nDifference:%d",sum,temp,control);
    }
    
    
    int main()
    {
    
        int AvailableValues[10] = {50,100,150,250,400,500,600,750,850,1000};
        int sum,target;
        sum=topla(AvailableValues);
        printf("Lutfen bir sayi giriniz: ");
        scanf("%d",&target);
    
        while(1==1)
        {
            if(target>AvailableValues[0] && target<sum)
            {
                printf("\n");
                break;
            }
            else
            {
                printf("Tekrar Deneyin: ");
                scanf("%d",&target);
            }
        }
    
        printf("Sayiniz---> %d\n\n",target);
        printf("First Solution List\n--------------------\n");
    
        altsinir(AvailableValues,target);
    
    
        return 0;
    }
    Çalıştı. Çok teşekkür ederim.
  • 11-07-2021, 23:07:18
    #6
    mucahituzman adlı üyeden alıntı: mesajı görüntüle
    Çalıştı. Çok teşekkür ederim.
    Rica ederim. Kolay gelsin.