Just nu i M3-nätverket
Jump to content

C++ Läsa in värde till array/vektor


humlan2
 Share

Recommended Posts

Jag har en uppgift i c++ där programmet ska fråga om ett antal tal och medelvärde, största/näst största talet och summan ska skrivas ut. Har koll på hur jag gör detta, men utan flera funktioner(som delvis krävs, plus att jag vill lära mig). 

Jag ska använda arrays/vektor för att lagra talen som skrivs in.

Hur läser jag in tal till en array från användaren? Alltså utan element. Luddigt beskrivet, men jag hittar inget om hur jag löser detta. 

Tack på förhand! :)

Edited by humlan2
Link to comment
Share on other sites

På 2020-07-14 på 13:22, skrev humlan2:

Jag ska använda arrays/vektor för att lagra talen som skrivs in.

Hur läser jag in tal till en array från användaren? Alltså utan element. Luddigt beskrivet, men jag hittar inget om hur jag löser detta. 

Borde inte vektorn vara definierad med ett antal element. Det framgår inte av din beskrivning, men jag antar att det är fördefinierat hur många tal som användaren ska skriva in.

 

Din vektor bör då ha minst lika många element som det antal tal som ska skrivas in.

 

Sedan borde det bli någon form av loop som loopar igenom varje element i din vektor. För varje varv får användaren mata in ett nytt tal.

 

När alla tal är inmatade kan du loopa igenom din vektor på nytt och beräkna medelvärde, största/näst största talet och summan. Hur du löser det kodmässigt får du fundera över, men det är sådan problemlösning som är rolig.

 

Link to comment
Share on other sites

På 2020-07-16 på 07:36, skrev Automan:

Borde inte vektorn vara definierad med ett antal element. Det framgår inte av din beskrivning, men jag antar att det är fördefinierat hur många tal som användaren ska skriva in.

 

Din vektor bör då ha minst lika många element som det antal tal som ska skrivas in.

 

Sedan borde det bli någon form av loop som loopar igenom varje element i din vektor. För varje varv får användaren mata in ett nytt tal.

 

När alla tal är inmatade kan du loopa igenom din vektor på nytt och beräkna medelvärde, största/näst största talet och summan. Hur du löser det kodmässigt får du fundera över, men det är sådan problemlösning som är rolig.

 

Det finns inget definierat antal tal. Användaren ska kunna skriva in hur många tal som helst, det är problemet. Hade jag kunnat ange antal element hade jag kunnat lösa det, men jag hittar ingenting om hur man kan använda arrays utan fördefinerat element. 

Link to comment
Share on other sites

Då får du antingen initialisera en löjligt stor vektor som du sparar data i eller så får du efterhand allockera mer minne åt din vektor.

rekommenderar det senare alla dar i veckan.

 

Var år och dar sedan jag skrev en rad c++ men kika på malloc och realloc

https://www.programiz.com/cpp-programming/library-function/cstdlib/realloc

 

Exempelvis göra det steg i om 10 poster eller vad du tror räcker normalt.

Link to comment
Share on other sites

På 2020-07-14 på 13:22, skrev humlan2:

Jag har en uppgift i c++ där programmet ska fråga om ett antal tal och medelvärde, största/näst största talet och summan ska skrivas ut. Har koll på hur jag gör detta, men utan flera funktioner(som delvis krävs, plus att jag vill lära mig). 

Jag ska använda arrays/vektor för att lagra talen som skrivs in.

Behöver du ens lagra de inskrivna talen?

Det bör räcka med att hela tiden hålla reda på antalet inskrivna tal, summan av alla hittills inskrivna tal samt hittills största och näst största tal.

Link to comment
Share on other sites

På 2020-07-18 på 18:38, skrev Cecilia:

Behöver du ens lagra de inskrivna talen?

Det bör räcka med att hela tiden hålla reda på antalet inskrivna tal, summan av alla hittills inskrivna tal samt hittills största och näst största tal.

Jag har tolkat läraren som att man ska använda vektor i form av array(fanns bifogade handledningar om arrays till uppgiften), dock står det inte i uppgiften utan det står bara "Programmet ska vara uppbyggt av ett antal funktioner med olika in och ut parametrar".

