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 ingram333
Thema: Binäre Suche in einem Telefonbuch [solved]
Am im Forum: Rund um die Programmierung

aha, so geht das also. Danke hat wunderbar geklappt!

Ist zwar sicher nicht die beste Telefonbuch Suche die jeh geschrieben wurde,
aber sollte reichen zum bestehen.

Danke noch mal für eure Zeit.

Thema: Binäre Suche in einem Telefonbuch [solved]
Am im Forum: Rund um die Programmierung

Vielen Dank erstmal für eure hilfreichen Antworten.

Ich hab den ersten Tip (nachdem ich mich erstmal einlesen musste)
mal versuchsweise umgesetzt.


public class Eintrag : IComparable
    {
        string name;
        string vorname;
        string ort;
        long telefonNummer;

       public Eintrag(string name, string vorname, string ort, long telefonNummer)
        {
            this.name = name;
            this.vorname = vorname;
            this.ort = ort;
            this.telefonNummer = telefonNummer;
        }

       // we need to overwrite ToString() to use our own structure
       // and handling the long value
       public override string ToString()
       {
           return String.Format("{0} {1} {2} {3}", this.name,
                this.vorname, this.ort, this.telefonNummer.ToString());
       }
       
      //implementing ICompare for telefon numbers, so they are our new index
      public int CompareTo(object obj)
       {
           if (obj is Eintrag)
           {
               Eintrag a1 = (Eintrag)obj;
               return this.telefonNummer.CompareTo(a1.telefonNummer);
           }
           else
               throw new ArgumentException("Wrong Object Type!");
       }
    }

    
    class Telefonbuch
    {
        static void Main(string[] args)
        {
            
            // first option, sort the array by number
            ArrayList entriesBynumber = new ArrayList();
            entriesBynumber.Add(new Eintrag("Aname", "Anton", "Frankfurt", 03912345678));
            entriesBynumber.Add(new Eintrag("Bname", "Peter", "Aachen", 04912345678));
            entriesBynumber.Add(new Eintrag("Cname", "Franz", "Ulm", 05912345678));
            entriesBynumber.Add(new Eintrag("Dname", "Franz", "Ulm", 01912345678));

            // Sort() now uses the telefon numbers as index thanks to ICompare
            entriesBynumber.Sort();

            foreach (Eintrag e in entriesBynumber)
            {
                Console.WriteLine(e);
            }

            Console.ReadLine();

            
        }
    }


Funktioniert soweit prima, aber wie kann ich das nun in der Eintrag
Klasse für die anderen Suchkriterien auch verfügbar machen? Ich bin
ja nicht so der erfahrene Programmierer, aber rein von der logik kann
ich das doch so nur einmal pro Klasse machen, oder? Also müsste ich
nun verschiedene Eintrag Klassen erstellen und jeweils ein anderes
Kriterium bei ICompare angeben? Geht das ggf. eleganter?

Zur Suche werde ich dann mal String.Compare genauer anschauen, sieht
genau nachdem aus das ich gesucht habe, danke.

Das "long" war in der Aufgabenstellugn vorgegeben... hmm... ich lass
das erstmal so, aber danke für den Hinweis.

Thema: Binäre Suche in einem Telefonbuch [solved]
Am im Forum: Rund um die Programmierung

Hallo Community!

habe eine Aufgabe in der Uni, die ich nicht geknackt bekomme und hoffe
ihr könnt mir ein bisschen auf die Sprünge helfen.

Aufgabenstellung

Zitat
"Gegeben sei die Klasse Eintrag:
public class Eintrag
{
string name;
string vorname;
string ort;
long telefonNummer;
}

Erstellen sie eine Klasse TelefonBuch. Jedes Telefonbuch hat eine Menge von
Einträgen und bietet Funktionen für die Suche nach Einträgen bei gegebener
Telefonnummer bzw. für die Suche nach Telefonnummern bei gegebenen
Werten für name, Vorname und Ort an. Setzen sie dazu (manuel!) binäre Suche ein."

