• 2
  • 3
2021-07-25, 20:55
  #25
Medlem
hogerspokets avatar
Funderar lite på 'ordna(...)':

Kod:
// ordnar talen i följd, så att man får rätt ordning även om man väljer det stora talet först

Kommentaren är ju lite tvetydig, men handlar det om att tal1 ska vara mindre än tal2?

Isf är ju fyra variabler overkill...

Är det inte bara att skicka in pekare till tal1 och tal2, plocka ut resp. värde, göra jämförelse och därefter göra en 'switcharoo' mellan de två variablerna om så behövs?

Eller missar jag något fundamentalt?

Pseudo:
Kod:
void ordna(int* p_tal1, int* p_tal2)
{
  if(*p_tal1 > *p_tal2) // om innehållet i p_tal1 är större än p_tal2
  {
    int* p_buffer = p_tal1; // mellanlagra pekaradressen för tal1
    p_tal1 = p_tal2; //switcharoo, p_tal1 pekar nu på p_tal2 (alltså det minsta talet)
    p_tal2 = p_buffer; //switcharoo, p_tal2 pekar nu på p_tal1 (alltså det största talet)
  }
}
Anropas således med:
Kod:
ordna(&tal1, &tal2); // alltså adressen till resp. variabel
Har inte skrivit en rad c på 10 år så det finns risk för att jag förvirrat mig med pekararitmetiken -- har inte min Kernigan/Ritchie tillgänglig för konsultation.


-ed-

Såg att denna lösning föreslogs i spoiler, på föregående sida.

Så kan det gå om man inte läser ordentligt.
__________________
Senast redigerad av hogerspoket 2021-07-25 kl. 20:59.
Citera
2021-07-27, 10:48
  #26
Medlem
Citat:
Ursprungligen postat av Pontiac-Garage
ordna()-funktionen funkar korrekt men problemet ligger i att du fortsätter att skicka talen tal1 och tal2 vidare till de andra funktionerna som körs efter ordna(), dvs. berakna() samt skrivResultat().

I berakna() skickar du tal1 och tal2 som argument, när ordna() har gjort att det istället är variablerna min och max som du vill ha. min och max används ej heller som globala variabler i funktionen berakna(). Du vill alltså ersätta de två första variablerna med de två senare, ej fortsätta jobba med de två första efter att ordna() har körts.

Vidare är det onödigt att ha dubbel uppsättning av variabler, det är betydligt enklare att bara sätta pekare till tal1 och tal2 direkt i ordna()-funktionen. Provade nedan att bygga om funktionen så att den byter plats på tal1 och tal2 om de har fel ordning, där en tillfällig (lokal) variabel används som övergång. tal1 och tal2 används sedan direkt i main() då de har pekare.


Stort tack för hjälpen!!
Citera
  • 2
  • 3

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