Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von pdelvo
Thema: Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch
Am im Forum: Smalltalk

@herbivore Du hast leider die 20 cent Stücke vergessen ;) Blöderweise aber auf die gleiche Quersumme gekommen, die ich errechnet habe :D

Ich würde aber deine Lösung soweit richtig werten, da wenn man bei dir die 20 cent in das Array einträgt, das, sofern ich mich nicht geirrt habe, richtige Ergebnis herauskommt: 200187 verschiedene Möglichkeiten.

Hier noch meine Lösung, welche aber nicht ganz so effizient ist, aber für 2,50€ noch in absehbarer Zeit ein Ergebnis liefert:


private static void Main()
{
   var limit = 250;
   var counter = 0;

   var coins = new[] { 1, 2, 5, 10, 20, 50, 100, 200}.Reverse().ToArray();

   var currentValue = 0;
   DoCoinTest(limit, ref counter, currentValue, coins);
   Console.WriteLine(counter);
}

private static void DoCoinTest(int limit, ref int counter, int currentValue, int[] coins)
{

   var currentCoin = coins.First();
   while (true)
   {
      if (currentValue > limit) return;
      if (coins.Count() != 1)
      DoCoinTest(limit, ref counter, currentValue, coins.Skip(1).ToArray());
      currentValue += currentCoin;
      if (currentValue == limit) counter++;
   }
}

Ich würde sagen, herbivore ist dran.

LG

Thema: Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch
Am im Forum: Smalltalk

Wieviele verschiedene Möglichkeiten gibt es 2,50€ zusammenzusetzen.

Dabei sind natürlich nur Geldstücke zu benutzen, die auch existieren, alle dürfen aber beliebig oft verwendet werden.
Die Reihenfolge, wie man die Geldstücke zusammenlegt nicht zu beachten. So zählt {2€, 50c} und {50c, 2€} nur einmal.

Als kleine Überprüfungsmöglichkeit kann ich folgende Hilfe geben: Die Quersumme des Ergebnisses ist 18 :)

LG pdelvo

Thema: Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch
Am im Forum: Smalltalk

Ich benutze es bei der zu prüfenden Sequenz. Da kann ich mMn schon von endlichkeit Ausgehen. Ansonsten kann man auf programmatischen Weg nicht überprüfen ob die Sequenz in einer anderen enthalten ist. Bei der Äußeren Sequenz benutze ich Count nicht. Die kann (theoretisch) unendlich sein

Edit: Jetzt wo ich nochmal drüber nachdenke macht die Frage unendlicher Sequenzen eigentlich keinen Sinn. Wenn ich eine Auflistung aller Primzahlen habe, und dort nach {1,7,8} suche würde ich nie zu einem Ergebnis kommen. Das ganze funktioniert nur wirklich wenn die Sequenz auch enthalten ist

Thema: Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch
Am im Forum: Smalltalk

Hallo!

@Programmierhans

Leider enthällt deine Lösung einige Fehler:

  • Du kannst nicht davon ausgehen, dass die Klasse ToString korrekt implementiert, und vorallem kannst du nicht davon ausgehen, dass Die ToString zuordnung eindeutig ist
  • Sei enumerable { 10, 11, 12}, dann ist bei deiner Lösung {1, 1} oder {1, 2} enthalten
  • Du kannst nicht dsavon ausgehen das enumerable endlich ist. Es kann ja z.B. eine Auflistung aller Primzahlen sein, und somit nie enden, und trotzdem ist {2, 3, 5, 7} enthalten

Hier ist meine Lösung:

Sie mag zwar nicht wirklich die schnellste sein, aber ich denke sie funktioniert:


        public static bool All<T>(this IEnumerable<T> items, Func<T, bool> predicate, out int? count)
        {
            int i = 0;

            foreach (var item in items)
            {
                if (!predicate(item))
                {
                    count = null;
                    return false;
                }
                i++;
            }
            count = i;
            return true;
        }


        public static bool Contains<T>(this IEnumerable<T> enumerable, IEnumerable<T> item,
                                       IEqualityComparer<T> comparer)
        {
            var itemCount = item.Count();

            if (itemCount == 0) return true;

            var index = 0;
            foreach (var temp in enumerable.Select(currentStart => enumerable.Skip(index).Zip(item, comparer.Equals)))
            {
                int? count;
                temp.All(a => a, out count);
                if (count == itemCount) return true;
                index++;
            }
            return false;
        }

LG pdelvo

Thema: WebAPI Problem
Am im Forum: Web-Technologien

