webForumDet fria alternativet

pekare....

5 svar · 274 visningar · startad av Ciliax

CiliaxMedlem sedan jan. 2004170 inlägg
#1

Halloj.... Nybörjarn igen! :) Nu har jag ett litet dilemma med pekare som jag inte riktigt förstår....

jag har en loop som med hjälp av pekare ska köra igenom ett fält av int. Tre saker ska göras i loopen... 1 räkna ihop summan, 2 ta ut det största talet, 3 ta ut det minsta talet i vektorn.

summan är inget problem.. men som jag försöker lösa det.. så får jag inte ut det största och det minsta talet på detta vis... måste missa nått... hjälp en blind på väg.....

problemet blir att mnär jag skriver ut max och min pekarna.. så skrivs samma tal ut.... det tal som loop pekarn pekade på sist... varför??

int *max = tal,*min = tal,summa = 0;      /*skapar och initierar varibler för max,min, summa
                                                        max och min är pekare som initieras att peka på det
                                                        första elementet. summa är en vanlig int som sätts till 0
                                                        */

        /*
        loop som tar en int pekare och låter den peka på första talet i den dynamiska
        vektorn. Sedan stegar vi oss vektorn(fältet) med hjälp av pekaren och pekar-
        aritmetik och gör de uträkningar som programmet skall göra på vektorn.
        */
        for(int *ip = tal;ip < tal + antal; ip++)
        {

               cout << *ip << endl ;

               summa += *ip ;                  //adderar summan av alla tal

                if(*ip>*max)                     //om det aktuella talet är större än det största
                       *max = *ip ;             //så är det aktuella talet det största och byte sker

                if(*ip<*min)
                       *min = *ip ;
        }

        cout << "summa " << summa << endl;
        cout << "min " << *min << endl;
        cout << "max " << *max << endl;

Tacksam för svar...

/ciliax

CiliaxMedlem sedan jan. 2004170 inlägg
#2

om nån behöver mer info så är det bara å säg till !:)

GunnarDMedlem sedan juni 20014 290 inlägg
#3

/red: glöm det.

PeWMedlem sedan juni 200010 432 inlägg
#4

Du ville nog ändra på vad min och max pekar på, men du ändrade istället värdet på det som de ursprungligen pekade på: första elementet i arrayen. Så genom att ta bort lite stjärnor så borde det fungera bättre:

Så:

int *max = tal,*min = tal,summa = 0;      
        for(int *ip = tal;ip < tal + antal; ip++)
        {

               cout << *ip << endl ;

               summa += *ip ;                  //adderar summan av alla tal

                if(*ip>*max)                     //om det aktuella talet är större än det största
                       max = ip ;             //så är det aktuella talet det största och byte sker

                if(*ip<*min)
                       min = ip ;
        }

        cout << "summa " << summa << endl;
        cout << "min " << *min << endl;
        cout << "max " << *max << endl;
CiliaxMedlem sedan jan. 2004170 inlägg
#5

Jag bugar å tackar för hjälpen. Suttit lite för länge då jag inte såg det själv.. men tackar sjukt mycke för hjälpen! :)

PeWMedlem sedan juni 200010 432 inlägg
#6

OK :)

129 ms totalt · 3 externa anrop · v20260731065814-full.30151723
127 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)