Kız arkadaşım yüksek matematik öğreniyor, onun için bir yığın ile bir hesap makinesi yazmak için 15 dakika harcadım | Güç Projesi

Yazar | Genius Programı YUAN

Sorumlu Editör | Yu Yan

Baş resmi | Oriental IC'den indirilen CSDN

Üretildi | CSDN (ID: CSDNnews)

Önsöz

Kız arkadaş, "Yüksek bir sayı elde etmek çok zor. Son zamanlarda çok çalıştığımı görünce, beni mutlu etmek için bana bir hediye verebilirsin. Tahmin et ne istiyorum" dedi.

Kitaplardan ayakkabılara, elektronik ürünlere ve nihayet günlük ihtiyaçlara kadar uzun bir süre düşündüm, her şeyde eksiklik olmadığını hissettim ve sonra ona: "Ne vermek istiyorsan onu vereceğim" dedim.

Tahmin etmemde ısrar etti: "Hayır, bir hediye söylemelisin ve bu hediyeyi kendin yapmalısın."

Bu yüzden ciddileştim, telefonumu aldım ve birkaç dakikalığına Taobao'da alışverişe gittim, ama yine de eksiklikleri anlayamadım. Sonunda gerçekten bir yol kalmadı: "Pekala, gerçekten bir şey göndermemi istiyorsan, o zaman sana yardım ederim. Hesap makinesi yazın "

Makalenin başlığı sadece bir hile ... İletişim teknolojisini seven öğrenciler olarak ayaklarımızı yere basmalıyız, böylece makalenin içeriğinin kuru olmasını sağlayacağım!

Tasarım prensibi

Girdi infix aritmetik ifadesine göre, yığın çerçeve yapısı sonek ifade çıktısına dönüştürmeyi gerçekleştirmek için kullanılır ve ardından sonek ifadesi çıktı sonucunu hesaplamak için değerlendirilir. Son olarak bir hesap makinesi tasarlandı.

Uygulanabilir kapsam: + - * /% tamsayı ondalık negatif sayı

Tasarım fikirleri

Mantıksal tasarım

1. İki yığın, yığın yığını ve yığın Düğümü oluşturun

  • Yığın yığını, bir karakter dizisini depolamak ve infix ifadesinin öğelerini karakterler biçiminde depolamak için kullanılır.

  • Düğüm yığını, infix ifadesinin öğe değerini ve her öğe işleminden sonraki değeri depolamak için kullanılan çift duyarlıklı kayan nokta dizilerini depolamak için kullanılır.

2. Aşağıdaki iki işlevi ve ilgili yığın ve pop işlemlerini tasarlayın.

Mtf_function işlev tasarımı

(Yığın yığın)

(1) Bir işlenenle karşılaşılırsa, doğrudan çıktı alın.

(2) Bir operatörle karşılaşırsak, onu yığına koyarız ve bir açılış parantezi ile karşılaştığımızda onu yığına koyarız.

(3) Sağ parantezle karşılaşılırsa, yığın öğesini açın ve sol parantezle karşılaşılıncaya kadar atılan operatörü çıktı olarak alın. Açılış parantezinin yalnızca açıldığını ve çıktı vermediğini unutmayın.

(4) ("+", "*", "(") vb. Gibi başka operatörlerle karşılaşırsanız, daha düşük öncelikli bir öğe bulana kadar (veya yığın boş) öğeyi yığından çıkarın. . Bu öğeleri patlattıktan sonra, karşılaşılan operatörler yığına itilecektir. Unutulmaması gereken bir şey, yalnızca ")" "(", diğer durumlarda ortaya çıkmayacağız " (".

(5) Girişin sonu okunursa, yığındaki tüm öğeler sırayla açılır.

Caculate fonksiyon tasarımı

(Yığın, Düğüm yığınıdır)

1) İfadeyi çaprazlayın, karşılaşılan sayılar önce yığına konur

2) Sonra "+" gibi işlem operatörünü okuyun, yığındaki üst ve sonraki öğeyi açın, ilgili işlemi gerçekleştirin ve hesaplama sonucunu yığına itin.

3) Sonraki öğeyi okuyun ve doğrudan yığının üzerine koyun.

4) "" gibi bir sonraki öğeyi okuyun, yığındaki üst öğeyi ve sonraki öğeyi açın, 85'i çalıştırın, karşılık gelen işlemi gerçekleştirin ve hesaplama sonucunu yığının üzerine itin ... vb. Nihai değer, yığının en üstünde saklanır.

