Tool gesucht



  • Warum sagts Du, er läuft nicht?

    Hier der Auswurf:
    1. 1 - 1 T. und TS. =1
    2. 4 - 3 T. und TS. =7
    3. 6 - 4 T. und TS. =12
    4. 8 - 4 T. und TS. =15
    5. 9 - 3 T. und TS. =13
    6. 10 - 4 T. und TS. =18
    7. 12 - 6 T. und TS. =28
    8. 14 - 4 T. und TS. =24
    9. 15 - 4 T. und TS. =24
    10. 16 - 5 T. und TS. =31
    11. 18 - 6 T. und TS. =39
    12. 20 - 6 T. und TS. =42
    13. 21 - 4 T. und TS. =32
    14. 22 - 4 T. und TS. =36
    15. 24 - 8 T. und TS. =60
    16. 25 - 3 T. und TS. =31
    17. 26 - 4 T. und TS. =42
    18. 27 - 4 T. und TS. =40
    19. 28 - 6 T. und TS. =56
    20. 30 - 8 T. und TS. =72
    21. 32 - 6 T. und TS. =63
    22. 33 - 4 T. und TS. =48
    23. 34 - 4 T. und TS. =54
    24. 35 - 4 T. und TS. =48
    25. 36 - 9 T. und TS. =91
    26. 38 - 4 T. und TS. =60
    27. 39 - 4 T. und TS. =56
    28. 40 - 8 T. und TS. =90
    29. 42 - 8 T. und TS. =96
    30. 44 - 6 T. und TS. =84
    31. 45 - 6 T. und TS. =78
    32. 46 - 4 T. und TS. =72
    33. 48 - 10 T. und TS. =124
    34. 49 - 3 T. und TS. =57
    35. 50 - 6 T. und TS. =93
    36. 51 - 4 T. und TS. =72
    37. 52 - 6 T. und TS. =98
    38. 54 - 8 T. und TS. =120
    39. 55 - 4 T. und TS. =72
    40. 56 - 8 T. und TS. =120
    41. 57 - 4 T. und TS. =80
    42. 58 - 4 T. und TS. =90
    43. 60 - 12 T. und TS. =168
    44. 62 - 4 T. und TS. =96
    45. 63 - 6 T. und TS. =104
    46. 64 - 7 T. und TS. =127
    47. 65 - 4 T. und TS. =84
    48. 66 - 8 T. und TS. =144
    49. 68 - 6 T. und TS. =126
    50. 69 - 4 T. und TS. =96
    51. 70 - 8 T. und TS. =144
    52. 72 - 12 T. und TS. =195
    53. 74 - 4 T. und TS. =114
    54. 75 - 6 T. und TS. =124
    55. 76 - 6 T. und TS. =140
    56. 77 - 4 T. und TS. =96
    57. 78 - 8 T. und TS. =168
    58. 80 - 10 T. und TS. =186
    59. 81 - 5 T. und TS. =121
    60. 82 - 4 T. und TS. =126
    61. 84 - 12 T. und TS. =224
    62. 85 - 4 T. und TS. =108
    63. 86 - 4 T. und TS. =132
    64. 87 - 4 T. und TS. =120
    65. 88 - 8 T. und TS. =180
    66. 90 - 12 T. und TS. =234
    67. 91 - 4 T. und TS. =112
    68. 92 - 6 T. und TS. =168
    69. 93 - 4 T. und TS. =128
    70. 94 - 4 T. und TS. =144
    71. 95 - 4 T. und TS. =120
    72. 96 - 12 T. und TS. =252
    73. 98 - 6 T. und TS. =171
    74. 99 - 6 T. und TS. =156
    TeilerSumme 1 Vorkommen bei 1
    TeilerSumme 7 Vorkommen bei 4
    TeilerSumme 12 Vorkommen bei 6
    TeilerSumme 13 Vorkommen bei 9
    TeilerSumme 15 Vorkommen bei 8
    TeilerSumme 18 Vorkommen bei 10
    TeilerSumme 24 Vorkommen bei 14
    TeilerSumme 28 Vorkommen bei 12
    TeilerSumme 31 Vorkommen bei 16
    TeilerSumme 32 Vorkommen bei 21
    TeilerSumme 36 Vorkommen bei 22
    TeilerSumme 39 Vorkommen bei 18
    TeilerSumme 40 Vorkommen bei 27
    TeilerSumme 42 Vorkommen bei 20
    TeilerSumme 48 Vorkommen bei 33
    TeilerSumme 54 Vorkommen bei 34
    TeilerSumme 56 Vorkommen bei 28
    TeilerSumme 57 Vorkommen bei 49
    TeilerSumme 60 Vorkommen bei 24
    TeilerSumme 63 Vorkommen bei 32
    TeilerSumme 72 Vorkommen bei 30
    TeilerSumme 78 Vorkommen bei 45
    TeilerSumme 80 Vorkommen bei 57
    TeilerSumme 84 Vorkommen bei 44
    TeilerSumme 90 Vorkommen bei 40
    TeilerSumme 91 Vorkommen bei 36
    TeilerSumme 93 Vorkommen bei 50
    TeilerSumme 96 Vorkommen bei 42
    TeilerSumme 98 Vorkommen bei 52
    TeilerSumme 104 Vorkommen bei 63
    TeilerSumme 108 Vorkommen bei 85
    TeilerSumme 112 Vorkommen bei 91
    TeilerSumme 114 Vorkommen bei 74
    TeilerSumme 120 Vorkommen bei 54
    TeilerSumme 121 Vorkommen bei 81
    TeilerSumme 124 Vorkommen bei 48
    TeilerSumme 126 Vorkommen bei 68
    TeilerSumme 127 Vorkommen bei 64
    TeilerSumme 128 Vorkommen bei 93
    TeilerSumme 132 Vorkommen bei 86
    TeilerSumme 140 Vorkommen bei 76
    TeilerSumme 144 Vorkommen bei 66
    TeilerSumme 156 Vorkommen bei 99
    TeilerSumme 168 Vorkommen bei 60
    TeilerSumme 171 Vorkommen bei 98
    TeilerSumme 180 Vorkommen bei 88
    TeilerSumme 186 Vorkommen bei 80
    TeilerSumme 195 Vorkommen bei 72
    TeilerSumme 224 Vorkommen bei 84
    TeilerSumme 234 Vorkommen bei 90
    TeilerSumme 252 Vorkommen bei 96
    Es gibt im Bereich von 0 bis 0 genau 25 PrimZahlen und 51 verschiedene Teilersummen.Program ended with exit code: 0

    funxioniert offensichtlich ...



  • so, hier mein code für zahlwörter. die vorgegebene englische policy funktioniert bis abs(n) < 999'999.99... korrekt (alles darüber dürfte einfach analog zu implementieren sein). die language-policy dürfte bisschen schwierig zu implementieren sein da man ausnahmen in der entsprechenden sprache speziell behandeln muss (siehe fifteen usw). ich hab im codebeispiel gerade eine eigene kleine accuaracy-policy gemacht um zu zeigen wie einfach und flexibel es ist.

    #include <cstddef>
    #include <string>
    #include <limits>
    #include <cmath>
    #include <iostream>
    namespace Numerals
    {
    	typedef ::std::size_t SizeType;
    	typedef ::std::string StringType;
    	struct BasicLanguagePolicy
    	{
    		virtual ~BasicLanguagePolicy()
    		{
    		}
    		virtual const StringType Digit(SizeType Index) const = 0;
    		virtual const StringType Number(SizeType Index) const = 0;
    		virtual const StringType Positive() const = 0;
    		virtual const StringType Negative() const = 0;
    		virtual const StringType Comma() const = 0;
    	};
    	struct LanguagePolicyEnglish : public BasicLanguagePolicy
    	{
    		virtual const StringType Digit(SizeType Index) const
    		{
    			switch(Index)
    			{
    			case 0:
    				return StringType("noutgh ");
    			case 1:
    				return StringType("one ");
    			case 2:
    				return StringType("two ");
    			case 3:
    				return StringType("three ");
    			case 4:
    				return StringType("four ");
    			case 5:
    				return StringType("five ");
    			case 6:
    				return StringType("six ");
    			case 7:
    				return StringType("seven ");
    			case 8:
    				return StringType("eight ");
    			default:
    				return StringType("nine ");
    			}
    		}
    		virtual const StringType Number(SizeType Index) const
    		{
    			if(Index < 10)
    			{
    				return this->Digit(Index);
    			}
    			else if(Index == 10)
    			{
    				return StringType("ten ");
    			}
    			else if(Index == 11)
    			{
    				return StringType("eleven ");
    			}
    			else if(Index == 12)
    			{
    				return StringType("twelve ");
    			}
    			else if(Index == 13)
    			{
    				return StringType("thirteen ");
    			}
    			else if(Index == 15)
    			{
    				return StringType("fifteen ");
    			}
    			else if(Index == 18)
    			{
    				return StringType("eighteen ");
    			}
    			else if(Index < 20)
    			{
    				StringType Temp(this->Digit(Index));
    				Temp.replace(Temp.size() - 1, 1, "teen ");
    				return Temp;
    			}
    			else if(Index < 100)
    			{
    				StringType Temp;
    				switch(Index / 10)
    				{
    				case 2:
    					Temp = "twenty";
    					break;
    				case 3:
    					Temp = "thirty";
    					break;
    				case 4:
    					Temp = "forty";
    					break;
    				case 5:
    					Temp = "fifty";
    					break;
    				default:
    					Temp = this->Digit(Index / 10);
    					Temp.replace(Temp.size() - 1, 1, "ty");
    					break;
    				}
    				SizeType Digit = Index % 10;
    				if(Digit != 0)
    				{
    					Temp.push_back('-');
    					Temp.append(this->Digit(Digit));
    				}
    				else
    				{
    					Temp.push_back(' ');
    				}
    				return Temp;
    			}
    			else if(Index < 1000)
    			{
    				StringType Temp(this->Digit(Index / 100));
    				Temp.append("hundert ");
    				Temp.append(this->Number(Index % 100));
    				return Temp;
    			}
    			else if(Index < 1000000)
    			{
    				StringType Temp(this->Number(Index / 1000));
    				Temp.append("thousand ");
    				Temp.append(this->Number(Index % 1000));
    				return Temp;
    			}
    			else
    			{
    				return StringType();
    			}
    		}
    		virtual const StringType Positive() const
    		{
    			return StringType();
    		}
    		virtual const StringType Negative() const
    		{
    			return StringType("minus ");
    		}
    		virtual const StringType Comma() const
    		{
    			return StringType("comma ");
    		}
    	};
    	template<class T>
    	struct BasicAccuracyPolicy
    	{
    		virtual ~BasicAccuracyPolicy()
    		{
    		}
    		virtual bool IsPositive(T const& Value) const
    		{
    			return Value > static_cast<T>(0);
    		}
    		virtual bool IsNegative(T const& Value) const
    		{
    			return Value < static_cast<T>(0);
    		}
    		virtual bool HasComma(T const& Value) const
    		{
    			if(::std::numeric_limits<T>::is_integer)
    			{
    				return false;
    			}
    			else
    			{
    				return static_cast<long>((Value - static_cast<long>(Value)) * ::std::pow(static_cast<double>(10), static_cast<int>(this->MaxDecimalPlaces()))) != 0;
    			}
    		}
    		virtual SizeType MaxDecimalPlaces() const
    		{
    			return 3;
    		}
    	};
    	template<class T, class LanguagePolicy, class AccuracyPolicy>
    	struct Numeral;
    	template<class T, class LanguagePolicy, class AccuracyPolicy>
    	::std::ostream& operator<< (::std::ostream&, Numeral<T, LanguagePolicy, AccuracyPolicy> const&);
    	template<class T, class LanguagePolicy = LanguagePolicyEnglish, class AccuracyPolicy = BasicAccuracyPolicy<T> >
    	struct Numeral : private LanguagePolicy, private AccuracyPolicy
    	{
    		friend ::std::ostream& operator<< <T, LanguagePolicy, AccuracyPolicy>(::std::ostream&, Numeral const&);
    		typedef T ValueType;
    		typedef LanguagePolicy LanguagePolicyType;
    		typedef AccuracyPolicy AccuracyPolicyType;
    		ValueType Value;
    		Numeral(ValueType const& Value = ValueType())
    			: Value(Value)
    		{
    		}
    		template<class RhsT, class RhsLanguagePolicy, class RhsAccuracyPolicy>
    		operator Numeral<RhsT, RhsLanguagePolicy, RhsAccuracyPolicy>() const
    		{
    			return Numeral<RhsT, RhsLanguagePolicy, RhsAccuracyPolicy>(this->Value);
    		}
    	};
    	template<class T, class LanguagePolicy, class AccuracyPolicy>
    	::std::ostream& operator<< (::std::ostream& Stream, Numeral<T, LanguagePolicy, AccuracyPolicy> const& Num)
    	{
    		if(Num.IsNegative(Num.Value))
    		{
    			Stream << Num.Negative();
    		}
    		if(Num.IsPositive(Num.Value))
    		{
    			Stream << Num.Positive();
    		}
    		T AbsValue = ::std::abs(Num.Value);
    		SizeType IntValue = static_cast<SizeType>(AbsValue);
    		Stream << Num.Number(IntValue);
    		if(Num.HasComma(AbsValue))
    		{
    			Stream << Num.Comma();
    			for(SizeType DecimalPlace = 0; DecimalPlace < Num.MaxDecimalPlaces(); DecimalPlace++)
    			{
    				Stream << Num.Digit(static_cast<SizeType>((AbsValue - IntValue) * ::std::pow(static_cast<double>(10), static_cast<int>(DecimalPlace + 1))) % 10);
    			}
    		}
    		return Stream;
    	}
    }
    template<class T>
    struct MoreDecimalPlaces : public Numerals::BasicAccuracyPolicy<T>
    {
    	virtual Numerals::SizeType MaxDecimalPlaces() const
    	{
    		return 5;
    	}
    };
    int main()
    {
    	Numerals::Numeral<int> MyInt = 523;
    	std::cout << MyInt << '\n';
    
    	Numerals::Numeral<signed> MySigned = -267301;
    	std::cout << MySigned << '\n';
    
    	Numerals::Numeral<double> MyFloat = 12.7348484974;
    	std::cout << MyFloat << '\n';
    
    	Numerals::Numeral<double, Numerals::LanguagePolicyEnglish, MoreDecimalPlaces<double> > MyFloatWithMoreDecimals = MyFloat;
    	std::cout << MyFloatWithMoreDecimals << '\n';
    
    	std::cin.get();
    }
    

    ausgabe:

    five hundert twenty-three 
    minus two hundert sixty-seven thousand three hundert one 
    twelve comma seven three four 
    twelve comma seven three four eight four
    

    kritik und anregungen erwünscht.



  • lol asdfasdfas
    ich dachte gerade "wtf, wo hat er denn das geklaut ... kann doch nicht sein" 😃
    Dann seh ich, dass DU das geschrieben hast und nicht Brax 😉

    brax schrieb:

    Warum sagts Du, er läuft nicht?

    Weil der Header #include <algorithm> fehlt ...
    Sei's drum .... Du brauchst diese Schnick Schnack Header nicht, um Programmieren zu verstehen und deine Aufgabe zu lösen. Weißt du überhaupt, was die einzelnen Funktionen alles können, die du da aufrufst?
    und dann der Umgang mit std:: oder deine globalen Variabeln oder oder oder ...
    Kauf das Buch. Ein gutgemeinte Rat! 🙂



  • brax schrieb:

    Warum sagts Du, er läuft nicht?

    Weißt du überhaupt, was die einzelnen Funktionen alles können, die du da aufrufst?
    [/quote]

    Also, er läuft .. das möchte ich mal festgestellt haben, auch wenn es nicht normgerecht programmiert ist ... nur habe ich eben Schwierigkeiten, die mir selbst gestellte Aufgabe zu erfüllen.

    Ich hab jetzt schon 3 Programmierbücher ...das beste war aus den 80-iger Jahren, Macroprogrammierung mit WordPerfect - das war gaut geschrieben, jede Funktion eine Seite mit Übungsbeispielen und so ... die modernen Bücher haben wenig Tabelle, viel Fließtext und sind für Leute geschrieben, die sich bemühen aus dem Programmieren eine Geheimsprache zu machen. Es werden tausend Begriffe für ein und dieselbe Sache eingeführt, alles halbenglisch und verklausuliert .... Beamtendeutsch ist dagegen noch Lyrik. Ich will ja auch kein Softwareexperte werden, nur ein bischen Spielen mit den Zahlen ....



  • Das es funktioniert ist ja schon mal ein guter Anfang.
    Die halbe Miete sozusagen.

    Wenn Du jetzt noch den überflüssigen Kram entfernst und dem ganzen eine Struktur gibst - mit Funktionen und lokalen statt globalen Variablen - hast Du viel gelernt.



  • Find ich schon mal gut alte Schachteln durch Teens zu ersetzen. Weiter so!

    Temp.replace(Temp.size() - 1, 1, "teen ");
    


  • Alte Schachtel schrieb:

    Find ich schon mal gut alte Schachteln durch Teens zu ersetzen. Weiter so!

    Temp.replace(Temp.size() - 1, 1, "teen ");
    

    xD



  • Hallo brak.

    Zu Verdeutlichung, was ich mit Struktur und "überflüssigem Kram "meine habe ich mal einen Teil Deines Projekts neu implementiert.

    Wie Du siehst sind die globalen Variablen verschwunden und alle Funktionalität ist in Funktionen ausgelagert.
    main() ist klein und übersichtlich.

    Ob Du z.B. die Teilermengen brauchst, die Anzahl der Primzahlen usw. weiss ich nicht. Dann würde sich sicher einiges ändern,
    aber das Prinzip das Problem in einzelne Teilaufgaben zu zerlegen bleibt das gleiche.

    #include <iostream>
    #include <set>
    
    using set_t = std::set<int>;
    
    // Summe der Teiler von n
    // 
    // ignorier constexpr - kann man auch wegmachen.
    // war ein wenig Spielerei mit constexpr und Endrekursion
    constexpr int sigma_1(int n, int k=1, int sum=0){
      return n<k*2 ? sum+n : n%k ? sigma_1(n, k+1, sum) : sigma_1(n, k+1, sum+k);
    }
    
    // Unterschiedlich Teilersummen im Bereich
    // std::set ordnet aufsteigend, keine zwei Werte sind gleich
    set_t teilersummen(int von, int bis){
      set_t ergebnis;
      ++bis; // bis einschließlich "bis"
      for(; von!=bis; ++von){
        const auto s = sigma_1(von);
        if(s != von+1) // wenn nicht prim
          ergebnis.insert(s);
      }
      return ergebnis;
    }
    
    // gibt den Inhalt eines ganzen set_t aus.
    void print(const set_t& s){
      for(const auto& i : s)
        std::cout << i << ' ';
      std::cout << '\n';
    }
    
    int main(){
      const auto res = teilersummen(1, 99);
      std::cout << "verschiedene Teilersummen(ges.: " << res.size() << "):\n";
      print(res);
    }
    

    Glückauf!



  • Hallo Furble Wurble.
    du hast schon gelesen was die eigentliche Fragestellung war?

    Nur "showing off" ist weder konstruktiv noch produktiv.



  • EOP schrieb:

    Hallo Furble Wurble.
    du hast schon gelesen was die eigentliche Fragestellung war?

    Nur "showing off" ist weder konstruktiv noch produktiv.

    irgendwann muss kak aber mal anfangen, sich von fremdem code was abzuschauen. ist ja grausam, was er produziert und wie konsequent er variablen global hält, keine funktionen baut, umständliche verfahren benutzt.


Anmelden zum Antworten