Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
G
Gruppe04
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Frederik Simonsen
Gruppe04
Commits
847abd5f
Commit
847abd5f
authored
3 years ago
by
Sondre Sand
Browse files
Options
Downloads
Patches
Plain Diff
R E fjernstopp er ferdig!
parent
10b6b2bf
Branches
Branches containing commit
No related tags found
1 merge request
!6
Frederik
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
rute.cpp
+73
-69
73 additions, 69 deletions
rute.cpp
rute.h
+1
-2
1 addition, 2 deletions
rute.h
ruter.cpp
+2
-6
2 additions, 6 deletions
ruter.cpp
with
76 additions
and
77 deletions
rute.cpp
+
73
−
69
View file @
847abd5f
...
...
@@ -102,39 +102,6 @@ bool Rute::erListeGyldig() {
return
false
;
}
bool
Rute
::
erNabo
(
Stopp
*
s1
,
Stopp
*
s2
)
{
int
fPos
,
aPos
,
temp
,
avstand
;
auto
it
=
find
(
stoppene
.
begin
(),
stoppene
.
end
(),
s1
);
if
(
it
!=
stoppene
.
end
())
{
// Funn av stoppNr
fPos
=
distance
(
stoppene
.
begin
(),
it
);
}
auto
it2
=
find
(
stoppene
.
begin
(),
stoppene
.
end
(),
s2
);
if
(
it2
!=
stoppene
.
end
())
{
// Funn av stoppNr
aPos
=
distance
(
stoppene
.
begin
(),
it2
);
}
if
(
fPos
<
aPos
)
{
// Hvis første er før på ruten enn andre
avstand
=
aPos
-
fPos
;
// Setter avstand mellom stopp på ruten
}
else
if
(
fPos
>
aPos
)
{
temp
=
fPos
;
// Gjør om slik at første stopp på ruten kommer først
fPos
=
aPos
;
aPos
=
temp
;
avstand
=
aPos
-
fPos
;
}
else
if
(
fPos
==
aPos
)
{
// Skal ikke skje
cout
<<
"
\n
Her er det noe alvorlig galt.
\n\n
"
;
}
if
(
avstand
==
1
)
{
// Stoppene er naboer
return
true
;
}
// Stoppene er ikke naboer:
return
false
;
}
/**
* Går gjennom et medsendt navn fra bruker, sjekker
...
...
@@ -263,9 +230,10 @@ int Rute::finnDifferanse(const int nr, const Retning retning) {
* @param stoppNr
* @return int - returnerer hvor i lista stoppet er.
*/
int
Rute
::
hentRuteIndeks
(
const
int
stoppNr
)
{
int
Rute
::
hentRuteIndeks
(
Stopp
*
p1
)
{
int
indeks
;
auto
it
=
find
(
stoppene
.
begin
(),
stoppene
.
end
(),
stoppNr
);
auto
it
=
find
(
stoppene
.
begin
(),
stoppene
.
end
(),
p1
);
indeks
=
distance
(
stoppene
.
begin
(),
it
);
return
indeks
;
}
...
...
@@ -309,15 +277,33 @@ Stopp* Rute::finnStopp(int nr) {
}
/**
* TODO: fjernStopp()
* Husk at her må avstanden mellom stoppene være mer enn direkte naboer (>1)
* Skal fjerne de i mellom to stoppesteder ikke stoppestedene som blir oppgitt
* Fjerner stopp på en bestemt rute mellom to stopp fra brukeren.
* Oppdaterer nabo og tid, hvis de stoppene som ender opp som naboer
* ikke er naboer fra før.
*
* @see Stoppesteder::byttBokstaver(...)
* @see Stoppesteder::finnesIndeks(...)
* @see Stoppesteder::hentIndeksVhaNavn(...)
* @see Stoppesteder::finnEntydig(...)
* @see Stoppesteder::hentIndeksVhaNavn(...)
* @see Rute::finnStopp(...)
* @see Rute::finnesStopp(...)
* @see Rute::hentRuteIndeks(...)
* @see Stoppesteder::finnDuplikat(...)
* @see Stoppested::finnesNabo(...)
* @see Stoppested::hentNaboTid(...)
* @see Stoppested::settNaboIndeks(...)
* @see Stoppested::settNaboTid(...)
*
*/
void
Rute
::
fjernStopp
()
{
int
stoppNr
,
sIndeks
,
lIndeks
;
int
sIndeks
,
lIndeks
,
sStoppNr
,
lStoppNr
,
//s=start, l=last
tid
;
//tid mellom naboer
string
navn
,
navn2
,
sNavn
,
lNavn
;
//start og last
Stopp
*
sStopp
=
nullptr
;
Stopp
*
lStopp
=
nullptr
;
Stopp
*
p1
=
nullptr
;
//struct peker
Stopp
*
p2
=
nullptr
;
//struct peker
Stoppested
*
sp1
=
nullptr
;
//stoppested(vektor) peker
Stoppested
*
sp2
=
nullptr
;
//stoppested(vektor) peker
auto
itS
=
stoppene
.
begin
();
cout
<<
"
\n\n
Mellom start
\n
"
...
...
@@ -326,23 +312,25 @@ void Rute::fjernStopp() {
while
(
navn
.
size
()
>
0
)
{
navn
=
gStoppestederBase
.
byttBokstaver
(
navn
);
if
(
erTall
(
navn
))
{
stoppNr
=
stoi
(
navn
);
}
if
(
gStoppestederBase
.
finnesIndeks
(
stoppNr
-
1
))
{
navn
=
gStoppestederBase
.
hentNavnVhaIndeks
(
stoppNr
);
}
if
(
erTall
(
navn
))
{
sIndeks
=
stoi
(
navn
);
if
(
gStoppestederBase
.
finnesIndeks
(
sIndeks
-
1
))
{
//navn fra bruker
navn
=
gStoppestederBase
.
hentNavnVhaIndeks
(
sIndeks
);
}
}
sNavn
=
gStoppestederBase
.
finnEntydig
(
navn
);
stoppNr
=
gStoppestederBase
.
hentIndeksVhaNavn
(
sNavn
);
//finner indeks fra vektor.
if
(
finnesStopp
(
stoppNr
+
1
)){
//sjekker at stopp finnes på lista.
//peker? indeks? hvordan fikse???
sIndeks
=
hentRuteIndeks
(
stoppNr
+
1
);
//henter hvor på lista stoppet er
advance
(
itS
,
sIndeks
+
1
);
//setter iterator start til en forbi stoppet
if
(
sNavn
.
size
()
>
0
){
sIndeks
=
gStoppestederBase
.
hentIndeksVhaNavn
(
sNavn
);
//finner indeks fra vektor.
p1
=
finnStopp
(
sIndeks
+
1
);
if
(
finnesStopp
(
sIndeks
+
1
)){
//sjekker at stopp finnes på lista.
sStoppNr
=
hentRuteIndeks
(
p1
);
//henter hvor på lista stoppet er
advance
(
itS
,
sStoppNr
+
1
);
//setter iterator start til en forbi stoppet
//fordi advance tar med selv stoppet det starter på, så må en forbi
navn
=
""
;
//hopper ut av while.
}
else
{
cout
<<
"
\n
Stoppet finnes ikke på ruta!"
;
cout
<<
"
\n\n
Mellom start
\n
"
<<
"Stoppested (entydig navn / tall / ENTER for å avslutte): "
;
getline
(
cin
,
navn
);
}
}
}
...
...
@@ -351,31 +339,47 @@ void Rute::fjernStopp() {
<<
"Stoppested (entydig navn / tall / ENTER for å avslutte): "
;
getline
(
cin
,
navn2
);
while
(
navn2
.
size
()
>
0
)
{
// Så lenge ikke skrevet enter:
navn
=
gStoppestederBase
.
byttBokstaver
(
navn2
);
// fjerner æøåÆØÅ
if
(
erTall
(
navn2
))
{
// Sjekker om input kun er tall
stoppNr
=
stoi
(
navn2
);
// Hvis kun tall, gjør om til int
}
if
(
gStoppestederBase
.
finnesIndeks
(
stoppNr
-
1
))
{
// Henter det faktiske navnet
navn2
=
gStoppestederBase
.
hentNavnVhaIndeks
(
stoppNr
);
}
lNavn
=
gStoppestederBase
.
finnEntydig
(
navn
);
stoppNr
=
gStoppestederBase
.
hentIndeksVhaNavn
(
lNavn
);
if
(
finnesStopp
(
stoppNr
+
1
)){
lIndeks
=
hentRuteIndeks
(
stoppNr
+
1
);
advance
(
itL
,
lIndeks
);
navn
=
""
;
while
(
navn2
.
size
()
>
0
)
{
navn2
=
gStoppestederBase
.
byttBokstaver
(
navn2
);
if
(
erTall
(
navn2
))
{
lIndeks
=
stoi
(
navn2
);
if
(
gStoppestederBase
.
finnesIndeks
(
lIndeks
-
1
))
{
//navn fra bruker
navn2
=
gStoppestederBase
.
hentNavnVhaIndeks
(
lIndeks
);
}
}
lNavn
=
gStoppestederBase
.
finnEntydig
(
navn2
);
if
(
lNavn
.
size
()
>
0
){
lIndeks
=
gStoppestederBase
.
hentIndeksVhaNavn
(
lNavn
);
p2
=
finnStopp
(
lIndeks
+
1
);
if
(
finnesStopp
(
lIndeks
+
1
)
&&
sNavn
!=
lNavn
&&
!
erNabo
(
p1
,
p2
)){
lStoppNr
=
hentRuteIndeks
(
p2
);
advance
(
itL
,
lStoppNr
);
navn2
=
""
;
}
else
{
cout
<<
"
\n
Stoppet finnes ikke på ruta!"
;
cout
<<
"
\n
Stopp kan ikke være nabo eller samme som start!"
;
cout
<<
"
\n\n
Mellom slutt
\n
"
<<
"Stoppested (entydig navn / tall / ENTER for å avslutte): "
;
getline
(
cin
,
navn
);
getline
(
cin
,
navn
2
);
}
stoppene
.
erase
(
itS
,
itL
);
}
}
stoppene
.
erase
(
itS
,
itL
);
//fjerner alt mellom bruker start og slutt.
sp1
=
gStoppestederBase
.
finnDuplikat
(
sNavn
);
//setter peker til vektoren på start navn
sp2
=
gStoppestederBase
.
finnDuplikat
(
lNavn
);
//setter peker til vektoren på slutt navn
if
(
sp2
->
finnesNabo
(
sIndeks
+
1
)){
//hvis de er naboer
tid
=
sp2
->
hentNaboTid
(
sIndeks
);
//hent tiden
p2
->
minutter
=
tid
;
//oppdater tiden i structen
cout
<<
"Tiden mellom stoppestedene er allerede registrert som "
<<
tid
<<
"minutter."
;
}
else
{
//hvis de ikke er naboer
tid
=
lesInt
(
"Tid til fra forrige stopp"
,
1
,
10
);
//leser inn tid mellom stopp
p2
->
minutter
=
tid
;
//oppdaterer tiden i struct
sp1
->
settNaboIndeks
(
lIndeks
);
//start stopp er nabo med slutt stopp
sp1
->
settNaboTid
(
tid
);
//oppdaterer tiden
sp2
->
settNaboIndeks
(
sIndeks
);
//slutt stopp er nabo med start stopp
sp2
->
settNaboTid
(
tid
);
//oppdaterer tiden
}
skrivKort
();
skrivRute
(
Fram
);
//skriver ut oppdatert rute.
}
/**
...
...
This diff is collapsed.
Click to expand it.
rute.h
+
1
−
2
View file @
847abd5f
...
...
@@ -41,8 +41,7 @@ class Rute {
bool
finnesStopp
(
const
int
nr
);
bool
gyldigTid
(
const
int
time
,
const
int
minutt
);
int
finnDifferanse
(
const
int
nr
,
const
Retning
retning
);
Stopp
*
finnStopp
(
int
nr
);
int
hentRuteIndeks
(
const
int
nr
);
int
hentRuteIndeks
(
Stopp
*
p1
);
std
::
string
hentNavn
(
const
Retning
retning
);
Stopp
*
finnStopp
(
int
nr
);
void
fjernStopp
();
...
...
This diff is collapsed.
Click to expand it.
ruter.cpp
+
2
−
6
View file @
847abd5f
...
...
@@ -54,12 +54,8 @@ void Ruter::endreRute() {
}
switch
(
valg
)
{
// Sender til rett funksjon etter brukervalg:
case
'F'
:
ruten
->
second
->
fjernStopp
();
ruten
->
second
->
skrivKort
();
// Skriver egen info
ruten
->
second
->
skrivRute
(
Fram
);
break
;
case
'S'
:
ruten
->
second
->
smettStopp
();
ruten
->
second
->
skrivKort
();
// Skriver egen info
ruten
->
second
->
skrivRute
(
Fram
);
break
;
case
'F'
:
ruten
->
second
->
fjernStopp
();
break
;
case
'S'
:
ruten
->
second
->
smettStopp
();
break
;
}
}
else
// Rutenummeret finnes ikke:
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment