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; } |
c programlama dilinde dosya okuma işlemi hatası
-
-
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 iletoplam2
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şkeninini
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 iletoplam2
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; }Kod
Yığını: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 2Kod
Yığını:Bu dizinin çıktısı şu şekilde olacaktır:
4Kod
Yığını:Bu,
toplam1
değişkeni iletoplam2
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 iletoplam2
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 iletoplam2
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
-
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; }Kod
Yığını:
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X