Całkowanie funkcji wielomianowych - program się nie kompiluje

0

Witam,
Mam taki problem, otóż muszę napisać program całujący funkcje wielomianowe(na razie próbuję zrobić dla funkcji kwadratowej) różnymi sposobami. Już na początku przytrafiły mi się problemy.
Program się nie kompiluje.

#include<iostream>
#include<cstdlib>

using namespace std; 
 
class calka
{
	private:
		double pocz, kon;
		int lpr;
	public:
		calka();
		calka(double p, double k, int n)
		{
			pocz=p;
			kon=k;
			lpr=n;
		}
		void wprowadz();
		void licz(double p, double k, int n);
		double fun(double x)
		{
			return x*x;
		}
	
	
};
void calka::wprowadz()
{
	cout << "Podaj początek = "; cin >> pocz;
	cout << "Podaj koniec = "; cin >> kon;
	cout << "Podaj dokladnosc = "; cin >> lpr;
}
void calka::licz()
{
	double dx, calka;
	int i;
	dx=(k-p)/n;
	calka =0;
	for(i=1; i<n; i++)
	{
		calka+=fun(p+i*dx);
	}
	calka+=(fun(p)+fun(k))/2;
	calka*=dx;
	cout<<"Wartosc calki wynisi: "<<calka;
}
int main()
{
	calka c1;	
	c1.wprowadz();	
	c1.licz();
	cout << endl;
	return 0;
} 
0

czytaj komunikaty bledu

void calka::licz()

powiedz mi gdzie masz taka funkcje w klasie?

0

mam funkcję void licz();

0

void licz(double p, double k, int n);
oraz
void licz();
to są zupełnie różne funkcje.
Tak jakby jedna to @elemil z głową, rękami i nogami a druga to @elemil bez głowy, bez rąk i bez nóg, jest różnica?

0

tak wiem że to inne funckcje ale próbowałem używać i takiej

void licz(double p, double k, int n);

ja i takiej

void licz();

Ale program nie mógł się skompilować. Zupełnie nie wiem w czym problem.

dodanie znaczników <code class="cpp"> - fp

0

Problem jest w tym że jak zadeklarowano w klasie void licz(double p, double k, int n); (na zdjęciu jest @elemil z głową) to przy napotkaniu void calka::licz() (przyszedł @elemil bez głowy) kompilator się buntuje ponieważ myśli że brakuje mu tamtego z głową i ma jakiegoś przybłędę bez głowy. Zwyczajnie nie poznaje.

0
 
#include<iostream>
#include<cstdlib>

using namespace std; 
 
class calka
{
	private:
		double pocz, kon;
		int lpr;
	public:
		calka();
		calka(double p, double k, int n)
		{
			pocz=p;
			kon=k;
			lpr=n;
		}
		void wprowadz();
		void licz();
		double fun(double x)
		{
			return x*x;
		}
	
	
};
void calka::wprowadz()
{
	cout << "Podaj początek = "; cin >> pocz;
	cout << "Podaj koniec = "; cin >> kon;
	cout << "Podaj dokladnosc = "; cin >> lpr;
}
void calka::licz()
{
	double dx, calka;
	int i;
	dx=(k-p)/n;
	calka =0;
	for(i=1; i<n; i++)
	{
		calka+=fun(p+i*dx);
	}
	calka+=(fun(p)+fun(k))/2;
	calka*=dx;
	cout<<"Wartosc calki wynisi: "<<calka;
}
int main()
{
	calka c1;	
	c1.wprowadz();	
	c1.licz();
	cout << endl;
	return 0;
}

Zmieniłem, ale teraz kompilator nie widzi zmiennych" [Error] 'k' was not declared in this scope ".

0

A ty widzisz? Powiedz mi gdzie zadeklarowana ta k którą chcesz użyć?

0

@elemil bo jak pola nazwałes "kon" i "pocz" to używaj tych nazw a nie wymyślaj sobie nowe z d**y :D

0
Shalom napisał(a):

@elemil bo jak pola nazwałes "kon" i "pocz" to używaj tych nazw a nie wymyślaj sobie nowe z d**y :D

W wielu kursach tak widziałem, że w konstruktorze były tworzone nowe zmienne, które przchowywały wartośći z klasy z części prywatnej. Programu nadal nie mogę skompilować i stoję w miejscu. Ktoś wie jak ten problem rozwiązać. Dzięki za pomoc.

0

