---
title: "räkna ut maxvärdet i arrayen"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/161989-räkna-ut-maxvärdet-i-arrayen"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "Vinnaren"
published: "2007-06-27T08:26:41.000Z"
updated: "2007-06-28T12:32:30.000Z"
replies: 9
views: 824
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/161989-räkna-ut-maxvärdet-i-arrayen"
---

# räkna ut maxvärdet i arrayen

## #1 — Vinnaren, 2007-06-27T08:26Z

Hej

Jag behöver lite hjälp med mitt program jag håller på med.

Har hittills följande kod:

```
#include "stdafx.h"
#include <iostream>   
#include <iomanip>   
using namespace std;

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int size;
    cout << "Ange ett heltal: ";
    cin >> size;

    int *v = new int[size];                 

    srand ( time(NULL) );                             

    for(int i=0; i<size; i++)               
    {
        v[i] = rand() % 10000 - 5000;       
    }

    for(int i=0; i<size; i++)              
    {
        cout << setw(5) << v[i];
    }

	return 0;
}
```

 

Denna slumpar ett antal tal samt skriver ut dessa. Nu vill jag räkna ut Maxvärdet med hjälp av en pekare. När den har loopat igenom arrayen ska den peka på det största slumpade talet som finns i arrayen.

Hur löser jag detta??

Tacksam för all hjälp

Permalänk: https://www.webforum.nu/p/161989

## #2 — Peter S, 2007-06-27T08:37Z

```
    int* max = &v[0];
    for (int i = 1; i < size; ++i)
    {
        if (v[i] > *max)
        {
            max = &v[i];
        }
    }

    cout << "Max: " << *max << endl;
```

Permalänk: https://www.webforum.nu/p/1996457

## #3 — Vinnaren, 2007-06-27T09:01Z

tack   :bire 

Om jag nu även vill räkna ut summan av talen med hjälp av pekaren. Har provat följande kod:

```
    int *sum = &v[0];
    for (int i = 1; i < size; ++i)
    {
        sum += &v[i];
    }
```

 

men det ger felmeddelandet:
error C2110: '+' : cannot add two pointers

Hur löser jag detta?   :i

Permalänk: https://www.webforum.nu/p/1996463

## #4 — spango, 2007-06-27T09:37Z

sum ska inte vara en pekare, det ska vara en int. Som du gör nu tar du adressen till första elementet i *v* och lägger i *sum*, och försöker sen loopa över *v* och lägga till adressen till varje element till *sum*. Det är inte vettigt att försöka addera två pekare (pekare + int går dock bra, det är ungefär samma sak som att indexera i  en array).

Dessutom är *int \*pekare = &array\[0\]* bara är en onödigt lång version av *int \*pekare = array* eftersom en pekare och en array är samma sak. 

```
int sum = 0;
for (int *p = v; p < v + size; ++p)
    sum += *p;
```

Permalänk: https://www.webforum.nu/p/1996470

## #5 — Vinnaren, 2007-06-27T09:51Z

aha, ok. Tack  :bire

En liten sak jag tänkte på.
Om man vill att min utskrift ska stoppas för var 200:e element som innehåller de slumpade talen.
Hur skulle man kunna lösa det? 
Har följande kod:

```
    for(int i=0; i<size; i++)               
    {
        cout << setw(5) << v[i] << ", ";
    }
```

Permalänk: https://www.webforum.nu/p/1996476

## #6 — Peter S, 2007-06-27T10:09Z

Vad menar du med "stoppas"? Radbrytning? Eller skall loopen avslutas?

```
    for(int i=0; i<size; i++)               
    {
        cout << setw(5) << v[i] << ", ";
        // radbrytning
        if ((i+1) % 200 == 0) cout << endl;
        // avbryt
        // if ((i+1) % 200 == 0) break;

    }
```

Permalänk: https://www.webforum.nu/p/1996479

## #7 — Vinnaren, 2007-06-27T10:13Z

tack  Peter S  och  spango  för hjälpen, nu funkar det perfa     :p

Permalänk: https://www.webforum.nu/p/1996480

## #8 — Vinnaren, 2007-06-28T12:15Z

har fått ett litet problem med mina pekare, igen   :r 

har följande kod:

```
    int *max = v[0];
    int *min = v[0];
    int sum = 0;

    for (int *p = v; p < v + size; ++p)
    {
        if (*p > *max)
        {
            *max = *p;
        }

        if (*p < *min)
        {
            *min = *p;
        }

        sum+=*p;

    }
```

 

men får felmeddelandet:

'initializing' : cannot convert from 'int' to 'int \*'

Vad har jag gjort för fel och hur löser jag det?

Tacksma för all hjälp  :stud

Permalänk: https://www.webforum.nu/p/1996797

## #9 — spango, 2007-06-28T12:24Z

Du deklarerar max och min som int\*, men du initierar dem till vanliga int:ar (eftersom v\[0\] är en avreferering av en pekare). Antingen får du göra dem till vanliga int:ar, eller så får du låta dem peka på något istället. Dessutom skulle du i ditt nuvarande sätt skriva över v\[0\] med såväl det största som det minsta talet :)

```
[i]variant 1 - använd int:ar[/i]
    int max = v[0];
    int min = v[0];
    int sum = 0;
    for (int *p = v; p < v + size; ++p)
    {
        if (*p > max)
            max = *p;
        if (*p < min)
            min = *p;
        sum+=*p;
    }
[i]variant 2 - använd pekare på riktigt sätt[/i]
    int *max = NULL;
    int *min = NULL;
    int sum = 0;
    for (int *p = v; p < v + size; ++p)
    {
        if (!max || *p > *max)
            max = p;
        if (!min || *p < *min)
            min = p;
        sum+=*p;
    }
```

(*!max* och *!min* är ekvivalent med *max == NULL* resp. *min == NULL*)

En fin sak med nummer två är att den dessutom funkar bra även om size råkar vara 0, vilket inte ettan gör. Om så är fallet är pekarna max och min NULL när loopen är slut, annars pekar de på elementen i v som störst resp. minst värde.

Permalänk: https://www.webforum.nu/p/1996802

## #10 — Vinnaren, 2007-06-28T12:32Z

aha, ok. Tack   :bire

Permalänk: https://www.webforum.nu/p/1996804

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/161989-räkna-ut-maxvärdet-i-arrayen
