• 1
  • 2
2022-07-05, 22:15
  #13
Medlem
Som jag förstår det har du fem stycken nästlade while-slingor, och du vill avbryta alla fem efter en viss tid. Jag hade nog gjort så här:


Kod:
startaklockan();
while (villkor för slinga 1)
{
   while(villkor för slinga 2)
   {
      while(villkor för slinga 3)
      {
         while(villkor för slinga 4)
         {
         while(villkor för slinga 5)
            {
               doStuff();
               if(kollaKlockan()>tidsgränsen)
               continue;
            }
      if(kollaKlockan()>tidsgränsen)
       continue;
      }
      if(kollaKlockan()>tidsgränsen)
    continue;
     }
   if(kollaKlockan()>tidsgränsen)
    continue;
   }
if(kollaKlockan()>tidsgränsen)
 continue;
}

I koden ovan är funktionen startaKlockan till för att läsa av systemklockan när du startar programmet, och funktionen kollaKlockan är till för att kolla hur mycket tid som har gått sedan klockan startades.
Citera
2022-07-05, 22:50
  #14
Medlem
SvenHelsings avatar
Citat:
Ursprungligen postat av xpqr12345
Som jag förstår det har du fem stycken nästlade while-slingor, och du vill avbryta alla fem efter en viss tid. Jag hade nog gjort så här:


Kod:
startaklockan();
while (villkor för slinga 1)
{
   while(villkor för slinga 2)
   {
      while(villkor för slinga 3)
      {
         while(villkor för slinga 4)
         {
         while(villkor för slinga 5)
            {
               doStuff();
               if(kollaKlockan()>tidsgränsen)
               continue;
            }
      if(kollaKlockan()>tidsgränsen)
       continue;
      }
      if(kollaKlockan()>tidsgränsen)
    continue;
     }
   if(kollaKlockan()>tidsgränsen)
    continue;
   }
if(kollaKlockan()>tidsgränsen)
 continue;
}

I koden ovan är funktionen startaKlockan till för att läsa av systemklockan när du startar programmet, och funktionen kollaKlockan är till för att kolla hur mycket tid som har gått sedan klockan startades.
Ugh, vad plottrigt. Jag hade använt goto för att ta mig ur en nästlad loop. Eller exceptions. Eller bryta ut till funktioner.
Citera
2022-07-05, 23:04
  #15
Medlem
Citat:
Ursprungligen postat av SvenHelsing
Ugh, vad plottrigt. Jag hade använt goto för att ta mig ur en nästlad loop. Eller exceptions. Eller bryta ut till funktioner.
trevligt för dig, men nu läser jag första veckan på nån sommarkurs på distans så det spelar ingen roll hur det ser ut så länge det funkar, enl läraren själv
Citera
2022-07-05, 23:05
  #16
Medlem
Citat:
Ursprungligen postat av xpqr12345
Som jag förstår det har du fem stycken nästlade while-slingor, och du vill avbryta alla fem efter en viss tid. Jag hade nog gjort så här:


Kod:
startaklockan();
while (villkor för slinga 1)
{
   while(villkor för slinga 2)
   {
      while(villkor för slinga 3)
      {
         while(villkor för slinga 4)
         {
         while(villkor för slinga 5)
            {
               doStuff();
               if(kollaKlockan()>tidsgränsen)
               continue;
            }
      if(kollaKlockan()>tidsgränsen)
       continue;
      }
      if(kollaKlockan()>tidsgränsen)
    continue;
     }
   if(kollaKlockan()>tidsgränsen)
    continue;
   }
if(kollaKlockan()>tidsgränsen)
 continue;
}

I koden ovan är funktionen startaKlockan till för att läsa av systemklockan när du startar programmet, och funktionen kollaKlockan är till för att kolla hur mycket tid som har gått sedan klockan startades.
japp ungefär så, fast jag använder inte nästlade, de är 5 separata while loopar
Citera
2022-07-05, 23:07
  #17
Medlem
SvenHelsings avatar
Citat:
Ursprungligen postat av DrillBitTTT
trevligt för dig, men nu läser jag första veckan på nån sommarkurs på distans så det spelar ingen roll hur det ser ut så länge det funkar, enl läraren själv
Helvete till att vara otrevlig när du får gratis hjälp.
Citera
2022-07-06, 03:30
  #18
Medlem
tnems avatar
Citat:
Ursprungligen postat av SvenHelsing
Ugh, vad plottrigt. Jag hade använt goto för att ta mig ur en nästlad loop. Eller exceptions. Eller bryta ut funktioner.
Att lägg till det tille while-vilkoret borde väl var det bästa på hans nivå?

Citat:
Ursprungligen postat av DrillBitTTT
trevligt för dig, men nu läser jag första veckan på nån sommarkurs på distans så det spelar ingen roll hur det ser ut så länge det funkar, enl läraren själv

Lägg till IF-villkoret i while-vilkoret med hjälp av &&).
Citera
2022-07-07, 03:30
  #19
Medlem
Citat:
Ursprungligen postat av SvenHelsing
Ugh, vad plottrigt. Jag hade använt goto för att ta mig ur en nästlad loop. Eller exceptions. Eller bryta ut till funktioner.

Den allmänna uppfattningen är den att exceptions ska bara användas vid exceptionella tillfällen. De är inte tänkta att styra programmet i stort. Ett exempel på en exception är division med noll. Och syftet är det att få till en snygg felhantering, en elegant exit, som kan anropa alla städauppfunktioner som behövs mm.
Och dessutom få en uppgift om var det gick snett.

Det anses dålig programmeringsteknik att låta mängder med exceptionsanrop styra hela flödet.

För stora program med hundratals loopar så brukar de flesta allokera en timer som aktiveras då och då.
Då sätter man den att peka på funktionen HandleTimerEvent().
HandleTimerEvent kan då sätta en (global) flagga bool terminateprogram.
Denna flagga kollas då och då i dina loopar, tex i den första raden:
while (villkor för slinga 1)
som blir till:
while (villkor för slinga 1 && !terminateprogram)
{
while(villkor för slinga 2 && !terminateprogram)
{
while(villkor för slinga 3 && !terminateprogram)
{
while(villkor för slinga 4 && !terminateprogram)
{
while(villkor för slinga 5 && !terminateprogram)


I och med att terminateprogram sätts till true ifall timereventet exekveras så kommer alla looparna att avslutas.
Timern är mycket användbar för då slipper man alla anrop till att kolla klockan.
Så gott som alla Windowsprogram som har djupa strukturer med många och stora if, while- satser änvänder Timer eventet.

Man kan i och för sig låta HandleTimerEvent() sköta all uppstädning, flushing av filbuffers och filstängning och deallkolering av minne mm, och sedan avsluta programmet självt, med tex exit().
Dock så kan man förlora viktig debuginformation om man ville analysera den i efterskott.
Men det finns vägar runt detta också.

Skriver du i Linux så bör du se till att återställa tex att stdin och stdout återkopplas tillbaks
till det aktiva terminalfönstret
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback