Laden...
U
UltraEdit myCSharp.de - Member
Lieferant Dortmund Dabei seit 02.06.2013 57 Beiträge
Benutzerbeschreibung

Forenbeiträge von UltraEdit Ingesamt 57 Beiträge

25.03.2020 - 16:50 Uhr

Oh, OKI...
Vielen Dank Th69...
MODULO 3...(Hatte wohl nen Brett vorm Kopf...)

Sowas wollte ich finden, bzw mit Euch besprechen...
(So ein "Einzeiler" finde ich 1000x besser, als zB.: 36 IF-Abfragen....)

Deswegen suchte ich eine Anregung...

Nochmal vielen Dank dafür...
Lieben Gruß...

25.03.2020 - 16:18 Uhr

^^Huhu,

sorry, falsch ausgedrückt...
(MIT HIGHSPEED meinte ich den Algorithmus,... nicht eine Antwort 😁 )

Auf dem RouletteTisch gibt es ja 3 Spalten:

  • 1,4,7,10...
  • 2,5,8,11...
  • 3,6,9,12...
    (Für die gezogene Zahl 0-36)

WENN ich nun eine 8 ziehe will ich nun auf "Spalte 2" schließen...
...ich könnte ja nun ALLE Zahlen hinterlegen und es zu Fuß erledigen...

Ich suche aber eine Idee, das "mathematisch" zu lösen...
Spalte 1(und alles +3)
Spalte 2(und alles +3)
Spalte 3(und alles +3)
...

Da möchte ich gerne was "ultraschnelles" mit Euch erfinden, beraten...

Viele Grüße...

25.03.2020 - 15:56 Uhr

Hi Zusammen,
Ich bastel gerade an einem Roulette Spiel:
Gerade, Ungerade, 1st, 2nd, 3dr 12, Rot, Schwarz usw. ERKENNEN: Alles KEIN Problem.

Doch nun die SPALTEN:

  • 1,4,7,10...
  • 2,5,8,11...
  • 3,6,9,12...

Das sind ja "einfach nur" die Spalten 1,2,3 (und jeweils +3)

Im Prinzip suche ich ja NUR einen tollen Algorithmus...

So like eine Funktion: getColumn(8) -> Return 2...(8=Zufallszahl)
(Das ganze natürlich so "Highspeed" wie möglich...)

  • Natürlich könnte ich das "zu Fuss" erledigen...ABER
    Vielleicht hat einer eine Idee/Anregung, das in HighSpeed zu lösen 😄

Vielen Dank im Voraus und lieben Gruß...

18.11.2018 - 16:38 Uhr

Hallo Zusammen,
ich hätte gerne eine Frage:

Ich versuche ein JSON-GameSaveFile zu deserialisieren...
Soweit klappt schon alles, ABER, bei einer Struktur habe ich ein VerständnisProblem:

Folgende 2 Struktur-Teile(Arrays?):
(Bei dem 1. klappt es, das 2. verstehe ich leider nicht!)


    "aHM": [
      [ 119000.0, 14000.0, 45000.0 ],
      [ 343000.0, 127000.0, -360000.0 ],
      ...
    ],
    "?=a": [
      [ true, "0x7DCF24586AD976E1" ],
      [ true, "0x163C931B5718FDDB" ],
      ...
    ],

Das 1. Array kann ich problemlos deserialisieren mit:


        [JsonProperty("aHM")]
        public double[][] PlanetPositions { get; set; }

(Ausgabe siehe Screenshot...)

Das 2. Array verstehe ich nicht:
(ich versuche es wie folgt:)


        [JsonProperty("?=a")]
        public SystemSeed[][] PlanetSeeds { get; set; }

(Ausgabe siehe Screenshot...)

SystemSeed löse ich wie folgt auf:


    public class SystemSeed
    {
        public bool? Bool;
        public string String;

        public static implicit operator SystemSeed(bool Bool) => new SystemSeed { Bool = Bool };
        public static implicit operator SystemSeed(string String) => new SystemSeed { String = String };
    }

(Der Code ist geklaut und ich verstehe ihn auch nicht.)

Das Problem: Das Array wird DOPPELT aufgelöst.
(Ausgabe siehe Screenshot...)

Bei diesem Array fehlen ja die Bezeichner...


[ true, "0x7DCF24586AD976E1" ]

WAS muss tun um soetwas aufzulösen?

Vielen Dank im Voraus...
UltraEdit

19.05.2018 - 21:40 Uhr

Ach so, ja stimmt, die Fehlermeldung hab ich nie gezeigt.
Die war "1062 - duplicate entry"...
Was mir ja auch klar ist: Der Artikel 10010 ist ja schon 2x drin.
(In jeder Branch soll der natürlich vorkommen dürfen.)

Was mein Problem war: Wenn ich im Editor in der Spalte "UQ" 2 Haken setzte(auf ArtikelNr UND Branch), warf er den Fehler.
(In der PK Spalte funktioniert das aber so) - Von daher dachte ich ich bin auf Abwegen.

Nun hab ich das "manuell" gemacht und die DB hatte nix zu meckern.

Ist das denn soweit richtig, bzw. macht man das so?(s. Bild)

Der PRIMARY Key ist nun die ID.

Vielen Dank und Grüße...
UltraEdit

18.05.2018 - 15:42 Uhr

Ja, das war ja meine Frage/bzw. Problem:
Wenn ich "ArtikelNr UND Branch" ZUSAMMEN zum UQ mache, knallt es ja...
(Die werden wohl EINZELN betrachtet).

18.05.2018 - 15:30 Uhr

hab ich versucht:

ID - ArtikelNr - Branch
0001 - 10010 - 1
3202 - 10010 - 2
0002 - 10020 - 1

Wenn ich ArtikelNr und Branch zum UQ mache, knallt es schon.

18.05.2018 - 14:18 Uhr

verwendetes Datenbanksystem: <MySQL>

Hallo Zusammen,
ich gerne eine Frage zur MySQL-Datenbank-Planung:

Ich hatte am Anfang eine ArtikelTabelle und eine OrderZeilenTabelle:
(der PrimaryKey(PK) war ArtikelNr, der Join war über Artikel.ArtikelNr = OrderZeilen.ArtikelNr)
(somit konnte ich sicherstellen, das keine ArtikelNr DOPPELT vergeben werden konnte)

Nun hab ich eine neue Anforderung:
Eine Zweigstelle(Branch) soll nun dazu kommen:
Die KANN tlw. die GLEICHEN ArtikelNr'n haben(aber auch andere Preise, oder Lieferdaten)

Somit MUSS ich ja nun wohl:

  • die ArtikelNr'n als PK in den OrderZeilen wegmachen und auf eine Artikel.ID(UQ, AI) umstellen?
  • die Artikel.ArtikelNr UND die Artikel.Branch ZUSAMMEN als PK anlegen?
    (damit es pro Branch KEINE DOPPELTEN Artikel geben kann)

Ist das soweit richtig?(s. screenshot)

Das Zusammenspiel von UQ und PK ist mir nicht wirklich klar?!

Für ein paar Tipps bedanke ich mich im Voraus...

Viele Grüße
UltraEdit

30.01.2018 - 15:49 Uhr

Hi Taipi88,

