İki sayı arasındaki sayıları toplama hakkında iki sorum

1)Yazmış olduğum bu programda hata nerede yardımcı olur musunuz? Örneğin ben minimum sayıya 2, maximum sayıya 5 diyorum; cevabın 14 olması gerekirken program bana 12 yanıtını veriyor.

#include <iostream>
using namespace std;

main() {
       int min, max, toplam, terimsayisi;
       
       cout << "minimum:";
       cin >> min;
       
       cout << "maximum:";
       cin >> max;
       
       terimsayisi=max-min+1;
       toplam=((max+min)/2)*terimsayisi;
       cout << toplam;
       
       cin >> min;
       }

2)Bu programı açıklar mısınız? Neden toplama 0 diyoruz başta ve bunu ben kendim nasıl akıl edebilirim programı yazarken?


#include <iostream>
using namespace std;

main(){
       int min, max, toplam=0;
       
       cout << "minimum deger:";
       cin >> min;
       
       cout << "maksimum deger:";
       cin >> max;
       
       do{
           toplam=toplam+min;
           min++;
           }while(min <= max);
       
       cout << toplam;
       
       cin >> max;
       
       }

İlk kodda bölüm kısmındaki 2'yi 2.0 yapmayı deneyin. Sizin kodunuzda bölünen ve bölen tamsayı olduğu için sonucu tamsayı olarak alıyorsunuz. Eğer bölünen ya da bölenden biri ondalık sayı olursa, sonucu ondalık sayı alırsınız.

İkinci kodda şöyle bir kod satırı var: toplam=toplam+min; Eğer toplam değişkenini sıfıra eşitlemezseniz bu satır ilk çalıştığında sorun yaşayabilirsiniz. C ve C++'ta bildirdiğiniz değişkenleri ilklendirmezseniz, bu değişkenlerin değerleri tahmin edemeyeceğiniz değerlere atanırlar. Ancak sizin bu değişkenin değerinin 0 olmasına ihtiyacınız var.

1 Beğeni

Yeni baslayan biri olarak derleyicinin butun uyarilarini acmanda fayda var. main’in return tipini belirtmemissin:

1 Beğeni

Çalıştığım kaynakta hoca cin kullanarak programın açık kalmasını sağlıyor. Return’ı daha öğretmedi ve yorumlarda belirtenler olsa da mantığını hoca anlatana kadar cin ile devam etmek istedim. Teşekkürler ama tavsiyeniz için.

Çok teşekkür ederim hocam. Peki buradaki sayıları integer yerine float tanımlasak bir sorun yaşanır mı? Bu da istediğim sonucu verdi ve dediğiniz gibi noktalı şekilde kullanmış oldu çünkü de.

Ayrıca ikinci soruyu da anladım açıklamanız sayesinde çok teşekkür ederim yeniden bu site olmasa o bilgi açık kalacaktı.

Sizin kullanımınıza bağlı bu. Örneklerinizde float olarak tanımlamanızın bir soruna neden olacağını düşünmüyorum. Yine de ++ ve -- operatörlerini int’lerde kullanmaya özen gösterin bence. Başka örneklerde int yerine float kullanmak sorunlara neden olabilir. Bunların ayrı tip olmasının nedenleri var. Tamsayı gereken yerde int, ondalık sayı gereken yerde float kullanın.

Neden C++ hızlı ve güçlü olduğu kadar düşük seviyeli?
Neden Python C++ kadar hızlı ve güçlü olmadığı halde yüksek seviyeli?
Seviye ile gücün bir ilişkisi var mı?

Öncelikle buna cevap verme gereği duydum. Seviye ile gücün bir ilişkisi yoktur. Seviye demek, makineye ne kadar yakın olduğudur. Makineye ne kadar yakınsa o kadar düşük seviyelidir bir dil. Örneğin; C ve C++'ta doğrudan RAM ile ilgili işlemler yapabiliriz, pointer’ları değiştirebiliriz. Ancak daha üst seviye dillerde bunu dolaylı yollardan yaparız. Ancak üst seviye bir dil de alt seviye bir dil kadar güçlü olabilir. C ve C++'ta yapabildiğiniz her şeyi Python’da, Ruby’de ya da Perl’de yapabilirsiniz. Hatta bu dillerdeki kolaylaştırıcı yapılar sayesinde bazı şeyleri çok daha kolay yapabilirsiniz.

Sanırım siz hız ve seviye arasında doğru bir ilişki kurdunuz. Ancak bu ilişki terstir. Genelde alt seviye diller üst seviye dillerden daha hızlıdır. Bu da gayet doğaldır. Üst seviye diller, yazımı kolaylaştırmak için hızdan fedakarlık ederler. Ancak bu dillerin amacı zaten en başta hız değil, geliştirme sürecini iyileştirmektir.

1 Beğeni

main’in return type’inin cin’le veya programin acik kalmasiyla alakasi yok. return kullanimiyla da alakasi yok.

Senin yukariya yazdigin kod C++ kodu degil. Dedigimi yaparsan kullandigin compiler’in da ayni seyi soyledigini goreceksin.

Hatirlatma: “main’in return tipini belirt” demedim, “derleyicinin butun uyarilarini ac” dedim.

Bir programlama dilinin detayları arttıkça zorlaşıyor. Mesela sanırım C++'ta bir nesneyi kullanabilmek için ilklendirmek gerekiyormuş. Bu bizim işimizi yapım aşamasında zorlaştırır, ancak yeri gelince işimizi kolaylaştırabilir de. Sadece iş olsun diye eklenmemiştir herhalde…

1 Beğeni

“Ilklendirmek” ne demek bilmiyorum ama initialize etmek sart degil (otomatik olabiliyor) fakat declare etmek gerekiyor.

Ve evet, aynen, dusunulmesi ve yazilmasi gereken ekstra bir parca kod olmakla beraber yapilmak istenen bir seyi bilgisayara aktarip kontrolunun otomatik olarak yapilabilmesini sagladigi icin isi kolaylastiran bir sey.

Eklenen degil, cikartilan bir sey. (Eklenen sey tur bilgisi, yukaridaki ayni argumana sahip.)