webForumDet fria alternativet

Beräkna "medianen" från ett antal inmatade tal?

C/C++

1 svar · 558 visningar · startad av JohanN

Medlem sedan maj 20031 inlägg
Frågan#1

Har ett program där man matar in 5 tal och beräknar medianen, största tal etc. Nu vill jag göra så att man kan mata in ett valfritt antal tal och sen avsluta inmatningen med t.ex. ett minustecken genom att lägga till ex.

	while (temp >= 0)
	{
		tal[antal++] = temp;
		cin >> temp;
	}

Hur ska jag göra för att beräkningarna ska stämma, tänker då speciellt på medianen (blir ju olika om det är ett jämnt antal tal eller ett ojämnt antal tal)?

#include <iostream>

using namespace std;

void infSort(double data[], int antal);

int main()
{
	double summa = 0;
	const int ANTAL = 5;
	double tal[ANTAL];
	cout << "Mata in fem tal: ";
	for (int i = 0; i < ANTAL; i++)
	{
		cin >> tal[i];
		summa += tal[i];
	}	
	
	infSort(tal, ANTAL);

	cout << "Medelv\x86rde: " << (double)summa/ANTAL << endl;
	cout << "Median: " << tal[ANTAL/2] << endl;
	cout << "St\x94rsta v\x86rde: " << tal[ANTAL-1] << endl;
	cout << "Minsta v\x86rde: " << tal[0] << endl;
	return 0;
}

void infSort(double data[], int antal)
{
	for (int m = 1; m < antal; m++)
	{
		int pos = m;
		int temp = data[m];
		while (pos > 0 && data8pos-1] > temp)
		{
			data[pos] = data[pos-1];
			position--;
		}
		data[pos] = temp;
	}
}
Medlem sedan mars 20034 471 inlägg
#2

Du får helt enkelt kolla om antal är udda eller jämnt, och sedan ha olika beräkningar baserat på svaret.

260 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)