wir sind ein Großhandel. Die IT Abteilung ist der Hobbyprogrammierer(also Ich). X(
Wenn's knallt bin ich eh der Dumme...(Der Rest kann PCs AN und AUS machen)

Das ganze ist natürlich abgesegnet bzw. gewünscht von der GL.

Den/Meinen Webspace hab ich schon ewig. Damals, als ich noch aktiv in einer IT Firma war, hatte ich eine private Formel1 Wettseite.(Da habe ich mir WebForms beigebracht)
Mein Technikstand war/ist allerdings "UltraEdit", als Entwicklungsumgebung. 😁

Daher auch die Wahl von WebForms... Da hab ich wenigstens ein "wenig" Überblick.

"Sollte" das Ganze irgendwann mal "releasefähig" laufen, soll die Firma auch nen ASPX-Space mieten und ich übergebe denen dann die Files.

Viele Grüße...

PS: Das Thema "Sicherheit" ist natürlich kritisch...
Ich finde es eigentlich auch schon befremdlich, das man bei WebJanssen "einfach" per HeidiSQL von "Außen" auf die DBs kommt...
(Bei Access ging das zB. NICHT von Außen)
Ansonsten(im schlimmsten Fall) geht es hier auch nur um Adressen... Da kannst du auch in Google eintippen: "Zeige mir fast alle Eisdielen in NRW"...
(Dann hast Du auch die selben Daten) 😁

30.01.2018 - 13:09 Uhr

Hi Coffeebean,

ja, ich bin "nur" Hobbyprogrammierer...
Ich bin einer kleinen 30 Mann Firma und wollte in meiner Freizeit ein paar Bestellformulare basteln..

Wir sprechen da von 5-8 Vertretern, 600 Kunden und 3000 Artikeln.
(pro Kunde kommen da so ca. 20-60 Artikel zusammen...
Also so total ca. 25000 FESTE Datenzeilen...
Die Artikel bleiben meistens gleich, nur die Anzahlen und Preise ändern sich.)

Ich hab dafür privat einen kleinen Webspace bei Webjanssen gemietet.

"Ich kann nicht anders" trifft den Nagel schon auf den Kopf 😁
(Oder auch: "Ich kann's nicht besser")

Ich bin aber auch schon ab von Access als DB und hab mich schmerzhaft in MySQL reingefummelt.
(Das war schon einen riesen Kampf für mich, das bei WebJanssen überhaupt zum laufen zu bekommen.)
Ich bin schon fast 50 und Neues Zeug mal kurz lernen ist nicht mehr wie früher X(

Ich wüsste auch gar nicht was ich da als Alternative nehmen sollte...
Denke Webjanssen ist ASPX und ASPX ist für mich "Webforms" 🤔

Ich häng mal nen Foto dran, damit man sieht um welch Riesenprojekt es überhaupt geht 😁

Viele Grüße...

30.01.2018 - 12:18 Uhr

ah, OK, der Fehler war zwischen den Kopfhörern.. 😁

Beim setzen von mehreren Keys:


<asp:GridView ...
   DataKeyNames="ArtikelNr,KundenID,BenutzerID"
</asp:GridView> 

dachte ich man müsste "irgendeinen Trick" im Formatstring machen.. Sowas in der Art von:

  • OldValuesParameterFormatString="original_{0}, original_{1}, original_{2}">
    oder sowas...
  • OldValuesParameterFormatString="original_{0}{1}{2}">

Das war aber alles überflüssig 🤔
Es reicht ein simples:


...OldValuesParameterFormatString="original_{0}">

dann stehen schon einfach alle 3 Parameter zur Verfügung...

<UpdateParameters>
  ....
  <asp:Parameter Name="original_ArtikelNr" DbType="Int32" />
  <asp:Parameter Name="original_KundenID" DbType="Int32" />
  <asp:Parameter Name="original_BenutzerID" DbType="Int32" />
</UpdateParameters>

Damit habe ich nicht gerechnet, das es "einfach" so schon geht 🤔

Nochmal vielen Dank für die Geduld 👍
Viele Grüße
UltraEdit

PS: Deswegen habe ich auch nix gefunden bei Dr. Google, weil niemand nach so einem Schwachsinn wie "original_{0}, original_{1}, original_{2}" suchte 8o

29.01.2018 - 18:55 Uhr

Hallo Zusammen...
muss mein OFFLINE-HTML Projekt leider aufgeben...
Nun geht es vielleicht per ASPX-Server 🙁

Folgendes Problem:
Ich habe einen GridView an einem MySQLDataSource:


<asp:GridView ...
   DataKeyNames="ArtikelNr,KundenID,BenutzerID"
</asp:GridView>

(Wie Ihr seht habe/muss/will ich 3 Keys beachten um z.B. ein UPDATE zu fahren).

Mit EINEM Key Klappt das soweit:


<asp:SqlDataSource ...
  UpdateCommand="UPDATE orders SET Anzahl = ?....
  OldValuesParameterFormatString="original_{0}">
  <UpdateParameters>
    <asp:Parameter Name="Anzahl" DbType="Decimal" />
    <asp:Parameter Name="original_ArtikelNr" DbType="Int32" /> 
  </UpdateParameters>
</asp:SqlDataSource>

Was muss ich im "OldValuesParameterFormatString" setzen um ALLE 3 Keys zu beachten? bzw. im UpdateCommand?

Es mangelt mir hart an Suchbegriffen.

Vielen Dank im Voraus...
UltraEdit...

29.01.2018 - 18:34 Uhr

Danke emuuu:

Das mit dem "Mailto:"-Link is mir klar...
Aber für die Parameter(subject, cc, bcc, usw.) musste ich ja die "TextBoxen" auslesen.. Das geht NICHT ohne JS(hat auch geklappt soweit). falls ich Dich nicht komplett falsch verstanden habe...
(Hat soweit aber alles geklappt)...
Vielen Dank nochmal an alle Helfer 👍

23.01.2018 - 18:14 Uhr

Vielen Dank an alle Helfer bis hier...

Ja, hatte es gestern nicht wirklich gut beschrieben, aber soweit habt Ihr schon richtig geraten. 8)

Ich wollte eine "Offline" Webpage bauen:

  • Index.html (Eine Übersicht über alle Kunden)
  • Von da aus tiefer auf ./Kunden/Kd00001.html.

Eine Art Bestell-Formular.
Der Vertreter muss dann nur noch Anzahl, Preis, Rabatt eintragen und klickt auf "SENDEN".

Ich öffne dann eine EMail und schreibe dort die Bestellinfos rein.

(Der Sinn dahinter: Im tiefsten Sauerland haben die kein Internet, also bleibt die Mail solange im Postausgang liegen, bis sie das nächste mal wieder Internet haben)

Klar, das ganze auslesen der Daten muss ich per JavaSkript machen...
(Hatte ich gestern nicht auf dem Schirm weil ich immer "OFFLINE" dachte. Aber das ganze Funktioniert ja per Browser sowieso)

Soweit hat nun alles geklappt.
Sogar das speichern und laden der FormularFelder per Cookie.

Nun aber das schlimmste:
Ich wollte das ganze Ding auch gerne auf Smartphones und Tablets laufen haben(Android und Co)
Nur auf Android funktionieren die ganzen Links NICHT! X(


<a href="./Kunden/aaa.html">Herr AAA</a>

(bringt Seite nicht gefunden)
auch Versuche mit


"file:///./Kunden/aaa.html"

(usw. brachte alles kein Erfolg)

Ist so eine Verlinkung unter Android überhaupt möglich?

Viele Grüße
UltraEdit

22.01.2018 - 22:00 Uhr

Hallo Zusammen...

gibt es eine Möglichkeit um aus einer OFFLINE-HTML Page eine EMAIL zu erstellen?
Ich habe in der Page zB: TextBoxen: tbEMail, tbKundNr, und eine Menge(1-200 zB.) an TextBoxen tb_ArtikelNr1, tb_Anzahl1, tb_Betreff1, tb_Preis1 (und so weiter...2,3,4,5....)

Nun möchte ich gerne eine EMail daraus Erstellen...

<a href="mailto:Bestellung@Firma.de?subject=tb_KundenNr.Text">
 <input id="btn_Senden" type="button" value="BESTELLUNG SENDEN!" class="btn_Senden" />
</a>

Wie kann ich zB. im "subject" den Inhalt der KundNr.txt auslesen?
(geht das überhaupt?)

Den Body will ich auch füllen( mit den anderen 100-200 TextBoxen)

Wie gesagt, das ALLES OFFLINE in einem Ordner!

Vielen Dank für Tipps/Suchbegriffe im Voraus...

mfg UltraEdit.

09.08.2017 - 18:41 Uhr

Danke für die Info Taipi88...

Hab ich fast geahnt...

Ich bin auch auf die in deinem Link gezeigten 2. Lösung gekommen.


sqlDataSrc.SelectParameters["id"].DefaultValue = myWidget.ID;

Ich hoffte, das es eine "schönere" Lösung gibt, als mit "frei erfundenen Wörtern" weiter arbeiten zu müssen.
Sprich: Aus dem Objekt ein Teil der Properties wieder in SessionVariablen zu pressen.
Schließlich ist ja ALLES immer streng und ordentlich(Klassen, Felder, usw.) 8)

07.08.2017 - 20:22 Uhr

Hallo Zusammen...

Ich benutze eine Klasse(LoggedInUserStempelUhr) als "SessionObjekt".
Dadurch verspreche ich mir "Ordnung und Übersicht" über die benutzten Felder...

Anstatt:
session("dbid")
session("dbuser")
...usw.

Habe ich ALLE Felder "ordendlich" in einer Klasse:


Session["TheUser"] = new LoggedInUserStempelUhr();
(Session["TheUser"] as LoggedInUserStempelUhr).SetUser(dbuser, dbid, dbname, dbpass, true, bIsAdmin);

Zugriff per Code habe ich über(z.B.):


if ((Session["TheUser"] as LoggedInUserStempelUhr).bUserIsLoggedIn) Response.Redirect("wellcome.aspx", false);

  • Soweit so gut...Oder vergewaltige ich schon damit alle gängigen Techniken?

Probleme macht mir nun der Zugriff auf das Session Objekt in einem SQLDataSource:
z.B. im Select des SQLDatasource:


<SelectParameters>
	<asp:SessionParameter DbType="Int32" Name="MiTaID" SessionField="(Session["TheUser"] as LoggedInUserStempelUhr).Login_ID" />
</SelectParameters>

(Das funktioniert leider nicht...)

Wie müsste ich in einem SQLDataSource auf ein Feld der SessionKlasse zugreifen um Ihn als SessionParameter zu benutzen?

Vielen Dank im Voraus und lieben Gruß...
UltraEdit.

29.06.2017 - 23:14 Uhr

Hallo MarsStein und vielen Dank für die Hilfe...
Habe 2 Tage gebastelt um es hin zu kriegen.

Deine Methode 2 hab ich nun zum laufen bekommen 👍

(Methode 1 gefiel mir besser, hatte aber große Probleme es umzusetzen)
(man muss wohl im LoadPage alles immer neu BINDEN, was ich nicht verstanden habe und es immer wieder Abstürze gab)...
(Die SelectCommand="<%# BuildSelectCommand() %>" /> wurde nie aufgerufen...)

Deine Methode 2 habe ich wie folgt umgesetzt:
(Bitte schau auch mal drüber, dass ich es nicht total verrissen habe und riesen Sicherheitslücken gebaut habe) 8)

