Şimdi Ara

c programlama dilinde dosya okuma işlemi hatası

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
5
Cevap
0
Favori
112
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • soru şu : 10 elemanlı bir dizideki ilk i elemanın toplamı, dizinin i'den sonraki elemanlarının toplamına eşitse i sayısını yazdıran programı yazınız. Örnek: 3 5 2 4 1 2 5 3 1 2 3+5+2+4 = 1+2+5+3+1+2 Cevap: 4 (indis 3)



    input output dosyaları her şey ayarlanık outputtaki cevapları sildim ve kendim doğru yapmış mıyım diye kontrol etmek istedim fakat terminalde boş ekran çıkıyor . yazdığım kodda nerede hata yapıyorum lütfen yardımcı olur musunuz :


    #include<stdio.h>

    int main()

    {

    FILE *oku, *yaz;

    oku = fopen("input.txt","r");

    yaz = fopen("output.txt","w");

    int dizi[30], n = 30, sayac = 0, i,j,k,m,toplam1=0,toplam2=0;

    while(sayac < 1000)

    {

    for(i = 0; i < n; i++)

    {

    fscanf(oku,"%d", &dizi[i]);

    k=dizi[i] ; 

    toplam1=toplam1+k ;

     

    for( j=i+1 ; j<n ; j++)

    {

    m=dizi[j] ; 

    toplam2=toplam2+m ;

    }

    if(toplam1==toplam2)

    {

    fprintf(yaz,"%d\n",i+1); break ; 

    }

    else

    {

    toplam2=0 ; 

    }

    }

    sayac++;

    }

    fclose(oku);

    fclose(yaz);

    return 0;

    }








  • Konu yanlış yerde. Buraya açmalısın: https://forum.donanimhaber.com/yazilim-gelistirme--f202


    Ayrıca forumlarda sormak yerine artık devir ChatGPT ve Bard devri.... Hatta daha da entegre yapay zekalar var. Onlarla ilerle öncelikle.






    Örneğin Bard:


    Kodunuzdaki hata, toplam2 değişkenini her döngü başında 0 olarak atamanızdır. Bu, i değişkeni 1'den büyük olduğunda, toplam2 değişkeninin her zaman 0 olacağı anlamına gelir. Bu nedenle, toplam1 değişkeni ile toplam2 değişkeni asla eşit olmayacaktır.


    Kodunuzdaki hatayı düzeltmek için, toplam2 değişkenini sadece ilk döngüde 0 olarak atamanız gerekir. Bu, toplam2 değişkeninin i değişkeni 1'den büyük olduğunda önceki döngülerden kalan değerleri tutacağı anlamına gelir. Bu, toplam1 değişkeni ile toplam2 değişkeni arasında bir eşitlik olup olmadığını kontrol etmeyi mümkün kılar.


    Düzeltilmiş kod şu şekilde olacaktır:


    C

    Kod

    Yığını:
    #include<stdio.h> int main() { FILE *oku, *yaz; oku = fopen("input.txt","r"); yaz = fopen("output.txt","w"); int dizi[10], n = 10, sayac = 0, i,j,k,m,toplam1=0,toplam2=0; while(sayac < 10) { for(i = 0; i < n; i++) { fscanf(oku,"%d", &dizi[i]); k=dizi[i] ;  toplam1=toplam1+k ; if(i == 0) { toplam2 = 0 ;  } else { m=dizi[i] ;  toplam2=toplam2+m ; } if(toplam1==toplam2) { fprintf(yaz,"%d\n",i+1); break ;  } } sayac++; } fclose(oku); fclose(yaz); return 0; }

    Kodu kullanırken dikkatli olun.


    Bu kodu test etmek için, aşağıdaki örnek dizini kullanabilirsiniz:

    Kod

    Yığını:
    3 5 2 4 1 2 5 3 1 2

    Bu dizinin çıktısı şu şekilde olacaktır:

    Kod

    Yığını:
    4

    Bu, toplam1 değişkeni ile toplam2 değişkeninin 4. eleman için eşit olduğunu gösterir. Bu nedenle, çıktı 4 olacaktır.


    Kodunuzdaki hata için özel olarak, toplam2 değişkenini her döngü başında 0 olarak atadığınız için, toplam1 değişkeni ile toplam2 değişkeni hiçbir zaman eşit olmaz. Bunun nedeni, toplam2 değişkeninin her döngüde sıfıra sıfırlandığı için önceki döngülerden kalan herhangi bir değeri tutmaması gerektiğidir.


    Düzeltilmiş kodda, toplam2 değişkenini sadece ilk döngüde 0 olarak atadık. Bu, toplam2 değişkeninin önceki döngülerden kalan değerleri tutmasını sağlar. Bu, toplam1 değişkeni ile toplam2 değişkeni arasında bir eşitlik olup olmadığını kontrol etmeyi mümkün kılar.




    < Bu mesaj bu kişi tarafından değiştirildi E_Y_B_H_P_T -- 3 Ocak 2024; 13:41:26 >




  • @E_Y_B_H_P_T merhaba yanıtınız için öncelikle teşekkürler . Kodunuzu denediğimde yine terminalde boş ekran çıkıyor :( yardımcı olabilir misin

  • eugurxan E kullanıcısına yanıt

    Dediğim gibi prompt ilerle. Ama öğrenme aşamasında mutlaka kendin düşünerek bulmalısın.


    Ben baştan ayrı bir kod yazdırdım:


    Kod

    Yığını:
    #include <stdio.h> int main() { FILE *dosya = fopen("input.txt", "r"); if (dosya == NULL) { printf("Dosya açma hatası!\n"); return 1; } int dizi[10]; int boyut = 10; for (int i = 0; i < boyut; ++i) { if (fscanf(dosya, "%d", &dizi[i]) != 1) { printf("Dosya okuma hatası!\n"); fclose(dosya); return 1; } } fclose(dosya); for (int i = 0; i < boyut; ++i) { int ilkToplam = 0; int sonrakiToplam = 0; // İlk i elemanın toplamını hesapla for (int j = 0; j <= i; ++j) { ilkToplam += dizi[j]; } // Dizinin i'den sonraki elemanlarının toplamını hesapla for (int j = i + 1; j < boyut; ++j) { sonrakiToplam += dizi[j]; } // İki toplam eşitse i'yi yazdır ve döngüden çık if (ilkToplam == sonrakiToplam) { printf("Cevap: %d\n", i + 1); break; } } return 0; }




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.