udvidet spørgsmål til indlæsning af speciel tekstfil

Tags:    c++

hej

jeg sidder med nøjagtig samme tekst fil som der er vist i spørgsmålet stillet af Christopher von Würden. jeg sidder bare med et andet problem. jeg har fået til opgave at indlæse alle retningsobservationer og udskrive dem til en anden tekstfil. retningsobservationer har id-nummer:

1
1
2

hvis man har læst spørgsmålet vil man også se at der forekommer noget der hedder forkortet retningsobservationer, som har id-nummer:

1
2

forkortet retningsobservationer, må kun forekomme såfremt der har været en retningsobservation før. det vil sige at man må godt have tilfældet:

1 702.00
1 15.00
2 0.000
1 14.00
2 19.480

man må også godt have tilfældet:

1 14.00
2 19.480
1 702.00
1 15.00
2 0.000

min opgave er at scanne hele tekstfilen igennem, finde alle retningsobservationer, og forkortet retningsobservationer og udskrive dem til en anden tekstfil. problemet er bare at der er ikke nogen bestemt rækkefølge observationerne kommer i, og jeg har ikke været i stand til at scanne alle observationerne ind korrekt. hvis der er nogen der har et forslag til en maskine der kan gå ind i tekstfilen, og finde alle retningsobservationer, plus forkortet retningsobservationer, og skrive dem ud til en ny tekstfil, ville det være til stor hjælp.

hvis i ikke kan finde tekstfilen er den på linket

http://peecee.dk/upload/download/112185





Så vidt jeg kan se mangler du stadig at løse: "Hvis du har fundet den lange sekvens skal du holde længden på seq på 2 i stedet for 3. "

I else delen af ValidSeq skal du kun undersøge to elementer og kun udskrive 1 element.
Noget i stil med:
Fold kodeboks ind/udKode 




Så vidt jeg kan se mangler du stadig at løse: "Hvis du har fundet den lange sekvens skal du holde længden på seq på 2 i stedet for 3. "

I else delen af ValidSeq skal du kun undersøge to elementer og kun udskrive 1 element.
Noget i stil med:
Fold kodeboks ind/udKode 


jeg forstår ikke helt hvordan jeg skal holde seq på 2. jeg har ellers sagt seq.size()<2 i else. jeg har prøvet at ændre else som du foreslog, men når den udskriver udskriver den det miderste element i den lange retning. noget i stil med

7 1 702
8 1 15
9 2 0

8 1 15

14 1 704
15 1 12
16 2 144.070

min kode ser således ud:

Fold kodeboks ind/udKode 


hvis der er noget jeg misforstår, vil jeg meget gerne vide det?



I din main() har du:
if(seq.size() > 3)
seq.pop_front();

Her var det nok en ide at checke longSeqFound og sætte længden på seq efter det, ved at pop'e. Husk at pop'e en ekstra gang når du sætter flaget.

Jeg undrer mig over at du resetter flaget (longSeqFound = false;) Jeg troede flaget skulle blive ved være sat, når du én gang havde fundet den lange sekvens.



I din main() har du:
if(seq.size() > 3)
seq.pop_front();

Her var det nok en ide at checke longSeqFound og sætte længden på seq efter det, ved at pop'e. Husk at pop'e en ekstra gang når du sætter flaget.

Jeg undrer mig over at du resetter flaget (longSeqFound = false;) Jeg troede flaget skulle blive ved være sat, når du én gang havde fundet den lange sekvens.


hej Bertel. jeg har følgende kode nu:

Fold kodeboks ind/udKode 


jeg er ikke helt sikker på at jeg forstår, hvad du mener med at pope. jeg troede ellers at flaget skulle være reset når den havde fundet den korte sekvens, således at den også kan gå tilbage og finde den lange sekvens.



Som jeg forstår opgaven skal du, når først den lange sekvens er fundet, kun lede efter den korte sekvens.

Så efter du har fundet den lange sekvens skal længden på seq kun være 2 og ikke 3, så du skal lave dette om:
if(seq.size() > 3)
seq.pop_front();
if(seq.size()>2)
seq.pop_front();

Så længden er 3 eller 2 afhængig af om longSeqFound er false eller true.
Som det er nu vil længden altid være 2.



Som jeg forstår opgaven skal du, når først den lange sekvens er fundet, kun lede efter den korte sekvens.

Så efter du har fundet den lange sekvens skal længden på seq kun være 2 og ikke 3, så du skal lave dette om:
if(seq.size() > 3)
seq.pop_front();
if(seq.size()>2)
seq.pop_front();

Så længden er 3 eller 2 afhængig af om longSeqFound er false eller true.
Som det er nu vil længden altid være 2.


det er sandt, men man kan ikke finde den korte sekvens uden at vide hvornår den lange sekvens kommer. den korte sekvens kommer kun hvis der har været en lang sekvens forinden, eller en kort sekvens. det vil sige den eneste måde hvorpå man kan vide at det er en kort sekvens er hvis det der har været før har været en lang sekvens. altså

1
1
2

eller hvis den der har været før er en kort sekvens. altså:

1
1
2

1
2

1
2

hvis programmet ikke kan kende forskel, vil den bare tage alle de id der har kombinationen 1,2 og printe ud til skækrmen, og det var ikke det der var meningen. lige nu gør programmet det, at lige så snart den har fundet en lang sekvens, så reseter den og læser forfra i tekstfilen, således at den får den forrige kombination med. det var elllers meningen at når den havde fundet den lange sekvens skulle den starte med at læse der hvor den lange sekvens sluttede. jeg har prøvet at følge dit forslag, med også at sige hvis seq.size()<2. men når jeg gør det skriver den ingenting ud til skærmen. hvis der er noget jeg gør forkert ville jeg meget gerne vide det?



Først; jeg har en (måske lidt ubegrundet) mistro til tråde med tilsyneladende simple spørgsmål der alligevel trække ud i mere end 50 kommentarer. For mig at se er din opgave ret simpel og du har alle de informationer og kodestumper der skal til for at løse den. Resten er i mine øjne et spørgsmål om ren logik og omtanke.

Dernæst, jeg kan ikke rigtigt se om der gemmer sig et spørgsmål i din seneste kommentar. Du spørger om du gør noget galt, til det vil jeg svare; hvis ikke programmet virker som det skal, er der noget galt.

Så jeg synes du skal gøre en ærlig og ihærdig indsats for at løse det problem, hvis du går i stå, så post koden og fortæl præcist hvad der går galt.



Først; jeg har en (måske lidt ubegrundet) mistro til tråde med tilsyneladende simple spørgsmål der alligevel trække ud i mere end 50 kommentarer. For mig at se er din opgave ret simpel og du har alle de informationer og kodestumper der skal til for at løse den. Resten er i mine øjne et spørgsmål om ren logik og omtanke.

Dernæst, jeg kan ikke rigtigt se om der gemmer sig et spørgsmål i din seneste kommentar. Du spørger om du gør noget galt, til det vil jeg svare; hvis ikke programmet virker som det skal, er der noget galt.

Så jeg synes du skal gøre en ærlig og ihærdig indsats for at løse det problem, hvis du går i stå, så post koden og fortæl præcist hvad der går galt.


jeg forstår. jeg beklager at spørgsmålet har tukket så langt ud. jeg tror også jeg har nok information nu til at gå videre med programmet. jeg vil gerne takke dig for at have assisteret så meget med projektet, og for din store tålmodighed. der kommer ikke flere spørgsmål.



Du er naturligvis velkommen til at spørge hvis du går i stå, men jeg tror du får mest ud af at arbejde dig lidt mere i dybden med det på egen hånd.



t