(Die BasisInitialisierung: Sonst rufen wohl die 3 "Auswahl-Komponenten" bei Veränderung KEIN "SqlDS_Artikel_Selecting()" auf)


    <asp:SqlDataSource
        ID="SqlDS_Artikel" runat="server"
        ConnectionString="<%$ ConnectionStrings:Con %>"
        ProviderName="<%$ ConnectionStrings:Con.ProviderName %>"
        SelectCommand="SELECT * FROM artikelpreise WHERE Gruppen_ID = ? AND Hersteller_ID = ? AND Bezeichnung like ?"
        OnSelecting="SqlDS_Artikel_Selecting">
        <SelectParameters>
            <asp:ControlParameter ControlID = "DDL_Gruppe" Name = "Gruppen_ID" PropertyName = "SelectedValue" Type = "Int32" />
            <asp:ControlParameter ControlID = "DDL_Hersteller" Name = "Hersteller_ID" PropertyName = "SelectedValue" Type = "Int32" />
            <asp:ControlParameter ControlID = "tb_Such_Name" Name = "Bezeichnung" PropertyName = "Text" Type = "String" />
        </SelectParameters>
    </asp:SqlDataSource>

(Der CodeBehind...)


    protected void DDL_Gruppe_DataBound(object sender, EventArgs e)
    {
        DDL_Gruppe.Items.Insert(0, new ListItem("ALLE(*)", "0"));
    }


    protected void DDL_Hersteller_DataBound(object sender, EventArgs e)
    {
        DDL_Hersteller.Items.Insert(0, new ListItem("ALLE(*)", "0"));
    }


    protected void SqlDS_Artikel_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {
        e.Command.Parameters.Clear();

        string command = "SELECT * FROM artikelpreise";
        bool needAND = false;

        if (DDL_Gruppe.SelectedIndex > 0 || DDL_Hersteller.SelectedIndex > 0 || tb_Such_Name.Text.Length > 0)
        {
            command += " WHERE ";
        }

        if (DDL_Gruppe.SelectedIndex > 0)
        {
            DbParameter dbP = e.Command.CreateParameter();
            dbP.DbType = System.Data.DbType.Int32; dbP.ParameterName = "Gruppen_ID"; dbP.Value = DDL_Gruppe.SelectedValue;
            e.Command.Parameters.Add(dbP);
            if (needAND) command += " AND ";
            command += "Gruppen_ID = ?";
            needAND = true;
        }
        
        if (DDL_Hersteller.SelectedIndex > 0)
        {
            DbParameter dbP = e.Command.CreateParameter();
            dbP.DbType = System.Data.DbType.Int32; dbP.ParameterName = "Hersteller_ID"; dbP.Value = DDL_Hersteller.SelectedValue;
            e.Command.Parameters.Add(dbP);
            if (needAND) command += " AND ";
            command += "Hersteller_ID = ?";
            needAND = true;
        }

        if (tb_Such_Name.Text.Length > 0)
        {
            DbParameter dbP = e.Command.CreateParameter();
            dbP.DbType = System.Data.DbType.String; dbP.ParameterName = "Bezeichnung"; dbP.Value = "%" + tb_Such_Name.Text + "%";
            e.Command.Parameters.Add(dbP);
            if (needAND) command += " AND ";
            command += "Bezeichnung like ?";
            needAND = true;
        }

        e.Command.CommandText = command;
    }

  • Mach ich das "richtig" mit den "DbParametern?"
    Vielen Dank im Voraus für ein paar weitere Tipps