Das kann nicht funktionieren. Du kannst mit ajax nur auf genau die selbe Website zugreifen. d.h. auch der port muss übereinstimmen. Da führt kein Weg dran vorbei. Wenn alle stricke reißen musst du die Anfragen durch deine Webite durchleiten, sodas sie als eine Art Prox für die WebApi fungiert.

LG pdelvo

Thema: Bestehende Applikation als Dienst installieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Dafür müsstest du die Anwendung in 2 Programme aufteilen. Einen Dienst, der im Hintergrund läuft, und eine Anwendung zum Konfigurieren. Die könnte eine Konfig Datei befüllen die der Dienst dann ausließt und entsprechend arbeitet. Ein Dienst läuft in einer anderen Session und kann nicht auf der Oberfläche angezeigt werden.

LG pdelvo

Thema: Farbverlauf: Aktuelle (Zwischen-)Farbe aus gegebenen Start- und Endfarbwert berechnen
Am im Forum: Grafik und Sound

Ich verstehe das Problem nicht. Auf der Seite ist eine ziemlich kurze und einfache Lösung für genau das Problem. Es hat mit sicherheit länger gedauert die Frage zu formulieren als es so zu machen wie es dort beschrieben ist.

LG pdelvo

Thema: [erledigt] Threading.Timer nach gewisser Zeit nicht mehr am "ticken" [==> wurde vom GC abgeräumt]
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

Der Timer hört auf zu ticken, wenn er vom GC aufgeräumt wird.

Du musst eine Referenz auf ihn im Code behalten.

LG pdelvo

Thema: Suche nach verknüpftem Programm eines Dateitypes!
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

Wenn du das brauchst um die Datei mit diesem Programm zu öffnen funktioniert das auch einfacher. Mit Process.Start() kannst du das Standardprogramm öffnen.

LG pdelvo

Thema: CPU Takt auslesen (inkl. Verändung am BCLK und beim Turbo-Modus)
Am im Forum: Rund um die Programmierung

Ich glaube nicht das sich das auslesen lässt. Du könntest kurz die CPU belasten während du den Takt ausließt. Eine Datenbank zu pflegen wird auch nichts bringen, weil sich der Multiplikator (bei einigen Modellen) verändern lässt.

LG pdelvo

Thema: Parser für mathematische Formeln
Am im Forum: .NET-Komponenten und C#-Snippets

Wenn du die gewünsche Syntax ein wenig änderst ist es ziemlich einfach. Wenn du auch mit If(Bruttoumsatz, 0, 0, Nettoumsatz / Bruttoumsatz) zufrieden bist kannst du das ziemlich einfach ergenzen.

Einfach zu den Funktionen eine neue "If" Funktion hinzufügen

new Function("if",   If)

Und diese dann so definieren:


        static double If(double[] arguments)
        {
            if(arguments == null || arguments.Length != 4) throw new ArgumentException("arguments");
            return Math.Abs(arguments[0] - arguments[1]) < arguments[0]*1e-15? arguments[2] : arguments[3];
        }

Und schon funktioniert es.

Edit: Da muss ich gleich noch etwas kritik loswerden. Der ConditionalParser ist für Fließkommazahlen so wie er jetzt ist nicht geeignet. Zahlen mit == zu vergleichen ist keine gute idee, aufgrund der Ungenauigkeit die dadurch auftritt, wie der Computer diese Zahlen im Speicher hällt. Wenn man versucht im Beispielprogramm "1.9 - 0.9 == 1" zu prüfen, so ist das Ergebnis false.

Zahlen vergleicht man am besten so wie ich es im oberen Code getan habe. Differenz bilden, den Absolutwert nehmen, und dann prüfen ob der Unterschied der Zahlen so klein ist,dass man sie als "gleich" ansehen kann
Lieben Gruß
pdelvo

Thema: Festellen, ob sich eine Methode geändert hat
Am im Forum: Rund um die Programmierung

Zitat von Quaneu
Am liebsten wäre es mir, von einer Methode einen Hash zu speichern und zur Laufzeit diesen zu vergleichen, doch ich finde keine Möglichkeit.

Die Idee finde ich interessant. Du kannst per Reflection an den Byte Code einer Methode kommen, und davon einen hash berechnen. Du kannst dir a für Tests ein Attribut schreiben mit dem aktuellen hash drin, und in dem Test prüfen, ob er noch Übereinstimmt.

An den Bytecode kommst du mit MethodInfo.GetMethodBody().GetILAsByteArray()

LG pdelvo

Thema: Schnittstelle nur für COM sichtbar machen...geht das?
Am im Forum: Rund um die Programmierung

Wenn du nicht zwei mal kompilieren möchtest wäre das enifachste einfach die member aus Visual Studio zu verbergen. Natürlich sind sie trotzdem noch da, werden aber im IntelliSense nicht mehr gelistet:


[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
[ComVisible(true)]
object[] GetFoos(ref object bar); 

LG pdelvo

Thema: Ereignis abfangen beim Wechsel zw. EXCEL und Applikation
Am im Forum: Office-Technologien

Mit dem FileSystemWatcher kannst du ganz einfach erkennen, dass eine Datei geändert wurde.

LG pdelvo

Thema: [erledigt] LINQ - Häufigstes Element in einem Array finden
Am im Forum: Datentechnologien

So ganz verstanden habe ich jetzt nicht was du willst, aber suchtso GroupBy?

col = Lines.GroupBy(elem => elem).OrderByDescending(elem => elem.Count()).Select(elem=>elem.Key).First();

Thema: Videoplayer mit Spurwahl bzw. externen Player fernsteuern
Am im Forum: Grafik und Sound

Und für eine Nachricht das VLC beenden wurde kannst du ja auf die Process Klasse zurückgreifen und dich informieren lassen wenn ein Prozess beendet wurde.

LG pdelvo

Thema: PHP Syntax erkennen, prüfen und auswerten.
Am im Forum: Rund um die Programmierung

Und was ist mit sowas?


if(($i = 5) > 6){...}

Das Thema ist weitaus komplizierter als du denkst. Was willst du denn damit erreichen?

Thema: Suche Datenstruktur für Bäume
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Eine kleine Ergänzung:

Du kannst einen eigenen Indexer schreiben, und so die Aufrufe etwas verkürzen:


        private class Tree
        {
            public Dictionary<string, Tree> Trees = new Dictionary<string, Tree>();
            public string Value;

            public Tree(string V = "")
            {
                Value = V;
            }

            public Tree this[string index]
            {
                get
                {
                    Tree item;
                    if (Trees.ContainsKey(index)) item = Trees[index];
                    else
                    {
                        Trees.Add(index, item = new Tree());
                    }
                    return item;
                }
            }
        }

Dann verkürzt sich der Aufruf auf



                var root = new Tree();
                root["ich"]["mache"]["was"]["ich"]["will"].Value = "und es funktioniert sogar!"; 

Thema: Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch
Am im Forum: Smalltalk

Hier ist meine Lösung:


class Program
{
    private static void Main()
    {
        for (var i = (int) Math.Pow(2, 10); i < Math.Pow(2, 11); i++) // 11 Stellig im 2er System
            if (i%2 == 0 // Endet im 2er-System auf 0
                && DigitSum(i, 4) == 11 // Quersumme zur Basis 4 = 11
                && DigitSum(i, 16) == 26 // Quersumme zur Basis 16 = 26
                && AlterniteDigitSum(i, 16) == 0) // alternierende Quersumme zur Basis 16 = 0
                    Console.WriteLine(i);
        Console.ReadKey();
    }

    static int DigitSum(int number, int toBase)
    {
        return ToString(number, toBase).Select(a => FromString(a.ToString(), toBase)).Sum();
    }
    static int AlterniteDigitSum(int number, int toBase)
    {
        bool add = false;
        int sum = 0;
        foreach (char a in ToString(number, toBase).Reverse())
        {
            sum += add ? FromString(a.ToString(), toBase) : -FromString(a.ToString(), toBase);
            add = !add;
        }
        return sum;
    }

    static string ToString(int number, int toBase)
    {
        var resultingString = new StringBuilder();

        const string mapping = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

        do
        {
            resultingString.Append(mapping[number % toBase]);
            number /= toBase;
        } while (number > 0);

        return new string(resultingString.ToString().Reverse().ToArray());
    }

    static int FromString(string number, int toBase)
    {
        var resultingNumber = 0;

        const string mapping = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

        foreach (var ch in number)
        {
            resultingNumber *= toBase;
            resultingNumber += mapping.IndexOf(ch);
        }

        return resultingNumber;
    }
}


Die Lösung ist 2006 ;)

Thema: WM_SETTEXT führt nicht dazu, dass die Zielanwendung erkennt, dass der Text sich geändert hat
Am im Forum: GUI: Windows-Forms

Du könntest versuchen per Code in das Fenster zu klicken, einen beliebigen key senden, und dann die rücktaste senden. es kann sein, dass die Anwendung auf Tastendrücke reagiert, und dann ein Flag setzt

