Çö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
186
Çözümler
1
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 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.
 

Technopat Haberler

Yeni konular

Geri
Yukarı