Pereiti prie turinio

Rekomenduojami pranešimai

Nesu susipažinęs su c#, bet atsitiko taip, jog reikia, kad ši užduotis būtų padaryta.. Po truputį mokausi sintaksę, bet kol pilnai įsigilinsiu į kalbą, gal būt praeis reikalingas terminas, taigi gal kas nors galit padėt?

 

Aprašykite klasę Chronometer, kurioje aprašyti šie metodai:

 

* start() - pradedamas laiko skaičiavimas

* getIntermediate() - fiksuojamas tarpinis laikas tarp dviejų laikų, jei metodas iškviečiamas pirmą kartą tuomet fiksuojamas praėjęs laikas tarp pradžios ir tarpinio laiko momentų, kitu atveju, tarp gretimų tarpinių laikų. Metodas grąžina laiko intervalą formatu hh:mm:ss.

* stop() - fiksuojamas praėjęs laikas nuo start() metodo iškvietimo iki stop() metodo iškvietimo, laiko intervalas grąžinamas formatu hh:mm:ss.

* pause() - laikinai sustabdomas laiko skaičiavimas. Iškvietus šį metodą antrą kartą iš eilės laiko skaičiavimas pratęsiamas.

 

class Chronometer
{
  public void start()
  {

  }
  public void getIntermediate()
  {

  }
  public void stop()
  {

  }
  public void pause()
  {

  }
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nesu susipažinęs su c#, bet atsitiko taip, jog reikia, kad ši užduotis būtų padaryta.. Po truputį mokausi sintaksę, bet kol pilnai įsigilinsiu į kalbą, gal būt praeis reikalingas terminas, taigi gal kas nors galit padėt?

 

Aprašykite klasę Chronometer, kurioje aprašyti šie metodai:

 

* start() - pradedamas laiko skaičiavimas

* getIntermediate() - fiksuojamas tarpinis laikas tarp dviejų laikų, jei metodas iškviečiamas pirmą kartą tuomet fiksuojamas praėjęs laikas tarp pradžios ir tarpinio laiko momentų, kitu atveju, tarp gretimų tarpinių laikų. Metodas grąžina laiko intervalą formatu hh:mm:ss.

* stop() - fiksuojamas praėjęs laikas nuo start() metodo iškvietimo iki stop() metodo iškvietimo, laiko intervalas grąžinamas formatu hh:mm:ss.

* pause() - laikinai sustabdomas laiko skaičiavimas. Iškvietus šį metodą antrą kartą iš eilės laiko skaičiavimas pratęsiamas.

 

class Chronometer
{
  public void start()
  {

  }
  public void getIntermediate()
  {

  }
  public void stop()
  {

  }
  public void pause()
  {

  }
}

 

Sveikas. Geriausia viską daryti savo laiku ir tada nepraeis jokie terminai. Bet tokias tiesas dėstyti yra tėvų darbas, o mano darbas (kaip naujo forumo dalyvio, prijaučiančio programavimui) pareiga yra padėti. Kadangi mokaisi sintaksę, tikrai nežinosi kas yra Unit Testing, todėl testą papraščiausiai įdėjau į Main metodą. Laiko trukmė yra kaupiama kintamajame _elapsed. Kas kart laikinai sustabžius chronometrą (Pause()), prie šio kintamojo pridedamas laikas, kuris prabėgo arba nuo chronometro paleidimo, arba nuo paskutinio resuminimo (kai antrą kartą iš eilės iškviečiama Pause()), arba nuo paskutinio (GetIntermediate()) - priklausomai nuo to, kas prieš tai buvo daryta. Jei kol chronometras buvo sustabdytas ant pauzės ir tuo metu buvo iškviesta GetIntermediate(), sekantis GetIntermediate() gražins laiko tarpą, kuris praėjo nuo paleidimo iš pauzės iki GetIntermediate() iškvietimo. Daugiau nedaugžodžiausiu, viską suprasi išnagrinėjęs kodą. Jei kas neaišku - PM.

using System;
using System.Threading;
using static System.Console;

namespace Chronometer
{
   class Chronometer
   {
       private bool _paused, _started = false;
       private DateTime _startTime;
       private TimeSpan _elapsed, _intermediate;
       private readonly string _FORMAT = @"hh\:mm\:ss";

