From d42b72c931c638e07bb71f5d8a886976806dd0b4 Mon Sep 17 00:00:00 2001
From: fsimonsen <fredersi@stud.ntnu.no>
Date: Sun, 3 Apr 2022 18:15:00 +0200
Subject: [PATCH] mulig fiks av issues R T

---
 rute.cpp | 77 ++++++++++++++++++++++++++++++++++++++------------------
 1 file changed, 52 insertions(+), 25 deletions(-)

diff --git a/rute.cpp b/rute.cpp
index 3742fc3..fdebaaf 100644
--- a/rute.cpp
+++ b/rute.cpp
@@ -187,7 +187,7 @@ void Rute::ruteTabell(const int diff, const string start, const string stSted) {
         tPrint, // hjelpevariabel for å sørge for korrekt utskrift av time
         antGanger, // omregning for å legge inn riktig antall avgangstider
         startTid, // omregning for å legge inn starttid
-        n, // hjelpevariabel for linjeskift ved ny time
+        n = -1, // hjelpevariabel for linjeskift ved ny time
         timer, // hjelpevariabel for å skrive ut time
         minutter, // hjelpevariabel for å skrive ut minutter
         avgangsTid, // omregning for å legge inn riktig avgangstid
@@ -197,22 +197,35 @@ void Rute::ruteTabell(const int diff, const string start, const string stSted) {
     cout << "\nRuteavganger fra startstedet (" << start << ") - "
          << "avslutt med 0 0):\n\n";
 
-    cout << "Fra kl. (00:01 - 23:59): ";
+    cout << "Fra kl. (00:01 - 23:53): ";
     cin >> startT >> startM; cin.ignore(); // Leser starttid
+    startTid = (startT*60)+startM; // Regner ut første avgangstid
 
-
-    while (!gyldigTid(startT, startM)) { // Sørger for at starttid er gyldig
+    while (!gyldigTid(startT, startM) || startTid > 1433) { // Sørger for at starttid er gyldig
         cout << "\nUlovlig klokkeslett. Prøv igjen (tt mm): ";
         cin >> startT >> startM; cin.ignore();
+        startTid = (startT*60)+startM;
     }
-    startTid = (startT*60)+startM; // Regner ut første avgangstid
-    n = startT; // Setter indikator til å være første starttime
+    avgangsTid = startTid+diff;
+    //n = avgangsTid/60;
+    
 
 
     while (startT != 0 || startM != 0) { // Så lenge bruker ikke taster 0 0
-        avgangstider.push_back(startTid+diff); // Legger start tid i vector
+        avgangsTid = startTid+diff; // mulig denne kan fjernes
+        if (avgangsTid < 1440) {
+            avgangstider.push_back(avgangsTid); // Legger start tid i vector    
+        } else {
+            avgangstider.push_back(avgangsTid%1440);
+        }
+        
+        
         // Leser tid mellom avganger
-        tidMellom = lesInt("Tid mellom avganger", MINTID, MAXTID);
+        if (avgangsTid < 1319) {
+            tidMellom = lesInt("Tid mellom avganger", MINTID, MAXTID);
+        } else {
+            tidMellom = lesInt("Tid mellom avganger", MINTID, 1439%startTid);
+        }
         startTotal = (startT*60)+startM+tidMellom; // Omregner for sjekk
         tPrint = startTotal/60; // Regner ut gyldig utskrift:
         mPrint = startTotal%60;
@@ -230,34 +243,43 @@ void Rute::ruteTabell(const int diff, const string start, const string stSted) {
             sluttTotal = (sluttT*60)+sluttM; // Omregner for sjekk
         }
 
-        antGanger = ((sluttT-startT)*60)/tidMellom; // Omregning for loop
+        antGanger = (((sluttT-startT)*60)+sluttM-startM)/tidMellom; // Omregning for loop
         avgangsTid = startTid+diff; // Setter på differanse en gang
 
         for (int i = 0; i < antGanger; i++) { // Legger til riktig antall avgangstider:
             avgangsTid = avgangsTid + tidMellom; // Omregning
-            avgangstider.push_back(avgangsTid); // Legges i vektor
+            if (avgangsTid < 1440) {
+                avgangstider.push_back(avgangsTid);
+            } else {
+                avgangstider.push_back(avgangsTid%1440); // Legges i vektor
+            }
         }
 
         tPrint = (sluttTotal+1)/60; // Regner ut gyldig utskrift:
         mPrint = (sluttTotal+1)%60;
 
-
-        cout << "\n\nFra kl. (" << ((tPrint < 10) ? "0" : "") <<  tPrint
-             << ':' << ((mPrint < 10) ? "0" : "") << mPrint
-             << " - 23:59): ";
-        cin >> startT >> startM; cin.ignore(); // Leser ny starttid
-        startTotal = (startT*60)+startM; // Omregning
-        // Sørger for ny lovlig starttid:
-        while ((!gyldigTid(startT, startM) || startTotal <= sluttTotal)
-                && (startT != 0 || startM != 0)) { // Sørger for at starttid er gyldig
-            cout << "\nUlovlig klokkeslett. Prøv igjen (tt mm): ";
-            cin >> startT >> startM; cin.ignore();
+        if (sluttTotal < 1433) {
+            cout << "\n\nFra kl. (" << ((tPrint < 10) ? "0" : "") <<  tPrint
+                 << ':' << ((mPrint < 10) ? "0" : "") << mPrint
+                 << " - 23:53): ";
+            cin >> startT >> startM; cin.ignore(); // Leser ny starttid
             startTotal = (startT*60)+startM; // Omregning
+            // Sørger for ny lovlig starttid:
+            while ((!gyldigTid(startT, startM) || startTotal <= sluttTotal)
+                && (startT != 0 || startM != 0)) { // Sørger for at starttid er gyldig
+                cout << "\nUlovlig klokkeslett. Prøv igjen (tt mm): ";
+                cin >> startT >> startM; cin.ignore();
+                startTotal = (startT*60)+startM; // Omregning
+            }
+            startTid = (startT*60)+startM; // Omregning
+        } else {
+            startT = 0; startM = 0;
         }
-        startTid = (startT*60)+startM; // Omregning
+        
     }
-    cout << "\n\nRutetabell for stoppested: " << stSted << "\n\n"
-         << ((n < 10) ? "0" : "") << n << ':';
+    cout << "\n\nRutetabell for stoppested: " << stSted << "\n\n";
+         //<< ((n < 10) ? "0" : "") << n << ':';
+         sort(avgangstider.begin(), avgangstider.end());
 
     for (int i = 0; i < avgangstider.size(); i++) { // For hver avgangstid:
         timer = avgangstider[i]/60; // Regner ut time
@@ -265,9 +287,14 @@ void Rute::ruteTabell(const int diff, const string start, const string stSted) {
         if (timer == n) { // Skriver ut minutter hvis time er lik indikator
             cout << ' ' << ((minutter < 10) ? "0" : "") << minutter;
         } else { // Skriver ut time hvis timer er mer enn indikator
-            cout << '\n' << ((timer < 10) ? "0" : "")
+            if (timer < 24) {
+                 cout << '\n' << ((timer < 10) ? "0" : "")
                  << timer << ':' << ' ' << ((minutter < 10) ? "0" : "")
                  << minutter;
+            } else {
+                cout << '\n' << ((timer%24 < 10) ? "0" : "") << timer%24 << ": " << ((minutter < 10) ? "0" : "")
+                     << minutter;
+            }
             n = timer; // Oppdaterer indikator
         }
     }
-- 
GitLab