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 Sekkiy
Thema: Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch
Am im Forum: Smalltalk

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.

Thema: KExtensions v1.4 (Visual Studio Package) inkl. Sourcen
Am im Forum: Projekte

nein, ich habe nur die express edition :(

Thema: Erkennen, wann Stick herausgezogen wird.
Am im Forum: Rund um die Programmierung

Systemsteuerung => automatische wiedergabe => haken nicht setzen

Thema: Daten von einem Programm ins andere übertragen (bisher läufts über eine Datei)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

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.

Thema: KExtensions v1.4 (Visual Studio Package) inkl. Sourcen
Am im Forum: Projekte

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

Thema: KExtensions v1.4 (Visual Studio Package) inkl. Sourcen
Am im Forum: Projekte

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

windows 7 32bit ultimate

Thema: [gelöst] Consolenanwendung: PrimzahlenRechner ergibt falsche Primzahlen!
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von juetho
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

Thema: Hack: Strg+alt+entf verhindern
Am im Forum: .NET-Komponenten und C#-Snippets

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

Thema: while macht Probleme
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von xpHelper
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?

Thema: Euer Desktop...
Am im Forum: Smalltalk

Windows Xp :P 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.

Thema: Euer Desktop...
Am im Forum: Smalltalk

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.

Thema: Windows 7 in Europa ohne IE? -> Findet ihr das sinnvoll?
Am im Forum: Smalltalk

ich wollte auch noch einen link posten, es geht um das selbe wie im 2. link von michlG

http://www.heise.de/newsticker/EU-vs-Microsoft-Windows-soll-Alternativen-zum-Internet-Explorer-anbieten--/meldung/142558

Thema: per Process.Start() mehrere Dateien öffnen lassen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

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;
}
?

Thema: [gelöst] Eigene GUI-Control-Oberklasse
Am im Forum: GUI: Windows-Forms

könnte man das nicht mit erweiterunsmethoden einfacher handhaben?

Thema: Einzelne Werte aus HTML-Text auslesen?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

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.

Thema: Snake v1.1
Am im Forum: Projekte

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

Thema: Form nur einmal anzeigen können
Am im Forum: GUI: Windows-Forms

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.

Thema: Summen berechnen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

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.

Thema: Summen berechnen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von vbprogger
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.

Thema: Buchstabenwerte eines Wortes zusammenzählen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

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];
}

Thema: Buchstabenwerte eines Wortes zusammenzählen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

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.