Laden...

Forenbeiträge von Sekkiy Ingesamt 21 Beiträge

14.05.2011 - 15:23 Uhr

So, hier ist meine Lösung. Ich habe allerdings keine neue Idee, d.h. jeder kann eine neue Aufgabe stellen(sofern mein Code als richtig befunden wird).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConwaysGameOfLife
{
  class Program
  {
    public bool Abort { get; set; }
    private bool[,] map;
    private int amount, sleeptime;
    private Thread t;

    static void Main(string[] args)
    {
      Program p = new Program();
      p.Start();
      Console.ReadLine();
      p.Abort = true;
    }

    public void Start()
    {
      do {
        Console.WriteLine("Bitte geben Sie die Zeit in ms zwischen den Generationen an.");
      } while (!Int32.TryParse(Console.ReadLine(), out sleeptime)
        || sleeptime < 1);
      do {
        Console.WriteLine("Bitte geben Sie die Anzahl der Felder ein.");
      } while (!Int32.TryParse(Console.ReadLine(), out amount)
        || amount < 1 || amount > 39);

      map = new bool[amount, amount];

      Console.WriteLine("Wollen Sie die Felder selbst befüllen? (J/N)");
      if (Console.ReadLine().Equals("J", StringComparison.OrdinalIgnoreCase))
      {
        ReadCells();
      }
      else
      {
        RandomizeCells();
      }

      t = new Thread(new ThreadStart(Run));
      t.Start();
    }
    
    private void Run()
    {
      while (!Abort)
      {
        PrintMap();
        try
        {
          Thread.Sleep(sleeptime);
        }
        catch (Exception) { }
        CalculateLife();
      }
    }

    private void ReadCells()
    {
      Console.WriteLine("Bitte geben Sie die lebenden Zellen im Format 'x,y' an.");
      string line;
      do
      {
        line = Console.ReadLine();
        string[] elements = line.Split(',');
        if (elements.GetLength(0) == 2)
        {
          int x, y;
          if (Int32.TryParse(elements[0], out y)
            && Int32.TryParse(elements[1], out x))
          {
            if (x >= 0 && x < amount
              && y >= 0 && y < amount)
            {
              map[x, y] = true;
            }
            else
            {
              Console.WriteLine("Bitte geben Sie eine Zahl im gültigen Bereich ein.");
            }
          }
          else
          {
            Console.WriteLine("Bitte geben Sie eine Zahl ein.");
          }
        }
        else
        {
          Console.WriteLine("Bitte geben Sie die lebenden Zellen im Format 'x,y' an.");
        }
      } while (line != "");
    }

    private void RandomizeCells()
    {
      Random random = new Random();
      for (int i = 0; i < amount; ++i)
      {
        for (int j = 0; j < amount; ++j)
        {
          map[i, j] = random.Next(2) == 0;
        }
      }
    }

    private void PrintMap()
    {
      Console.Clear();
      for (int i = 0; i < map.GetLength(0); i++)
      {
        Console.WriteLine(new string('-', amount * 2 + 1));
        for (int j = 0; j < map.GetLength(1); j++)
        {
          Console.Write('|');
          Console.Write(map[i,j] ? (char)2 : ' ');
        }
        Console.WriteLine('|');
      }
      Console.Write(new string('-', amount * 2 + 1));
    }

    private void CalculateLife()
    {
      bool[,] newGen = new bool[amount, amount];

      for (int i = 0; i < amount; ++i)
      {
        for (int j = 0; j < amount; ++j)
        {
          int neighbors = GetNeighbors(i, j);
          if (neighbors < 2)
          {
            newGen[i, j] = false;
          }
          if (neighbors == 3)
          {
            newGen[i, j] = true;
          }
          if (neighbors == 2 && map[i, j])
          {
            newGen[i, j] = true;
          }
          if (neighbors > 3)
          {
            newGen[i, j] = false;
          }
        }
      }

      map = newGen;
    }

    private int GetNeighbors(int x, int y)
    {
      int count = 0;

      if (x != 0)
      {
        if (y != 0)
        {
          count += map[x - 1, y - 1] ? 1 : 0;
        }
        if (y != amount - 1)
        {
          count += map[x - 1, y + 1] ? 1 : 0;
        }
        count += map[x - 1, y] ? 1 : 0;
      }
      if (x != amount - 1)
      {
        if (y != 0)
        {
          count += map[x + 1, y - 1] ? 1 : 0;
        }
        if (y != amount - 1)
        {
          count += map[x + 1, y + 1] ? 1 : 0;
        }
        count += map[x + 1, y] ? 1 : 0;
      }
      if (y != 0)
      {
        count += map[x, y - 1] ? 1 : 0;
      }
      if (y != amount - 1)
      {
        count += map[x, y + 1] ? 1 : 0;
      }

      return count;
    }
  }
}

