• 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

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in