Avatar billede shadowdude165 Nybegynder
05. december 2008 - 18:21 Der er 4 kommentarer

Tegning af lineære funktioner

hej, jeg har lavet et program der kan regrerrer  en funktion vha nogen punkter, til det skal jeg have en program der kan tegne den lineære funktion - det har jeg så lavet. Dog har jeg et problem.
Når hældningen dvs a-værdien kommer under 1 tegner den bare en lige streg. det kunne f.eks. være 0.5x+12 hvor 0.5 så er a-værdien self.

#include <iostream>
#include <sstream>
#include <cmath>

using namespace std;

void graf(int, int);

int kontrol();

int main() {

  int a, b;
  string menuValg;

  cout << "Indtast vaerdien for a:" << endl;
  a = kontrol();

  cout << "Indtast vaerdien for b:" << endl;
  b = kontrol();

  cout << endl << "a: " << a << ", b: " << b << endl;

  while(1) {
          graf(a, b);
  }
}

void graf(int a, int b) {

  int xmax = 0;
  int ymin = 0;
  int ymax = 0;
  int ySkalleret;

  cout << "Du skal nu indtaste intervallet for x-aksen." << endl << "Start med den laveste x-vaerdi" << endl;
  int xmin = kontrol();
  do {
    cout << endl << "Indtast den hoejeste vaerdi" << endl;
    xmax = kontrol();
  } while(xmax < xmin);
  int xtotal = xmax - xmin;
 
  for(int i = xmin; i < xmax; i++)
  {
    int x = i;
    int y = a*x+b;
    if(y > ymax) ymax = y;
    if(y < ymin) ymin = y;
  }
  int ytotal = ymax - ymin;

  char koordinater[xtotal+1][xtotal+1];

  for(int i = xmin; i < xmax+1; i++)
  {
    int x = i;
    // cout << xtotal << ";" << ytotal << endl; // Til test
    for(int j = xmin; j < xmax+1; j++)
    {
      int y = (a*x+b);
      if(ytotal > xtotal)  y = y/(ytotal/xtotal+1); // Hvis y gÃ¥r ud af koordinatsystemet, skallér da
      if(y == j) koordinater[i - xmin][j - xmin] = '*';
      else if(j == 0 && i != 0) koordinater[i - xmin][j - xmin] = '-';
      else if(j == 0 && i != 0) koordinater[i - xmin][j - xmin] = '-';
      else if(i == 0 && j != 0) koordinater[i - xmin][j - xmin] = '|';
      else if(i == 0 && j == 0) koordinater[i - xmin][j - xmin] = '+';
      else koordinater[i - xmin][j - xmin] = ' ';
    }
  }

  //cout << xtotal; // Til test

  for(int i = xtotal; i > -1; i--)
  {
    for(int j = 0; j < xtotal; j++)
    {
      cout << koordinater[j][i];
    }
    cout << endl;
  }
}

int kontrol() {
  bool fejl;
  int tal = 0;
  string input;
  do {
  fejl = false;
  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 > 30 || tal < -30) // Hvis tallet er for stort eller smÃ¥t.
  {
    cout << endl << "Det indtastede tal er for hoejt. Proev venligst igen." << endl;
    fejl = true;
  }
  } while(fejl);
  return tal;
}
Avatar billede erikjacobsen Ekspert
05. december 2008 - 19:39 #1
Måske fordi du regner i ints i stedet for float eller double.
Avatar billede shadowdude165 Nybegynder
06. december 2008 - 10:48 #2
ja det var også det første der faldt mig ind, mig kan jeg ikke få det til at virke hvis jeg andre alle variablerne til float
Avatar billede erikjacobsen Ekspert
06. december 2008 - 12:12 #3
Jeg har ikke kigget i detaljer på dit program, men det kan være du skal regne i floats, men tegne i ints.
Avatar billede shadowdude165 Nybegynder
06. december 2008 - 21:46 #4
har fået det til at virke :)
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