Programe de calcul

Rezolvarea problemelor de matematica prin realizarea unor programe.
Integrator
guru
guru
Mesaje: 1524
Membru din: 16 Ian 2011, 08:32

Programe de calcul

Mesaj de Integrator » 30 Iul 2018, 19:28

Bună seara,

Probleme:

1. - Să se întocmească un program de calcul pentru unde * și ?
2. - Să se întocmească un program de calcul pentru unde * și ?

Toate cele bune,

Integrator

Integrator
guru
guru
Mesaje: 1524
Membru din: 16 Ian 2011, 08:32

Re: Programe de calcul

Mesaj de Integrator » 31 Iul 2018, 07:06

Bună dimineața,

Adaug că cele două programe de calcul vor fi întocmite în special în "C++" și după aceea în alte limbaje.Este evident că programele de calcul se vor întocmi doar pentru rădăcina principală a lui !

Toate cele bune,

Integrator

Integrator
guru
guru
Mesaje: 1524
Membru din: 16 Ian 2011, 08:32

Re: Programe de calcul

Mesaj de Integrator » 14 Aug 2018, 07:23

A_Cristian scrie:
12 Aug 2018, 08:47
Nu am absolut nici un interes sa "rezolv" probleme didactice. In plus, avand in vedere ca nu exista R in C++, este bine sa specificati de ce aproximatii aveti nevoie. Un elev bunicel, ar putea face primul subpunct folosind tipul "float" sau double?
Bună dimineața,

Vreți sa spuneți că nu pot scrie de exemplu în C++?Mi-ajunge aproximația pe care o dă C++.Cu instrucțiunea "float" am încercat dar nu știu cum să obțin ca rezultat al radicalului , de exemplu unde ....

Numai bine,

Integrator

A_Cristian
guru
guru
Mesaje: 1975
Membru din: 23 Feb 2015, 17:15

Re: Programe de calcul

Mesaj de A_Cristian » 14 Aug 2018, 10:16

float este un tip de date in care pot fi stocate "numere reale". N-am stat sa calculez, dar este foarte posibil ca 3.54 sa nu poata fi reprezentat exact.
Pentru primul punct, va recomand sa folositi coordonate polare si functia pow.
Probabil acelasi lucru l-ati putea folosi si pentru al doilea, dar ma tem ca nu am bazele matematice necesare si este o simpla speculatie din partea mea.
PS: Exista clasa complex in C++, dar nu pare sa va ajute prea mult, avand doar cateva operatii aritmetice implementate.

Integrator
guru
guru
Mesaje: 1524
Membru din: 16 Ian 2011, 08:32

Re: Programe de calcul

Mesaj de Integrator » 15 Aug 2018, 07:46

A_Cristian scrie:
14 Aug 2018, 10:16
float este un tip de date in care pot fi stocate "numere reale". N-am stat sa calculez, dar este foarte posibil ca 3.54 sa nu poata fi reprezentat exact.
Pentru primul punct, va recomand sa folositi coordonate polare si functia pow.
Probabil acelasi lucru l-ati putea folosi si pentru al doilea, dar ma tem ca nu am bazele matematice necesare si este o simpla speculatie din partea mea.
PS: Exista clasa complex in C++, dar nu pare sa va ajute prea mult, avand doar cateva operatii aritmetice implementate.
Bună dimineața,

Iată un program făcut de mine:

1 #include <iostream>
2 #include <cmath>
3 using namespace std ;
4
5 int main ()
6 {
7 cout << "Radacina principala de indice n real dintr-un numar real " << endl ;
8 float n , N , Z , ReZ, ImZ , pi=3.14159 , i ;
9 cout << "n=" ; cin>> n ;
10 cout << "N=" ; cin>> N ;
11 if ( N>=0 ) {
12 Z=pow(N,(1.0/n)) ;
13 cout << " Z= " << Z ;
14 }
15 else if ( N<0 ) {
16 Z=ReZ+ImZ*i ; Rez=pow(-N,(1.0/n))*cos(pi/n) ; Imz=pow(-N,(1.0/n))*sin(pi/n) ;
17 cout << "ReZ=" << ReZ ;
18 cout << " ; ImZ=" << ImZ ;
19 cout << " ; Z=ReZ+i ImZ" << endl ;
20 }
21 return 0 ;
22 }

------------------------------------------------
Am verificat programul meu cu programul "WolframAlpha" si este corect....dar pentru cazul și alte cazuri nedefinite trebuie să mai scriu niște instrucțiuni...
Cum pot să scriu rezultatul final , de exemplu ?
Ce instrucțiune trebuie scrisă pentru a relua date le inițial ale lui și făra a se închide ecranul?

Mulțumesc mult!

Toate cele bune,

Integrator

A_Cristian
guru
guru
Mesaje: 1975
Membru din: 23 Feb 2015, 17:15

Re: Programe de calcul

Mesaj de A_Cristian » 15 Aug 2018, 12:42

Din pacate programelul postat de dumneavoastra nu compileaza. In afara de faptul ca sunt variabile neinitializate (erori de logica), sunt si altele care nu sunt declarate (erori de compilare).
Si tot din pacate, nu am timpul necesar acum pentru a posta un cod corect. fromCartesian nu este complet corecta si n-am verificat deloc metoda pow
Insa macar aveti un framework cu care sa lucrati. Poate voi gasi niste timp maine, dar slabe sanse.
Avand in vedere ca este un programel de tip consola, este de dorit sa-l rulati din consola. Exisa metode de-al face sa nu se inchida atunci cand este rulat direct din mediul grafic, dar trebuie sa mai sap pentru cea mai buna metoda.

Cod: Selectaţi tot

#define _USE_MATH_DEFINES
#include<iostream>
#include <cmath>
using namespace std;


class complex {
	double absoluteValue_;
	double argument_;
public:
	complex(double absoluteValue, double argument) : absoluteValue_(absoluteValue), argument_(argument) {}
	complex pow(double power) const {
		double absoluteValue = ::pow(absoluteValue_, power);
		double argument = argument_ * power;
		return complex(absoluteValue, argument);
	}
	double real() const {
		return absoluteValue_ * cos(argument_);
	}
	double imaginary() const {
		return absoluteValue_ * sin(argument_);
	}
	static complex fromCartesian(double a, double b) {
		double absoluteValue  = sqrt(a*a + b * b);
		double argument = 0;
		if (a != 0)
			argument = atan(b / a);
		else {
			if (b > 0)
				argument = M_PI / 2;
			else
				argument = 3 * M_PI / 2;
		}
		return complex(absoluteValue, argument);
	}
	friend std::ostream& operator<< (std::ostream& stream, const complex& number){
		double real = number.real();
		double imaginary = number.imaginary();
		if (real == 0 && imaginary == 0) {
			stream << "0";
		} else if (real != 0) {
			stream << real;
			if (imaginary > 0)
				stream << "+" << imaginary << "*i";
			if (imaginary<0)
				stream << imaginary << "*i";
		}
		else {
			stream << imaginary <<"*i";
		}
		
		return stream;
	}
};

int main()
{
	complex c1 = complex::fromCartesian(1, 0);
	complex c2 = complex::fromCartesian(0, 1);
	complex c3 = complex::fromCartesian(-1, 0);
	complex c4 = complex::fromCartesian(0, -1);
	complex c5 = complex::fromCartesian(1, 1);
	complex c6 = complex::fromCartesian(-1, 1);
	complex c7 = complex::fromCartesian(-1, -1);
	complex c8 = complex::fromCartesian(1, -1);
	std::cout << c1 << std::endl;
	std::cout << c2 << std::endl;
	std::cout << c3 << std::endl;
	std::cout << c4 << std::endl;
	std::cout << c5 << std::endl;
	std::cout << c6 << std::endl;
	std::cout << c7 << std::endl;
	std::cout << c8 << std::endl;
	return 0;
}
PS: Apreciez faptul ca v-ati inhamat la o astfel de treaba si voi incerca sa va acord sprijin in cazul in care veti avea nevoie si eu voi avea timp

