C++ Hjälp, arrays utan givet element

Permalänk
Medlem

C++ Hjälp, arrays utan givet element

Hej!
Jag läser en kurs i programmering 1 och har en uppgift där ett program ska fråga efter ett antal tal, för att beräkna och skriva ut medelvärdet, summan samt största resp näst största talet.
Man ska använda vektor, men tydligen inte #include<vector> utan arrays. Kan man använda arrays utan att ha en given storlek på den? Jag kan såklart använda vector, men funktionen finns inte med i onlineboken/lärarens material.

Hur läser jag i så fall in tal fr. "användaren" till arrayn?
Är nybörjare, och har inte så mycket koll!
Tack på förhand

Permalänk
Medlem

Här kan du läsa på om arrays i C++

En arrays storlek måste vara känd vid initialisering och du lägger till element genom att tilldela ett specifikt index.

T.ex:

ary[0] = 5;

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Medlem

@noMad17:
Så jag måste ha ett "maxvärde"?
Det går inte att ha t.ex. 4 som index/element då det är 4 "listor" som ska skrivas ut? Jag kanske tänker helt fel.

Permalänk
Hedersmedlem

Har ni lärt er om dynamisk allokering? Isåfall kan du använda new/delete (rekommenderas i allmänhet inte nu för tiden) eller smarta pekare för att allokera efter att du frågat användaren om antalet.

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
Mobil: Moto G200

Permalänk
Medlem
Skrivet av Thomas:

Har ni lärt er om dynamisk allokering? Isåfall kan du använda new/delete (rekommenderas i allmänhet inte nu för tiden) eller smarta pekare för att allokera efter att du frågat användaren om antalet.

Nej det har vi inte. Läste om det, både med/delete och pekare. Tänkte om det fanns något sätt man kunde göra som läraren beskrivit. Får kolla upp mer om pekare och använda det, är pekare det bästa alternativet enligt dig?

Permalänk
Medlem

@humlan98: Man kan allokera en array dynamisk med new, vilket är vad std::vector gör internt. Men i modern C++ använder man i regel inte "råa" arrayer utan std::vector eller std::array istället, eftersom de är enklare att använda och minskar risken för misstag. Det är dock fortfarande viktigt att förstå hur arrayer fungerar.

Men eftersom det är en nybörjaruppgift så gissar jag att du helt enkelt bara ska deklarera en array som är lagomt stor, och se till att användaren inte matar in fler tal än vad som får plats.

Det finns dock egentligen inget behov att lagra talen som matas in. Summan kan räknas löpande, medelvärdet är summan delat på antalet inmatade tal, och de två största talen är bara att lagra i två variabler som man uppdaterar när nya tal matas in. Men säger uppgiften att du ska lagra talen i en array så bör du antagligen göra det, annars lär du inte få uppgiften godkänd.

Permalänk
Medlem

Vet ni antalet tal i förväg? Annars kan du kanske börja med att fråga användaren om hur många tal som avses, skapa en array av den storleken och sedan fylla den.

Visa signatur

Primär: R9 3900X | ASUS X570-F Gaming | NH-D15 | 64GB@3200MHz | RTX 3080 10GB | Seasonic 850W | Fractal Define R6 |
Gamla bettan: i5 750@3.8GHz | 8GB | HD5770 | Corsair VS 550W | FD R2 |

Permalänk
Medlem

@perost:
Det är inget måste men för att få A på uppgiften krävs fler funktioner i programmet. Det står ingenting i uppgiften om ett maxantal tal, i så fall får jag väl göra array med ett godtyckligt värde. Skrivit till läraren ang. uppgiften men han är extremt oklar så var inte till någon hjälp.
Borde ju kunna använda vector, eftersom det är vad som generellt används. Får leta upp "guider" om det. Det står inte att man ska använda arrays, men eftersom det är vad som är beskrivet i lärarens material + i onlineboken antar jag att det ska användas.
Tack!

Permalänk
Medlem

@Daz:
Nej, antal tal är okänt då användaren får mata in hur många tal den vill.
Men det låter absolut som en bra idé. Det viktigaste är ju att jag får med fler funktioner i uppgiften.