mfg UltraEdit

27.06.2017 - 19:12 Uhr

Hallo Zusammen,

ich spiele mit WebForms2.0 mit MySQL-Datenbanken und SQLDataSource-Komponenten.

Ich habe einen ArtikelView(mit Gruppen(+id), Herstellern(+id), Einheiten(+id), usw...) erstellt.

Im Kopf der Page gibt es Comboboxen(ALLE Gruppen, ALLE Hersteller, Alle Einheiten, Artikel(TextBox), usw.)

  • Ich möchte nun nach den "eingestellten Parametern" (aus dem Pagekopf) die entsprechenden Artikel suchen...

  • Es soll aber auch möglich sein zB. aus ALLEN Gruppen, oder ALLEN Herstellen einen ArtikelNamen zu suchen...

  • Oder aus der Gruppe "Toppings" ALLE Kiwi-Toppings ALLER Hersteller zu suchen.
    (Also eine "*" Suche)

Ich habe folgenden Code gebaut:


    <asp:SqlDataSource ID="SqlDS_Artikel" runat="server"
        ConnectionString="<%$ ConnectionStrings:DB_Con %>"
        ProviderName="<%$ ConnectionStrings: DB_Con.ProviderName %>"
        SelectCommand="SELECT * FROM artikelpreise WHERE Gruppen_ID like ? AND Hersteller_ID like ?">

        <SelectParameters>
            <asp:ControlParameter ControlID="DDL_Gruppe" Name="Gruppen_ID" PropertyName="SelectedValue" Type="String" />
            <asp:ControlParameter ControlID="DDL_Hersteller" Name="Hersteller_ID" PropertyName="SelectedValue" Type="String" />
        </SelectParameters>
    </asp:SqlDataSource>

Im "Codebehind" füge ich folgenden Code hinzu(um die "ALLE" Funktion zu bauen:


    protected void DDL_Gruppe_DataBound(object sender, EventArgs e)
    {
        DDL_Gruppe.Items.Insert(0, new ListItem("ALLE(*)", "%"));
    }

    protected void DDL_Hersteller_DataBound(object sender, EventArgs e)
    {
        DDL_Hersteller.Items.Insert(0, new ListItem("ALLE(*)", "%"));
    }

Die Frage nun:
Ist es richtig, dass ich die "SelectedValues" in einen String zwinge um diese mit einem "LIKE %" aus der DB zu holen?
Eigentlich sind die SelectedValues ja INT32 und ich frage sie ja per "=" ab.

Ich habe Sorgen, das das "like" böse Performance kostet.

Was ist der richtige Weg?
(Ich bitte um ein paar Tipps)

Vielen Dank im Voraus...
UltraEdit.

10.02.2017 - 18:17 Uhr

Hi...
haste


pictureBox1.BorderStyle = BorderStyle.FixedSingle;

mal versucht, ob die Box auch an der zu erwartenden Stelle und Größe ist?

01.02.2017 - 15:54 Uhr

^^Es wird ja immer verwirrender...
Ich glaube Du kommst um Sir Rufo's Hinweis (Post #2) nicht drum herum!

01.02.2017 - 15:15 Uhr

Lade doch ein ZipFile hoch?

Deine OutputDatei ist aber noch FALSCH, oder?
Das verwirrt etwas. Habe mit NUR die Letzte Zeile angeschaut:
add t_20 t_8 t_8 (Nennen wir es mal A-B-B)

Dann arbeitet Dein Algo. auch noch nicht richtig!
Richtig wäre doch: A-B-A ?

01.02.2017 - 14:53 Uhr

Hi,
wirklich schlau werde ich auch nicht ganz aus der Frage...

Das Ergebnis soll dann SO ausschauen? 🤔
(bzw.: Wo ist die Outputdatei von der Du sprichst?)


dq avoid ? 0x0000000000000000 ; uninitialised program memory here
dq _Constant0 ? 0x0000000000000000 ; 0
dq _Constant1 ? 0x3FF0000000000000 ; 1
dq t_10 ? 0xffffffffffffffff ; 
dq t_12 ? 0x0000000000000000 ; 0
add t_12 _Constant1 t_10 ; 
mul t_12 t_12 t_10 ; 
sub t_12 t_12 t_10 ; 
mul t_10 t_12 t_10 ; 
add t_10 t_10 t_10 ; 
mul t_10 t_10 t_10 ; 
div t_10 t_10 t_10 ; 
div t_10 t_10 t_10 ; 
div t_10 t_10 t_10 ; 
sub _Constant0 t_10 t_10 ; 
add t_10 t_10 t_10 ; 
natexp t_10 ? t_10 ; 
wbnone ? ? ? ; 
wbnone ? ? ? ; 
wbnone ? ? ? ; 
mul t_10 t_10 t_10 ; 
mul t_10 t_10 t_10 ; 
sub t_10 t_12 t_10 ; 
mul t_10 t_10 t_10 ; 
mul t_10 t_10 t_10 ; 
mul t_10 t_10 t_10 ; 
mul t_10 t_10 t_10 ; 
mul t_10 t_10 t_10 ; 
add t_10 t_12 t_10 ; 
add t_10 t_12 t_10 ; 
add t_12 t_10 t_10 ; 
add t_10 t_12 t_10 ; 
add t_10 t_12 t_10 ; 

24.01.2017 - 15:30 Uhr

Wie wäre es mit einem Keyboard mit Makro-Funktionen(programmierbare Tastenfunktionen)?

Aber auch da solltest Du dich nicht "erwischen" lassen.

Da sind auch schon so manche gebannt worden für...

(Viele GameServer messen den Input mit... Wenn exakt alle 1000ms ein Input kommt, dann bist Du ein Bot und wirst gebannt)...usw.

Ansonsten akzeptiere, wenn Du afk bist log dich aus, fertig 😁

PS: Oder stell dich vor eine Wand und steck ne Nagelfeile in die "Laufen-Taste" und guck wie lange das gut geht 😁

24.01.2017 - 09:57 Uhr

Hi,
nein, der Server kann das nicht feststellen.
Ich kenne das noch von einem Online-Grind-Game(Flyff). Dort wurde ein "GameGuard"(ein extra Service der im Hintergrund lief) mit installiert. Dieser hat das Game auf dem PC vor programmtechnischen Tastendrücken abgeschottet, damit man es nicht automatisieren konnte.

20.01.2017 - 16:32 Uhr

Hi .SyricZ™...

Als Idee, bevor du dich mit "langweiliger" GUI-Pinselei quälen musst, löse das Spielfeld doch erst einmal mit Buttons.
Das ist schnell gemacht und sieht auch einigermaßen "gut" aus. (s. Screen)


this.button1.Font = new System.Drawing.Font("Webdings", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(2)));
this.button1.Text = "\u006E"; // ausgefüllter Kreis
this.button1.ForeColor = System.Drawing.Color.Green;
//this.button1.ForeColor = System.Drawing.Color.Red;

Ich denke mal, dass Deine Gamesteuerung und die KI auch noch in den Kinderschuhen steckt 😁

PS: Ein 4-Gewinnt Spiel ist standardmäßig 7x6 Felder. 8)

10.01.2017 - 00:34 Uhr

^^Hatte damals(als es die Zusatzzahl noch gab) eine RunesOfMagic-Lotto-Wett-Website.
Dort konntest du IngameGold verwetten auf Lotto.
(Konntest Gold per Briefkasten zu mir senden und das wurde auf Dein WebSiteKonto aufgeladen)
Zusatzzahl(1-49) UND Superzahl(0-9) ergab die Gewinnzahl...
Also min. (1)(0) bis max. (49)(9) == 10-499 (Gewinnchance 1:489)
(Volltreffer == Jackpot, sonst Nächster DRAN == 90% vom Einsatz)

War ein großer Erfolg mit vielen Tippern 😁

10.01.2017 - 00:09 Uhr

^^Um Gottes Willen, ich wollte auf keinen Fall meckern, dein Code is der Hammer...1000% OOP 👍
Aber ich kann mit den "Anfängern" mitfühlen und bin sicher, dass ER damit VÖLLIG überfordert ist 😁

09.01.2017 - 23:48 Uhr

Hi Reezon...

falls Du(als Anfänger), nach Sir Rufo's Code, noch im Koma liegst und verzweifelst, hab ich hier auch noch einen Codeschnipsel zum Lotto. 😁
(hab den vor ca. 25 Jahren geschrieben) 8o

Das ganze ist natürlich sehr billig und verstößt sicher gegen alle Regeln der OOP.
(aber vielleicht hilft es Dir um ein paar Befehle und Techniken kennen zu lernen)


    class Program
    {
        static void Main(string[] args)
        {
            bool[] zahlen = new bool[49];   // Hilfsarray um bereits gezogene Zahlen zu markieren
            Random rnd = new Random(Environment.TickCount); // Zufallsgenerator(init. mit Millisekunden seit PC-Start)

            Console.WriteLine("*** Lottozahlen ***");
            Console.WriteLine();

            int iTreffer = 0;
            do
            {
                int r = rnd.Next(0, 49);
                if (zahlen[r] == false)     // ist die Zahl noch frei?
                {
                    zahlen[r] = true;       // dann zahl belegen
                    iTreffer++;             // Treffer erhöhen
                }
            }
            while (iTreffer < 6);           // renn solange bis Du 6 Treffer hast
            

            // AUSGABE....Lottozahlen
            Console.Write("Ergebnis:");
            for (int i = 0; i < 49; i++)
            {
                if (zahlen[i] == true)      
                {
                    Console.Write(" " + (i + 1));
                }
            }
             // AUSGABE....Superzahl           
            Console.Write(" (Superzahl: " + rnd.Next(0, 10) + ")");  // Superzahl von 0 - 9
            
            Console.WriteLine();
            Console.WriteLine();
            Console.Write("Press any key to exit...");

            Console.ReadKey();
        }

    }

Viel Spaß beim basteln... 👍

19.10.2016 - 19:30 Uhr

Hallo Zusammen...

und vielen Dank an alle Helfer. 👍

@LaTino:
Danke für den Tipp mit der "vorgefüllten Liste"(mit passenden Werten).
Ich denke das ist die beste Lösung für mich.
Der Rest übersteigt meine mathematischen Kenntnisse leider um 3000%. X(

Viele Grüße
UltraEdit

18.10.2016 - 17:07 Uhr

Ja, die Grundidee sollte sein:

  • Wir sprechen von rund 1000 Karten...(Gesamt)
  • ca. 5% davon werden "MilchBestellenKarten"(10-200 Liter)
  • Die sollen am besten viel im unteren Bereich sein...(so um 70 Liter)
  • Es soll aber auch "seltene" Ausreißer geben...150-200 Liter...

Gibt es für sowas einen schönen 3 Zeiler?

18.10.2016 - 16:37 Uhr

Huhu und Danke für die Antwort...

Ich verstehe leider nicht, warum 20 addierte 50:50 Chancen
nicht SELTENER sind als eine


  random.Next(0, tiefe+1)*10; 

...kann ich da weitere Tipps bekommen?! =)

PS: ich initialisiere "sum" mit 1... also min. 10 lit., oder ? 😁

PPS: Danke für die Themaänderung und Verschiebung in Grundlagen...
(Ich weiß wie man den rndGenerator verwendet...)
(hab mehr ein Statistisches Problem in Bezug auf einer erfundenen Funktion)
(dachte da wär Codereview passender ) 😁

18.10.2016 - 16:15 Uhr

Hallo Zusammen...
Ich habe einen Code verbrochen, den ich leider nicht mehr mathematisch nachvollziehen kann. 8o

Ich will für ein "Eisdielen-Kartenspiel" Karten erstellen...
z.B. eine "Milch bestellen - Karte"

Die Karte soll von z.B. 10 - 200 Liter Milch möglich sein.
(wobei der "obere" Bereich(200Liter) natürlich sehr "seltener" kommen soll, als der "untere" Bereich.)

Ich habe mir folgenden Code ausgedacht:


static public int GetDeepRND(int Tiefe)
{
    int sum = 1;
    for (int i = 0; i < Tiefe; i++)
    {
        sum += rnd.Next(0, 2);
    }
    return sum;
}

und rufe den Code für eine 10-200 Liter Milch-Karte wie folgt auf:


    GameCore.GetDeepRND(20)*10;

Das Ziel soll nun sein:

  • Addiere 20 "50/50 Chancen" und multipliziere mit 10 Litern...

Fragen/Überlegungen:
(20 50:50 Chancen sind im Schnitt eh 10 Treffer..also 100 Liter ?)
(geht sowas besser?)
(macht das Sinn?)

^^Hoffe Ihr könnt mir folgen 🙂

Vielen Dank im Voraus für ein paar Tipps/Kommentare.

UltraEdit...

07.02.2016 - 17:15 Uhr

Vielen Dank an alle "Antworter" bis hier 😃
Ich glaub nun hat es "klick" gemacht.
Der Link von Th69 hat sehr geholfen(nochmal vielen Dank).

Mein Problem war:

  • Ich wollte letztlich eine Klasse im Hintergrund, z.B. "Person", die ÜBERALL bekannt ist.
  • Diese sollte nun ALLE angemeldeten Forms über eine Änderung informieren(damit sie sich aktualisieren).

Die Schlüsselstelle war: subForm.UpdateText += UpdateLabelText; // Ereignis abonnieren

Hier ging e ja immer um Forms, oder Beispiele mit der Kommandozeile...
".UpdateText" kann man also auch in der PERSON-KLASSE hinterlegen und DORT die ganzen "UpdateLabelText"(VON VERSCHIEDENEN/VIELEN FORMS) ANMELDEN.

Anbei ein Stück Code wie ich das nun eingebaut habe:


class Mensch
{
	private int _Arbeitszeit_ms = 0;	
	public int Arbeitszeit_ms
	{
		get { return _Arbeitszeit_ms; }
		private set
		{
			_Arbeitszeit_ms = value;
			OnArbeitszeitChanged(EventArgs.Empty); // Ereignis-Methode aufrufen
		}
	}
  public event EventHandler ArbeitszeitChanged; // Ereignis deklarieren  
  protected virtual void OnArbeitszeitChanged(EventArgs e)
  {
  	EventHandler myEvent = ArbeitszeitChanged;
    if (myEvent != null) myEvent(this, e);
	}
}

// ---------------------------------------------------------