Jag har suttit och försökt lagra talen utan att ha ett givet index/element men jag struntar i att använda vektorer. 

Hur "håller jag reda på" hur många tal det är resp. talen? När jag läser in talen, hur läser jag in hur många tal det är resp talen? Om du förstår hur jag menar.  

Link to comment
Share on other sites

46 minuter sedan, skrev humlan2:

Hur "håller jag reda på" hur många tal det är resp. talen? När jag läser in talen, hur läser jag in hur många tal det är resp talen? Om du förstår hur jag menar.  

Du får använda dig av ett antal variabler som du lagrar dina värden i. Sedan en loop som upprepas till dess att inget nytt tal matas in. För varje varv i loopen beräknar du ett medelvärde, kollar om den inmatade talet är det största så lång och sparar det, minsta och sparar det samt en totalsumma som räknas upp för varje varv.

 

När inga fler tal matas in avslutar du loopen och skriver ut uppgifterna.

 

Om du enligt uppgiften måste använda dig av en array, ersätter du variablerna med en array som har lika många element som de olika tal du behöver lagra (Max, Min, Medel, Summa mm). Sedan blir loopen samma som tidigare, men istället för att spara i olika variabler refererar du till respektive element i arrayen, där du sparar värdena.

Link to comment
Share on other sites

7 minuter sedan, skrev Automan:

Du får använda dig av ett antal variabler som du lagrar dina värden i. Sedan en loop som upprepas till dess att inget nytt tal matas in. För varje varv i loopen beräknar du ett medelvärde, kollar om den inmatade talet är det största så lång och sparar det, minsta och sparar det samt en totalsumma som räknas upp för varje varv.

 

När inga fler tal matas in avslutar du loopen och skriver ut uppgifterna.

 

Om du enligt uppgiften måste använda dig av en array, ersätter du variablerna med en array som har lika många element som de olika tal du behöver lagra (Max, Min, Medel, Summa mm). Sedan blir loopen samma som tidigare, men istället för att spara i olika variabler refererar du till respektive element i arrayen, där du sparar värdena.

Kan arrayn då ha i detta fall 4 element (för just max, min, medel, summa), och inte antal element för inmatade tal? Eller missförstår jag dig? 

Tack så mycket för svar! 

Link to comment
Share on other sites

9 timmar sedan, skrev humlan2:

Kan arrayn då ha i detta fall 4 element (för just max, min, medel, summa), och inte antal element för inmatade tal?

Ja, men det låter inte som god programmeringsvana att samla 4 olika sorters tal i en array.

 

Sen är det nog inte medel som ska sparas utan antal inlästa tal så att man kan beräkna medelvärdet utifrån summan och antalet när all inläsning är gjord.

Link to comment
Share on other sites

6 timmar sedan, skrev Cecilia:

Ja, men det låter inte som god programmeringsvana att samla 4 olika sorters tal i en array.

 

Sen är det nog inte medel som ska sparas utan antal inlästa tal så att man kan beräkna medelvärdet utifrån summan och antalet när all inläsning är gjord.

Hur läser jag in antal tal resp. talens värde/summa för att beräkna bla största tal? 

Link to comment
Share on other sites

1 minut sedan, skrev Cecilia:

Skriva kod för att läsa in tal har du väl gjort förr?

Hur brukar det se ut?

Jadå. Men då har jag bara läst in ett tal alt. flera inmatningar (flera "frågor"). Jag vet inte hur jag läser in talen och hur många tal det är för att kunna dela summan med antal tal 

Link to comment
Share on other sites

13 minuter sedan, skrev humlan2:

Jag vet inte hur jag läser in talen och hur många tal det är för att kunna dela summan med antal tal 

Du behöver en loop för detta som upprepas så länge användaren matar in nya tal. När användaren trycker ENTER utan att ange något tal, låter du loopen avslutas. Antal inmatade tal är detsamma som det antal varv loopen har gjort.

 

Link to comment
Share on other sites

Du behöver inte veta hur hela koden ska skrivas från början utan börja med det du redan kan t ex att läsa in ett tal. En loop, t ex en for-loop, har du kanske också använt tidigare.

Link to comment
Share on other sites

1 timme sedan, skrev Cecilia:

