Avatar billede maxmuldjord Nybegynder
04. september 2004 - 19:32 Der er 23 kommentarer og
1 løsning

samme opgave et nyt problem

Ok, jeg har nu et probelm med variablen day, det er meningen at den ved overflow skal tælle en op, jeg har på fornemmelsen at jeg er tæt på men mangler noget men hvad? Jeg kan ikke rigtigt gennemskue det. Når minutes kommer op på 32767 går den i minus men det skal den også for negativ værdi er nat ( ja det er langt ude men en opgave vi skal løse) jeg skal også have skrevet en meddelelse for hver 100 dag, jeg havde tænkt mig at jeg kunne -----> if ( day%100 =0) men det går jo ikke når vi kommer op på over 100 dage så hvordan skal jeg angribe den? Her er hele smøren : using System;

/*
* The Blipos clock has 256 seconds in a minute and
* 65536 minutes in a day. The night lasts for
* 32768 minutes and is represented by negative minute values.
* The daylight lasts 32767 minutes represented by postive
* values. When minutes equals 0 it is neither day nor night.
* The clock can tick forwards, backwards, be adjusted,
* move fast forwards and fast backwards
*/

class BliposClock
{
    private byte seconds;
    private short minutes;
    private int day;
 
    public BliposClock()
    {
        seconds = 0;
        minutes = 0;
        day = 0;
    }

    public void Day ()
    {       
        short originalMinutes =minutes;
        if (originalMinutes > minutes)
            day++;
    }

    public void OneForward()
    {
        byte originalSeconds = seconds;
     
        seconds++;
        if(originalSeconds > seconds)
            // Overflow of seconds variable
            minutes++;
    }

    public void OneBackward()
    {
        byte originalSeconds = seconds;

        seconds--;
        if (originalSeconds < seconds)
            // Underflow of seconds variable
            minutes--;       
    }
 
    public void FastForward()
    {
        byte originalSeconds = seconds;
     
        seconds = (byte)(seconds + 50);
        if (originalSeconds > seconds)
            // Overflow of seconds variable
            minutes++;
    }
 
    public void FastBackward()
    {
        byte originalSeconds = seconds;

        seconds = (byte)(seconds - 50);
        if (originalSeconds < seconds)
            // Underflow of seconds variable
            minutes--;
    }

    public void SetSeconds(byte sec)
    {
        seconds = sec;
    }
 
    public void SetMinutes(short min)
    {
        minutes = min;
    }
 
   
    public void ShowTime()
    {
        Console.WriteLine("Sec: " + seconds + " Min: " + minutes);
        if (day !=0)
        Console.WriteLine("Days:" + day);
    }
}
 
public class RunBliposClock
{
    public static void Main()
    {
        string command;

        Console.WriteLine("Welcome to the Blipos Clock. " +
            "256 seconds per minute " +
            "65536 minutes per day");
        BliposClock myClock = new BliposClock();
        Console.WriteLine("Please set the clock");
        Console.Write("Enter Seconds: ");
        myClock.SetSeconds(Convert.ToByte(Console.ReadLine()));
        Console.Write("Enter minutes: ");
        myClock.SetMinutes(Convert.ToInt16(Console.ReadLine()));
        Console.WriteLine("Enter (F)orward (B)ackward " +
            "(A)dd fifty (D)educt fifty (T)erminate");
        do
        {
            command = Console.ReadLine().ToUpper();
            if (command == "F")
                myClock.OneForward();
            if (command == "B")
                myClock.OneBackward();
            if(command == "A")
                myClock.FastForward();
            if(command == "D")
                myClock.FastBackward();
            myClock.ShowTime();
        } while (command != "T");
        Console.WriteLine("Thank you for using the Blipos Clock");
        Console.ReadLine ();
    }
}
Avatar billede snepnet Nybegynder
04. september 2004 - 19:38 #1
jeg er nok lidt tung... men jeg forstod ikke helt spørgsmålet... kan du eventuelt henvise til det oprindelige ?
hvorfor går det ikke med %100 ?
Avatar billede maxmuldjord Nybegynder
04. september 2004 - 19:43 #2
Jeg fik løst mit første problem med Arnes hjælp det virker nu men mit problem er nu med min day variable . Og med hensyn til %100 så vil det vel returnere 2 hvis det er dag 200 vi taler om? Lad mig vide hvor jeg klokker i det, tak
Avatar billede arne_v Ekspert
04. september 2004 - 19:44 #3
Jeg er bange for at det bliver lidt tricky.

