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

Trädvy Permalänk
Medlem
Registrerad
Apr 2017

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
Trädvy Permalänk
Medlem
Plats
Östersund
Registrerad
Jan 2010

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

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

Trädvy Permalänk
Medlem
Registrerad
Apr 2017

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

Trädvy Permalänk
Medlem
Plats
Östersund
Registrerad
Jan 2010
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å.

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

Trädvy Permalänk
Legendarisk
Hedersmedlem
Plats
::1
Registrerad
Dec 2002

@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]

Abstractions all the way down.