Behöver hjälp med vektorer samt looper i programmering C++

Permalänk
Medlem

Behöver hjälp med vektorer samt looper i programmering C++

Hej,

Jag sitter och försöker lära mig lite programmering i C++. Använder Visual 2010 express. Men min kod ger mig inte rätt svar.
Jag försöker få datorn att räkna ut medelvärdet av mina tal men jag får fel svar. Kan jag inte använda mig av en for loop här?
Vad kan det vara mer som är fel?

se koden nedan; (vet inte hur man gör code-taggar)

#include <iostream> using namespace std; float medel(int v[], int n) { int medel[] = {4, 20, 6, 7, 8, 10, 15, 13, 19, 3}; int sum = 0; { for (int i = 0; i < 10; i++) sum = sum + medel [i]; } return sum; } int main() { int medel[] = {4, 20, 6, 7, 8, 10, 15, 13, 19, 3}; int sum = 0; { for (int i = 0; i < 10; i++) sum = sum + medel [i]; } cout << "Medelvardet ar" << sum/10; system("pause"); return 0; }

Redigerat in [code]-taggar //Mod
Permalänk
Medlem

Vad får du för resultat då? Vad får du för fel?

Visa signatur

Maximus X Hero - 8700k @5.1GHz - H115i - 32GB LPX@3466MHz - MSI 980Ti Gaming - EVGA SuperNova 750 G2 - Asus vg248qe - FD R5

Permalänk
Medlem

@Elghinnarisa: Jag får att svaret blir typ -889546466.
Inga errors i debuggern

Permalänk
Medlem
Skrivet av BellaB:

@Elghinnarisa: Jag får att svaret blir typ -889546466.
Inga errors i debuggern

Konstigt. Jag copy/pasta det in i http://cpp.sh/ (då jag ej har något på datorn just nu) och där fungerade det bra.

Nåja, kan inte säga jag kommer ihåg mycket från min programmering men kanske något med just visual express du använder då.

Visa signatur

Maximus X Hero - 8700k @5.1GHz - H115i - 32GB LPX@3466MHz - MSI 980Ti Gaming - EVGA SuperNova 750 G2 - Asus vg248qe - FD R5

Permalänk
Legendarisk

@BellaB: Problemet du beskriver skulle kunna uppstå om du försökt läsa utanför arrayens längd (exempel), om du t.ex. hade färre tal i listan eller loopade flera gånger i en tidigare version. Exemplet innehåller även en del kod som inte används just nu; är det exakt den här versionen som uppvisar problemet för dig, eller kan det ha blivit några ändringar i det som klistrades in på forumet? Försök att hålla exempel minimala och med endast relevant kod så att det blir lättare för andra att hjälpa till att isolera problemet, och tänk på indenteringen:

#include <iostream> using namespace std; float medel(int v[], int n) { int medel[] = {4, 20, 6, 7, 8, 10, 15, 13, 19, 3}; int sum = 0; { for (int i = 0; i < 10; i++) sum = sum + medel [i]; } return sum; } int main() { int medel[] = {4, 20, 6, 7, 8, 10, 15, 13, 19, 3}; int sum = 0; { for (int i = 0; i < 10; i++) sum = sum + medel [i]; } cout << "Medelvardet ar" << sum/10; system("pause"); return 0; }

Samma kod, indenterad

• Funktionen float medel(int v[], int n) används aldrig i exemplet så den kan du ta bort helt.

• Du har skrivit dina for-loopar som { for(...) smth; }, men antagligen menar du for(...) { smth; }? I det första fallet deklarerar du ett nytt block med lokalt scope runt for-loopen, och i det andra indikerar du att hela det efterföljande blocket (och inte bara nästa statement) ska köras för varje iteration. Exempel:

{ // Måsvingar utanför loopen int x = 0; // Se >->->-------------------+ // | for(int i = 0; i < 10; i++) // | foo(); // foo() anropas 10 gånger | bar(); // bar() anropas 1 gång (!) | } // cout << x; // Här finns inte längre variabeln 'x' tillgänglig


for(int i = 0; i < 10; i++) { // Måsvingar tillhörande loopen foo(); // foo() anropas 10 gånger bar(); // bar() anropas 10 gånger }

• Varför använda en så gammal version? Det har hänt mycket sedan 2010 och om du inte har någon särskild avsikt med att lära dig just den så borde du använda något modernare. I C++11 kan du t.ex. skriva om loopen som:

// Överväg std::array eller std::vector istället för C-arrayer: // array<int, 10> numbers = {4, 20, 6, 7, 8, 10, 15, 13, 19, 3}; // vector<int> numbers = {4, 20, 6, 7, 8, 10, 15, 13, 19, 3}; int numbers[] = {4, 20, 6, 7, 8, 10, 15, 13, 19, 3}; int sum = 0; for(auto n : numbers) sum += n;


Skrivet av BellaB:

vet inte hur man gör code-taggar

Omge koden med [code]-taggar. Vill du se hur andra har formaterat sina inlägg så brukar det gå att se genom att citera.

[code]
...
...
...
[/code]

Visa signatur

Abstractions all the way down.