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;
}