åller på med ett program där man ska mata in 100 stycken värden, och sedan ska man i en meny kunna välja om man vill se högsta värdet, lägsta värdet, medelvärdet, en lista med alla värden eller avsluta programmet. Jag kan börja med några kommentarer: Tack för tipsen :) Okej, grundprincipen ärSortering av vektor
Men har nu kört fast totalt på hur jag ska sortera värdena, vet att jag ska använda mig av en for-sats, men hur jag än gör så fungerar det inte.
Skulle uppskatta om någon kunde hjälpa till lite på vägen.
Koden än så länge:
#include <iostream>
#include <stdlib.h>
using namespace std;
void main()
{
const double antVarden = 100;
double hogstaVarde, lagstaVarde, medel, sum = 0;
double varde[1];
int val, i;
// Beräkningar
for (i=1; i<=antVarden; i++)
{
cout << "Ange värde " << i;
cin >> varde[i];
sum += varde[i];
}
medel = sum / antVarden;
// Meny
cout << "1. Största värdet" << endl;
cout << "2. Lägsta värdet" << endl;
cout << "3. Medelvärdet" << endl;
cout << "4. Lista" << endl;
cout << "5. Avsluta" << endl;
cout << endl << "Välj: ";
cin >> val;
switch (val)
{
case 1:
cout << " är störst";
break;
case 2:
cout << " är minst";
break;
case 3:
cout << "Medel är " << medel;
break;
case 4:
cout << "Lista";
break;
case 5:
cout << "Avsluta ";
break;
}
cin.get();
}Sv: Sortering av vektor
1. Du har deklarerat din array till bara ett element; du får använda antVarden när du deklarerar den, för att det ska bli bra (programmet kan fungera nu, men i så fall är det ren tur).
2. antVarden borde vara int istället för double.
3. Att använda gammaldags C-arrayer (double x[i]) är inte speciellt meningsfullt. Det är bättre att använda std::vector<double>. Så om du gör det här på eget bevåg bör du byta, om det är del av en kurs så borde du klaga på att ni använder er av ålderdomliga tekniker i onödan.
4. Jag skulle definitivt vänta med utskriftsvalet. Skriv ut alla värden direkt istället, och ta den biten sist, så kan du fokusera på att få programmet att fungera.
Sen är frågan; behöver du sortera listan?
Vad man ofta gör är att istället uppdatera varje tal (max, min, summa) efter varje nytt inlagt tal.
Om du verkligen behöver sortera listan är det std::sort du ska kolla på, (eller i värsta fall qsort eller en egen implementation)Sv:Sortering av vektor
Ja detta är för en kurs jag läser, så det är därför jag använder mig av detta språket. När jag har googlat runt på internet har jag i princip bara hittat andra lösningar. Antar att det beror på att jag använder äldre tekniker?
Nej, listan behöver inte sorteras, utan vill få fram största och lägsta värdet ur listan.
Hoppas inte jag ställer jobbiga frågor, men är ingen höjdare på C++ tyvärr :)Sv: Sortering av vektor
double max = lista[0];
for(int i=1; i<max_size; i++){
if(lista[i]>max){
max = lista[i];
}
}
vill man också hålla reda på vilket index det har kan man använda:
double max = lista[0], max_i = 0;
for(int i=1; i<max_size; i++){
if(lista[i]>max){
max = lista[i];
max_i = i;
}
}
Motsvarande princip gäller också för min.