Mit forslag:

lav minutes om fra short til int

brug kode som:

minutes++;
if(minutes > 65535)
{
    minutes -= 65536;
    day++;
}

og udskriv minutter som:

(short)minutes
Avatar billede arne_v Ekspert
04. september 2004 - 19:44 #4
nej

200 % 100 er 0
Avatar billede jpvj Nybegynder
04. september 2004 - 19:45 #5
% = modulos, dvs. resten ved heltalsdivision.

100 % 100 = 0
101 % 100 = 1
199 % 100 = 99
200 % 100 = 0
201 % 100 = 1

Så den skulle virke fint :-)
Avatar billede arne_v Ekspert
04. september 2004 - 19:45 #6
% er modulus som er rest ved division
Avatar billede arne_v Ekspert
04. september 2004 - 19:48 #7
minutes--;
if(minutes < 0)
{
    minutes += 65536;
    day--;
}
Avatar billede maxmuldjord Nybegynder
04. september 2004 - 20:09 #8
Arne

Det kan jeg ikke, vi skal have det som short da -32768 skal forstille at være begyndelsen på nat. Jeg har forsøgt mig med at teste om minutes er negativ men jeg kan ikke rigtigt fange det.

jpvj

Tak det var en god forklaring, jeg laver et nyt spørgsmål med point til dig, ok?
Avatar billede arne_v Ekspert
04. september 2004 - 20:13 #9
Tricket er det her:

#og udskriv minutter som:
#
#(short)minutes
Avatar billede maxmuldjord Nybegynder
04. september 2004 - 20:16 #10
Det er jeg ikke helt med på Arne, kan du ikke vise bare en lille kodestump? Jeg kan godt lave day om til short hvis det hjælper noget?
Avatar billede arne_v Ekspert
04. september 2004 - 20:17 #11
using System;

class MainClass
{
    public static void Main(string[] args)
    {
        for(int i = 32760; i < 32775; i++)
        {
            Console.WriteLine(i + " = " + (short)i);
        }
    }
}

udskriver:

32760 = 32760
32761 = 32761
32762 = 32762
32763 = 32763
32764 = 32764
32765 = 32765
32766 = 32766
32767 = 32767
32768 = -32768
32769 = -32767
32770 = -32766
32771 = -32765
32772 = -32764
32773 = -32763
32774 = -32762
Avatar billede arne_v Ekspert
04. september 2004 - 20:17 #12
typen af day er uden betydning
Avatar billede arne_v Ekspert
04. september 2004 - 20:33 #13
Jeg tror at det er den nemmeste måde både at kunne håndtere day nemt og skrive
negative minutes ud.
Avatar billede maxmuldjord Nybegynder
04. september 2004 - 20:54 #14
Jeg tror jeg har forklaret mig dårlig, undskyld! det med at udskrive de negative minutes er ikke aktuelt lige nu, Det jeg skal have til at virke er at ved max short skal day tælle 1 op og det skal så skrives ud. Jeg skal så have denne meddelse ved hver 100 dag og det har jeg tænkt mig kunne se ud som følger:

if (day%100=0)
Console.WriteLine (" bla... bla...")
Avatar billede arne_v Ekspert
04. september 2004 - 20:56 #15
Ja men det jeg har beskrevet er jo også netop hvordan du håndterer day
Avatar billede arne_v Ekspert
04. september 2004 - 20:57 #16
Bare på en sådan måde at du stadig kan få dine negative minutter når du får
brg for det (nu eller senere)
Avatar billede arne_v Ekspert
04. september 2004 - 20:58 #17
Iøvrigt tror jeg at du skal ændre 50 sekunder til 5000 sekunder når du skal teste
dag skift !

:-)
Avatar billede arne_v Ekspert
04. september 2004 - 21:08 #18
Hvis du vil se hvad det er jeg mumler om så prøv den her version:

using System;