edit: 12x12 deswegen, da man ansonsten scrollen muss, was imho recht nervig ist. Ich habe jetzt 39x39 genommen, da das die maximale Anzahl für die Breite ist.
Zufälliges Befüllen habe ich jetzt ebenfalls implementiert.
Die logischen Bedingungen für die Begrenzungen waren ebenfalls falsch.

22.11.2009 - 17:16 Uhr

nein, ich habe nur die express edition 😦

15.11.2009 - 20:35 Uhr

Systemsteuerung => automatische wiedergabe => haken nicht setzen

14.11.2009 - 18:28 Uhr

vielleicht hilft dir ja das: http://openbook.galileocomputing.de/visual_csharp/visual_csharp_10_003.htm ca. in der mitte, tabelle 10.4
dazu müsstest du das C# Programm zuerst starten.

13.11.2009 - 17:52 Uhr

Hallo Khalid,

schön, dass du so schnell antwortest.
Also ich starte das Setup, und dann auf weiter, bis die installation beginnt. Dann startet die Progressbar fast nicht, also bewegt sich nicht wirklich. Danach kommt das Popup(von KExtensions):
Error 1001. Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
OK(button)

so weit ich mich erinnere, ist das setup immer erst nach dem öffnen von visual studio gestart, aber jetzt hat es sich sofort gestartet(ohne visual studio).

mfg Sekkiy

12.11.2009 - 20:44 Uhr

Error 1001
Die Objectinstanz wurde nicht auf ein Object festgelegt (oder ähnlich)

windows 7 32bit ultimate

12.09.2009 - 14:06 Uhr

Hallo und willkommen,

  1. Besser so:
while ((p % t == 1) || (t*t < p))  

Das Semikolon am Ende dieser Zeile ist mit Sicherheit falsch!

es steht aber


do
{


t = t + 2;

}

while ((p % t == 1) | (t*t < p));

also ist es richtig

26.08.2009 - 23:37 Uhr

funktioniert bei mir(xp service pack 3) leider nicht...

02.08.2009 - 03:01 Uhr

Hmmm...

Hier der relevante Code:

            StreamReader sr = new StreamReader("C:/WINDOWS/serverchecker/masterfile.txt");  
...  

vl weil der pfad nicht "C:/WINDOWS/serverchecker/masterfile.txt", sondern "C:***WINDOWS**serverchecker***masterfile.txt" heißen sollte?

29.07.2009 - 13:18 Uhr

Windows Xp 😛 Taskleiste ist versteckt
Rocketdock sind die Symbole unten
Rainlendar 2 ist der Kalender mit TODO und Events
CD Art Display ist die Album anzeige
Rainmeter ist der Rest^^

Bei Rainmeter und CD Art Display das sind aber lauter skins, d.h. mit den standartsachen kommst du nicht weit. kann auf wunsch auch nen link reinstellen.

29.07.2009 - 00:56 Uhr

hab früher auch alles vollgeräumt gehabt, aber jetz ist wieder ordnung

ps: ich habe bisher immer firefox benutzt, aber seit heute probiere ich opera. deswegen sind beide icons unten.

20.07.2009 - 12:05 Uhr

hat Mutex eigentlich irgendwelche vor-/nachteile gegenüber

using System.Diagnostics;

bool IsApplicationAlreadyRunning()
{
    string proc=Process.GetCurrentProcess().ProcessName;
    Process[] processes=Process.GetProcessesByName(proc);
    if (processes.Length > 1)
        return true;
    else
        return false;
}

?

12.07.2009 - 16:51 Uhr

könnte man das nicht mit erweiterunsmethoden einfacher handhaben?

09.07.2009 - 09:54 Uhr

naja, steht doch im bild. das ist eine klassenbibliothek, und du versuchst sie auszuführen, was natürlich nicht geht. du musst ein ausführbares projekt hinzufügen und als startprojekt setzen.
das mit dem konvertieren ist ganz normal, das kommt immer wenn projekte mit einer älteren version als deine erstellt wurde

edit: zu langsam 😦 ja, natürlich musst du es aufrufen, woher soll es denn wissen was es machen soll.

28.06.2009 - 20:02 Uhr

wenn man beim 2. spieler keine tasten eingibt, hängt das programm 😉

26.06.2009 - 22:57 Uhr

zu 1.
formeinstellungen.ShowDialog();
damit kann zwar keine andere form mehr aktiviert werden aber es kann auch nur eine formeinstellungen angezeigt werden.
zu 2.
verstehe nicht, was du meinst mit über der taskbar anzeigen
das andere: Controlbox = false kannst auch bei eigenschaften einstellen. dann ist aber auch das icon links weg.

02.05.2009 - 14:31 Uhr

wie herbivore schon gesagt hat, du must auch überprüfen, ob eine gültige Zahl eingegeben wurde. was passiert, wenn der benutzer bei der Anzahl "-1" oder gar buchstaben oder sonderzeichen eingibt? dein programm stürzt einfach ab. ausserde, der user weiß nicht einmal, was er eingeben soll. Du erwartest als Eingabe eine Zahl, aber sagst es ihm nicht? Du solltest dem User schon sagen was er eingeben soll. Und wiso speicherst du die Zahlen(welche wieder Buchstaben sein könnten, wieder nicht überprüft...) in einem Array? Für diese Aufgabe ist es egal, ob du dir die Zahlen merkst, da du die Summe sowieso gleich addierst und nicht erst im Nachhinein.

Übrigens gibst du nach jeder Zahl Summe1 und Summe2 aus, da du bei den "if" keine Klammern gesetzt hast.

Ich persönlich finde deine Einrückungen schrecklich, einmal eingerückt, einmal nicht... scheint dir wohl ziemlich egal zu sein? Später wirst du dich nichtmehr zurechtfinden. Die "if" sind eingerückt, aber die Befehle nach den "if" nicht... die befehle nach "for" sind nicht eingerückt, aber "for" auch nicht. Du solltest schon einheitlich/übersichtlich programmieren. Siehe hierfür auch die Variablen deklaration.

und statt dem zweiten "if" gehört nunmal ein "else", da "i%2" ENTWEDER "0" ODER "1" sein kann, aber nichts anderes.

01.05.2009 - 17:28 Uhr

Na, dass du i=0 setzst und dann mit ++i anfängst bedeutet dass in der Schleife 0 überprungen wurde, ist das nun klar?

erm nein?

++i

oder

i++

wird erst Nach dem Durchlaufen der Schleife aufgerufen.
ich habe es auch extra probiert:

            
            int anzahl = 0;
            for (int i = 0; i < 10; ++i)
            {
                ++anzahl;
                Console.WriteLine(i);
            }
            Console.WriteLine("\n" + anzahl);
            Console.ReadLine();
            anzahl = 0;
            for (int i = 0; i < 10; i++)
            {
                ++anzahl;
                Console.WriteLine(i);
            }
            Console.WriteLine("\n" + anzahl);
            Console.ReadLine();

beide mal wird ausgegeben:
0
1
2
3
4
5
6
7
8
9

10

von daher verstehe ich nicht, warum ihr meint 0 wird übersprungen.

26.04.2009 - 00:11 Uhr

was meinst du mit speichern? als datei? dafür brauchst du einen streamwriter, und du musst System.IO; einbinden, am besten benutzt du hierfür die forensuche.

was meinst du mit "da für ein string namen keine variable nehmen darf"?

generell würde ich dich bitten, deine fragen etwas genauer zu formulieren bzw dich besser auszudrücken. ich weiß nicht ob es nur mir so geht, aber ich denke es geht vielen so.

int summe = 0;
string s = //die eingabe;
for (int i = 0; i < s.Length; ++i)
{
    summe += (int)s[i];
}
25.04.2009 - 23:04 Uhr

was genau willst du machen? ich kann dich leider nicht verstehen...
willst du zählen wie viele buchstaben es sind?

int laenge = s.Length;

oder willst du die ascii werte addieren? dann musst du den string durchlaufen jeden buchstaben auf int casten und addieren.