Advertisement
Guest User

mrowki na kiju

a guest
May 24th, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.22 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace mrowki
  8. {
  9.     class Program
  10.     {
  11.         static void Main( string[] args )
  12.         {
  13.             Kij kijNaMrowki = new Kij( 2, 100 );
  14.  
  15.             Console.WriteLine( kijNaMrowki.SymulujMrowki() );
  16.  
  17.             Console.ReadKey();
  18.         }
  19.     }
  20.  
  21.     class Mrowka : IComparable
  22.     {
  23.         public Mrowka(double pozycja, bool kierunek)
  24.         {
  25.             this.pozycja = pozycja;
  26.             this.kierunek = kierunek;
  27.         }
  28.  
  29.         public double pozycja;
  30.         bool kierunek;  // true = prawo, false = lewo
  31.         public bool Martwa { get; private set; }
  32.  
  33.         static double predkosc = 0.01;  // Metry na "krok"
  34.  
  35.         public override string ToString()
  36.         {
  37.             return "pozycja: " + pozycja.ToString("0.00") + "\nkierunek: " + ( kierunek ? "prawo" : "lewo" ) + "\nmartwa: " + Martwa + "\n";
  38.         }
  39.  
  40.         public void ZrobKrok( double dlugoscKija )
  41.         {
  42.             if( kierunek )
  43.                 pozycja += predkosc;
  44.             else
  45.                 pozycja -= predkosc;
  46.  
  47.             if( 0 > pozycja || pozycja > dlugoscKija )
  48.                 Martwa = true;
  49.         }
  50.  
  51.         public void Odbij() => kierunek = !kierunek;
  52.  
  53.         public int CompareTo( object obj ) => this.pozycja > ( (Mrowka)obj ).pozycja ? 1 : -1;
  54.         public static bool operator < ( Mrowka m1, Mrowka m2 ) => m1.pozycja < m2.pozycja;
  55.         public static bool operator > ( Mrowka m1, Mrowka m2 ) => m1.pozycja > m2.pozycja;
  56.     }
  57.  
  58.     class Kij
  59.     {
  60.         public Kij( double dlugosc, int ile_mrowek)
  61.         {
  62.             this.dlugosc = dlugosc;
  63.  
  64.             listaMrowek = new List<Mrowka>();
  65.  
  66.             Random rnd = new Random();
  67.             for( int i = 0; i < ile_mrowek; ++i )
  68.                 listaMrowek.Add( new Mrowka( rnd.NextDouble() * dlugosc, rnd.NextDouble() > 0.5 ? true : false ) );
  69.  
  70.             // Poustawiaj mrowki po kolei
  71.             listaMrowek.Sort();
  72.         }
  73.  
  74.         private double dlugosc;
  75.         List<Mrowka> listaMrowek;
  76.  
  77.         // DEBGUG
  78.         public void WyswietlMrowki()
  79.         {
  80.             foreach( Mrowka m in listaMrowek )
  81.                 Console.WriteLine(m);
  82.         }
  83.  
  84.         public void RuszMrowki()
  85.         {
  86.             for( int i = 0; i < listaMrowek.Count; ++i )
  87.             {
  88.                 if( !listaMrowek[ i ].Martwa )
  89.                     listaMrowek[ i ].ZrobKrok( dlugosc );
  90.  
  91.                 if( i > 0 && listaMrowek[ i ] < listaMrowek[ i - 1 ] ||
  92.                     i < listaMrowek.Count - 1 && listaMrowek[ i ] > listaMrowek[ i + 1 ]
  93.                     )
  94.                     listaMrowek[ i ].Odbij();
  95.             }
  96.         }
  97.  
  98.         public bool WszystkieMrowkiSpadly()
  99.         {
  100.             foreach( Mrowka m in listaMrowek )
  101.                 if( !m.Martwa )
  102.                     return false;
  103.  
  104.             return true;
  105.         }
  106.  
  107.         public int SymulujMrowki()
  108.         {
  109.             int krok = 0;
  110.  
  111.             while( !WszystkieMrowkiSpadly() )
  112.             {
  113.                 RuszMrowki();
  114.                 krok++;
  115.             }
  116.  
  117.             return krok;
  118.         }
  119.     }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement