Avatar billede shadowdude165 Nybegynder
22. november 2008 - 23:14 Der er 3 kommentarer

Regression opgave

hej
Jeg er i igang med at lave en program i c++ der kan udregne simple lineær funktioner vha numerisk regression. Det gøres ved nogen punkter man selv vælger (også antallet af dem). Dog har jeg problemer med at finde middelværdierne (gennemsnittet) af x- og y-værdierne. Altså hvor du plusser enten alle x eller y punkterne og dividere med antallet af punkter. Efter min overbevisning burde dette virke, men middelværdiner bliver forkerte.

#include <cstdlib>
#include <iostream>
#include <sstream>

using namespace std;

int kontrol(string);

int main(int argc, char *argv[])
{
    int antalPunkter = kontrol("Indtast antallet af punkter");
   
    float punkter[antalPunkter*2];

    for(int i = 0; i < antalPunkter*2; i++)
    {
            char type;
            if(i % 2 == 0)
            {
                type = 'x';
            }
            else
            {
                type = 'y';
            }
            cout << "Indtast " << i/2+1 << ". koordinats " << type << "-vaerdi";
            punkter[i] = kontrol("");
           
    }

    system("PAUSE");

    float middelvaerdix = 0;
    float middelvaerdiy = 0;
   
    for(int i = 0; i < antalPunkter*2; i++)
    {
        if(i % 2 == 0)
        {
              middelvaerdix += punkter[i];
        }
        if(i % 2 != 0)
        {
            middelværdiy += punkter[i];
        }
    }

    cout << "middelværdi for x'erne = " << middelvaerdix/(antalPunkter/2+1) << endl;
cout << "middelværdi for y'erne = " << middelvaerdiy/(antalPunkter/2+1) << endl;
   
    system("PAUSE");
    return EXIT_SUCCESS;
}

int kontrol(string opgave) {
  bool fejl;
  int tal = 0;
  string input;
  do {
  fejl = false;
  cout << opgave << endl;
  cin >> input;
  stringstream ss(input);

  if((ss >> tal).fail()) // Hvis strengen ikke er et gyldigt tal.
  {
    cout << endl << "Det indtastede er ikke gyldigt. Proev venligst igen." << endl;
    fejl = true;
  }
  if(tal < 2) // Hvis tallet er for lille.
  {
    cout << endl << "Det indtastede tal er for hoejt. Proev venligst igen." << endl;
    fejl = true;
  }
  } while(fejl);
  return tal;
}
Avatar billede arne_v Ekspert
22. november 2008 - 23:34 #1
cout << "middelværdi for x'erne = " << middelvaerdix/(antalPunkter/2+1) << endl;
cout << "middelværdi for y'erne = " << middelvaerdiy/(antalPunkter/2+1) << endl;

->

cout << "middelværdi for x'erne = " << middelvaerdix/antalPunkter << endl;
cout << "middelværdi for y'erne = " << middelvaerdiy/antalPunkter << endl;

måske
Avatar billede mbulow Nybegynder
22. november 2008 - 23:37 #2
Fejlen ligger her:

cout << "middelværdi for x'erne = " << middelvaerdix/(antalPunkter/2+1) << endl;
cout << "middelværdi for y'erne = " << middelvaerdiy/(antalPunkter/2+1) << endl;

Beregningen skal være:

middelværdix/antalPunkter
middelværdiy/antalPunkter

Husk at "antalPunkter" repræsenterer antallet af punkter, og ikke antallet af elementer i punkter-arrayet :)
Avatar billede shadowdude165 Nybegynder
23. november 2008 - 10:44 #3
jeg takker mange gange :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester