hey,
ich hab ein Problem mit einem selbsterstellten Programm das nicht das macht was es soll. WIe ihr vielleicht erkennt bin ich kein Informatik - Genie, weil ich des Fach noch nicht allzu lang habe.
Die Aufgabe war ein Programm zu erstellen, mit einem Feld, das 60 nach unten geht und 80 nach rechts.
Es simliert das sickern von Öl bei einer gewissen Wahrscheinlichkeit in die Spalte darunter in der Form. ( 1 = betroffenes Feld, 0 = kein Öl) Das Öl sickert immer nur nach links unten oder rechts unten, nicht direkt.
DIe Prozentzahl steht für die selbstgewählte Chance für das versickern des Öls.
Das Öl "startet " in der obersten Zeile des Feldes in den mittleren 50%. ( Con 1 - 19 kein Öl, von 20 + 50 Öl, von 60 - 79 kein Öl).
Hier nun das Programm
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int p = 0, n = 0 , a = 20, b = 0, c = 1, d = 1, e = 0, f = 0, h = 0, i = 0, j = 0, x = 0, y = 0, z = 0;
int[,] feld = new int[60, 80];
// alles 0 setzen
while ((p <= 59 && n <= 79))
{
feld[p, n] = 0;
p = p + 1;
if (n == 79)
{
n = n + 1;
}
}
// Öl in der ersten Zeile
while (a <= 59)
{
feld[0, a] = 1;
a = a + 1;
}
Console.WriteLine("Mit welcher Prozentzahl soll das Öl durchsickern? ( Zwischen 1 u 100)");
b = Convert.ToInt32(Console.ReadLine());
// Sickern
while ((c <= 59 && d <= 79))
{
if ((d - 1) <= 0)
{
feld[c, d] = 0;
}
else
{
h = c - 1;
i = d - 1;
j = d + 1;
if (feld[h, i] == 1)
{
e = 1;
}
else
{
e = 0;
}
if (feld[h, j] == 1)
{
f = 1;
}
else
{
f = 0;
}
}
if (e == 1)
{
Random zufall = new Random();
int zz = zufall.Next(1, 100);
if (zz <= b)
{
feld[c, d] = 1;
}
}
if (f == 1)
{
Random zufall = new Random();
int zz = zufall.Next(1, 100);
if (zz <= b)
{
feld[c, d] = 1;
}
}
c = c + 1;
d = d + 1;
e = 0;
f = 0;
}
while ((x <= 59))
{
Console. WriteLine("Anzahl der betroffenen Plätze in Zeile " + x);
while (y <= 79)
{
if (feld[x, y] == 1)
{
z = z + 1;
}
y = y + 1;
}
x = x + 1;
Console.WriteLine(z);
}
Console.ReadLine();
}
}
}
Das Problem ist dass egal bei welcher Prozentzahl immer in jeder Zeile die Ahnzahl der betroffenen Felder 40 ist, was ja schlecht sein kann.
Vielen dank für alle Hilfen. Bin echt am verweifeln weil ich das Programm dringend brauch.
Edit: sry für den Grammatikfehler in der Überschrift
using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int p = 0, n = 0 , a = 20, b = 0, c = 1, d = 1, e = 0, f = 0, h = 0, i = 0, j = 0, x = 0, y = 0, z = 0; int[,] feld = new int[60, 80]; // alles 0 setzen while ((p <= 59 && n <= 79)) { feld[p, n] = 0; p = p + 1; if (n == 79) { n = n + 1; p = 0; // Fehler Nr. 1 - wurde vergessen ... hat die Folge dass nur die erste Zeile und die letzte Spalte auf Null gesetzt wurde } } // Öl in der ersten Zeile // Öl in der ersten Zeile und den Spalten 20 bis 59 // ... erste Zeile sind also 40 Felder mit Öl while (a <= 59) { feld[0, a] = 1; a = a + 1; } Console.WriteLine("Mit welcher Prozentzahl soll das Öl durchsickern? ( Zwischen 1 u 100)"); b = Convert.ToInt32(Console.ReadLine()); // Sickern while ((c <= 59 && d <= 79)) { if ((d - 1) <= 0) { feld[c, d] = 0; } else { h = c - 1; i = d - 1; j = d + 1; if (feld[h, i] == 1) { e = 1; } else { e = 0; } if (feld[h, j] == 1) { f = 1; } else { f = 0; } } if (e == 1) { Random zufall = new Random(); int zz = zufall.Next(1, 100); if (zz <= b) { feld[c, d] = 1; } } if (f == 1) { Random zufall = new Random(); int zz = zufall.Next(1, 100); if (zz <= b) { feld[c, d] = 1; } } c = c + 1; d = d + 1; e = 0; f = 0; } while ((x <= 59)) { Console. WriteLine("Anzahl der betroffenen Plätze in Zeile " + x); while (y <= 79) { if (feld[x, y] == 1) { z = z + 1; } y = y + 1; } x = x + 1; Console.WriteLine(z); z=0; // Fehler Nr. 2 - wurde vergessen, du willst ja die Ölfelder in jeder Zeile haben und nicht die Summe aller bisherigen ;) } Console.ReadLine(); } } }
Du arbeitest wohl gerne mit while? Für die Feldinitialisierung ist es einfacher mit for-Schleifen zu arbeiten. Neu bei C#? Dein Versuch sieht mir eher nach VB aus, grade solche Anweisungen wie a=a+1 schreibt man in C# einfacher mit a++.
Code:
for(int x = 0; x < 60; x++)
{
for(int y = 0; y < 80; y++)
{
feld(x, y) = 0;
}
}
@ Xalir
ja ich arbeite wirklich eher mit while, weil des für mich logischer und leichter ist.
Und des mit a++ kannte ich bisher noch nicht
@ saibot521_2
danke für die Hilfe, hat mir echt was gebracht.
Zwar hab ich jetzt noch den Fehler dass ab der 2. Zeile immer kein Öl mehr da ist aber das bekomm ich hoffentlic irgendwie hin.
Edit:
geht aber immer noch ned 100%
liegt iwie an der Zufallszahl, weil da kommt nur selten eine neue Zahl und sonst immer die gleiche :/ hier ein Beispiel
Neue Version:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int p = 0, n = 0, a = 20, b = 0, c = 1, d = 1, e = 0, f = 0, h = 0, i = 0, j = 0, k = 0;
int[,] feld = new int[60, 80];
// alles 0 setzen
while ((p <= 59 && n <= 79))
{
feld[p, n] = 0;
p = p + 1;
if (n == 79)
{
n = n + 1;
p = 0;
}
}
// Öl in der ersten Zeile und den Spalten 20 bis 59
// ... erste Zeile sind also 40 Felder mit Öl
while (a <= 59)
{
feld[0, a] = 1;
a = a + 1;
}
Console.WriteLine("Mit welcher Prozentzahl soll das Öl durchsickern? ( Zwischen 1 u 100)");
b = Convert.ToInt32(Console.ReadLine());
// Sickern
while (c <= 59)
{
while (d <= 79)
{
if (d == 0)
{
feld[c, d] = 0;
}
else
{
h = c - 1;
i = d - 1;
if (feld[h, i] == 1)
{
e = 1;
}
else
{
e = 0;
}
if (feld[h, j] == 1)
{
f = 1;
}
else
{
f = 0;
}
}
if (e == 1)
{
Random zufall = new Random();
int zz = zufall.Next(1, 100);
if (zz <= b)
{
feld[c, d] = 1;
}
Console.WriteLine(zz);
}
if (f == 1)
{
Random zufall = new Random();
int zz = zufall.Next(1, 100);
if (zz <= b)
{
feld[c, d] = 1;
}
Console.WriteLine(zz);
}
d = d + 1;
e = 0;
f = 0;
}
d = 0;
c = c + 1;
}
// Werte in ner Zeile
while ( k <= 79)
{
Console.Write(feld [22,k] +"|");
k = k + 1;
}
int x = 0, y = 0, z = 0;
while ((x <= 59))
{
Console.Write("Anzahl der betroffenen Plätze in Zeile " + x + " ................... ");
while (y <= 79)
{
if (feld[x, y] == 1)
{
z = z + 1;
}
y = y + 1;
}
Console.WriteLine(z);
z = 0;
y = 0;
x = x + 1;
}
Console.ReadLine();
}
}
}
Nein, ist doch gleich wie zuvor.
So habe ich es oben beschrieben:
PHP-Code:
Random zufall = new Random();
while (c <= 59)
{
while (d <= 79)
{
if (d == 0)
{
feld[c, d] = 0;
}
else
{
h = c - 1;
i = d - 1;
if (feld[h, i] == 1)
{
e = 1;
}
else
{
e = 0;
}
if (feld[h, j] == 1)
{
f = 1;
}
else
{
f = 0;
}
}
if (e == 1)
{
int zz = zufall.Next(1, 100);
if (zz <= b)
{
feld[c, d] = 1;
}
Console.WriteLine(zz);
}
if (f == 1)
{
int zz = zufall.Next(1, 100);
if (zz <= b)
{
feld[c, d] = 1;