Vill du vara del av diskussionerna i forumet, ställa frågor eller hjälpa andra? Registrera dig här!

C++ Hjälp, arrays utan givet element

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Jul 2020

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

Trädvy Permalänk
Medlem
Registrerad
Nov 2011

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;

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

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Jul 2020

@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.

Trädvy Permalänk
Hedersmedlem
Plats
Uppsala
Registrerad
Jul 2001

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.

X370 Taichi / R7 1700 @ 3.75 GHz 1.2 V / 48 GB 3200 MHz CL14 / MSI GTX 1070 Gaming, OC / Samsung 960 EVO 500 GB / Corsair RM650x
LG G6 (H870)

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Jul 2020
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?

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2007

@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.

Trädvy Permalänk
Medlem
Plats
Södra norrland
Registrerad
Jul 2003

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.

Stationär: R9 3900X | 32GB@3200MHz | HD7970 | Seasonic Prime Platinum 850W | Fractal Define R6 |
Gamla bettan: i5 750@3.8GHz | 8GB | HD5770 | Corsair VS 550W | FD R2 |

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Jul 2020

@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!

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Jul 2020

@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!

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Jul 2020
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

Trädvy Permalänk
Medlem
Plats
Söderbärke
Registrerad
Nov 2010
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

Nörd, utvecklare, pappa, löpartokig, vegan och besserwisser.

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

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Jul 2020
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.