myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   C# Selbsterstelltes Programmfehler (https://mygully.com/showthread.php?t=2652275)

grins^^ 30.06.12 21:42

C# Selbsterstelltes Programmfehler
 
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


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

saibot521_2 01.07.12 00:48

hier noch mal etwas leserlicher:

PHP-Code:

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

namespace 
ConsoleApplication1
{
    class 
Program
    
{
        static 
void Main(string[] args)
        {
            
int p 02001100000000;
            
int[,] feld = new int[6080];
            
// alles 0 setzen
            
while ((<= 59 && <= 79))
            {
                
feld[pn] = 0;
                
1;
                if (
== 79)
                {
                    
1;
                    
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 (<= 59)
            {
                
feld[0a] = 1;
                
1;
            }
            
Console.WriteLine("Mit welcher Prozentzahl soll das Öl durchsickern? ( Zwischen 1 u 100)");
            
Convert.ToInt32(Console.ReadLine());
            
// Sickern
            
while ((<= 59 && <= 79))
            {
                if ((
1) <= 0)
                {
                    
feld[cd] = 0;
                }
                else
                {
                    
1;
                    
1;
                    
1;
                    if (
feld[hi] == 1)
                    {
                        
1;
                    }
                    else
                    {
                        
0;
                    }
                    if (
feld[hj] == 1)
                    {
                        
1;
                    }
                    else
                    {
                        
0;
                    }
                }
                if (
== 1)
                {
                    
Random zufall = new Random();
                    
int zz zufall.Next(1100);
                    if (
zz <= b)
                    {
                    
feld[cd] = 1;
                    }
                }
                if (
== 1)
                {
                    
Random zufall = new Random();
                    
int zz zufall.Next(1100);
                    if (
zz <= b)
                    {
                        
feld[cd] = 1;
                    }
                }
                
1;
                
1;
                
0;
                
0;
            }
            while ((
<= 59))
            {
                
ConsoleWriteLine("Anzahl der betroffenen Plätze in Zeile " x);
                while (
<= 79)
                {
                    if (
feld[xy] == 1)
                    {
                        
1;
                    }
                    
1;
                }
                
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();
        }
    }



Xalir 01.07.12 04:07

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


grins^^ 01.07.12 09:54

@ 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();
        }
    }
}


germgerm 01.07.12 15:11

Erzeuge das Random-Objekt nicht in der Schleife sondern davor. In der Schleife natürlich weiterhin die next-Methode aufrufen.

grins^^ 01.07.12 15:18

meinst du so?

Code:

                    Random zufall = new Random();
                    int zz = zufall.Next(1, 100);
                    if (zz <= b)
                      {
                            feld[c, d] = 1;
                      }

wenn ja dann hab ich immer noch das gleiche Problem :/

germgerm 01.07.12 18:46

Zitat:

Zitat von grins^^ (Beitrag 23643397)
meinst du so?

Nein, ist doch gleich wie zuvor.
So habe ich es oben beschrieben:


PHP-Code:

            Random zufall = new Random();

            while (
<= 59)
            {
                while (
<= 79)
                {
                    if (
== 0)
                    {
                        
feld[cd] = 0;
                    }
                    else
                    {
                        
1;
                        
1;
                        if (
feld[hi] == 1)
                        {
                            
1;

                        }
                        else
                        {
                            
0;

                        }
                        if (
feld[hj] == 1)
                        {
                            
1;

                        }
                        else
                        {
                            
0;
                        }
                    }
                    if (
== 1)
                    {
                        
int zz zufall.Next(1100);
                        if (
zz <= b)
                        {
                            
feld[cd] = 1;
                        }
                        
Console.WriteLine(zz);
                    }
                    if (
== 1)
                    {
                        
int zz zufall.Next(1100);
                        if (
zz <= b)
                        {
                            
feld[cd] = 1;

                        }
                        
Console.WriteLine(zz);

                    }

                    
1;
                    
0;
                    
0;

                }
                
0;
                
1;
            } 


grins^^ 01.07.12 18:49

omg es geht :)
vielen vielen Dank
bist echt hammer :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:37 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.