Thema: Externe Webseite erwartet Attribute + Wert im Request-Header
Am im Forum: Web-Technologien

Nein da gibt es keine möglichkeit.

Du müsstest die Aufrufe durch deine Anwendung schleusen um da irgend einen header zu benutzen.

Außerdem sieht mir das ziemlich unsicher aus den nutzernamen und das passwort unverschlüsselt zu übertragen (?)

Thema: Suche Variable für Filename oder Methode für optionale Argumente (C# 5.0?)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Die Caller Attribute sind wirklich sehr praktisch. Besonders wenn man mit MVVM arbeitet. Ich benutze das öfters so:

   public virtual class ViewModelBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void SetValue<T>(ref T field, T value, [CallerMemberName]string propertyName = null)
        {
            if (!EqualityComparer<T>.Default.Equals(field, value))
            {
                field = value;
                OnPropertyChanged(propertyName);
            }
        }


        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

   public sealed class ServerViewModel : ViewModelBase
    {
        private MainViewModel _model;

        public ServerViewModel()
        {
        }

        internal void SetModel(MainViewModel model)
        {
            _model = model;

        }

        private string _test1;

        public string Test1
        {
            get { return _test1; }
            set { SetValue(ref _test1, value); }
        }

        private string _test2;

        public string Test2
        {
            get { return _test2; }
            set { SetValue(ref _test2, value); }
        }
        private string _test3;

        public string Test3
        {
            get { return _test3; }
            set { SetValue(ref _test3, value); }
        }

    }

Thema: [gelöst] DllImport einer C Dll: Aufgerufene Funktion hängt
Am im Forum: Rund um die Programmierung

Du kannst Visual Studio als Admin starten. Dann wird deine Anwendung automatisch als Admin gestartet.

LG pdelvo

Thema: Cloud-Speicher? Skydrive, Dropbox, Google Drive & Co - Wer nutzt was?
Am im Forum: Smalltalk

Benutze auch Skydrive und bin sehr zufrieden damit. Nutze ich hauptsächlich um eine zusätzliche Kopie meiner (gekauften) Musik zu haben. habe noch einen "alten" Account mit 25gb freien Speicher, und aktuell noch 20gb extra aufgrind von Office. Über das Limit kann ich nichts sagen. Die Dateien die ich hochlade sind sehr viel kleiner, außerdem müsste ich um 2gb hochzuladen bei meiner Leitung den Rechner ein par Tage laufen lassen

LG pdelvo

Thema: Peer To Peer über Internet
Am im Forum: Netzwerktechnologien

Du brauchst aber auf jedenfall die Möglichkeit als Fallback eine verbindung über einen Server laufen zu lassen. Mein alter Router z.B. ar vom NAT Typ Strikt, und da kannst du Hole Punching vergessen.

LG pdelvo

Thema: Peer To Peer über Internet
Am im Forum: Netzwerktechnologien

Suche mal nach Udp Hole Punching. Aber auch hier darfst du nicht darauf vertrauen, dass es immer funktioniert. Wenn der NAT Typ des Routers Strikt ist funktioniert das nicht, und du brauchst einen Server in der Mitte.

LG pdelvo

Thema: Linq langsamer als normale Schleife?
Am im Forum: Datentechnologien

Zitat von Abt
Verwende bei List<T> Count statt Count()
Count() erfordert einen nochmaligen Durchlauf der Liste => ziemlich unperformant hier.

Das war auf den kommentierten Code bezogen

Das stimmt nicht so ganz. Count() gibt ICollection<T>.Count zurück falls es sich um eine ICollection<T> handelt, sonst ICollection.Count, und wenn es auch keine ICollection ist wird erst iteriert. Da List<T> ICollection<T> implementiert wird bei eine List also nicht iteriert, sondern intern auf Count zurückgegriffen

LG pdelvo

Thema: JSON Parser deserializing Problem
Am im Forum: Web-Technologien

Ob das eine Ausnahme ist oder nicht interessiert JSon.net recht wenig. Dadurch ist das Json invalid und kann nicht geparst werden

Thema: Text in der Taskleiste anders als in der Titelleiste bzw. gar keine Titelleiste
Am im Forum: GUI: Windows-Forms

Hier wird eine Lösung gegeben. Ich weiss nicht ob es funtkioniert:

Remove title bar text of a window but keep status bar text

Thema: [erledigt] Software Pattern - Prüfen, ob Interface implementert wird?
Am im Forum: Rund um die Programmierung

Resharper emfpiehlt übrigens das selbe.

LG pdelvo