Wszyscy wiedzą oraz tobie już powiedzieliśmy, powiedz którego słowa nie rozumiesz.

  • d**y - nie musisz rozumieć, podstaw dowolne słowo zamiast tego.
1
elemil napisał(a):
Shalom napisał(a):

@elemil bo jak pola nazwałes "kon" i "pocz" to używaj tych nazw a nie wymyślaj sobie nowe z d**y :D

W wielu kursach tak widziałem, że w konstruktorze były tworzone nowe zmienne, które przchowywały wartośći z klasy z części prywatnej. Programu nadal nie mogę skompilować i stoję w miejscu. Ktoś wie jak ten problem rozwiązać. Dzięki za pomoc.

Pics or it didn't happen. Aż się tych bzdur które wypisujesz nie da czytać. W konstruktorze zapewne wszyscy jednak przypisują DO PÓL KLASY wartości przekazane w parametrach konstruktora. Nie odwrotnie, bo jaki by to miało sens? W innych metodach klasy możesz używać TYLKO argumentów tych metod lub pól klasy (i oczywiście zmiennych globalnych i lokalnych dla danej metody, ale to chyba jasne...)

0

Chyba sie nie dogadamy.
W c++ jestem bardzo początkujący, a projekt mam zrobić z metod numerycznych. Nie rozumiem co jest źle w tym kodzie. Gdyby ktoś był taki dobry i mi pomógł.

#include<iostream>
#include<cstdlib>

using namespace std; 
 
class calka
{
	private:
		double pocz, kon;
		int lpr;
	public:
		calka();
		calka(double p, double k, int n)
		{
			pocz=p;
			kon=k;
			lpr=n;
		}
		void wprowadz();
		void licz();
		double fun(double x)
		{
			return x*x;
		}
	
	
};
void calka::wprowadz()
{
	cout << "Podaj początek = "; cin >> p;
	cout << "Podaj koniec = "; cin >> k;
	cout << "Podaj dokladnosc = "; cin >> n;
}
void calka::licz()
{
	double dx, calka;
	int i;
	dx=(k-p)/n;
	calka =0;
	for(i=1; i<n; i++)
	{
		calka+=fun(p+i*dx);
	}
	calka+=(fun(p)+fun(k))/2;
	calka*=dx;
	cout<<"Wartosc calki wynisi: "<<calka;
}
int main()
{
	calka c1;	
	c1.wprowadz();	
	c1.licz();
	cout << endl;
	return 0;
}
0
elemil napisał(a):

Gdyby ktoś był taki dobry i mi pomógł.

Przecież kompilator ci wyraźnie mówi:

prog.cpp: In member function ‘void calka::wprowadz()’:
prog.cpp:30:39: error: ‘p’ was not declared in this scope
  cout << "Podaj początek = "; cin >> p;

Po polsku:

prog.cpp: W funkcji składowej 'void calka::wprowadz()':
prog.cpp: 30:39: error: 'p' nie została zadeklarowana w tym zakresie
   cout << "Podaj poczatek ="; cin >> p;

@Shalom, nawet ci powiedział co masz zrobić aby to naprawić:

Shalom napisał(a):

@elemil bo jak pola nazwałes "kon" i "pocz" to używaj tych nazw a nie wymyślaj sobie nowe z d**y :D

0

