Çözüldü C++'ta daha kısa kod yazma

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

RSK06

Hectopat
Katılım
29 Aralık 2020
Mesajlar
2.285
Çözümler
4
Daha fazla  
Cinsiyet
Erkek
Bu kodun daha kısa bir versiyonu var mı acaba?
Yazdığım kod gereksiz uzun mu? Derste soru olarak verildi, ona göre göndereceğim. Daha iyisi varsa söyler misiniz?

1623344789716.png

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

int main ()
{
    int num;
    do {
    cout << "Number:";
    cin >> num;
    } while (num >= 8 || num <= 1);

    for (int i = 1;i<=num;i++){                                                                       
        for (int k =num-i;k>0;k--)
            cout << " ";
            for (int j = 1;j<=i;j++){
                cout << "#" << "#";
            }
            for (int i = 0;i<=2;i++){
                cout << " ";
            }
            for (int j = 1;j<=i;j++){
            cout << "#";
            }
          
        cout << "\n";
    }
}
@Vavien.
 
Çözüm
İç içe 3 döngü görüyorum. Biri satır, diğeri sütun olmak üzere iç içe 2 döngü ile yapılabilir.

3 döngüyü gördüğüm an kodu okumayı bırakıp kendim yazdım. Şu anda baktığımda ise kodun pek okunaklı değil. Hem karakterler arası, hem de satırlar arası boşluk bırak. Birbiriyle çok da alakalı olmayan satırları ayırmayı tercih ediyorum ben.

Değişkenleri ilklendir.
\n yerine std::endl kullan.
Yazım denetimi kullandığın için mi bilmem, kodda döngüler kaymış, 3 tane gözüküyordu. Ama 2 taneymiş. Yine de neredeyse tamamen aynı olan döngüleri aynı şekilde (parantezli veya parantezsiz) yapmanı tavsiye ederim.
i olan döngü içinde yine i olan döngü tanımlamışsın, yapma.
Aradaki boşluk 2 tane (veya daha fazla) ise döngü yerine 2 boşluk uzunluğunda bir metin yazdırmak daha mantıklı.

Genel olarak güzel kod. Benim aklıma gelen ilk şey buydu ve daha performanslısı varsa da çok farklı olacağını sanmıyorum. # yazdıran döngü aynı olduğu için lambda falan kullanılabilir belki.

Kod:
#include <iostream>

int main() {
    auto n{ 0 };
    auto m{ 0 };
    std::cin >> n;

    for (auto i{ 1 }; i <= n; ++i) {
        m = n - i;

        for (auto j{ m }; j > 0; --j)
            std::cout << " ";

        for (auto j{ 0 }; j < i; ++j)
            std::cout << "#";

        std::cout << " ";

        for (auto j{ 0 }; j < i; ++j)
            std::cout << "#";

        std::cout << std::endl;
    }

    return 0;
}
Malloc bellekten yer alma, dinamik olarak boyut belirtebiliyorsunuz.
Free o alınan yeri bırakmak için. Aslında alındığında hata olup olmadığı kontrol edilmeli.
Memset ise bir bellek konumunu bir değer yapıyor.
Printf yazdırma, scanf okuma.
Pointer bilmiyor olabilirsiniz. Onu basitçe açıklayabileceğimi sanmıyorum.

1623360987459.png


Kendi kodumu paylaşmıştım nedense 23% verdi anlamadım gitti.
Yani kod çalışıyor sorun da yok sanırım istedikleri gibi yapmadığım için böyle oldu.
 
Son düzenleme:

Yeni konular

Geri
Yukarı