Hjälp med skoluppgift: Ta fram medelvärde med hjälp av en funktion

Trädvy Permalänk
Medlem
Plats
skell
Registrerad
Okt 2008

Hjälp med skoluppgift: Ta fram medelvärde med hjälp av en funktion

Hej! Jag försöker skriva ett program som ska ha en funktion som räknar ut medelvärdet i tal man ska skriva in.
Så här lyder instruktionerna

"Skapa en funktion i C++ med följande huvud
float medel(int v[], int n)
Funktionen ska alltså ta en heltalsvektor som inparameter och returnera medelvärdet av talen i vektorn. Parametern n anger antalet element i vektorn.
Skriv också ett huvudprogram (main) i vilket du deklarerar en heltalsvektor med 10 element. Programmet ska anropa funktionen medel och skriva ut medelvärdet av talen i vektorn. Välj själv om vektorn tilldelas värden av programmet självt eller om värdena matas in av användaren när programmet körs."

Nu startar inte programmet och jag får felmeddelandet:
"||=== Build: Debug in funktioner2 (compiler: GNU GCC Compiler) ===|
In function 'int main()':|
|29|error: 'medel' was not declared in this scope|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 4 second(s)) ===|

Förväntar mig inte att ni ska göra klart uppgiften men tar ödmjukt emot den hjälp man kan få! Har inte riktigt förstått mig på funktioner...

Koden:

#include <iostream> using namespace std; float getMedel (int n, int v[]) { int i, sum = 0; float medel; for (i = 0; i < n; ++i) { sum+= v[i]; } medel = float (sum) / n; return medel; } int main(){ int n, i; int v[20]; cout << "Hur många tal vill du få ut medelvärden från? Du får max knappa in 20."; cin >> n; for(i=0; i<n; ++i) { cout << "Knappa in ett tal "; cin >> v[i]; } medel = getMedel; cout << "Medeltal = " << medel; return 0; }

Mvh

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
Skrivet av andre12345:

Hej! Jag försöker skriva ett program som ska ha en funktion som räknar ut medelvärdet i tal man ska skriva in.
Så här lyder instruktionerna

"Skapa en funktion i C++ med följande huvud
float medel(int v[], int n)
Funktionen ska alltså ta en heltalsvektor som inparameter och returnera medelvärdet av talen i vektorn. Parametern n anger antalet element i vektorn.
Skriv också ett huvudprogram (main) i vilket du deklarerar en heltalsvektor med 10 element. Programmet ska anropa funktionen medel och skriva ut medelvärdet av talen i vektorn. Välj själv om vektorn tilldelas värden av programmet självt eller om värdena matas in av användaren när programmet körs."

Nu startar inte programmet och jag får felmeddelandet:
"||=== Build: Debug in funktioner2 (compiler: GNU GCC Compiler) ===|
In function 'int main()':|
|29|error: 'medel' was not declared in this scope|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 4 second(s)) ===|

Förväntar mig inte att ni ska göra klart uppgiften men tar ödmjukt emot den hjälp man kan få! Har inte riktigt förstått mig på funktioner...

Koden:

#include <iostream> using namespace std; float getMedel (int n, int v[]) { int i, sum = 0; float medel; for (i = 0; i < n; ++i) { sum+= v[i]; } medel = float (sum) / n; return medel; } int main(){ int n, i; int v[20]; cout << "Hur många tal vill du få ut medelvärden från? Du får max knappa in 20."; cin >> n; for(i=0; i<n; ++i) { cout << "Knappa in ett tal "; cin >> v[i]; } medel = getMedel; cout << "Medeltal = " << medel; return 0; }

Mvh

Nu har jag knappt använt C++, men det borde väl vara liknande andra OO språk. En funktion kan du se som en liten kod bit som gör en viss sak. Se det som att du lagt ihop flera statements i en låda och kan sedan använda denna lådan när du vill.

En vektor är en array, för tillfället kan du se detta som en lista ungefär. Då du ska göra en heltals vektor som rymmer 10 element, ska du alltså deklarera en int array som är 10 element stort.

Du ska sedan i main metoden anropa din funktion som tar arrayen som argument, loopa igenom arrayen och ta varje element och lägga ihop dem till en summa. Sedan delar du summan på antalet element och får ut medelvärdet.