próbowałem tak zrobić ale, [Linker error] C:\Users\Emil\AppData\Local\Temp\ccMwGZZg.o:calka.cpp:(.text+0x1bf): undefined reference to `calka::calka()' collect2: ld returned 1 exit status

0
elemil napisał(a):

próbowałem tak zrobić ale ...

Tak, czyli jak, dodając dodatkowe parametry? Przeczytaj jeszcze raz post od @Shalom http://4programmers.net/Forum/Newbie/151319-calkowanie_funkcji_wielomianowych_-_program_sie_nie_kompiluje?p=986639#id986639 i powiedź którego słowa nie rozumiesz.

0

Zamiast cin >> p napisz cin >> pocz. Zamiast cin >> k </code> napisz <code>cin >> kon. Zamiast cin >> n </code> napisz <code>cin >> lpr. Powtarzaj do skutku.

0

Program się skompilował. Problemem było jeszcze to że zapomniałem o konstruktorze bezparametrowym

calka::calka()
{
	pocz=kon=lpr=0;
}
0

MAm jeszcze jeden problem

#include<iostream>
#include<string.h>

using namespace std;

class osoba
{
	char nazwisko[80];
	int wiek;
	public: 
		void zapamietaj(char *napis, int lata);
		void wypisz()
		{
			cout<<nazwisko<<", lat: "<<wiek<< endl;
		}
};
void osoba::zapamietaj(char* napis, int lata)
{
	strcpy(nazwisko, napis);
	wiek=lata;
}
int main()
{
	osoba student1, student2, profesor, pilot;
	cout<<"DLa informacji podaje ze jeden obiekt klasy osoba ma rozmiar: "
		<<sizeof(osoba)
		<<"bajty. To samo inaczej: "
		<<sizeof(student1)<< endl;
	profesor.zapamietaj("Albert Einstein", 55);
	student1.zapamietaj("Reudieger Schubart", 26);
	student2.zapamietaj("Claudia Bach", 25);
	pilot.zapamietaj("Neil Armstrong", 37);
	
	profesor.wypisz();
	student1.wypisz();
	student2.wypisz();
	pilot.wypisz();
	
	cout<<"Podaj swoje nazwisko:";
	char magazynek[80];
	cin>>magazynek;
	
	cout<<"Podaj swoj wiek : ";
	int ile;
	cin>>ile;
	pilot.zapamietaj(magazynek, ile);
	
	profesor.wypisz();
	pilot.wypisz();
	
} 

Program przepisany z Symfnii C++. Też go nie mogę skompilować. [Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]

0
zapamietaj(const char* napis,
0

warning nie jest powodem NIE skompilowania programu.
Uzywaj string zamiast char[]

0

Ale strcpy kopiuje char a nie stringi?

zamieniłem char na string.
i zamiast strcpy(nazwisko, napis)
użyłem nazwisko=napis;
i program rzeczywiście działa.
Może mi ktoś wyjaśnić dlaczego program przepisany z książki nie chciał się kompilować?

0
>string a,b="Ala ma kota";
a=b; // wystarczy

char a[100],b[]="Ala ma kota";
strcpy(a,b);
0

Jakich bibliotek powinienm użyć aby działały mi funckjue gotoxy. Próbuję skompilować jeden program i pojawia mi się takie coś 1>c:\users\mateusz\documents\visual studio 2010\projects\przyrzad\przyrzad\przyrzad.cpp(54): error C3861: 'gotoxy': identifier not found

Kompilator to Visual Studio 2010

0

Chciałbym zapytać jeszcze o jedną rzecz.
MAmy taki program

#include<iostream>
#include<string>

using namespace std;

class Auto
{
	private:
		string nazwa;
		string kolor;
		int moc;
	public:
		static int ile;
		static int ile_ob()
		{
			return ile;
		}
		Auto(string n, string k, int m)
		:nazwa(n), kolor(k), moc(m*0.735499)
		{
			ile++;
		}
		~Auto()
		{
			ile--;
			cout<<"Destruktor"<<endl;
		}
		void wypisz()
		{
			cout<<"Marka: "<<nazwa<<endl;
			cout<<"Kolor: "<<kolor<<endl;
			cout<<"Moc w KW: "<<moc<<endl;
		}
		
};
int Auto::ile=0;
int main()
{
	Auto *wsk;
	Auto mazda("323f", "czerwona", 100);
	cout<<Auto::ile<<endl;
	string model, kolor;
	int moc;
	cout<<"Podaj model kolor i moc samochodu w KM"<<endl;
	cin>>model>>kolor>>moc;
	Auto nowe(model, kolor, moc);
	cout<<"Klasa mowi, ze obiektow jest: "<<Auto::ile<<endl;
	cout<<"Mazda mowi, ze obiektow jest: "<<mazda.ile<<endl;
	cout<<"Nowe auto mowi, ze obiektow jest: "<<wsk->ile<<endl;
	cout<<"Mazda mowi, ze obiektow jest: "<<mazda.ile_ob()<<endl;
	mazda.wypisz();
	nowe.wypisz();
	cout<<Auto::ile<<endl;
	return 0;
} 

Po wykonaniu programu uruchamia sie destruktor, i na ekranie się wyświetla "destruktor". W ciele destruktora mam też dekrementacje zmiennej ile, ale po zniszczeniu obiektów na ekranie dalej się wyświeta że są dwa, a powinno być zero chyba. Najlepiej gdyby to ktoś skompilował, to będzie wiadomo o co chodzi.

0

A gdzie masz to zniszczenie obiektów?

1 użytkowników online, w tym zalogowanych: 0, gości: 1