/*
* The Blipos clock has 256 seconds in a minute and
* 65536 minutes in a day. The night lasts for
* 32768 minutes and is represented by negative minute values.
* The daylight lasts 32767 minutes represented by postive
* values. When minutes equals 0 it is neither day nor night.
* The clock can tick forwards, backwards, be adjusted,
* move fast forwards and fast backwards
*/

class BliposClock
{
    private byte seconds;
    private int minutes;
    private int day;
 
    public BliposClock()
    {
        seconds = 0;
        minutes = 0;
        day = 0;
    }

   
    public void OneForward()
    {
        byte originalSeconds = seconds;
     
        seconds++;
        if(originalSeconds > seconds)
            // Overflow of seconds variable
            minutes++;
        if(minutes > 65535)
        {
            minutes -= 65536;
            day++;
        }
    }

    public void OneBackward()
    {
        byte originalSeconds = seconds;

        seconds--;
        if (originalSeconds < seconds)
            // Underflow of seconds variable
            minutes--; 
        if(minutes < 0)
        {
            minutes += 65536;
            day--;
        }
    }
 
    public void FastForward()
    {
        for(int rep=0; rep<5000; rep++) {
        byte originalSeconds = seconds;
     
        seconds = (byte)(seconds + 50);
        if (originalSeconds > seconds)
            // Overflow of seconds variable
            minutes++;
        if(minutes > 65535)
        {
            minutes -= 65536;
            day++;
        }
        }
    }
 
    public void FastBackward()
    {
        for(int rep=0; rep<5000; rep++) {
        byte originalSeconds = seconds;

        seconds = (byte)(seconds - 50);
        if (originalSeconds < seconds)
            // Underflow of seconds variable
            minutes--;
        if(minutes < 0)
        {
            minutes += 65536;
            day--;
        }
        }
    }

    public void SetSeconds(byte sec)
    {
        seconds = sec;
    }
 
    public void SetMinutes(short min)
    {
        minutes = min;
    }
 
   
    public void ShowTime()
    {
        Console.WriteLine("Sec: " + seconds + " Min: " + (short)minutes);
        if (day !=0)
        Console.WriteLine("Days:" + day);
    }
}
 
public class RunBliposClock
{
    public static void Main()
    {
        string command;

        Console.WriteLine("Welcome to the Blipos Clock. " +
            "256 seconds per minute " +
            "65536 minutes per day");
        BliposClock myClock = new BliposClock();
        Console.WriteLine("Please set the clock");
        Console.Write("Enter Seconds: ");
        myClock.SetSeconds(Convert.ToByte(Console.ReadLine()));
        Console.Write("Enter minutes: ");
        myClock.SetMinutes(Convert.ToInt16(Console.ReadLine()));
        do
        {
          Console.Write("Enter (F)orward (B)ackward " +
            "(A)dd fifty (D)educt fifty (T)erminate: ");
            command = Console.ReadLine().ToUpper();
            if (command == "F")
                myClock.OneForward();
            if (command == "B")
                myClock.OneBackward();
            if(command == "A")
                myClock.FastForward();
            if(command == "D")
                myClock.FastBackward();
            myClock.ShowTime();
        } while (command != "T");
        Console.WriteLine("Thank you for using the Blipos Clock");
        Console.ReadLine ();
    }
}
Avatar billede arne_v Ekspert
04. september 2004 - 21:09 #19
A springer 250000 sekunder frem (ellers er det umulig at teste).
Avatar billede arne_v Ekspert
04. september 2004 - 21:12 #20
if (day%100=0)
Console.WriteLine (" bla... bla...")

ligger du bare ind i begeg forward'erne.

(og øger A yderligere hvis ikke du vil have krampe i fingrene)
Avatar billede maxmuldjord Nybegynder
04. september 2004 - 21:35 #21
fint Arne ! jeg prøver !!
Avatar billede Syska Mester
06. september 2004 - 23:08 #22
huha, nogen af en smøre, men lyder meget interessant, er lige med på en lytter
Avatar billede maxmuldjord Nybegynder
10. september 2004 - 14:19 #23
Arne .... Undskyld jeg kom helt bort fra denne i kampens hede, kom bare med et svar.
Avatar billede arne_v Ekspert
10. september 2004 - 21:43 #24
Jeg har svaret og du har accepteret så den er vist iorden nu
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester