DonanımHaber Mini sürüm 2 Ocak 2026 tarihi itibariyle kullanımdan kalkacaktır. Bunun yerine daha hızlı bir deneyim için DH Android veya DH iOS uygulamalarını kullanabilirsiniz.
Arama butonu
Bu konudaki kullanıcılar: 1 misafir
3
Cevap
194
Tıklama
0
Öne Çıkarma
c programlama dilinde dosya okuma işlemi hatası
E
2 yıl (3 mesaj)
Er
Konu Sahibi

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);

k=dizi
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;
}



E
2 yıl (3786 mesaj)
Yarbay

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, <code>toplam2</code> değişkenini her döngü başında 0 olarak atamanızdır. Bu, <code>i</code> değişkeni 1'den büyük olduğunda, <code>toplam2</code> değişkeninin her zaman 0 olacağı anlamına gelir. Bu nedenle, <code>toplam1</code> değişkeni ile <code>toplam2</code> değişkeni asla eşit olmayacaktır.

Kodunuzdaki hatayı düzeltmek için, <code>toplam2</code> değişkenini sadece ilk döngüde 0 olarak atamanız gerekir. Bu, <code>toplam2</code> değişkeninin <code>i</code> değişkeni 1'den büyük olduğunda önceki döngülerden kalan değerleri tutacağı anlamına gelir. Bu, <code>toplam1</code> değişkeni ile <code>toplam2</code> 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
#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:
3 5 2 4 1 2 5 3 1 2
Bu dizinin çıktısı şu şekilde olacaktır:
4
Bu, <code>toplam1</code> değişkeni ile <code>toplam2</code> 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, <code>toplam2</code> değişkenini her döngü başında 0 olarak atadığınız için, <code>toplam1</code> değişkeni ile <code>toplam2</code> değişkeni hiçbir zaman eşit olmaz. Bunun nedeni, <code>toplam2</code> 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, <code>toplam2</code> değişkenini sadece ilk döngüde 0 olarak atadık. Bu, <code>toplam2</code> değişkeninin önceki döngülerden kalan değerleri tutmasını sağlar. Bu, <code>toplam1</code> değişkeni ile <code>toplam2</code> 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
2 yıl (3 mesaj)
Er
Konu Sahibi

@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


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @E_Y_B_H_P_T
E
2 yıl (3786 mesaj)
Yarbay

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:

#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;

}




Bu mesajda bahsedilenler: @eugurxan
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.