Just nu i M3-nätverket
Gå till innehåll

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


humlan2
 Share

Rekommendera Poster

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! :)

Redigerad av humlan2
Länk till kommentar
Dela på andra webbplatser

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.

 

Länk till kommentar
Dela på andra webbplatser

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. 

Länk till kommentar
Dela på andra webbplatser

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.

Länk till kommentar
Dela på andra webbplatser

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.

Länk till kommentar
Dela på andra webbplatser

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.  

Länk till kommentar
Dela på andra webbplatser

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.

Länk till kommentar
Dela på andra webbplatser

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! 

Länk till kommentar
Dela på andra webbplatser

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.

Länk till kommentar
Dela på andra webbplatser

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? 

Länk till kommentar
Dela på andra webbplatser

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

Hur brukar det se ut?

Länk till kommentar
Dela på andra webbplatser

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 

Länk till kommentar
Dela på andra webbplatser

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.

 

  • Gilla 1
Länk till kommentar
Dela på andra webbplatser

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.

Länk till kommentar
Dela på andra webbplatser

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

Länk till kommentar
Dela på andra webbplatser

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.

Länk till kommentar
Dela på andra webbplatser

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! 

Länk till kommentar
Dela på andra webbplatser

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! 

Länk till kommentar
Dela på andra webbplatser

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.

 

 

Länk till kommentar
Dela på andra webbplatser

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? 

Länk till kommentar
Dela på andra webbplatser

  • 7 months later...
 Share



×
×
  • Skapa nytt...