Integrator
guru
guru
Mesaje: 1524
Membru din: 16 Ian 2011, 08:32

Re: Programe de calcul

Mesaj de Integrator » 24 Aug 2018, 07:55

A_Cristian scrie:
15 Aug 2018, 12:42
Din pacate programelul postat de dumneavoastra nu compileaza. In afara de faptul ca sunt variabile neinitializate (erori de logica), sunt si altele care nu sunt declarate (erori de compilare).
Si tot din pacate, nu am timpul necesar acum pentru a posta un cod corect. fromCartesian nu este complet corecta si n-am verificat deloc metoda pow
Insa macar aveti un framework cu care sa lucrati. Poate voi gasi niste timp maine, dar slabe sanse.
Avand in vedere ca este un programel de tip consola, este de dorit sa-l rulati din consola. Exisa metode de-al face sa nu se inchida atunci cand este rulat direct din mediul grafic, dar trebuie sa mai sap pentru cea mai buna metoda.

Cod: Selectaţi tot

#define _USE_MATH_DEFINES
#include<iostream>
#include <cmath>
using namespace std;


class complex {
	double absoluteValue_;
	double argument_;
public:
	complex(double absoluteValue, double argument) : absoluteValue_(absoluteValue), argument_(argument) {}
	complex pow(double power) const {
		double absoluteValue = ::pow(absoluteValue_, power);
		double argument = argument_ * power;
		return complex(absoluteValue, argument);
	}
	double real() const {
		return absoluteValue_ * cos(argument_);
	}
	double imaginary() const {
		return absoluteValue_ * sin(argument_);
	}
	static complex fromCartesian(double a, double b) {
		double absoluteValue  = sqrt(a*a + b * b);
		double argument = 0;
		if (a != 0)
			argument = atan(b / a);
		else {
			if (b > 0)
				argument = M_PI / 2;
			else
				argument = 3 * M_PI / 2;
		}
		return complex(absoluteValue, argument);
	}
	friend std::ostream& operator<< (std::ostream& stream, const complex& number){
		double real = number.real();
		double imaginary = number.imaginary();
		if (real == 0 && imaginary == 0) {
			stream << "0";
		} else if (real != 0) {
			stream << real;
			if (imaginary > 0)
				stream << "+" << imaginary << "*i";
			if (imaginary<0)
				stream << imaginary << "*i";
		}
		else {
			stream << imaginary <<"*i";
		}
		
		return stream;
	}
};

int main()
{
	complex c1 = complex::fromCartesian(1, 0);
	complex c2 = complex::fromCartesian(0, 1);
	complex c3 = complex::fromCartesian(-1, 0);
	complex c4 = complex::fromCartesian(0, -1);
	complex c5 = complex::fromCartesian(1, 1);
	complex c6 = complex::fromCartesian(-1, 1);
	complex c7 = complex::fromCartesian(-1, -1);
	complex c8 = complex::fromCartesian(1, -1);
	std::cout << c1 << std::endl;
	std::cout << c2 << std::endl;
	std::cout << c3 << std::endl;
	std::cout << c4 << std::endl;
	std::cout << c5 << std::endl;
	std::cout << c6 << std::endl;
	std::cout << c7 << std::endl;
	std::cout << c8 << std::endl;
	return 0;
}
PS: Apreciez faptul ca v-ati inhamat la o astfel de treaba si voi incerca sa va acord sprijin in cazul in care veti avea nevoie si eu voi avea timp
Bună dimineața,

Programul proiectat de mine funcționează perfect....Faceți compilarea pentru opțiunea ....32-bit...
1) Cum fac să nu se închidă programul și să ceară noi date inițiale?
2) Dvs. cum ați proiecta programul propus de mine?
Mulțumesc mult!

Toate cele bune,

Integrator

Scrie răspuns