Çözüldü Yazılan kod nasıl geliştirilebilir?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

SubhanXd

Centipat
Katılım
5 Kasım 2022
Mesajlar
161
Merhaba. Soru: Dört pozitif tam sayı A, B, C, D verilmiştir. Verilen kenar uzunluklarıyla bir kare oluşturulabiliyorsa herhangi bir sayının karesini bulun. Aksi takdirde "no" yazdırın.
Yazdığım kod:

C++:
#include <iostream>
using namespace std;

int main() {
 int a, b, c, d;
 cin >> a >> b >> c >> d;
 if (a>0 && b >0 && c>0 && d >0) {
 if (a == b && b == c && c == d)
 {
 cout << a *a << endl;
 }
 else
 {
 cout << "No" << endl;
 }
 }
}

Kod doğru ama site nedense 90 puan veriyor. Kacırdığım veya hatamın olduğu kısım neresi?
 
Çözüm
Kod:
#include <iostream>
using namespace std;

int main() {
   int a, b, c, d;
   cin >> a >> b >> c >> d;
   if (a>0 && b >0 && c>0 && d >0) {
   if (a == b && b == c && c == d)
   {
       cout <<(long long)(a *a) << endl;
   }
   else
   {
       cout << "No" << endl;
   }
   }
}

(long long)(a*a) değil de tam gösterdiğim gibi (long long)a*a yazmanız gerekiyor. Sizin yazdığınız halinde ilk overflow meydana gelip (çarpımın sonucu int sınırını aşıyorsa) sonra long long'a dönüştürme yapılıyor. Parantezsizken ilk a long long'a dönüşüyor, bu sayede işlem güvenli oluyor.
Kenar uzunlugu hepsi sifirdan buyuk degilse No yazdirmiyorsun. ( ilk if blogu )
Bir de soruda "no" demissin kodda "No" yaziyorsun ama bu sorun olsaydi 90 dan dusuk alirdin :)
 
Kenar uzunlugu birbirlerine esit degilse No yazdirmiyorsun.
Bir de soruda "no" demissin kodda "No" yaziyorsun ama bu sorun olsaydi 90 dan dusuk alirdin :)
Çeviride hata olmuş.

Sorunun ekran görüntüsünü paylaşır mısın? Soru tam olarak ne istiyor onu göreyim, gereksinimlerini.
Paylaşamıyorum.Sunucu hatası oluşuyor.

Kenar uzunlugu hepsi sifirdan buyuk degilse No yazdirmiyorsun. ( ilk if blogu )
Bir de soruda "no" demissin kodda "No" yaziyorsun ama bu sorun olsaydi 90 dan dusuk alirdin :)
Aslında o ilk if bloguna gerek yok.Bundan onceki sorularda da pozitif olmasini istiyordu ama ben oyle bir sart yazmiyordum.
 
Kod:
#include <iostream>
using namespace std;

int main() {
   int a, b, c, d;
   cin >> a >> b >> c >> d;
   if (a>0 && b >0 && c>0 && d >0) {
   if (a == b && b == c && c == d)
   {
       cout <<(long long)(a *a) << endl;
   }
   else
   {
       cout << "No" << endl;
   }
   }
}

(long long)(a*a) değil de tam gösterdiğim gibi (long long)a*a yazmanız gerekiyor. Sizin yazdığınız halinde ilk overflow meydana gelip (çarpımın sonucu int sınırını aşıyorsa) sonra long long'a dönüştürme yapılıyor. Parantezsizken ilk a long long'a dönüşüyor, bu sayede işlem güvenli oluyor.
 
Çözüm
(long long)(a*a) değil de tam gösterdiğim gibi (long long)a*a yazmanız gerekiyor. Sizin yazdığınız halinde ilk overflow meydana gelip (çarpımın sonucu int sınırını aşıyorsa) sonra long long'a dönüştürme yapılıyor. Parantezsizken ilk a long long'a dönüşüyor, bu sayede işlem güvenli oluyor.
Sorun çözüldü.Çok teşekkürler.
 

Yeni konular

Geri
Yukarı