Du behöver inte veta hur hela koden ska skrivas från början utan börja med det du redan kan t ex att läsa in ett tal. En loop, t ex en for-loop, har du kanske också använt tidigare.

Tack för tipset, ska göra så. Tror jag krånglar till det en hel del för mig själv. Jadå, det har jag koll på. 

Link to comment
Share on other sites

Det är alltid bra att ta det stegvis, börja med det man har gjort förut och så lägger man in en funktion i taget, t ex först hålla reda på antalet inlästa tal och sen lägga till att summera talen osv.

 

Men klistra gärna in dina förslag på kod för att få synpunkter på dem.

Link to comment
Share on other sites

4 minuter sedan, skrev Cecilia:

Det är alltid bra att ta det stegvis, börja med det man har gjort förut och så lägger man in en funktion i taget, t ex först hålla reda på antalet inlästa tal och sen lägga till att summera talen osv.

 

Men klistra gärna in dina förslag på kod för att få synpunkter på dem.

Ja det blir ju lättare. 

Ska sitta lite till med koden, sen lägger jag in den här! 

Link to comment
Share on other sites

21 timmar sedan, skrev Cecilia:

Det är alltid bra att ta det stegvis, börja med det man har gjort förut och så lägger man in en funktion i taget, t ex först hålla reda på antalet inlästa tal och sen lägga till att summera talen osv.

 

Men klistra gärna in dina förslag på kod för att få synpunkter på dem.

Jag tänker istället att jag frågar hur många tal som ska matas in, skapar en array med pekare. (För att använda array utan givet element). Jag vet att jag måste ha en forloop för antal tal samt en för värden av talen. Min kod ser ut såhär än sålänge: (Är medveten om att vissa variabler ev är onödiga) 

 

#include <iostream>

using namespace std;

void sortera (int vekt[], int n);

int main() {

    // insert code here...

    float medelv, max, nmax, summa;

    int*pekare;

    int tallista, i;

    

    cout<<"Hur många tal ska matas in?: "<<endl;

    cin>>tallista;

    pekare = new int[tallista];

 

    if((pekare = new int[tallista]) == 0) //programmet avbryts

    {

        cerr<<"Minnet slut. Programmet avbryts!: ";

        exit(1);

    }

    //programmet fortsätter

    for (int i=0; i<tallista; i++)

    {

        <#statements#>

    }

    cin>>*pekare;

    pekare++;

    

    for (<#initialization#>; <#condition#>; <#increment#>) { //är osäker om jag ska placera forloopen här

        <#statements#>

    }

    

    return 0;

}

 

Vart placerar jag forloopen för värdena? 

Tänker att jag ska använda mig av sortering, tycker du det är en bra ide? 

Jag har Mac så jag kan inte använda #include <conio.h> utan får använda cin.get(); istället, ska jag placera det på några ställen förutom längst ner i koden? Om du vet detta. 

 

Tack så mycket för hjälpen! 

Link to comment
Share on other sites

Om detta är allt som ska beräknas:

Citat

medelvärde, största/näst största talet och summan ska skrivas ut

så blir det bara mycket krångligare av att först hålla på och spara alla tal och sen gå igenom alla sparade tal för att hitta det minsta resp. största.

 

Jag skulle ha dessa variabler:

storsta

nast_storsta

summa

antal

 

För varje inläst tal, ökar man antal, adderar till summa och kollar om det är större eller mindre än storsta och i så fall tilldelar man storsta till det just inlästa talet. Motsvarande för nast_storsta.

 

 

Link to comment
Share on other sites

4 minuter sedan, skrev Cecilia:

Om detta är allt som ska beräknas:

så blir det bara mycket krångligare av att först hålla på och spara alla tal och sen gå igenom alla sparade tal för att hitta det minsta resp. största.

 

Jag skulle ha dessa variabler:

storsta

nast_storsta

summa

antal

 

För varje inläst tal, ökar man antal, adderar till summa och kollar om det är större eller mindre än storsta och i så fall tilldelar man storsta till det just inlästa talet. Motsvarande för nast_storsta.

 

 

Använder man enbart en forloop i så fall? Eller ska jag ha kvar det jag har och sedan göra en till forloop för att gå genom de sparade talen? 

Link to comment
Share on other sites

  • 7 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share



×
×
  • Create New...