Soweit ich verstanden habe, brauche ich also eine Klasse die Objekte der Klasse
Eintrag irgendwie speichert (array?) und zwei Suchfunktionen bietet: Einmal
Nummer, dafür gibts Name, Vorname und Ort und einmal genau umgekehrt.

Wie man generell eine binäre Suche in einem int[] durchführt ist mir klar,
darum gehts mir hier auch nicht wirklich. Was ich konkret nicht verstehe ist,
wie ich das ganze am besten aufbaue und wie man die binäre Suche auf diese
Einträge (Klassen) am besten anwendet.

Die Einträge in ein Array zu werfen war meine erster Versuch, aber ich kann
bei einer binären Suche ja nur Nummern und keine Strings vergleichen, zudem
besteht das array ja nicht aus einzelnen Werten sondern Objekten (damit komm
ich mal gar nicht klar). Dazu kommt, das je nach Kriterium das Ganze ja gar nicht
alphabetisch sortiert ist (also wenn ich nach der Nummer suche z.B.) muss ich
das dann vorher erstmal sortieren!?

Ich poste hier mal meinen Ansatz, auch wenn der sicherlich nicht so ganz richtig
ist.

Klasse Eintrag:


public class Eintrag
    {
        string name;
        string vorname;
        string ort;
        long telefonNummer;

       public Eintrag(string name, string vorname, string ort, long telefonNummer)
        {
            this.name = name;
            this.vorname = vorname;
            this.ort = ort;
            this.telefonNummer = telefonNummer;
        }
    }

Klasse Telefonbuch:


   class Telefonbuch
    {
       // static test with 5 Entries only
        Eintrag[] entries = new Eintrag[4];

        public Telefonbuch(Eintrag e1, Eintrag e2, Eintrag e3, Eintrag e4, Eintrag e5)
        {
            entries[0] = e1;
            entries[1] = e2;
            entries[2] = e3;
            entries[3] = e4;
            entries[4] = e5;
        }

        public long searchEntry(long number)
        {
            //do something to return correct name, surname and place
        }
        public long searchNumber(string name, string vorname, string ort)
        {
            //do something to return correct number
        }


Meine Versuche, das Array mit den Objekten in ein int[] zu verwandeln zeig ich
mal aus peinlichkeitsgründen lieber nicht, das geht sicherlich eh nicht wirklich so...

Vielen Dank für eure Zeit.

kind regards,
Ingram

Thema: Mit C# die Tastaturabfrage ändern?
Am im Forum: GUI: Windows-Forms

du meinst


 SendKeys.SendWait("(%{F1})");

oder? Geht leider auch nicht... noch eine Idee? Irgendwie seltsam,
scheint immer nur die F-Taste ohne die STRG/ALT zu senden.

Gibts möglicherweise noch eine andere Methode diese Keys
zu senden?

Danke!

Thema: Mit C# die Tastaturabfrage ändern?
Am im Forum: GUI: Windows-Forms

gut soweit hat nun alles geklappt, ich kann problemlos
die Tasten F1, F2,... an meine Anwendung senden und sie werden
auch aktzeptiert.

Was nur nicht funktioniert, ist die Kombination STRG+Fx und ALT+Fx
an die Anwendung zu senden.

Die folgenden Zeilen gehen alle nicht senden einfach nur F2


SendKeys.Send("^({F2})");
SendKeys.Send("^{F2}");

SendKeys.Send("%{F2}");

STRG und ALT scheinen einfach ignoriert zu werden... Jemand eine Idee?
Hab leider googlemäßig nix gefunden.

Danke!

Thema: Mit C# die Tastaturabfrage ändern?
Am im Forum: GUI: Windows-Forms

supi, das wars, danke dir!!!

Thema: Mit C# die Tastaturabfrage ändern?
Am im Forum: GUI: Windows-Forms

ok, habs fast hinbekommen. Mir fehlt nur eine Info, dich ich einfach nicht
ergoogelt bekomme und zwar:

Wo stehen die Keycodes für lParam bzw. vkCode?

Ich würde gerne schauen ob eine taste (z.B. F1) gedrückt wurde und
wenn ja eben statt dessen F1, F2, F3, Fx an das prog senden, aber ich
finde keine Tabelle mit diesen Keycodes (also woher weiß ich was F1 ist?).

Also etwa so:


  int vkCode = Marshal.ReadInt32(lParam);
  if (vkCode == "Wie frag ich hier nach F1?")
  { 
          SetForegroundWindow(calculatorHandle);
                SendKeys.SendWait("{F1}");
                SendKeys.SendWait("{F2}");
                SendKeys.SendWait("{F3}");
                SendKeys.SendWait("{F4}");
                SendKeys.SendWait("{F5}");
}

Thema: Mit C# die Tastaturabfrage ändern?
Am im Forum: GUI: Windows-Forms

sry, war bissl spät gestern

http://blogs.msdn.com/toub/archive/2006/05/03/589423.aspx
http://blogs.msdn.com/toub/archive/2006/05/03/589468.aspx

Thema: Mit C# die Tastaturabfrage ändern?
Am im Forum: GUI: Windows-Forms

klingt super, kannst du mir da ein paar links bzw. suchbegriffe posten?

Merci!

Thema: Mit C# die Tastaturabfrage ändern?
Am im Forum: GUI: Windows-Forms

Hi Community,

kann man mit C# folgendes umsetzen:

Ich möchte das wenn ich die F1 Taste drücke, das bei allen Programmen
statt dessen das Kommando: F1 (0.1s pause) F2 (0.1s pause) F3 ... ankommt.
also alle F-Tasten mit einem kurzem Abstand.

Problem ist, das soll dann bei allen laufenden Programmen so funktionieren,
daher hab ich die Befürchtung das es Kernel Sache ist...

Wenn jemand da ein Beispiel hat (egal welche Sprache, aber am besten C#)
wäre super!

Danke für eure Zeit.

Thema: Problemchen mit der Darstellung einer isometrischen Karte
Am im Forum: Grafik und Sound

achso, das ja nur eine Zeile, lol, hab mehr erwartet, danke nochmal

Thema: Problemchen mit der Darstellung einer isometrischen Karte
Am im Forum: Grafik und Sound

muss ich mich mal einlesen danke, hättest du gütigerweise
einen pseudocode bzw. die nötigen Methodennamen für mich?

Danke für deine Zeit.

Thema: Problemchen mit der Darstellung einer isometrischen Karte
Am im Forum: Grafik und Sound

8o oh man... danke, wieso und wo ich jetzt den strangen Methodenaufruf
her hab kann ich dir auch nicht sagen.

ok, das scheint jetzt so einigermaßen zu klappen (siehe Anhang),
gehe ich recht in der Annahme, das ich jetzt bitblt und masks einsetzen
muss um das schwarz aus den tiles transparent zu machen (damits
halt "richtig" aussieht)?

Thema: Problemchen mit der Darstellung einer isometrischen Karte
Am im Forum: Grafik und Sound

Hallo Leute,

ich versuche mich gerade an einem Map-Editor für ein isometrisches
Spiel und habe mich mal an einer "Diamond" Karte versucht, wie
hier beschrieben:
http://www.djs4life.de/Iso-Tut/Teil2.htm

Jetzt hab ich dann mal eine kleine Anwendung geschrieben, die mir
ein 64x64 grosses Tile als 64x32 grosses rectangle auf mein Form
zeichnet. Klappt auch soweit wunderbar, nur sobald ich versuche
dieses "tile walking" zu implementieren kommt alles andere als
eine wie in dem Tutorial abgebildete Karte dabei raus (es ist eher
ein langer Strick aus Bitmaps, siehe Screenshot im Anhang).

Daher meine Frage, ist die Formel:
PositionX = (X-Koordinate auf Map - Y-Koordinate auf Map) * Breite eines Tiles / 2
PositionY= (X-Koordinate auf Map + Y-Koordinate auf Map) * Höhe eines Tiles / 2

überhaupt korrekt wie im Tutorial beschrieben?

wenn ja hab ich wohl was falsch im code, wäre nett wenn mich wer
drauf stoßen könnte


/* Algorithmus zum erstellen der Diamondkarte */
for(i=0;i≤mapWidth;i++)
{
    for(j=0;j≤mapWidth;j++)
	{
	plotX=(i-j)*(tileWidth/2);
	plotY=(i+j)*(tileHeight/2);
	DrawDiamond(plotX,plotY,g);
		
	}
}
.
.
.
private void DrawDiamond(int offsetX, int offsetY, Graphics g)
{
 	Bitmap MyBitmap = new Bitmap("test.bmp");
 	Rectangle myRec = new Rectangle(offsetX, tileWidth,offsetY,tileHeight);
 	g.DrawImage(MyBitmap, myRec);
}



Gleich noch eine Frage zum gleichen Thema, hat jemand mal ein Beispiel
wie man BitBlt mit C# anwendet um Masked Tiles zu erzeugen? Ich find
immer nur C++ code und den kann ich so schlecht entziffern...

Danke fürs lesen dieses Postings!

Thema: Falsche Verteilung / console.writeln Bug?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

danke für die Aufklärung Jungs, da wäre ich selber nie drauf
gekommen!

Thema: Falsche Verteilung / console.writeln Bug?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

nein, lediglich eine Klasse mit einzelnen Methoden, ich ruf
die Random Methode mehrmals auf, aber sonst gibts nur
einen Methodenaufruf aus der Main herraus auf die gesamte
Verteilungssache.

Thema: Falsche Verteilung / console.writeln Bug?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

also dein Beispielprogramm läuft ohne Probleme...
ich bin echt ratlos was das jetzt sein könnte, weil rein
von der Programmierlogik, sollte doch eine Ausgabe nie
einen externen Einfluss auf eine Schleife etc. haben.

Thema: Falsche Verteilung / console.writeln Bug?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ändert leider nichts, weiterhin mit auskommentierter
Zeile falsch und sobald das COnsole.WriteLine wieder
drin steht, gehts...

*verzweifel*

Thema: Falsche Verteilung / console.writeln Bug?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

gib mir einen guten für das Problem

Thema: Falsche Verteilung / console.writeln Bug?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi folks,

ich hab hier einen ganz seltsamen Fehler in meinem
Code, den ich mir überhaupt nicht erklären kann.

also erstmal der Code:


private static int Randomizer(int startvalue)
		{
			 Random random = new Random();
             return random.Next(startvalue)+1;
		}

 for(i=(tmpkunden/2); i≥0; i--)
			 {
			 	int tmpsorte = Randomizer(5);
			 	//Console.WriteLine("Randomverteiler:" + tmpsorte);
			 	switch (tmpsorte)
			 	{
			 		case 1:
			 			sorte1kunden++;
			 			break;
					case 2:
			 			sorte2kunden++;
			 			break;			 			
					case 3:
			 			sorte3kunden++;
			 			break;			 			
					case 4:
			 			sorte4kunden++;
			 			break;
					case 5:
			 			sorte5kunden++;
			 			break;			 			
			 	}
Console.WriteLine("Kunden Sorte1 nach 1. Verteilung: " + sorte1kunden);
			 Console.WriteLine("Kunden Sorte2 nach 1. Verteilung: " + sorte2kunden);
			 Console.WriteLine("Kunden Sorte3 nach 1. Verteilung: " + sorte3kunden);
			 Console.WriteLine("Kunden Sorte4 nach 1. Verteilung: " + sorte4kunden);
			 Console.WriteLine("Kunden Sorte5 nach 1. Verteilung: " + sorte5kunden);

tmpkunden ist ein festgelegter Wert von 3000

Also, führe ich den Code so aus wie er ist
stimmt die Verteilung nicht, es bekommen immer nur zwei Variablen
Werte zugeteilt oder manchmal keine, aber es verteilt sich nie
relativ zufallsmässig zwischen allen, wie man es von der Random
Methode erwarten würde.

Beispielausgaben:
Kunden Sorte2 nach 1. Verteilung:2401
Kunden Sorte2 nach 1. Verteilung:0
Kunden Sorte2 nach 1. Verteilung:0
Kunden Sorte2 nach 1. Verteilung:0
Kunden Sorte2 nach 1. Verteilung:0

oder

Kunden Sorte2 nach 1. Verteilung:1866
Kunden Sorte2 nach 1. Verteilung:0
Kunden Sorte2 nach 1. Verteilung:0
Kunden Sorte2 nach 1. Verteilung:0
Kunden Sorte2 nach 1. Verteilung:693

und jetzt kommt der seltsamste Fehler den ich jemals hatte:
Sobal ich die auskommentierte Zeile oben im code:
//Console.WriteLine("Randomverteiler:" + tmpsorte);
wieder einschalte, verteilt er plötzlich alles korrekt!

Beispielausgaben:
Kunden Sorte2 nach 1. Verteilung:416
Kunden Sorte2 nach 1. Verteilung:140
Kunden Sorte2 nach 1. Verteilung:240
Kunden Sorte2 nach 1. Verteilung:255
Kunden Sorte2 nach 1. Verteilung:1950

oder

Kunden Sorte2 nach 1. Verteilung:140
Kunden Sorte2 nach 1. Verteilung:416
Kunden Sorte2 nach 1. Verteilung:1805
Kunden Sorte2 nach 1. Verteilung:520
Kunden Sorte2 nach 1. Verteilung:120


Ich habs jetzt 50x mit den zwei verschiedenen codes getestet,
kann mir bitte jemand erklären wie eine simple Console.WriteLine
Anweisung eine derartige Veränderung erzeugen kann?

Oder ist das gar ein Bug in Sharpdevelop?
Oder übersehe ich irgendwas ganz banales!?

Ich benutzte .Net 2.0 und SharpDevelop 2.0

Thema: Kleine Wirtschaftsfunktion (Angebot/Nachfrage)
Am im Forum: Rund um die Programmierung

Hi folks,

ich möchte eine kleine Wirtschaftsfunktion zum
Thema Angebot und Nachfrage basteln, am besten
mal gleich ein Beispiel, das erklärts glaub ich am besten:

1) Wir kaufen ein paar Waren ein

Steel Bought for: 5.00 Amount: 300
Stone Bought for: 6.00 Amount: 300
Wood Bought for: 3.00 Amount: 500

2) Im nächsten Monat verkaufen wir sie nachdem wir
einen Verkaufspreis gesetzt haben

Steel Selling for: 5.50
Stone Selling for: 6.80
Wood Selling for: 5.00


Meine frage nun, wie schreibe ich eine Methode, die den Absatz berechnet,
je nachdem wie hoch ich den Verkaufspreis setze!?

Ein paar ideen hab ich mir schon gemacht:

*man brauch die Nachfrage aller Personen wenns beim EK bleibe (also Max Einkäufer)
* man brauch den Prohibitivpreis (wenns allen zu teuer wird)
* man brauch die Elastizität des Angebots,
also (%Preisänderung / %Mengenänderung) um zu bestimmen
ob sich eine Preissenkung oder Preismehrung positiv auf den Umsatz
auswirkt.

Jetzt müsste man irgendwie noch eine Methode entwickeln um
eben den Absatzunterschied bei Preissteigerung/senkung zu haben...

Jemand ne Idee?

Thema: Scrolling mit GDI+?
Am im Forum: Grafik und Sound

Hi folks!

Ich programmiere gerade an einem "Panzer General/Battle Isle" Clone
http://www.nux-acid.org/newhexfield.gif

Ich suche nun eine Lösung, mit der ich mein Hexfeld (siehe Image) nahezu
beliebig gross machen kann, es aber trotzdem nur in einem ca 500 x 600
pixel Ausschnitt zu sehen ist. Will man den Rest der Karte sehen, soll man in
alle Richtungen scrollen können...

Jemand eine Idee wie das gehen könnte? Hab für GDI+ leider nix gefunden...

Danke!

Thema: A* (Pathfinding) mit Sechsecken?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

jo habs auch gerade rausbekommen, sollte ich mir auchmal angewöhnen...

Danke nochmal

Thema: A* (Pathfinding) mit Sechsecken?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

danke dir, da kann ich mir schonmal alleine ne Menge an
Formatierung und Kommentaren abschaun (*schieltvorsichtigaufseinkuddelmuddel*)

1000 Dank für den Code!

...kleine Frage warum machst du das _ vor manchen Variablen?

Thema: A* (Pathfinding) mit Sechsecken?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hehe, ja ging mir eigentlich primär darum wie du die Hexfelder
aufbaust und speicherst, wollte mal sehen ob das meinem
Kuddelmuddel etwas ähnelt, das mit den Zahlen drin währ halt
ein "nice Feature" um das A* ding schneller zu testen. Ich code
noch nicht sooo lange c#, daher dachte ich mir so mal einen
eine Blick auf einen etwas "besseren" code zu erhaschen

Poste ruhig irgendwann mal, würd mich freuen

Thema: A* (Pathfinding) mit Sechsecken?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

ach, kannst du mir den Code von dem Hexfeld mit der Nummerierung
geben, mit dem du oben das Bild gemacht hast?
Wäre mal interessiert wie sowas von einem Profi umesetzt wird so
zum Vergleich mit meinem Spaghetticode

Ist zudem recht praktisch zum nachvollziehen vom A*.

Thema: Fullscreen mode, aber etwas speziell...
Am im Forum: GUI: Windows-Forms

ok, hast recht, das macht natürlich etwas aus... na dann... an die Vorschläge ran

Thema: Fullscreen mode, aber etwas speziell...
Am im Forum: GUI: Windows-Forms

ja, es ging mir eher darum ob es nicht mit dem Umschalten
der Systemauflösung einfacher wäre, als diese ganzen
Anpassungen zu machen (sind einige Forms...).

Also z.B. aktuelle auflösung = 1024x768
Game startet = Auflösung 800x600
Game endet = wieder zurück auf 1024x768

Falls das wirklich nicht geht oder blödsinn ist, wollte ich mich
schon an seine Vorschläge wagen

Thema: A* (Pathfinding) mit Sechsecken?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

ok, denke dann hab ichs gelöst

Danke dir vielmals, ...man kann User in diesem Forum nicht
bewerten, oder? Ansonsten würd ich dir die absolute
Höchstwertung geben

Danke nochmal!

Thema: A* (Pathfinding) mit Sechsecken?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hab etwas...

Wenn man die Heuristic umstellt auf:


// "Manhattan Distance" - Used when search can only move vertically and 
// horizontally.
GoalEstimate = Math.Abs(xd) + Math.Abs(yd); 

Gibt er einen sinnvollen weg aus:
Starting...
X:0Y:0
X:0Y:1
X:1Y:2
X:1Y:3
X:2Y:4
X:2Y:5
X:3Y:5
X:4Y:5
X:5Y:5

Mich irritiert allerdings das Kommentar:
// "Manhattan Distance" - Used when search can only move vertically and
// horizontally.

Das ja bei mir nicht unbedingt der Fall...