Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
3
Cevap
146
Tıklama
0
Öne Çıkarma
c programlama dilinde dosya okuma işlemi hatası
E
2 yıl
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;
}

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



E
2 yıl
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
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
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.