// Die HauptForm...
public partial class frmMain : Form
{
	public frmMain()
	{
		InitializeComponent();
		Mensch.ArbeitszeitChanged += UpdateLabelText; // Ereignis abonnieren...XXXXX 
	}
	void UpdateLabelText(object sender, EventArgs e)
  {
  	lb_Arbeitszeit.Text = Mensch.Arbeitszeit_ms.ToString();
  }
}

// ---------------------------------------------------------

// Eine (von diversen) UnterForms...
public partial class frmArbeit : Form
{
	public frmArbeit()
	{
		InitializeComponent();
		Mensch.ArbeitszeitChanged += UpdateLabelText; // Ereignis abonnieren...XXXXX
	}
	void UpdateLabelText(object sender, EventArgs e)
  {
  	lb_Arbeitszeit.Text = Mensch.Arbeitszeit_ms.ToString();
  }
}

Siehe die XXXXX markierten Zeilen:
Ich habe immer falsch rum gedacht, dass man ein Ereignis der Klasse an die Form meldet.
Aber nein, ich hänge eine Methode der Form, oder ganz viele Methoden von ganz vielen Forms, an ein Ereignis der Klasse.
"PlusGleich" halt 😃

DAS war mein Verständnisproblem...
Nochmal vielen Dank für die Hilfe 😃

07.02.2016 - 13:16 Uhr

...Dieses abonnierst Du in Form1 und aktualisiert entsprechend dort deine Anzeige.

Das Event in der Klasse hab ich, glaube ich, soweit verstanden.

Nur WER, oder WAS in FORM1 abonniert dieses Event?
Ich habe derzeit in Form1 eine private Methode


GUI_Update()
{
   lb_Geld.text = Mensch.Geld;
   lb_Alter.text = Mensch.Alter;
   ...usw.
}

diese könnte ich ja auch "schmutziger Weise" PUBLIC machen und von From2 aus aufrufen(wenn ich in Form2 den Button klicke).
Das wäre aber gegen jede Regel, da Form2 die Form1 ja gar nicht kennen sollte?!

Ich verstehe nicht was in Form1 gebaut werden muss, damit ich das feuern des Events dort mit bekomme.
Wenn das Event dann auslöst(wo und wie auch immer) brauche ich da ja nur noch per: lb_Geld.text = Mensch.Geld das Label zu aktualisieren.

@Buchstabensuppe:
Das Spiel "klau" ich gerade selber 😃
Die Idee kommt von "Punch Club" ein Box Manager/Simulator im Amiga-Style.

06.02.2016 - 16:24 Uhr

Hallo Zusammen,
ich bastele gerade an einem Spiel und habe ein Verständnisproblem.

Es gibt eine Klasse „Mensch“ (Arbeitszeit, Geld, Hunger, usw.).
Die Daten der Klasse werden auf Form1 dargestellt(z.B. Label_Geld.Text).

Auf Form1 ist ein Button „Arbeiten“.
Dieser öffnet Form2 und dort produziere ich Arbeitszeit (z.B. Holz hacken per ButtonClick).

  • Mensch.AddArbeitsZeit(int Sekunden)
    fügt Arbeitszeit hinzu, bucht pro 3600 Sekunden 10 Geld um und setzt entsprechend die Arbeitszeit runter(das klappt soweit auch alles).

Nun möchte ich, dass auf Form1 der „Geldbetrag“ auch AKTUALISIERT wird(während ich in Form2 den Button klicke).

Das heißt: Der ButtonClick auf Form2 soll auch auf From1 den GeldBetrag aktualisieren.

Habe die Std. Threads gelesen…
Kommunikation zwischen 2 Forms und so weiter helfen mir da aber nicht weiter, oder?

Bitte um Schubs in die richtige Richtung…

Vielen Dank im Voraus
UltraEdit

22.10.2015 - 00:12 Uhr

Hi,
um es Dir leichter zu machen: (den GamesDings-Ordner hab ich leider nicht 🙂 )


Process.Start("cmd.exe", "/c subst x: \"C:\\Program Files (x86)\\Microsoft Analysis Services\"");

Das funktioniert(auch wenn es komisch ausschaut).

Du MUSST einen Pfad, der Leerzeichen hat, in Anführungszeichen setzen.
"c:\Test Ordner" : ist EIN Wert/Parameter
c:\Test Ordner : sind ZWEI Werte/Parameter(Ein Space ist halt drin)