       static void Main(string[] args)
       {
           Chronometer c = new Chronometer();
           WriteLine("Starting chronometer test");
           c.Start();
           WriteLine("Wait 1 second");
           sleep(1);
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:01");
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:00");
           WriteLine("Wait 2 seconds");
           sleep(2);
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:02");
           WriteLine("Wait 2 seconds");
           sleep(2);
           WriteLine("Pause chronometer");
           c.Pause();
           WriteLine("Wait 1 second. This will not be added to elapsed time, since we've pressed pause before");
           sleep(1);
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:02");
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:00");
           WriteLine("Resume chronometer by pressing pause again");
           c.Pause();
           WriteLine("Wait 1 second");
           sleep(1);
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:01");
           WriteLine("Stop chronometer.     Output: " + c.Stop() + "  //Should write 00:00:06");
           WriteLine("Stop chronometer.     Output: " + c.Stop() + "  //Should write 00:00:00 because chronometer is already stopped. Need to start chronometer again.");
           WriteLine("Start chronometer");
           WriteLine("Wait 1 second");
           c.Start();
           sleep(1);
           WriteLine("Stop chronometer.     Output: " + c.Stop() + "  //Should write 00:00:01");
           WriteLine("Stop chronometer.     Output: " + c.Stop() + "  //Should write 00:00:00, since chronometer was not started.");
           Console.ReadLine();
       }

       //Naudojamas testavimui.
       private static void sleep(int time)
       {
           Thread.Sleep(time * 1000);
       }

       public void Start()
       {
           if (!_started)
           {
               _started = true;
               _elapsed = _intermediate = TimeSpan.Zero;
               _startTime = DateTime.Now;
           }
       }

       public string Stop()
       {
           if(!_started) return TimeSpan.Zero.ToString(_FORMAT);
           _started = false;
           return _paused ? _elapsed.ToString(_FORMAT) : (_elapsed += DateTime.Now - _startTime).ToString(_FORMAT); ;
       }

       public void Pause()
       {
           if (!_started) return;
           if (_paused)
           {
               _paused = false;
               _startTime = DateTime.Now;
           }
           else
           {
               _paused = true;
               TimeSpan timeSpanToAdd = DateTime.Now - _startTime;
               _intermediate += timeSpanToAdd;
               _elapsed += timeSpanToAdd;
           }
       }

       public string GetIntermediate()
       {
           if (!_started) return TimeSpan.Zero.ToString(_FORMAT);
           TimeSpan intermediate;
           if (!_paused)
           {
               DateTime pressed = DateTime.Now;
               _elapsed += pressed - _startTime;
               intermediate = pressed - _startTime;
               _startTime = pressed;
               _intermediate = TimeSpan.Zero;
           }
           else
           {
               intermediate = _intermediate;
           }
           return intermediate.ToString(@"hh\:mm\:ss");
       }
   }
}

Redagavo paradigm
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ačiū labai! :)

 

Valdas minėjo, kad ne DateTime čia tinkamiausias. Siunčiu kitą variantą su StopWatch. Tavo reikalas, kurį variantą rodysi dėstytojui. Happy coding ;)

 

using System;
using System.Diagnostics;
using System.Threading;
using static System.Console;

namespace Chronometer
{
   class Chronometer
   {
       private Stopwatch _timer;
       private TimeSpan _intermediate;
       private bool _started, _paused;
       private readonly string _FORMAT = @"hh\:mm\:ss";


       static void Main(string[] args)
       {
           Chronometer c = new Chronometer();
           WriteLine("Starting chronometer test");
           c.Start();
           WriteLine("Wait 1 second");
           sleep(1);
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:01");
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:00");
           WriteLine("Wait 2 seconds");
           sleep(2);
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:02");
           WriteLine("Wait 2 seconds");
           sleep(2);
           WriteLine("Pause chronometer");
           c.Pause();
           WriteLine("Wait 1 second. This will not be added to elapsed time, since we've pressed pause before");
           sleep(1);
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:02");
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:00");
           WriteLine("Resume chronometer by pressing pause again");
           c.Pause();
           WriteLine("Wait 1 second");
           sleep(1);
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:01");
           WriteLine("Stop chronometer.     Output: " + c.Stop() + "  //Should write 00:00:06");
           WriteLine("Stop chronometer.     Output: " + c.Stop() + "  //Should write 00:00:00 because chronometer is already stopped. Need to start chronometer again.");
           WriteLine("Start chronometer");
           WriteLine("Wait 1 second");
           c.Start();
           sleep(1);
           WriteLine("Stop chronometer.     Output: " + c.Stop() + "  //Should write 00:00:01");
           WriteLine("Stop chronometer.     Output: " + c.Stop() + "  //Should write 00:00:00, since chronometer was not started.");
           Console.ReadLine();
       }

       private static void sleep(int time)
       {
           Thread.Sleep(time * 1000);
       }

       public void Start()
       {
           if(!_started)
           {
               _started = true;
               _intermediate = TimeSpan.Zero;
               _timer = Stopwatch.StartNew();
           }
           return;
       }

       public string Stop()
       {
           if (!_started) return TimeSpan.Zero.ToString(_FORMAT);
           _started = false;
           _timer.Stop();
           return _timer.Elapsed.ToString(_FORMAT);
       }

       public void Pause()
       {
           if (!_started) return;
           if (!_paused)
           {
               _paused = true;
               _timer.Stop();
           }
           else
           {
               _paused = false;
               _timer.Start();
           }
       }

       public string GetIntermediate()
       {
           if (!_started) return TimeSpan.Zero.ToString(_FORMAT);
           _timer.Stop();
           string result = (_timer.Elapsed - _intermediate).ToString(_FORMAT);
           if (!_paused)
           {
               _intermediate += (_timer.Elapsed - _intermediate);
               _timer.Start();
           }
           else
           {
              _intermediate = _timer.Elapsed;
           }
           return result;
       }
   }
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 4 savaičių...

Valdas minėjo, kad ne DateTime čia tinkamiausias. Siunčiu kitą variantą su StopWatch. Tavo reikalas, kurį variantą rodysi dėstytojui. Happy coding ;)

 

using System;
using System.Diagnostics;
using System.Threading;
using static System.Console;

namespace Chronometer
{
   class Chronometer
   {
       private Stopwatch _timer;
       private TimeSpan _intermediate;
       private bool _started, _paused;
       private readonly string _FORMAT = @"hh\:mm\:ss";


       static void Main(string[] args)
       {
           Chronometer c = new Chronometer();
           WriteLine("Starting chronometer test");
           c.Start();
           WriteLine("Wait 1 second");
           sleep(1);
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:01");
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:00");
           WriteLine("Wait 2 seconds");
           sleep(2);
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:02");
           WriteLine("Wait 2 seconds");
           sleep(2);
           WriteLine("Pause chronometer");
           c.Pause();
           WriteLine("Wait 1 second. This will not be added to elapsed time, since we've pressed pause before");
           sleep(1);
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:02");
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:00");
           WriteLine("Resume chronometer by pressing pause again");
           c.Pause();
           WriteLine("Wait 1 second");
           sleep(1);
           WriteLine("Intermediate pressed. Output: " + c.GetIntermediate() + "  //Should write 00:00:01");
           WriteLine("Stop chronometer.     Output: " + c.Stop() + "  //Should write 00:00:06");
           WriteLine("Stop chronometer.     Output: " + c.Stop() + "  //Should write 00:00:00 because chronometer is already stopped. Need to start chronometer again.");
           WriteLine("Start chronometer");
           WriteLine("Wait 1 second");
           c.Start();
           sleep(1);
           WriteLine("Stop chronometer.     Output: " + c.Stop() + "  //Should write 00:00:01");
           WriteLine("Stop chronometer.     Output: " + c.Stop() + "  //Should write 00:00:00, since chronometer was not started.");
           Console.ReadLine();
       }

       private static void sleep(int time)
       {
           Thread.Sleep(time * 1000);
       }

       public void Start()
       {
           if(!_started)
           {
               _started = true;
               _intermediate = TimeSpan.Zero;
               _timer = Stopwatch.StartNew();
           }
           return;
       }

       public string Stop()
       {
           if (!_started) return TimeSpan.Zero.ToString(_FORMAT);
           _started = false;
           _timer.Stop();
           return _timer.Elapsed.ToString(_FORMAT);
       }

       public void Pause()
       {
           if (!_started) return;
           if (!_paused)
           {
               _paused = true;
               _timer.Stop();
           }
           else
           {
               _paused = false;
               _timer.Start();
           }
       }

       public string GetIntermediate()
       {
           if (!_started) return TimeSpan.Zero.ToString(_FORMAT);
           _timer.Stop();
           string result = (_timer.Elapsed - _intermediate).ToString(_FORMAT);
           if (!_paused)
           {
               _intermediate += (_timer.Elapsed - _intermediate);
               _timer.Start();
           }
           else
           {
              _intermediate = _timer.Elapsed;
           }
           return result;
       }
   }
}

 

Ačiū :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...