Men då undrar jag hur överför jag det inmatade talet till en array? Som sagt har jag inte supermycket koll.
Tack!

Permalänk
Medlem
Skrivet av perost:

@humlan98: Man kan allokera en array dynamisk med new, vilket är vad std::vector gör internt. Men i modern C++ använder man i regel inte "råa" arrayer utan std::vector eller std::array istället, eftersom de är enklare att använda och minskar risken för misstag. Det är dock fortfarande viktigt att förstå hur arrayer fungerar.

Men eftersom det är en nybörjaruppgift så gissar jag att du helt enkelt bara ska deklarera en array som är lagomt stor, och se till att användaren inte matar in fler tal än vad som får plats.

Det finns dock egentligen inget behov att lagra talen som matas in. Summan kan räknas löpande, medelvärdet är summan delat på antalet inmatade tal, och de två största talen är bara att lagra i två variabler som man uppdaterar när nya tal matas in. Men säger uppgiften att du ska lagra talen i en array så bör du antagligen göra det, annars lär du inte få uppgiften godkänd.

Skrivet av Daz:

Vet ni antalet tal i förväg? Annars kan du kanske börja med att fråga användaren om hur många tal som avses, skapa en array av den storleken och sedan fylla den.

Uppgiften är såhär:

Uppgiften ska innehålla:
En analysdel
Pseudokoden eller strukturdiagram
Väl kommenterad källkod.

Skriv ett program som frågar efter ett antal tal och skriver ut summan och medelvärdet av de inmatade talen. Användaren ska ange 0 i slutet av talserien. Programmet ska dessutom skriva ut det näst största och det största talet. Programmet ska vara uppbyggt av ett antal funktioner med olika in och ut parametrar.

Exempel från körning:

Ange ett antal tal : 10 12 -5 20 -2 15 0
Summan = 50
Medelv. = 8.3
Största talet = 20
Näst största =15

Permalänk
Medlem
Skrivet av humlan98:

Uppgiften är såhär:

Uppgiften ska innehålla:
En analysdel
Pseudokoden eller strukturdiagram
Väl kommenterad källkod.

Skriv ett program som frågar efter ett antal tal och skriver ut summan och medelvärdet av de inmatade talen. Användaren ska ange 0 i slutet av talserien. Programmet ska dessutom skriva ut det näst största och det största talet. Programmet ska vara uppbyggt av ett antal funktioner med olika in och ut parametrar.

Exempel från körning:

Ange ett antal tal : 10 12 -5 20 -2 15 0
Summan = 50
Medelv. = 8.3
Största talet = 20
Näst största =15

Står det exakt sådär i uppgiften? I så fall så behöver du aldrig lagra de inmatade talen. Står ju ingenting om array, vector eller lagring av tal.

Ha istället 4 variabler:
Störst tal - kolla om det nya inmatade talet är större än detta
Näst störst tal - kolla om det nya inmatade talet är större än detta men mindre än störst tal
Antal inmatade tal(för att beräkna medelvärde)
Summa av inmatade tal.

Sedan kan du ha en funktion för beräkning av varje variabel, för att få ett A i uppgiften

Visa signatur

Outtröttlig, löpartokig besserwisser!

Bli vegan! För djuren, planeten, hälsan och våra barns skull!

Permalänk
Medlem
Skrivet av NisseG91:

Står det exakt sådär i uppgiften? I så fall så behöver du aldrig lagra de inmatade talen. Står ju ingenting om array, vector eller lagring av tal.

Ha istället 4 variabler:
Störst tal - kolla om det nya inmatade talet är större än detta
Näst störst tal - kolla om det nya inmatade talet är större än detta men mindre än störst tal
Antal inmatade tal(för att beräkna medelvärde)
Summa av inmatade tal.

Sedan kan du ha en funktion för beräkning av varje variabel, för att få ett A i uppgiften

Ja det är så det står. Anledningen till att jag tror att jag ska ha med arrays är att det är 3 "genomgångar" bifogat i uppgiften, 2 med funktioner och 1 med vektor. Skrev till läraren om man skulle använda vektor(arrays), han svarade att om man vill nå högre betyg är det bättre.