Wie Du Oben siehst, benutze ich "Escape Sequences" (das >&quot;<)
(Ich nenne das mal "Ein Zeichen 'escapen'")

  • Damit kann ich IN einem String z.B.: "aa&quot;aaa" auch NOCH ein Anführungszeichen setzen.
    Das führende \ vor dem " muss sein, weil sonst weiß der Compiler nicht, was Du willst.
    (Ein ' " ' ist für ihn ja "StringSTART" und noch ein ' " ' ist ENDE für ihn)
    Wenn nun NOCH EIN ' " ' in die Mitte soll, musst Du es "besonders" markieren.
    (Mit einem '&#39; davor "rafft" er das 🙂)

Im Debugger bzw. QuellCode sieht das alles sehr "merkwürdig" aus...

  • Ein \ ist ja das "EinleitungsZeichen"...ein \ is aber AUCH Dein Pfadtrennzeichen!
    Deswegen benutzt Du ja schon "richtigerweise" ein \ um das Trennzeichen des Pfades() zu "escapen".
    Les mal dort weiter zum Thema "escapen"

Viele Grüße...

21.10.2015 - 20:58 Uhr

Hi Bucane,

der Tipp von UZI war doch, den Pfad in 'Anführungszeichen' zu setzen.


'c:\\Program Files (x86)\\Microsoft Games'

Auch Dein Fehler: "Unzulässige Parameteranzahl - Files" deutet darauf hin.

Ich rate mal, das subst das alles als Parameter erkennt:


c:\\Program
Files
(x86)\\Microsoft
Games

30.09.2015 - 21:00 Uhr

Ah, OK, es hat wohl Klick gemacht...
Danke an Euch Zwei 👍

Der Part mit "Intervall" (also ein "VON" und "BIS" Bereich) hat geholfen.

  • Die Prozente sind halt mein "BIS" Bereich
    Die "VON"s bilde ich mir selber, durch das "aufaddieren".

  • Somit ist die "Reihenfolge" auch total egal(für die Chance selber).
    Den SpeedTipp von schlachtguppy sehe ich damit genauso.
    Größte Bereiche an den Anfang der Liste legen == Beste Chance auf das frühe Abbrechen des Algos.

  • Essenziell ist auf jeden Fall, das die SUMME IMMER ZWINGEND 1, oder 100(in welcher % Form auch immer) ist!

Check, Check und vielen Dank...

Was ich Schade an diesem System finde:
Wenn ich ein neues Item zufügen will(mit z.B. 10% Chance) muss ich ja ALLE Items anpacken und die Chancen entsprechend anpassen. Das könnte sich als fetter Aufwand entpuppen.

Ich versuche gerade ein Liste zu erfinden, wo ich einfach ein neues Item mit x% zufügen kann. Ungeachtet der Summe der Prozente. (Die können dann meinetwegen auch 25000% sein)
Also ich mein, ein 10% Item soll dann in 10% der Ziehungen kommen.
EGAL wie viele 10% Items es gibt in der Liste(selbst wenn es 1000 Stück sind)

Hab aber noch keine wirkliche Idee dazu 🙂

29.09.2015 - 20:26 Uhr

Es hat mich ja nicht in Ruhe gelassen 😜

Unglaublich, aber wahr, Ihr hattet Recht!

auch:

Sortierung kannst du (vermutlich) weglassen.

JA!...

hab nen TestProg geschrieben und 2 Mrd. Items gezogen...

  • Es ist VÖLLIG EGAL ob das "30% Chance Item" am Anfang, oder Ende der Liste* steht.
    (*aus meiner Liste weiter Oben im Thread)

  • Es wir korrekt mit 30% gezogen.(So wie die 5% und 10% auch)
    (mit den 30% Unten/Oben, oder sortiert/unsortiert sieht's entsprechend aus)

Bin ehrfürchtig überrascht und bedanke mich.

PS:
"Gedankentechnisch" check ich das immer noch nicht, WARUM da funktioniert 🤔
Wenn Jemand Lust hat, und mir das mal in "WaldorfForm" erklären will...
(Das frag ich mal lieber "heimlich", weil ich denke, das ich schon leicht die Regeln damit ankratze 🙂
Vielen Dank und Gruß

28.09.2015 - 18:55 Uhr

Gedanklich bin ich immer noch nicht bei Euch.

Basierend auf:

---schnipp
Mein Input ist (zBsp):
Item 1 0,003%
Item 2 0,005%
Item 3 0,001%
...
Item 2000 0,012%

Aufsummiert ergibt es dann natürlich 100%. Liste ist unsortiert.

Und basierend auf diesen Wahrscheinlichkeiten möchte ich mir eines dieser Elemente zufällig ausgeben lassen.

Und der Ansatz von Meinem Code ist dabei einfach, dass ich:
Erzeugen Zufallszahl x (= zBsp 0,33)
Aufsummieren aller Wahrscheinkeiten startend bei Item 1 bis 0,33 erreicht ist
Ausgabe des Items das als letztes dazu addiert wurde.
---schnapp

...könnte ich doch auch eine Liste in dieser Form haben:


item	-	chance
01	-	10%
02	-	10%
03	-	10%
04	-	10%
05	-	10%
06	-	05%
07	-	05%
08	-	05%
09	-	05%
10	-	30%
---------
sum: 100%

nun ziehe ich:
int X= Random(1-100);
...und addiere die Chancen der Items von 1-n bis ich X erreicht habe.

Statistisch sehe ich in 50% der Fälle die Items 1-5 vorne.
X von 1 - 50 - bei 100 Möglichk. - 50%

  • Item10, was mit 30% Chance deutlich ÖFTER kommen sollte sehe ich da schwer im Nachteil.
    X muss ja min. 71-100(30% bei 100 Mögl.) sein, damit Item10 kommen kann?!

...oder denk ich da zu wirr? X(

27.09.2015 - 15:41 Uhr

Huhu...
finde es irgendwie ein interessant Aufgabe.

Ich denke mal schlachtguppy will eine Art "DropTable" bauen...
(bekannt aus vielen SammelGames)

  • Item 1477 fällt mit z.B. 3,5% Wahrscheinlichkeit...
  • Item 733 fällt mit z.B. 0,5% Wahrscheinlichkeit...
  • Item 44 fällt mit z.B. 0,0001% Wahrscheinlichkeit...(Ramaldins Gabe...Gruß von Diablo 3) 😁

Ich hab derzeit auch keinen Lösungsansatz. Wäre aber sehr interessiert am knacken dieser Aufgabe.

  • Diese 2000 Items bekommen eine "rnd.NextDouble()" (0-1) == 0-100%
    (Problem schon hier: ein Item mit 100% MÜSSTE ja IMMER gezogen werden)
    (aber lassen wir die 100 mal raus...)

  • hab schlachtguppy's CodeDemo mal rennen lassen...(auf sortierte liste, auf unsortiert?)...
    Das erschließt sich mir mit keiner Logik.

Hätte jemand noch ne Idee, wie man sowas lösen könnte?

Viele Grüße...

02.07.2015 - 22:52 Uhr

Das zähl ich mal unter "Böswilliger Terror" 😁
Notfalls bei jedem Aufruf vorher prüfen...
Ein Directory.Exists kostet bestimmt nicht mehr Laufzeit(samt dem WorstCase "Mist, nicht Da, muss Erstellen"), als die nächsten 10 "Fails" wegen:

  • if (Directory.Exists(Application.StartupPath + "\Data"))
    was Du ja dann auch jede Sekunde testen müsstet wegen dem TerrorUser 😉
02.07.2015 - 22:29 Uhr

Hi,
Du könntest auch beim Programmstart sofort testen, ob dein "Data" Ordner existiert...

private string _sNeededFolder = Path.Combine(Application.StartupPath, "Data");

Falls NICHT, erzeugst Du Dir den einfach...
(Wenn Dein Prog. eh zwingend damit arbeitet, steht dem statischen Erstellen des Ordners nichts im Weg) 😉

if (!Directory.Exists(_sNeededFolder)) { Directory.CreateDirectory(_sNeededFolder); }

(Das erspart dir auch ein paar "Error"-Fälle, weil es GIBT den Ordner ja IMMER(im Normalfall))

Viele Grüße...

14.06.2015 - 11:46 Uhr

Hallo Chipsland,

Du solltest auch Deine "Berechnung" überdenken:
Du hast sehr viele "Von-Nach" Berechnungsfälle in Deinem Code abgefangen.
(Besonders in Deinem anderen Thread, wo Du immer den "fast immer gleichen" Code schreibst. Sowas ist meist ein "Planungsfehler")
Diesen kannst du sehr einfach umgehen, wenn Du mit einer "BASISWährung" rechnest(z.B. EURO).

Testen wir es mal:

  • Wir haben 4 Währungen...(EUR, USD, YEN, RUB)

  • Wir haben somit 4 Wechselkurse
    EUR - WechselKurs: 1.0000 (BASIS-Währung. Hier nimm ich mal EUR, somit ist es 1.0000)
    USD - WechselKurs: 0.8000 (Hier die "richtigen" Kurse einfügen...
    YEN - WechselKurs: 1.5000 hab mal einfach "testKurse" genommen...
    RUB - WechselKurs: 0.3000 um die Berechnung zu Zeigen.)

  • DU Hast ja 2 ComboBoxen(nennen wir sie mal [cB_Von] und [cB_Nach])

  • Dort kannst Du die ausgewählten WechselKurse lesen...

  • Das "merke" Dir mal für später, falls Interesse besteht, Stichwort: "ComboBox.SelectedItem"

  • Stell Dir einfach erstmal vor, dass Du weist, wenn in:

  • [cB_Von], der "EUR" gewählt ist, Du auch einen Kurs von "1.0000" lesen kannst.

  • [cB_Nach] der "YEN" gewählt ist, Du auch einen Kurs von "1.5000" lesen kannst.

  • Oder wenn irgendwo "RUB" gewählt ist, Du einen Kurs von "0.3000" lesen kannst)...usw.
    (wir wollen ja erstmal Dein "MatheProblem lösen 😉)

NUN ZUM TEST:

Formel:
// WICHTIG...
EingabeWert / [cB_Von].Kurs * [cB_Nach].Kurs
// WICHTIG...

TestFall A:
-Du hast die Berechnung von [EUR) nach [USD] eingestellt und z.B. 1 EUR eingetippt.
= [Eingabe] DURCH [EURKurs] MAL [USDKurs] GLEICH [ERGEBNIS]
: [1] / [1.0000] * [0.8000] == [0.8000] // 1 durch 1 mal 0,8 gleich 0,8 (1 EUR == 0,8 USD)

TestFall B:
-Du hast die Berechnung von [USD) nach [EUR] eingestellt und z.B. 1 USD eingetippt.
= [Eingabe] DURCH [USDKurs] MAL [EURKurs] GLEICH [ERGEBNIS]
: [1.0000] / [0.800] * [1.0000] == [1.2500] // 1 durch 0,8 mal 1,0 gleich 1,25 (0,8 USD == 1 EUR)

TestFall C: (jetzt wirr gemixt)
(es steht IMMER NOCH eine 1 ein der EingabeBox)
-Du stellst die Berechnung von [YEN) nach [RUB](somit ist die "1" in der eingabeBox ja nun 1 YEN).
= wie immer die gleiche Formel: [Eingabe] DURCH [YENKurs] MAL [RUBKurs] GLEICH [ERGEBNIS]
: [1.0000] / [1.500] * [0.3000] == [0.2000] // 1 durch 1,5 mal 0,3 gleich 0,2 ((1 YEN DURCH DURCH 1,5 == EUR] * 0,3[RUB] == [RUB] )

TestFall D: (jetzt wirr gemixt)
(es steht IMMER NOCH eine 1 ein der EingabeBox)
-Du stellst die Berechnung von [EUR) nach [RUB](somit ist die "1" in der eingabeBox ja nun 1 EUR).
= wie immer die gleiche Formel: [Eingabe] DURCH [EURKurs] MAL [RUBKurs] GLEICH [ERGEBNIS]
: [1.0000] / [1.000] * [0.3000] == [0.3000] // 1 durch 1 mal 0,3 gleich 0,3 ((1 EUR DURCH DURCH 1,0 == EUR] * 0,3[RUB] == [RUB] )
^^hoffe ich hab keinen "Vertipper" drin 😃

Wie gesagt, DAS soll NUR Dein "Matheproblem" lösen...
DANACH kommt die C# Technik...
Viel Spaß beim "ab s tra hie ren" 😃)

Viele Grüße
UltraEdit...

14.09.2014 - 20:54 Uhr

Hallo zommi..

bis:

Hey UltraEdit,

konnte ich folgen 😁

Nein, Spaß beiseite... 8)

Vielen Dank für son umfassenden Post.
Da sind Unmengen an super Interessanten Begriffen drin, die ich alle noch erforschen/"erGooglen" werde(n will).

*Lesen geht*
...danke und Gruß 👍

14.09.2014 - 20:00 Uhr

Hallo Zusammen...

...und vielen Dank für Eure Anregungen!

Habe nun folgendes gebaut:


string[] NachName;	// 3422 übliche Nachnamen(keine Doubletten)..aus Datei geladen...
string[] VorName;		// 522 übliche Vornamen(keine Doubletten)..aus Datei geladen...

// ein 2D Prüffeld (Vorname(x) * Nachname(y))
Boolean[,] bCheckFeld = new Boolean[VorName.Length, NachName.Length];

// Dummys für die Pos im bCheckFeld[x,y]
int x = 0; int y = 0;

// Hier gehts los...Loop über die 10.000 Züchter...
	
	// Suche eine freie Pos im Feld...
	do
	{
			x = rnd.Next(0, VorName.Length);
			y = rnd.Next(0, NachName.Length);
	}
	while (bCheckFeld[x, y]);
	
	// Wenn Treffer, dann Feld belegen...
	// und einfach in die 2 Listen greifen mit den x,y Werten...
	bCheckFeld[x, y] = true;
	Züchter.Add(new Züchter(vereinsNr, VorName[x], NachName[y]));
	
// ENDE Loop über die 10.000 Züchter...

Läuft rasend schnell, besonders wegen der gesparten LingQ Function, denk ich...

Nochmal Vielen Dank und bis zum nächsten Problem 😁
Lieben Gruß...
UltraEdit

PS: Nachtrag:
Wie herbivore schon richtig geschätzt hat... Ab 1 Mio. Züchter, also so ca. 50% Füllstand, wird's übel(Laufzeit ca. 3 min.).

Also wenn man ans MAX ran will müsste man wohl doch Richtung 2 geschachtelte Schleifen die ALLE Kombinationen erzeugen, die Liste mischen und dann von Oben nach Unten reingreifen.

14.09.2014 - 02:44 Uhr

Hallo Zusammen...

z.Z. bastel ich an einem Algorithmus zur Erzeugung von "MenschenNamen" 😁

Es ist gegeben:


 string[] NachName;  // 3422 übliche Nachnamen(keine Doubletten)..aus Datei geladen...
 string[] VorName;  // 522 übliche Vornamen(keine Doubletten)..aus Datei geladen...

Das sind (3422*522) == ca. 1,9 mio. Namen(ohne Doubletten)...
Ich erzeuge bis zu 10.000 Namen in "zumutbarer Zeit" mit:


 do {
  vName = tmpVN.Name[globals.rnd.Next(0, tmpVN.Name.GetLength(0))];
  nName = tmpNN.Name[globals.rnd.Next(0, tmpNN.Name.GetLength(0))];
  }
  while (Züchter.Exists(x => x.GetFullName() == vName + " " + nName));
  Züchter.Add(new Züchter(vereinsNr, vName, nName));

klar, das "randomReingreifen" in die Arrays wird immer schlechter, je mehr Namen es werden...
Ich will aber auch nicht die Listen von "oben" nach "unten" "abklappern"
(Nachname 1 bis n + Vorname 1 bis n) (das geht schnell, aber ist mir nicht "zufällig" genug)...

Hat jemand ne Idee wie das (besser) schnell und zufällig geht?

Der Wettbewerb ist ausgerufen 😁
Vielen Dank im Voraus für die Anregungen... 8)

17.07.2014 - 20:13 Uhr

Hi,

wie wäre es mit so etwas in der Art:
(Der User kann zwar noch klicken, aber es passiert nix schlimmes)


// setzen wenn was arbeitet, bzw. fertig ist...
bool bToolStripArbeitet = true/false;


// und dann in den Click-Events Deiner Componenten...
private void WasAuchImmer_Click(object sender, EventArgs e)
{
	// durch Deinen "WaitCursor" sieht der User dann ja, das da nix geht.
	if (bToolStripArbeitet) return;
	
	// ab hier die Aufgaben abarbeiten...
	...
	...
	...	
}

07.06.2014 - 00:23 Uhr

Hallo und erst mal Danke für die Tipps...

Konnte den Tipp von [t0ms3n] soweit umsetzen...
Der "Trick" mit der 0 ist ja schon sehr praktisch.

War iwie auch auf dem Weg dahin,
aber bin bei den ganzen ANDs AND ORs hängen geblieben 🙂
In SQL-Editor "explodiert" das "kurze Statement" zu nem 10ZeilenMonster,
deswegen hab ich das auch nicht hinbekommen. 🙂 (SQL ist echt mein Stiefkind)

Nochmal Vielen Dank an alle und erholsame Pfingsten...

Mit freundlichen Grüßen....
UltraEdit