Felet |29|error: 'medel' was not declared in this scope|

Betyder att variabeln medel inte blev deklarerad i main metoden, du har bara gjort den lokal i din metod.

Jag vet inte heller riktigt vad du menar med " medel = getMedel; "

Du försöker tilldela en funktion till en icke deklarerad variabel medel.

Hoppas det var till någon hjälp.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Plats
Långtbortistan
Registrerad
Mar 2007

För det första har du inte deklarerat flyttalsvariabeln "medel" i main(), för det andra så skickar du inte med varken vektorn eller "n" i ditt funktionsanrop.

Det finns bara två sorters hårddiskar: de som har gått sönder och de som skall gå sönder.

Trädvy Permalänk
Medlem
Plats
skell
Registrerad
Okt 2008

Tackar för svaren, jag vet knappt själv vad jag gjorde tidigare.
Har tittat på lite tutorials och bestämde mig för att ta bort koden jag gjort och börja från noll Nu har jag iallafall lyckats ta emot och skicka värden till och från funktionen, men medelvärdet jag får fram blir fel :/
10 10 10 10 osv blir 11
20 20 20 20 osv blir 22
30 30 30 30 osv blir 33 osv

#include<iostream> using namespace std; float medel(int [],int); int main() { int kapacitet=10; int likaMedMedel[kapacitet]; cout << "Det här programmet räknat ut medelvärdet ur 10 tal du knappar in"<<endl; for(int i=0;i<kapacitet;i++) { cout<<"Knappa in tal "<<i+1<<endl; cin>>likaMedMedel[i]; } cout<<"Genomsnittsvärdet blir "<<medel(likaMedMedel,kapacitet); return 0; } float medel(int likaMedMedel[],int kapacitet) { likaMedMedel[0]+=likaMedMedel[1]+likaMedMedel[2]+likaMedMedel[3]+likaMedMedel[4]+likaMedMedel[5]+likaMedMedel[6]+likaMedMedel[6]+likaMedMedel[7]+likaMedMedel[8]+likaMedMedel[9]; return (float)(likaMedMedel[0]/kapacitet); }

Dåligt med kommentarer än så länge, namngivningen på vektorn lite sådär och kanske skulle lagt någon loop i funktionen istället så den blir lite kortare.
Men om jag fixar det och korrekt medelvärde, är väl uppgiften rätt gjort vad ni kan se?

Mvh.

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

Du har råkat använda likaMedMedel[6] två gånger i din medel-funktion, det är därför du får fel medelvärde. Byt ut koden till en for-loop istället så slipper du såna problem.

Din beräkning av medelvärdet är inte heller riktigt korrekt om du vill ha ut medelvärdet som ett flyttal. int / int utför nämligen heltalsdivision i C++, där eventuella decimaler trunkeras. Så t.ex. 5 / 2 blir 2. Om en av operanderna är ett flyttal så används istället flyttalsdivision, så 5.0 / 2 = 2.5. Du kan t.ex. flytta in float-konverteringen så att du istället får float(likaMedMedel[0]) / kapacitet (eller static_cast<float>(likaMedMedel[0]) / kapacitet för att vara mer C++, (float) etc är en kvarleva från C).

Trädvy Permalänk
Medlem
Plats
skell
Registrerad
Okt 2008
Skrivet av perost:

Du har råkat använda likaMedMedel[6] två gånger i din medel-funktion, det är därför du får fel medelvärde. Byt ut koden till en for-loop istället så slipper du såna problem.

Din beräkning av medelvärdet är inte heller riktigt korrekt om du vill ha ut medelvärdet som ett flyttal. int / int utför nämligen heltalsdivision i C++, där eventuella decimaler trunkeras. Så t.ex. 5 / 2 blir 2. Om en av operanderna är ett flyttal så används istället flyttalsdivision, så 5.0 / 2 = 2.5. Du kan t.ex. flytta in float-konverteringen så att du istället får float(likaMedMedel[0]) / kapacitet (eller static_cast<float>(likaMedMedel[0]) / kapacitet för att vara mer C++, (float) etc är en kvarleva från C).

Tack för hjälpen! Nu fungerar det som det ska!