folder Tahribat.com Forumları
linefolder C - C++
linefolder C De Bir Sualim Olucaktı Anlayanlar Bir Bakıversin



C De Bir Sualim Olucaktı Anlayanlar Bir Bakıversin

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Frosttear
    Frosttear's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    #include<stdio.h>
    #include<math.h>
    #include<conio.h>
    #include<time.h>

    int main()
    {
        int i,j,k,size,ortalama;
        int toplam=0;
        scanf("%d", &size);
        int a[size];
        for(i=0; i<size; i++)
            scanf("%d", &a[size]);
        
        for (i=0; i<size; i++)
           toplam += a[i];
        ortalama = toplam/size;
        printf("ortalama :%d", ortalama);
        
        return 0;
    }

     

    böyle son derece basit bir kod yazdıgımda cevabı cok ucuk bir rakam alıorum

    ornegin size yerine 3 giriorum, sayılarada 3 3 3 veriorum ortalama 3 cıkması gerekirken 672557748 alıorum???ben nerde yanlış yapıorum kodlarda bir sorun gozume carpmadı ama bierde sapıtıor heralde, mingw kullanıorum ama derleyeciden oldugunu sanmıorum bukadar basit koda nerde hatavar??

    ortalamaya en yakın 2nci sayıyı bulmaya calısıorum

    algoritma olarak şöyle düşündüm dogrumu sizcede?

    1-)kullanıcıya kac sayı giricegini sor ve bu sayılara diziye ata

    2-)dizinin ortalamasını al

    3-)dizinin ortalamasından bütün dizi elemanlarını ayrı ayrı cıkar ve bir dizi yarat bundan( bunun hakkında fikir ve kodlarınız varsa paylaşırsanız sevinrim)

    4-)bu farklardan yaratılmış dizide en kucuk 2nci sayı benım istedigim sayı olucaktır

     

    bundan başka bir algoritma yada yardım edebilecek şekilde c bilginiz varsa yardımlarınızı esirgemeyin lütfen  

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    falca
    falca's avatar
    Kayıt Tarihi: 13/Eylül/2005
    Erkek
    Kullanıcıdan size büyüklüğünü nerede istemişsin onu anlamadım.

    Was here...
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ~$
    ComputerWolf
    ComputerWolf's avatar
    Üstün Hizmet Madalyası
    Kayıt Tarihi: 26/Mart/2003
    Erkek
    Abi tam olarak matematiksel olarak ne yapmak istedigini net olarak belirtsene.

    Hep denedin. Hep yenildin. Olsun yine dene , yine yenil ama daha iyi yenil !
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    inside
    anonim6918524
    anonim6918524's avatar
    Banlanmış Üye
    Bilgi/Destek Madalyası Üstün Hizmet Madalyası
    Kayıt Tarihi: 16/Temmuz/2005
    Erkek

    Dizi boyutunu sonradan belirleyemezsin.Boyutu sabit tanımlaman lazım.

    Fakat bunun çıkış yolu olarak pointerları kullanıyoruz ve hafızada sonradan alan ayırıyoruz.

    scanf("%d",&size);

    int* dizi=new int[size];  //sizedaki değer kadar bellek alanı ayırır.


    λ
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Frosttear
    Frosttear's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    tam olarak yapmak istediğim şey şu: bir dizinin ort yakın 2.nyi dizi içindeki elemanlardan bulduran fonksiyonu yazma...

    yani dizi ortalamasına yakın 2nci sayıyı bulduran programa ihtiyacım var...

    ben algoritmamı verdim üstte ama başka türlü nasıl yaparım yada en makulu dediğimmidir?

    ben ilk yazdıgım kodda nerde yannış yaptım neden abuk bir sayı verior bana ortalama istediğimde bir fikri olan varmı?

    birde su noktada takıldım:

    ortalamasını aldıktan sonra dizi elamenlarını cıkarıorum diziye nasıl sıralıcam ben bunnarı...gene absürd sayıları eşitlior bu noktada bir yol gösterin?

    bir hal yordam gösterirsenız cok sevinirm

     

    dipnot: size büyüklüğünü int main den sonra 3ncü satırdan sonra istedim...

    dipnot 2: pointerları hic bilmiorum ogrenırım ama ogrenene kadar bunun uzerınde kafa yormak istiorum o kısmı bana yazabilirmisin tam olarak(tabi tek bierde lazım olucaksa)her yerde gerekiorsa başka nasıl yaparım yada yapabilirmiyim?dizi icerisindekileri kullanıcı girsin istiorum sadece ben elimle vermiyeyim...

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    inside
    anonim6918524
    anonim6918524's avatar
    Banlanmış Üye
    Bilgi/Destek Madalyası Üstün Hizmet Madalyası
    Kayıt Tarihi: 16/Temmuz/2005
    Erkek
    Kodda yanlış yaptığın yerler

    Birincisi sabit olması gereken dizi boyutunu değişken olarak almaya çalışmışsın

    İkincisi garip sayıların çıkmasının nedeni senin dizinin o elemanlarına hiç değer atamamış olman.

    for(i=0; i<size; i++)
            scanf("%d", &a[size]);// size'ın yerine i değişkenini koyacaksın

    orada size yaparsan hep aynı elemana atarsın.Yani adam boyutu 3 girdiyse dizinin 3. elemanına atanmış olur.


    Pointer konusuna gelirsek şu an için kullanımını bil yeter

    scanf("%d",&size);

    int* dizi=new int[size];

    dizi[1]=111;  ....



    int* dizi=new int[10];  int*10  kadar bellek alanı ayrılır ve başlangıç adresi dizi pointerına atanır.


    λ
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Frosttear
    Frosttear's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    aga mantıgı cözemedim tam olarak biras daha bahsedermisin pointerlardan?

    misal:

    #include<stdio.h>
    #include<math.h>
    #include<conio.h>
    #include<time.h>

    int main()
    {
        int i,y,k,size,max1,max2;
        float    j;
        double ortalama;
        int* dizi=new int[size];
        float toplam=0;
        scanf("%d", &size);
        int a[size];
        for(i=0; i<size; i++)
            scanf("%d", &a[i]);
       
        for (i=0; i<size; i++)
           toplam += a[i];
        ortalama = toplam/size;
        printf("ortalama\n :%f", ortalama);
        for(k=0; k<size; k++)
        {
            j=ortalama-a[k];
            printf("%f\n: ",j);
        }

     buraya kadar herşey normal...dizi elemanlarını kişi kendi girior ve cıkartıorum dizi elemanlarını..bu cıkarılan sayıları nasıl 2nci bir diziye oturtucam

    mesela 3,4,5 verdim...ortalaması 4...4-3=1  4-4=0  4-5=-1...a2[]={1,0,-1}   nasıl bu hale gelicek...tmm pointer ile alan yaratıorz yenı nesnemiz icin tmm ama nasıl eşitlicez istediklerimizi istediklerimize?

    int* dizi=new int[size];

    dizi[1]=111;  .... 

    burayı cozemedım ilk satır tmmda 2nci satıra bağlantı kuramadım...biliorum pointer bilmeyen birine annatmak zor ama bir yandanda pointer calısıorum burda,bir yandanda senın ogrettiklerini uygulamaya calısıorum saolasın bilgiler icin 

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    inside
    anonim6918524
    anonim6918524's avatar
    Banlanmış Üye
    Bilgi/Destek Madalyası Üstün Hizmet Madalyası
    Kayıt Tarihi: 16/Temmuz/2005
    Erkek

      int i,y,k,size,max1,max2;
        float    j;
        double ortalama;
        scanf("%d", &size);
        int* dizi=new int[size];
        float toplam=0;
        int a[size];


    öncelikle scanf'i üste alacaksın çünkü senin girdiğin değere göre bellek alanı ayrılacak.


    pointerlar adres tutarlar.

    int* dizi;  bu şekilde pointerı tanımladık


    dizi=new int[10];

    new ile bellek alanı ayırdık.Yani 10 tane int kadar ve başlangıç adresini diziye atadık.

    sıralı olarak bellekte ayrılıyor.dizilerde aynıdır.


    105. adres başlangıç adresiyse 10 tane int kadar yer ayırırsan int 4 byte kaplar.

    105,109,113,117... gider.

    sen dizi[0] dersen  105 numaralı adrese

    dizi[1] dersen 109 numalı adrese gidersin.

    Kullanım şekli aynı

    dizi[i]=atayacağın değer.


    λ
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tarikat Şeyhi
    HolyOne
    HolyOne's avatar
    Kayıt Tarihi: 01/Haziran/2002
    Erkek
    Bazı değişkenleri sıfırlamamışsın, hafızada ayrılan yerde ne yazıyorsa o değeri alıyorlar

    Nush ile uslanmayanı etmeli tekdir, Tekdir ile uslanmayanın hakkı kötektir!
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    inside
    anonim6918524
    anonim6918524's avatar
    Banlanmış Üye
    Bilgi/Destek Madalyası Üstün Hizmet Madalyası
    Kayıt Tarihi: 16/Temmuz/2005
    Erkek

    Hoca eğer anlattığını doğru anladıysam program bu.Bugün canım sıkılıyordu senin şeye bakayım dedim :))

    #include<stdio.h>

    int main()
    {
     int size=0,toplam=0,min1,min2;

     printf("Dizi boyutu: ");
     scanf("%d",&size);

     int* dizi=new int[size]; 

     for(int i=0;i<size;i++)
     {
      scanf("%d",&dizi[i]);   //elemanları al
      toplam+=dizi[i];
     }

     toplam/=size;  //ortalama

     min1=dizi[0];  

     for(i=0;i<size;i++)
     {
      dizi[i]=toplam-dizi[i];   //ortalamadan elemanları çıkart ve en küçük sayıyı bul
      
      if(min1>dizi[i])
      min1=dizi[i];
     }

     min2=dizi[0];

     for(i=0;i<size;i++)
     {
      if(min2==min1)
      {
       min2=dizi[i];  // en küçük ikinci sayıyı bul
      }

      if(min1!=dizi[i])
      {
       if(min2>dizi[i])
       {
       min2=dizi[i];
       }
      }
     }

     printf("%d",min2);


     return 0;
    }

     


    λ
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Frosttear
    Frosttear's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    ya hocam kafayı sıyırıcam az kaldı:@:@:@

    şimdi firex ellerin zeval gormesin cok buyuk bir mantık gosterdin bana cok saolasın


     

    ben düşündümki 2 türlü yapabilirim

    1nci yol:

    1-)once diziye girdirtirim ortalamasını aldırtırım ben bunun

    2-)ortalamadan kucuk sayılar ile bir dizi yaratırım(ki nasıl yaparm bilmiorum)

    3-)bu dizideki en büyük 2 sayıyı bulur biere kaydederim

    4-)ortalamadan büyük sayılar ile bir dizi yaratırım( e haliyle bunuda nasıl yaparım die düşünüorum)

    5-)bu dizideki en kücük 2 sayıyı bulur biere kaydederim...

    6-)bu dizilerdeki sayıları ortalamadan cıkarırım farkı en kücük 2nci sayı olan benım sayımdır ama burda farkı alınan sayıdan nasıl ilk sayıya geri donecegımı de bılmıorum yanı baya cetefilli bir yol...

    2nci yol:

    1-)dizi girilir ve ortalama bulunur

    2-)ortalamadan bütün sayılar cıkartılır bu farklar ile bir dizi yaratılır

    3-)bu yaratılan dizide en kücük 2nci sayı bulunur

    4-)bu en kucuk 2nci sayı hangi sayıdan elde edilir o bulunur...

     

    ama şimdi kitlendiğim yerlerde şöyle

    2nci yolun 3 ve 4ncü basamakta kitleniorum yok yanı pointerla yaparsın dedin sen ama benım oyle bir kavrama ulaşabilmem icin biras daha calısmam lazım tam hakim olmam lazım

    senın yazdıgın programda 2 hata alıorum

    int* dizi=new int[size];

    for(int i=0;i

     

    yaptıgın yerde i scope alanında tanımlanmamış dior...ilk mainde tanımlıorum onun yerine bu sefer de cevap abuk sabuk bir rakam verior...

    ornegin dizi boyutu:4 5678 girdim sayılarada...cevap -1 dior...lütfen bir yardımcı ol nerdeyse ölüm kalım meselesi haline döndü program:(:(bunu bir türlü ogrenıcem yazınca ama ozmna kafayı sıyırcam bilg başında:(

     

Toplam Hit: 4461 Toplam Mesaj: 16