Ondalık nokta için işleme algoritması

  • İlke: İlk olarak, ondalık bir tam sayıya dönüştürülür ve ardından karşılık gelen ağırlığa 10'a bölünür. Ondalık toplamın değerini karşılık gelen ağırlık j = 00,10 ile başlatmak için bir döngü oluşturun ve ondalık noktadan sonraki karakter dizisi öğesinin 0-9 arasında olup olmadığını belirleyin, öyleyse, ondalık noktayı geri taşıyın, toplam = toplam * 10 + karşılık gelen öğe Değer, 10 artı bir olan karşılık gelen ağırlık j, sonraki eleman 0-9'a ait olmayana kadar.

  • Spesifik algoritma aşağıdaki gibidir

  • Negatif işaretlerin ele alınması

    Negatif işaretin konumu, karakter dizisinin ilk öğesi veya sol parantezden sonraki öğedir. Eksi işareti "-" ile karışıklığı önlemek için, karakter dizisinin ilk öğesinin veya sol parantezden sonraki öğenin "-" olup olmadığına karar vererek eksi işaretini bulun ve "M" ile değiştirin. Sonekten son eke dönüştürülürken öğe "M" ise, "-" çıktı. Son ekin değeri hesaplanırken, eleman "M" ise, sonraki eleman değeri (ondalıklar dahil) işlemden önce zıt sayıya dönüştürülecektir.

    Ana program akış şeması ve her modülün çağrı ilişkisi

    Fiziksel tasarım

    1. Hafızadaki sürekli depolama alanı dizisinin gerçekleştirilmesine bağlı olarak, C ifadesi, sonek ifadesine son ek için kullanılan karakter dizisi dahil olmak üzere karakter yığını çerçeve yapısını tanımlar

    2. İlgili düğümün anlamı

    3. Yığın işlemi

    4. C bildirimi, sonek ifadesinin değerlendirmesini hesaplamak için kullanılan tamsayı dizisi dahil olmak üzere tamsayı yığın çerçeve yapısını tanımlar.

    5. İlgili düğümün anlamı

    6. Yığın içi ve dışı işlemler

    Ölçek

    1. Test durumları

    2. Test sonuçları

    Kaynak kodu (yorumlarla birlikte)

    Kod C dili sürümünde yazılmıştır ve java sürümü ileride eklenecektir.

    github kod bağlantısı: https://github.com/1170300826

    Orijinal bağlantı:

    https://blog.csdn.net/JAck_chen0309/java/article/details/104841005

    "Bir milyon insan yapay zekayı öğreniyor" un önemli bir parçası olarak, 2020 AIProCon Geliştirici Konferansı Olacak 26 Haziran Çevrimiçi canlı yayın aracılığıyla geliştiriciler, mevcut AI'nın en son teknoloji araştırması, temel teknolojisi ve uygulaması ve iş vakalarının pratik deneyimi hakkında tek durakta bilgi edinebilir ve ayrıca harika ve çeşitli geliştirici salonlarına ve programlama projelerine çevrimiçi olarak katılabilir. Bir dizi ileriye dönük aktiviteye ve çevrimiçi canlı yayın etkileşimlerine katılın. Yalnızca on binlerce geliştiriciyle iletişim kurmakla kalmaz, aynı zamanda özel canlı yayın hediyeleri kazanma ve teknik uzmanlarla bağlantı kurma fırsatına da sahip olursunuz.

    Yorum alanında seçilirseniz, 299 yuan değerinde "2020 AI Geliştiriciler Konferansı" için çevrimiçi canlı bir bilet alacaksınız. Parmaklarınızı hareket ettirin ve söylemek istediklerinizi yazın

    Huawei, AI Dragon Ball'u topladı, "Summon Dragon" çok uzakta değil

    Çin insansız hava aracı "Old Paoer" ın anıları

    Jingdong Mall'un arkasındaki yapay zeka teknolojisinin sırrı - anahtar kelimelere dayalı otomatik özet oluşturma

    İnternetin babası yeni tacı teşhis etti, bir efsane: Google'ın başkan yardımcısı ve NASA'da misafir bilim insanı olarak görev yaptı

    Hiç bu kadar kolay olmamıştı: Kafka'ya karşı saldırmanız için sizi 10 dakika alacak!

    Programcılar kodun olmadığı bir çağda işlerini nasıl koruyabilirler?

    Google, Büyük Ölçekli Ölçeklendirilebilir Kapsamlı Güçlendirmeli Öğrenim için Yeni Bir Mimari olan SEED RL Kaynaklarını Açıyor
    önceki
    Şok! İş parçacığını bu şekilde sonlandırmak hizmetin çökmesine neden olur mu?
    Sonraki
    Fuzhou: Kapok sokakları giydiriyor
    iyi ve kötü günde! Çin, benzeri görülmemiş uluslararası insani acil durum operasyonları başlattı
    Yangzhou, Jiangsu'da yüzden fazla itfaiyeci, kapsamlı acil kurtarma yeteneklerini geliştirmek için yağmurda yarışıyor
    Böyle bir uçuş eğitimi, dövüş gibidir! Havayla savaşmak için açık eğitim, gerçek savaş "barut tadı" dolu
    Kunming sokaklarında komadaki bir genci kurtaran beyazlı genç bayanın hikayesi de efsane.
    Xiaohan Bugün
    Fabrika atölyesinden çıkan sanat grubu, Çin ve Nijerya arasında bir halk kültürü alışverişi köprüsü inşa ediyor
    Bahar Şenliği Taşımacılığı sırasında satılan 300 milyondan fazla bilet, 10. gün tatilden önce yolcu akışının ilk zirvesini kutlayacak.
    Salgının denizaşırı ithalatını kesin olarak önleyin: hem "Doğu Şehri Gücü" hem de "Doğu Şehir Sıcaklığı"
    Microsoft bir kişi için bir şirket mi satın alıyor? Sony programlarını kırmak, hacker romanları yazmak ve sağlam program hayatını izlemek
    iPhone11 fiyatı genel olarak düştü; Haro Travel büyük çaplı işten çıkarmaları reddediyor; LineageOS 17.1 çıktı | Geek Headlines
    4 yılda 46 sürüm, Spring Cloud'un geliştirme geçmişini anlamak için bir makale
    To Top