CATEGORII DOCUMENTE |
Astronomie | Biofizica | Biologie | Botanica | Carti | Chimie | Copii |
Educatie civica | Fabule ghicitori | Fizica | Gramatica | Joc | Literatura romana | Logica |
Matematica | Poezii | Psihologie psihiatrie | Sociologie |
In lumea de astazi proiectarea asistata de calculator a devenit o necesitate evidenta. Mediul de lucru Visual C++ permite o mare variatie de implementare a problemelor de tip ingineresc, matematic si nu numai.
Pentru a rezolva o problema de tip ingineresc, sau matematica o metoda de lucru ar fi folosirea claselor MFC(Microsoft Foundation Classes) si eventual a Wizard-ului pus la dispozitie de Visual C++. Programele create din aceasta lucrare au fost create folosind Visual C++ 6.0.
Pentru fiecare problema, s-au parcurs urmatorii pasi:
1. Crearea unei ferestre de dialog pentru introducerea datelor.
2. Definirea unor butoane si elemente de tip Edit Box si Static Box, alte elemente grafice(imagini).
3. Definirea unor functii atasate butoanelor, care sa execute anumite operatii pentru a rezolva problema.
4. Afisarea rezultatului(intr-un Edit Box sau intr-o fereastra de mesaje).
Spre exemplificare , vom considera o problema simpla de matematica.
Enunt:
Sa se citeasca si sa se calculeze suma a doua numere naturale.
Pentru a rezolva aceasta problema trebuie sa parcurgem pasii descrisi mai sus.
Pasul 1
Mai intai se lanseaza in executie mediul de lucru Visual C++. Din meniul File alegem optiunea New. Va aparea o fereastra in catre se va alege tipul de aplicatie dorit(in cazul de fata MFC App Wizard(exe), numele aplicatiei(in stanga sus), locatia unde va fi salvata aplicatia(in stinga).
Apoi se va solicita tipul de fereastra dorit. Se va alege Dialog Base si se apasa butonul NEXT> . Veti fi intrebati apoi ce elemente doriti sa fie introduse(Help, butoane 3D, Activ X Controls, etc.) Dupa ce se vor selecta elementele dorite se apasa din nou butonul NEXT>. Va aparea urmatoarea fereastra:
Sunteti intrebati daca sa fie introduse comentarii sau nu in proiectul dvs. Se recomanda acceptarea acestora deoarece pot reprezenta niste puncte de ghidaj utile in timpul programarii.
In fine ultima alegere trebuie facuta este daca aplicatia va fi facuta in formal rulabil(statical linked library) indiferent de calculatorul pe care ruleaza sau daca va necesita ca pe calculatorul respective sa fie deja instalat Visual C++(shared DLL).
Pasul 2
Se definesc boxele de editare si butoanele necesare:
- 2 Edit Box (pt. introducerea valorilor a si b)
- 2 Static Box (pt. a afisa ce trebuie introdus)
- 1 buton de calcul (care va fi afisat pentru calcului valorilor)
- 1 buton de Cancel( pentru a anula o operatie)
In partea stinga jos se observa 3 sectiuni: Classes unde sunt afisate clasele, Resources unde sunt vizualizate resursele(fereste, meniuri, imagini) si FileView unde se afla fisierele.
Se alge obtiunea Resource.
In zona principala se observa imaginea ferestrei in care se va lucra.
In partea dreapta avem lista de elemente. Se alege elementul dorit si apoi se trege in zona din fereastra in care dorim sa fie plasat.
Un buton de tip Static Box permite afisarea unui text. Ca sa realizam, aceasta alegem din dreapta Static Box, il plasam unde dorim, apasam click dreapta pe acesta si alegem optiunea Properties. Va aparea o fereastra(vezi fereastra din partea de jos) si in zona Caption se scrie textul dorit(maxim 256 caractere). In aceeasi fereastra, in partea stanga se gaseste in cod de identificare e acestui element(IDC_Static). In zona Style si Extended Style se poate opta pentru diferite aspecte de design a elementului selectat.
Pentru imagine este necesara introducerea unei noi resurse: o imagine bmp. Pentru aceasta ne pozitionam in fereastra din stanga pe numele proiectului(in cazul nostru suma resources) click dreapta si alegem obtiunea Insert. Se alege apoi obtiunea Bitmap New daca se doreste un desen nou, sau Import daca se se doreste un desen deja existent aflat pe HDD.
Pentru a introduce un desen se alege un element de tip Picture si se introduce in fereastra. Se apasa click drepta pe acest element si se merge la Properties.
In sectiunea Type se alege Bitmap iar in sectiunea Image se alege ca optiune codul de identificare a imaginii dorite(acesta se poate vedea in partea stinga la sectiunea Bitmap).
Pentru a introduce un buton se alege controlerul respectiv si apoi la properties in sectiunea Caption se scrie numele dorit a fi afisat pe acesta. In cazul de fata butonul are identificatorul IDOK, iar cel de Cancel este definit automat ca avind indentificatorul IDCancel. Cele doua boxe de editare au identificatorii IDC_Edit1(pentru variabila a), IDC_Edit2(pentru variabila b).
Pasii 3 si 4
Inainte de a introduce functia de calcul trebuie sa definim cateva variabile. Pentru aceasta se selecteaza fereastra, se apasa click dreapta si se alege optiunea ClassWizard, apoi member variabile.
Va aparea o fereastra in care sunt afisati identificatorii ce pot primi variabile:
Vom defini variabilele a si b pentru identificatorii butoanelor de editare apasand pe butonul Add Variabile.
Se observa in figura de mai jos modul de introducere al datelor.
Deoarece datele de intrere trebuie sa fie naturale am definit variabilele de tip intreg.
Pentru a define ca datele sa fie mai mari ca zero se selecteaza variabila si, in partea de jos se alege intervalul 0..32000 (reamintim ca tipul intreg e limitat la valori intre -32768..32767):
Trebuie sa definim acum functia de calcul. Pentru aceasta se apasa dublu click pe butonul pentru care se doreste definirea functiei ce executa operatia(in cazul nostru butonul Calculeaza). La versiunile mai vechi(Visual C++ 5.0) se apasa click dreapta se alege optiunea Events. Va apare o fereastra in care trebuie sa definim tipul de apasareal butonului (click sau dublu click)si apoi se alege optiunea Add and Edit si se definesc tipul functiei, numele si lista de parametri.
Functiile cu identificatori IDOk si IDCancel sunt virtuale predefinite, ca atare nu mai este necesara definirea tipului sau a liste de parametri.
La apasarea butonului OK se poate defini functia. Iata definitia functiei pentru calculul sumei:
void CSumaDlg::OnOK()
Pentru rulare se apasa fiebutonul cu semnul ! din Toolbar fie Ctrl+F5, fie se algege obtiunea Execute fin meniul Build.
Iata rezultatul:
Problemele rezolvate de studenti sunt prezentate parcurgand urmatoarele etape:
- enuntiul problemei
- modelul matematic
- programul
- exemplu concret de date de intrare si datele de iesire pentru acesta
- imagini cu ferestrele de introducere a datelor
- imagini cu ferestrele de afisare a datelor.
Facem observatia ca desi majoritatea problemelor respecta aceste etape, in unele probleme apar si alte modalitati de afisare sau rezolvare. La acestea sunt mentionate diferentele.
De asemenea datele de intrare si de iesire sunt fie mentionate direct intr-o sectiune, fie introduse in ferestrele de lucru, observandu-se in imagini.
Probleme rezolvate de studentii Helhiu Monica,Tudosa Ioan si Amaritei Ciprian studenti la Facultatea de Electritehnica Iasi
Problema nr.1
Enunt:
Se da o portiune de circuit intre bornele 1 si 2, care contine doua rezistente conectate in serie si o sursa de tensiune. Intre cele doua rezistente se mai leaga o ramura de circuit prin care circula curentul Ik. Se cere sa se afle intensitatea acestui curent Ik.
Schema portiunii de circuit:
Comentarii:
Sursa de tensiune are sensul dinspre borna 2 spre 1. La legarea celei de-a doua ramuri de circuit se formeaza un nou nod de circuit pe care l-am notat cu 3. Ramura se leaga intre cele 2 rezistente iar curentul care circula prin ea are sensul spre nodul pe care l-a format(in jos). Astfel in portiunea de circuit sunt 3 curenti: I, I3, Ik.
Date de intrare:
Tensiunea intre cele 2 borne U12,
Intensitatea curentului I,
Sursa de tensiune E
Cele doua rezistente R1 si R2.
Date de iesire: Intensitatea curentului Ik.
Model matematic:
Aplicind teorema 1 a lui Kirchhoff avem
-I-Ik+I3=0 de aici rezulta ca
Ik= I3-I;
Dar I3=(U12-R1*I-E);
Nota:
Pentru valorile curentilor,a tensiunelor si a rezistentelor nu se introduc numere negative!!!
Valorile intensitatilor curentilor sunt calculate in Amperi[A],a tensiunilor in Volti[V],a rezistentelor in Ohmi[Ω].
Programul (*)
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CCln1Dlg::OnOK()
unde U12, R1, I, E, R2, reprezinta variabilele atasate edit boxurilor din fereastra de introducere a datelor. Analog si pentru programele urmatoare, variabilele ce nu apar declarate sunt var. atasate pentru campurile edit box.
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Problema nr.2
Enunt:
Se da o portiune de circuit intre bornele 1 si 2, care sunt puse la potentialele V1 si V2 si este alcatuita din doua rezistente si doua surse de tensiune cu sensuri opuse. Se cere sa se determine curentul care circula prin aceasta portiune de circuit I.
Schema portiunii de circuit:
Date de intrare:
Nodul 1 se afla la potentialul V1 ,nodul 2 la V2;
Valorile surselor de tensiune E1 si E2
Valorile rezistentelor R1 si R2.
Date de iesire: Intensitatea curentului I.
Model mathematic:
Fiind date potentialele celor doua noduri putem afla tensiune inte 1 si 2: U12=V1-V2; de aici curentul rezulta a fi:
I=(U12-E1+E2)/(R1+R2);
Nota: Pentru valorile datelor de intrare nu se introduc numere negative!!!
Rezistentele sunt calculate in Ohmi[Ω],tensiunile in Volti[V], curentul in Amperi[A]. Sensul curentului prin circuit este ales arbitrar!!
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CCln2Dlg::OnOK()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Problema nr.3
Enunt:
Se da un circuit alcatiut din n rezistente si m surse de tensiune toate fiind legate in serie. Sursele de tensiune au acelas sens.Se cere sa se determine rezistenta echivalenta a circuitului Re,sursa de tensiune echivalenta Ee,sursa de curent echivalenta Ige si conductanta echivalenta Ge.
Schema circuitului:
Circuitul poate continua pina la n rezistente si m surse;
Date de intrare:
Se introduc nr de rezistente n si numarul de surse de tensiune m din care va fi alcatiut circuitul si valorile celor n rezistente si a celor m surse.
Date de iesire: Re, Ge, Ee, Ige;
Model mathematic: Formula pentru aflarea rezistentei echivalente atunci cund ele sunt legate in serie este: Re=R1+R2+...+Rn; iar pt surse de tensiune : Ee=E1+E2+..+Em;
Daca stim Re si Ee putem afla Ge=1/Re si Ige=Ee/Re;
Nota: Numarul de rezistente si de surse de tensiune introduse nu trebuie sa depaseasca 10 .Valorile datelor de intrare trebuie sa fie positive si intregi;
Unitatile de masura folosite sunt : Ohmi, Amperi, Volti.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CCln3Dlg::OnOK()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Fereastra cu rezultate arata astfel:
Problma nr.4
Enunt:
Folosind Teorma Grand Schmidt sa se determine o baza ortonormata a vectorilor v1,v2,v3.Acestia formeaza initial o baza in Vn ,B=; Se da produsul <x,y>=x1*y1+x2*y2+x3*y3; si vectorii v1(a1,b1,c1); v2 (a2,b2,c2); v3(a3,b3,c3); ce formeaza baza B.Baza ortonormata va fi BON=; sa se gaseasca e1,e2,e3;
Date de intrare: Vectorii din baza initiala v1,v2,v3;
Date de iesire: Vectorii din noua baza ortonormata e1,e2,e3;
Model mathematic:
Fiind dati v1,v2,v3 se vor calcula 3 vectori intermediari prin th Grand Schmidt: w1,w2,w2;
Algoritmul teoremei este:
W1=v1;
W2=v2-<v2,w1>/<w1,w1>*w1;
W3=v3-<v3,w1>/<w1,w1>*w1-<v3,w2>/<w2,w2>*w2;
Vectorii bazei ortonormate se vor calcula astfel:
e1=w1/|w1| ; e2=w2/|w2|; e3=w3/|w3|;
BON=
Nota: Elementele vectorilor v1,v2,v3 sunt numere intregi;
Functia produs_s(n,x,y) calculeaza produsul scalar dintre 2 vectori x si y de dimensiune n;
Functia GS(n,v1,v2,v3,w1,w2,w3) calculeaza vectorii intermediari w1,w2,w3;
Functia BON(n,w1,w2,w3,e1,e2,e3) calculeaza vectorii bazei ortonormate e1,e2,e3;
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
float produs_s(int n,float x[],float y[])
void GS(int n,float v1[],float v2[],float v3[],float w1[],float w2[],float w3[])
void BON(int n,float w1[],float w2[],float w3[],float e1[],float e2[],float e3[])
for(i=0;i<n;i++)
}
void CProb1Dlg::OnOK()
Imagine:
Fereastra Windows realizata pentru
introducerea datelor
Problma nr.5
Enunt:
Calculul sinusului si cosinusului cu argument dat in grade.
Date de intare: Se introduce argumentul in grade Y;
Date de iesire: Afiseaza sinus si cosinus de Y;
Model mathematic: Argumentul Y se inmulteste cu valoarea lui П=3,141592654; si se folosesc functiile matematice sin() si cos();
Nota: Argumentul trebuie sa fie nr pozitiv,real;
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CProb2Dlg::OnOK()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Problema nr 6
Enunt :
Miscarea unei particule avind masa m si sarcina electrica q>0 are loc sub actiunea unui cimp magnetic unifom si stationar,de inductie magnetica B(r)=B=ct. La momentul t0=0 particula este lansata din pozitia P0,cu o viteza v0 si care face cu linia de cimp prin P0 un unghi φ [0,П]. Sa se determine:
a)Modelul matematic care descrie miscarea ;
b)Legile de miscare ale particulei;
Date de intrare:
masa particulei m,
q-sarcina,
B-inductia magnetica ,
v0-viteza initiala,
φ -unghiul facut cu linia de cimp;
Date de iesire: Modelul matematic vectorial si scalar; legile de miscare ale particulei.
Model mathematic:
Modelul matematic vectorial este: [d(dr/dt)/dt]=q[dr/dt]xB;
(S.R.I.) r(0)=0; pt t0=0 ;
[dr/dt](0)=v0;
Modelul matematic scalar este:
m[d(dx/dt)/dt]=qB*dy/dt;
m[d(dy/dt)/dt]=-qB*dx/dt;
m[d(dz/dt)/dt]=0;
Legile de miscare ale particulei sunt:
x(t)=v0/w*sin(φ)*[1-cos(wt)];
y(t)=v0/w*sin(φ)*sin(wt); pt t>=0;
z(t)=v0*t*cos(φ);
Nota: (S.R.I.)= reprezinta sistemul de referinta inertial;
v0=viteza initiala;
t0=momentul initial;
w=|q|B/m : pulsatia ciclotronica;
Valorile introduse pt masa si viteza initiala trebuie sa fie numere pozitive;
Sarcina electrica trebuie sa fie pozitiva;
Unghiul φ este introdus in grade;
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CProb3Dlg::OnOK()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu ferestrele cu rezultate:
Problema nr.7
Enunt:
Se da un circuit alcatuit din n conductante si m surse de current. Toate sunt legate in paralel iar sursele de curent sunt dispuse in acelas sens; Se cere sa se determine conductanta echivalenta Ge, rezistenta echivalenta Re, sursa de curent echivalenta Ige si sursa de tensiune echivalenta Ee;
Schema circuitului in paralel:
Circuitul poate continua pina la n conductante si m surse de current.
Pe schema R este G;
Date de intrare: Se introduc numarul de conductante si de surse de current si valorile numerice ale celor n conductante si m surse;
Date de iesire: Ge, Re, Ige, Ee;
Model mathematic: Formulele pentru circuitele in paralel sunt:
Ge=G1+G2+.+Gn;
Re=1/Ge;
Ige=Ig1+Ig2+.+Igm;
Ee=Ige*Re;
Nota: Numarul de conductante si de surse de curent introdus nu trebuie sa depaseasca 10;
Valorile pentru datele introduse trebuie sa fie pozitive si intregi;
Unitatile de masura folosite sunt: Ohmi,Amperi,Volti;
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CTest4Dlg::OnOK()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu fereastra cu rezultate:
Problema nr. 8
Enunt:
Calculeaza o integrala improprie din functia f(x)=sin(x)/x in intervalul [0..3.14], pi=3.14;
Exemple de integrale improprii.
,,;
Modelul matematic
Se poate lua orice integrala improprie de speta I din analiza matematica (se observa varietteaa functiilor integrant).
Algoritmul de calcul a lvalorii integralei foloseste metoda punctelor mediane:
,unde ,;
,
Unde ,k=1,2,3,.....
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
float functie(float x)
float impropriu(float functie(float), float a, float b)
if(k>=kmax) printf('n integrala improprie:
numar maxim de iteratii depasit');
return s;
};
void CIntegrala_improprieDlg::OnOK()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu fereastra cu rezultate:
Problema nr. 9
Enunt:
Sa se calculeze determinantul unei matrici patratice de ordinul 3.
Date de intrare: Elementele matricii introduse de la tastatura;
Date de iesire: Determinantul matricii;
Model matematic:
S-a folosit metoda clasica de calcul a determinantului,prin adunarea minorilor formati de eliminarea pe rind a liniilor si a coloanelor corespunzatoare fiecarui element de pe o linie sau o coloana.
Daca avem o matrice: a11 a12 a13
A = a21 a22 a23
a31 a32 a33
Atunci determinantul ei va fi:
det(A)= a11(a22*a33-a32*a23) +a12(-1)(a33*a21-a31*a23)+a13(a32*a21-a31*a22);
Nota:
Elementele matricii vor fi numere intregi;
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
int det3(int n,int a[][3])
d=d+pow((-1),x)* a[i][i]*(a[i+1][i+1]*a[i+2][i+2]-a[i+1][i+2]*a[i+2][i+1]);
}
else
d=d+a[i][i]*(a[i+1][i+1]*a[i+2][i+2]-a[i+1][i+2]*a[i+2][i+1]);
return d;
}
void CProb9Dlg::OnOK()
Problema nr 10;
Enunt:
Fiind dat un sistem de n forte, a caror intensitati sunt cunoscute sa se determine:
a)Expresiile analitice ale vectorilor forta,
b)Rezultanta sistemului;
c)Momentele in report cu polul O ale tutuor fortelor; d)Momentul rezultant in raport cu polul O al sistemului; e) Invariantul scalar al sistemului;
f)Momentul minim al sistemului;
Date de intrare: Modulul celor n forte (valoarea lor numerica),coordonatele originii si a virfului fiecarei forte;
Date de iesire: Expresiile analitice ale fortelor,Rezultanta sistemului,Momentele in raport cu O,momentul rezultant; Invariantul scalar,Momentul minim;
Model matematic:
Consideram ca avem n forte, pentru care stim intensitatea(modulul),coordonatele originii si ale virfului fortei;
a)Expresia analitica a fiecarei forte va fi: (expresie vectoriala) F[i]=F[i][0]i+F[i][1]j+F[i][2]k;
i=0,n unde 0,1,2 sunt (x,y,z) ale sistemului de axe;
(vector)F[i]=(scalar)F[i]*ab/|ab|;
Unde (scalar)F[i] este intensitatea fortei i;
(vector)ab=ab[0]i+ab[1]j+ab[2]k;
|ab|=radical(ab[0]*ab[0]+ ab[1]*ab[1]+ab[2]*ab[2]);
ab[0]=b[0]-a[0];
ab[1]=b[1]-a[1];
ab[2]=b[2]-a[2];
unde a[i] sunt coordonatele originii fortei i ;
b[i] sunt coordonatele virfuil fortei i ;
b) Rezultanta sistemului va fi:
(vector) R=r[0]i+r[1]j+r[2]k
=∑Fi;
c)Momentele in raport cu polul O aloe tuturor fortelor sunt:
Mo(F[i])=m[i][0]i+m[i][1]j+m[i][2]k;
Unde m[i][0]=a[1]*F[i][2]-a[2]*F[i][1];
m[i][1]=a[2]*F[i][0]-a[0]*F[i][2];
m[i][2]=a[0]*F[i][1]-a[1]*F[i][0];
d)Momentul resultant in raport cu polul O al sistemului este:
(vector)M=M[0]i+M[1]j+M[2]k;
Unde M[0]= ∑m[i][0];
M[1]= ∑m[i][1];
M[2]= ∑m[i][2];
e)Invariantul scalar al sistemului este:
RM=r[0]*M[0]+r[1]*M[1]+r[2]*M[2];
f) Momentul minim al sistemului este:
(vector)Mmin=Mmin[0]i+Mmin[1]j+Mmin[2]k;
Unde Mmin[0]=RM*r[0]/Rmod2;
Mmin[1]=RM*r[1]/Rmod2;
Mmin[2]=RM*r[2]/Rmod2;
Rmod2=R*R=r[0]*r[0]+r[1]*r[1]+r[2]*r[2];
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CProb8Dlg::OnOK()
abmod1=sqrt(ab1[0]*ab1[0]+ab1[1]*ab1[1]+ab1[2]*ab1[2]);
abmod2=sqrt(ab2[0]*ab2[0]+ab2[1]*ab2[1]+ab2[2]*ab2[2]);
abmod3=sqrt(ab3[0]*ab3[0]+ab3[1]*ab3[1]+ab3[2]*ab3[2]);
for(j=0;j<3;j++)
CString Sir;
Sir.Format('n Fortele introduse sunt:n Fr1=%fi+%fj+%fk n Fr2=%fi+%fj+%fk; n Fr3=%fi+%fj+%fk;',f1[0],f1[1],f1[2],f2[0],f2[1i, f2[2],f3[0],f3[1],f3[2]);
AfxMessageBox(Sir);
m1[0]=fx1[1]*f1[2]-fx1[2]*f1[1];
m1[1]=fx1[2]*f1[0]-fx1[0]*f1[2];
m1[2]=fx1[0]*f1[1]-fx1[1]*f1[0];
m2[0]=fa1[1]*f2[2]-fa1[2]*f2[1];
m2[1]=fa1[2]*f2[0]-fa1[0]*f2[2];
m2[2]=fa1[0]*f2[1]-fa1[1]*f2[0];
m3[0]=fo1[1]*f3[2]-fo1[2]*f3[1];
m3[1]=fo1[2]*f3[0]-fo1[0]*f3[2];
m3[2]=fo1[0]*f3[1]-fo1[1]*f3[0];
Sir.Format('n Momentul fortei 1 este: n Mo1=%fi+%fj+%fk n Momentul fortei 2 este:n Mo2=%fi+%fj+%fk n Momentul fortei 3 este:n %fi+%fj+%fk',m1[0],m1[1],m1[2],m2[0],m2[1],m2[2],m3[0],m3[1],m3[2]);
AfxMessageBox(Sir);
}
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Problema nr 11
Enunt:
Folosind metoda Iacobi sa se determine forma canonica pentru o forma patratica de ordinul3 de forma:
h(x) = a1*x1*x1 + a2*x2*x2 + a3*x3*x3- b*x1*x2 - c*x1*x3 - d*x2*x3;
Date de intrare: Numarul de indici ai functionalei patratice n care este <=3 si elementele matricii G completata sub forma prezentata mai jos. Coeficientii care lipsesc se inlocuiesc in matrice cu 0.
Date de iesire: Coeficientii formei canonice f1,f2,f3. De aici forma canonica va rezulta astfel:
h(x)=f1*β1* β1+f2* β2* β2+f3* β3* β3;
si signatura sgn(p,q,r);
Model matematic:
h(x) este o functionala patratica; Pentru a gasi forma ei canonica o scriem sub forma unei functii biliniare astfel:
g(x,y)= a1*x1*y1 + a2*x2*y2+a3*x3*y3- b/2*x1*y2- b/2*x2*y1-c/2*x1*y3-c/2*x3*y1-d/2*x2*y3-d/2*x3*y2;
Coeficientii noi care s-au format sunt elementele matricei functionalei patrarice:
a1 -b/2 -c/2
-c/2 -d/2 a3
Se vor calcula 3 determinanti : D1=a1;
D2=a1*a2 - c/2*b/2;
D3=det(G);
Forma canonica va fi:
h(x)=f1*β1* β1+f2* β2* β2+f3* β3* β3;
unde fi,f2,f3 sunt coeficientii formei canonice:
f1=1/D1;
f2=D1/D2;
f3=D2/D3;
Signatura formei va fi : sgn(p,q,r);
Unde p=nr de coeficienti pozitivi;
q=nr de coeficienti negative;
r=nr de coeficienti nuli;
Nota: Coeficientii se introduc sub forma de matrice exact elementele din matricea G pe care am format-o;
In functia det(n,a) se va calcula determinantul matricii G care este D3.
In functia exp_c(n,g) se vor calcula determinantii intermediari D1 si D2, afiseaza D1,D2,D3 apoi calculeaza coeficientii formei canonice dupa modelul prezentat mai sus si ii afisaza;
Urmeaza calcularea signaturii si afisarea ei prin verificarea coeficientilor (citi sunt pozitivi ,citi negativi si citi nuli);
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
int det(int n,int a[][3])
s=s+'n';
}
AfxMessageBox(s);
i=0;
d=0;
for(j=0;j<n;j++)
if(j>i)
d=d+pow((-1),x)* a[i][i]*(a[i+1][i+1]*a[i+2][i+2]-a[i+1][i+2]*a[i+2][i+1]);
}
else
d=d+a[i][i]*(a[i+1][i+1]*a[i+2][i+2]-a[i+1][i+2]*a[i+2][i+1]);
return d;
}
void exp_c(int n,int g[][3])
void CProb11Dlg::OnOK()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Problema
nr 12;
Enunt:
Sa se afle derivate functiei f(x)=sin(x).
Derivata se calculeaza pentru valorile
,i=0,1,2,3,4,5,6;
Modelul matematic:
Pentru calculul derivatei in aceste puncte se foseste formula :,pentru primul punct x0;
Se considera pasul h=.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CDerivatafunctieisinDlg::OnOK()
// afisam val der pt punctele alese
CString Sir;
Sir.Format('derivata este %f',r);
AfxMessageBox(Sir);
}
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu fereastra cu rezultate:
Problema nr 13;
Enunt:
Sa se aproximeza valoarea lui .
Pentru calcularea lui s-a folosit seria de puteri : ,
Modelul matematic:
Determinarea relatiei de recurenta:
Deci :
Calculul sumei
Valorile initiale sunt: i=0,s=1,
Stabilirea conditiei de convergenta ,numarul maxim de iterati =20.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CE_la_xDlg::OnOK()
;
ti=tc;
}
while(eps>epsmax);
//printf('nnttSolutia este=%.3fnn',s);
Sir.Format('nnttSolutia este=%.3fnn',s);
AfxMessageBox(Sir);
}
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Problema nr 14;
Enunt:
Transfigurarea unei retele de trei elemente pasive de tip resistor din stea in tringhi.
Modelul matematic:
Pentru trecerea de la reteau stea la reteaua triunghi se se utilizeaza formulele de calcul:
r12=(r1*r2+r1*r3+r2*r3)/r3;
r13=(r1*r2+r1*r3+r2*r3)/r2;
r23=(r1*r2+r1*r3+r2*r3)/r1;
Unitatea de masura pentru rezistenta este ohm,se pot lua multipli sau submultipli dar utilizatprul este limitat la tipul de data float din mediul de programare.utilizatorul poate considera valoarea 1 ca fiind 1 ohm, 1kohm, 1mohm, 1gohm sau 1mohm, uohm e.t.c.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CStea_triunghiDlg::OnOK()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Problema nr 15;
Enunt:
Transfigurarea unei retele de trei elementepasivede tip resistor din triunghi in stea.
Modelul matematic:
Pentru trecerea de la reteau triunghi la reteaua stea se se utilizeaza formulele de calcul:
r12=(r1*r2)/(r1+r2+r3);
r13=(r1*r3)/(r1+r2+r3);
r23=(r2*r3)/(r1+r2+r3);
Unitatea de masura pentru rezistenta este ohm,se pot lua multipli sau submultipli dar utilizatprul este limitat la tipul de data float din mediul de programare.utilizatorul poate considera valoarea 1 ca fiind 1 ohm, 1kohm, 1mohm, 1gohm sau 1mohm, uohm e.t.c.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CTriunghi_steaDlg::OnOK()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu fereastra de rezultate:
Problema nr.16
Enunt:
Sa se construiasca polinonul de interpolare Lagrange pentru functia data prin tabelul de valori:
xk |
X0 |
X1 |
X2 |
X3 |
X4 |
yk |
Y1 |
Y2 |
Y3 |
Y4 |
Y5 |
Model matematic:
Valorile din tabel pot continua pina la xn si yn. Functia este cunoscuta prin valorile sale in cele (n+1) puncte ,xk, k=0,n; iar yk=f(xk);
Se pune problema determinarii unui polinom de grad n care sa coincida cu functia in cele (n+1) puncte.Polinomul se noteaza Ln(x);Va trebiu sa avem deci Ln(xk)=f(xk)=yk; cu k=0,1;
Ln(x)=y0*φ0(x)+y1*φ1(x)++yn*φn(x);
unde yk sunt cele(n+1) valori ale functiei iar φk(x) sunt (n+1) polinoame de grad n avind forma generala :
φk(x)=(x-x0)(x-x1)(x-xn)/(xk-x0)(xk-x1)(xk-x(k-1))(xk-xn);
unde i=0,n; i≠k;
sau putem scrie: φk(x)=produs(x-xi)/produs(xk-xi); i≠k;
Forma generala a polinomului Lagrange este: Ln(x)=∑ yk* φk(x); k=0,n;
Daca se cere calcularea functiei intr-un anumit punct dat, z, atunci valoare functiei sa va calcula punind numarul z in locul lui x din expresia generala a lui Ln(x) astfel: Ln(z)=∑ yk* φk(z); iar f(z)=Ln(z);
Date de intrare: Valorile din tabel: punctele pt care se aplica functia si valorile functiei in acele puncte; si un alt punct in care se doreste calcularea funstiei ,z;
Date de iesire: Valoarea functiei f(x) intr-un punct oarecare z;
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows
void CLagrangeDlg::OnOK()
Imagine:
Fereastra Windows realizata pentru introducerea datelor:
Imagini cu fereastra de rezultate:
Problema nr.17
Enunt:
Sa se descompuna in produs TS matricea A. Matricea A este patratica si nesingulara:
a11 a12 a13..a1n
A= a21 a22 a23..a2n
.
an1 an2 an3..ann
Model matematic:
Deoarece matricea A este nesingulara( detA≠0) ea poate fi descompusa intr-un produs de doua matrice :
-una inferior triunghilara T;
-una superior triunghiulara S;
Matricea S are pe prima linie elementele primei linii din A, iar matricea T are pe prima coloana elementele primei coloane din A impartita la a11 iar pe diagonala principala elementele sunt 1;
In prima faza matricile arata astfel:
a11 a12 a13..a1n 1 0 00
0 s22 s23..s2n a21/a11 1 0 0
S= T=
0 0 s33..s3n a31/a11 t32 1 0
.
0 0 0. snn an1/a11 tn2 tn3..1
Relatiile de calcul pt alementle necunoscute ale acestor matrice sunt:
Skj=akj-∑Tkp*Spj; p=1,k-1;
Tik=1/Skk*[aik-∑Tip*Spk]; p=1,k-1;
Date de intrare: Matricea A,cu elemente numere reale;
Date de iesire: Matricile T si S;
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows
void CTSDlg::OnOK()
s=s+'n';
}
AfxMessageBox(s);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
i=0;
for(j=0;j<n;j++)
ss[i][j]=a[i][j];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i==j)
t[i][j]=1;
j=0;
for(i=1;i<n;i++)
t[i][j]=a[i][j]/a[0][0];
for(k=1;k<n;k++)
for(i=k+1;i<n;i++)
}
Sir.Format('n Matricea T este:n');
AfxMessageBox(Sir);
for(i=0;i<n;i++)
s=s+'n';
}
AfxMessageBox(s);
Sir.Format('n Matricea S este:n');
AfxMessageBox(Sir);
for(i=0;i<n;i++)
s=s+'n';
}
AfxMessageBox(s);}
Imagine:
Fereastra Windows realizata pentru
introducerea datelor.
Problema nr.18;
Enunt:
Pentru
urmatorul circuit se cunosc Ig=2A, R=3A. Se cere sa se determine Rx astfel
incit Iab=2A;
Model matematic:
Alegem sensurile curentilor pe laturile in care nu avem deja sensul dat de sursele de current. Pe laturile pe care avem surse de current sensul curentului este dat de acestea.
S-au numerotat laturile ca in figura.
Conform legii lui Ohm avem: Iab=Uab/R; rezulta Uab=Iab*R;
Inlocuind numeric Uab=2*3=6;
Conform teoremelor lui Kirrchoff avem relatiile:
Iab*R+Ix*Rx-Ig=0 rezulta Ix*Rx=Ig-Iab*R;
Inlocuid numeric Ix*Rx=-4;
-Ig-Ix-I1=0 rezulta Ix=-Ig-I1;
-Ig+I2+I1+I3=0;
-I2-I4+Iab+Ig=0;
-I3+I4-Ig=0;
Adunind ultimele doua relatii se reduce I4 si obtinem -I2-I3=-2; rezulta I2+I3=2;
In program I2+I3 o notam cu s ;
Din relatia -Ig+I2+I3+I1=0 scoatem I1=Ig-I2-I3=0;
Rezulta ca Ix=-Ig-0=-2;
Rx=-4/Ix=-4/-2=2;
Date de intrare: Ig,R,Iab;
Unitatile de masura folosite sunt: I(A), R(Ω), U(V).
Datele introduse vor fi numere intregi.
Date de iesire: Rx;
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
Programul functioneaza pentru orice valori intregi ale datelor de intrare.
void CCLNnDlg::OnOK()
Imagine:
Fereastra Windows realizata pentru
introducerea datelor.
Imagini cu fereastra de rezultate:
Problema nr.19;
Enunt:
Sa se scrie numarul natural a carui cod binar este introdus de utilizator.Codul binar introdus va fi o combinatie de 4 cifre de 1 si 0;
Model matematic:
Consideram ca A,B,C,D sunt cele 4 cifre de 0 si 1 introduse.Numarul natural va fi de forma:
N= D*23 +C*22+B*21+A*20;
Exemplu:
Dorim sa gasim numarul natural a carui cod binar este: 1100;
Asta inseamna ca avem: D=1, C=1,B=0,A=0;
Numarul natural va fi: N=1*8+1*2+0*2+0*1=11 deci N=11;
Utilizarea practica a acestor conversii:
La afisajele electronice: ceasuri electronice cu cifre, panouri CFR, etc;
Conversiile din numere naturale in cod biner si invers se utilizeaza in decodificatoare BCD-7segmante.
Circuitul de afisare va contine celula de afisare cu 7segmente si o retea logica de conversie binar;
A,B,C,D sunt intrari digitale si formeaza un numar binar in cod BCD=Binnary Coded Decimaly : Nz=D*23 +C*22+B*21+A*20;
Nz=numarul natural rezultat si care apare pe ecranele ceasurilor, panourilor;
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CCodDlg::OnOK()
Imagine:
Fereastra Windows realizata pentru
introducerea datelor.
Imagini cu fereastra de rezultate:
Problema nr.20;
Enunt:
Fie 3 vectori a,b,c definiti astfel: a=a1*i+a2*j+a3*k;
b=b1*i+b2*j+b3*k;
c=c1*i+c2*j+c3*k;
unde i,j,k sunt cursori.
Sa se determine daca vectorii sunt coplanari si volumul paralelipipedului format de acesti 3 vectori.
Date de intrare: coordonatele celor 3 vectori: a1,a2,a3,b1,b2,b3,c1,c2,c3;
Date de iesire:volumul paralelipipedului Vp;
Model matematic:
Trei vectori sunt coplanari daca <a,b,c>=0 adica daca determinantul format din coordonatele celor 3 vectori este 0:
Det
Volumul paralelipipedului va fi modul din acest determinant: Vp= |<a,b,c>|
Exemplu :
Consideram ca avem urmatorii vectori : a=i+2j-5k;
b=i-j+4k;
c=i-j+k;
Calculam determinantul format de acesti vectori pentru a afla daca vectorii sunt coplanari sau nu. Matricea corespunzatoare va fi:
1 2 -5
M= 1 -1 4
1 -1 1
Iar determinantul ei va fi: d=9 deci este diferit de 0 rezulta ca vectorii nu sunt coplanari.
Volumul paralelipipedului va fi |9| si deci Vp=9;
Daca vectorii erau coplanari Vp=0;
Observatie: Coordonatele vectorilor sunt introduse ca numere reale
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
float det3(int n, float a[3][3])
d=d+pow((-1),x)* a[i][i]* (a[i+1][i+1]* a[i+2][i+2] - a[i+1][i+2]* a[i+2][i+1]);
}
else
d=d+a[i][i]*(a[i+1][i+1]*a[i+2][i+2]-a[i+1][i+2]*a[i+2][i+1]);
return d;
}
void CCoplDlg::OnOK()
}
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu fereastra de rezultate:
Problema nr. 21 Aproximarea functiilor prin Polinomul Newton cu diferente divizate:
Enunt:
Se considera o functie f ale carei valori se cunosc intr-un ansamblu de noduri xi, i=0,n nu neaparat echidistante.Se se determine un polinom de aproximare Newton cu diferente divizate care sa permita calculul functiei in orice punct.
Model matematic:
Expresiile: (f(x1)-f(x0))/(x1-x0) , (f(x2)-f(x1))/(x2-x1), ..: (f(xn)-f(xn-1))/(xn-xn-1)
Se numesc diferente divizate de ordinul 1 ale lui f. Aceste diferente se noteaza prin: f(x0,x1),f(x1,x2),.f(xn-1,xn). Diferentele divizate de ordinul 1 se constituie ca fiind operatori liniari fata de f, fiind simetrice in raport cu punctele xi,xj . Se pot defini recursiv diferentele divizate de ordinul 2 prin:
f(xi,xj,xk)=(f(xj,xk)-f(xi,xj))/xk-xj;
Diferentele divizate de ordinul k se
scriu pornind de la diferentele divizate de ordinul (k-1) astfel:
f(xi-1,xi,.xi+k)=
[ f(xi,.,xi+k)-f(xi-1,.,xi+k-1)]/xi+k-xi-1;
Polinomul Newton cu diferente divizate este:
Nn(x)=f(x0)+f(x0,x1)(x-x0)+.+f(x0,x1,.,xn)(x-x0)(x-x1).(x-xn-1);
Unde x este numarul in care dorim sa aflam valoarea functiei.
Date de intrare: Numarul de noduri n , punctele x0,x1,.xn si valorile functiei in aceste puncte f(x0),f(x1).f(xn) si nodul x in care dorim sa aflam valoarea functiei;
Date de iesire: Valoarea functiei intr-un punct dat;
Nota: Punctele x0,x1,.xn vor fi numere intregi.Valorile functiei in aceste puncte vor fi numere reale.
Exemplu:
Se da o functie prin urmatoarele noduri :
xk |
1 |
2 |
3 |
f(xk) |
4 |
5 |
6 |
f(x0,x1)=[f(x1)-f(x0)]/x1-x0=(5-4)/2-1=1
f(x1,x2)=[f(x2)-f(x1)]/x2-x1=(6-5)/3-2=1
f(x0,x1,x2)=[f(x1,x2)-f(x0,x1)]/x2-x0=0
Nn(x)=f(x0)+f(x0,x1)(x-x0)+f(x0,x1,x2)(x-x0)(x-x1)=4+(x-1)
Daca dorim sa aflam valoarea functiei in punctul 3 inlocuim x cu 3 si avem f(3)=6 care este o verificare conform tabelului;
Pentru x=7 avem valoarea functiei 10;
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
float divizate(int n, int x[], float f[])
p[0]=1;
for(j=0;j<n-1;j++)
s=f[0];
for(i=0;i<n-1;i++)
return s;
}
void CDivizateDlg::OnOK()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Problema nr.22
Enunt:
Se considera un circuit sub forma de punte alcatuit din 4 impedante ca in figura de mai jos.Se dau ca date de intrare valoarile a 3 impedante :z1,z2,z3, valoarea pulsatiei ω si capacitatea condensatorului Ce.Sa se determine valoarea celei de-a 4-a impedante Zx=Rx+jωLx; unde Rx este partea reala a impedantei,rezistenta, iar Lx este inductanta bobinei.
Modelul matematic:
Se observa ca z1=R1, z2=R2, z3=R3 iar Zx=Rx+jωLx+1/jωCe;
Deci necunoscutele ce trebuie aflate sunt Rx si Lx;
IN este indicatorul de nul;
Folosim conditia de echilibru U=0;
Aplicind teoremele lui Kirchhoff avem relatiile: I1=E/z1+z4; I3=E/z3+z2; unde I1,I3 sunt curentii din laturile 1 si 3; de aici rezulta ca z3*E/z3+z2=z1*E/z1+z4;
Obtinem in final ca impedantele din bratele opuse sunt egale: z3z4=z1z2;
Unde z4 este impadanta pe care trebuie sa o aflam notata cu Zx;
Tinind cont de faptul ca z1=R1 , z2=R2, z3=R3 iar Zx=Rx+jωLx+1/jωCe aplicind egalitatea obtinuta mai sus avem R1R2=R3[Rx+j(ωLx-1/ωCe);
R1R2=R3Rx rezulta ca Rx=R1R2/R3;
Lx=1/ω*ω*Ce;
Exemplu: Consideram ca avem datele z1=2 Ω; z2=3 Ω; z3=6 Ω; ω=20 rad/s, Ce=10 F;
Unitatile de masura folosite sunt: Ω=Ohmi, rad/s=radiani pe secunda; F=farazi;
Folosind formulele de calcul prezentate avem urmatoarele rezultate: Rx=2*3/6=1;
Lx=1/400*10=1/4000=0,005;
Deci Zx=1+j*0,005;
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CPunte1Dlg::OnOK()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu fereastra de rezultate:
Problema nr.23
Enunt:
Se considera un circuit sub forma de punte ca in figura urmatoare si care contine 4 impedante : z1,z2,z3,zx si o sursa de tensiune E. Impedanta zx este necunoscuta.Se mai cunoaste valoarea pulsatiei omega.Se cere sa se afle valoarea impedantei zx=Rx+j ωLx;
Model matematic:
IN= indicator de nul;
Z1=r+Re+jωLe;
Notam cu R1=r+Re si avem z1=R1+jωLe;
Z2=R2;
Z3=R3;
Zx=Rx+jωLx;
R2(R1+jωLe)=R3(Rx+jωLx), rezulta de aici ca:
R2*R1=R3*Rx ,de unde rezulta: Rx=R2*R1/R3
ωLe*R2= ωLx*R3,de unde rezulta Lx=Le*R2/R3
Deci am aflat Zx=Rx+j ωLx;
Date de intrare: Valorile celor 3 impedante cunoscute z1,z2,z3 si pulsatia ω;
Date de iesire: Valoarea impedantei necunoscute Zx= Rx+j ωLx;
Exemplu:
Considerem ca: z1=1+j5; Z2=8; Z3=2;
Inlocuind numeric in relatiile de mai sus avem Rx=8*1/2=4 iar Lx=5*8/2=20
Rezulta ca Zx=4+j20;
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CPunte2Dlg::OnOK()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu fereastra de rezultate:
Problema nr 24;
Enunt:
Sa se calculeze laturile si unghiurile triunghiului format din 3 vectori:
a=a1*i+a2*j+a3*k;
b=b1*i+b2*j+b3*k;
c=c1*i+c2*j+c3*k;
unde i,j,k sunt cursori(vectori unitari)
Date de intrare: coordonatele celor 3 vectori;
Date de iesire: dimensiunea celor 3 laturilor si cosinusurilecelor 3 unghiuri.
Modelul matematic:
Daca avem coordonatele vectorilor atunci putem afla laturile triunghiului deoarece laturile sunt de fapt lungimile vectorilor: L1=|a|; L2=|b|; L3=|c|;
|a|= =L1;
|b|= =L2;
|c|= =L3;
Cosinusurile unghiurilor se afla cu formulele:
cosA=<c,-b>/|c|*|b|;
cosB=<a,-c>/|a|*|c|;
cosC=<-a,b>/|a|*|b|;
Deci pentru a calcula cosinusurile trebuie sa calculam produsele scalare : <c,-b>,<a,-c>, <-a,b>
<c,-b>=-<c,b>=-(c1*b1+c2*b2+c3*b3);
<a,-c>=-<a,c>=-(a1*c1+a2*c2+a3*c3);
<-a,b>=-<a,b>=-(a1*b1+a2*b2+a3*b3);
Exemplu:
Consideram ca avem vectorii: a=i+j-2k;
b=3i+2j-5k;
c=-4i-3j+7k;
Calculam modulele acestor vectori care sunt de fapt lungimile laturilor triunghiului:
|a|===L1;
|b|===L2;
|c|===L3
Calculam apoi produsele scalare:
-<c,b>=-(-12-6-35)=53
-<a,c>=-(-4-3-14)=21
-<a,b>=-(3+2+10)=-15
Acum putem calcula cosinusurile unghiurilor:
cosA=53/(*);
cosB=21/(*);
cosC=-15/(*);
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CVectDlg::OnOK()
Imagine:
Fereastra Windows realizata pentru
introducerea datelor.
Imagini cu fereastra de rezultate:
Problema
nr 25; PUNTEA DE MASURA WHEATSTONE
Enunt
Clasa de precizie c=0.05 data,avand rezistorul R2 cu cinci decade reglabil intre 0.1 ohm si 11111 ohm. Se cere sa se determine valoarea rezistentei Rx, eroarea absoluta,si relative limita asupra rezultatului,surentii admisibili pentru fiecare decada a rezistentelor din brtatele puntii,tensiunea maxima admisibila de alimentare a puntii asa incat nici o rezistenta san u fie solicitata.
Model matematic:
Valoarea se calculeaza cu,iar rezulta
, .
Pentru curentul adimisibil maxim ,se calculeaza cu formula pentru fiecare valoare a lui R2: .
La echilibru curentul prin indicatorul de null este 0 rezulta ca si sunt parcurse de acelasi current I1, iar si de un acelasi current I2:
si .
Valorile maxime pentru I1 si I2 sunt dictate de curentul admisibil prin decadacea mai mare care este parcursa de I1,respective I2 asa incat ramura (+) admite:
iar ramura () :
DATE DE INTRARE IN ALGORITM
Se introduce in problema rezistentele R2,R3,R4,puterea maxima admisibila pentru fiecare element de rezistenta al puntii,constanta puntii.
EXEMPLU CONCRET DE UTILIZARE A PROGRAMULUI
, ,
pentru valoarea lui =0.1
Asa se procedeaza mai departe pentru celelalte valori:1;10;100;1000.
Pentru determinarea tensiunii maxime admisibila de alimentare a puntii asa incat nici o rezistenta san u fie solicitata
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows
void CWHEATSTONEDlg::OnCalculeazarx()
/////////////////////////////////////////////////////////////////
void CWHEATSTONEDlg::OnEroarea()
void CWHEATSTONEDlg::OnIadmisibil()
void CWHEATSTONEDlg::OnTensiunea()
Imagine:
Fereastra Windows realizata pentru introducerea
datelor.
Imagini cu ferestrele de rezultate:
Problema nr 26; WATTMETRU ELECTRODINAMIC
Enunt
Un wattmetru electrodinamic are urmatoarele date :
,,,,
Consumul circuitului de tensiune ,
Rezistenta sircuitului de consum .
Sa se determine:
-constanta nominala a wattmetrului;
-rezistenta aditionala necesara extinderii limitei de masurare in tensiune la 500V(se poate da orice valoare mai mare sau egala cu valoarea nominala a aparatului);
-constanta wattmetrului cu rezistenta aditionala;
-consumul propriu maxim al aparatului in cele doua situatii;
Model matematic:
,
,
,
,
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CWattmetruDlg::OnConstnomw()
void CWattmetruDlg::OnRadition()
void CWattmetruDlg::OnConstwcur()
void CWattmetruDlg::OnSita()
void CWattmetruDlg::OnSitb()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu ferestrele de rezultate:
Problema nr 27; OHMETRU ELECTROMAGNETIC
Enunt:
Un ohmetru magnetoelectric cu schema serie cu sursa de t.e.m. E si rezistenta interna Re, rezistenta R1 de limitare a curentului avand o fractiune reglabila pentru ajustarea capatului de scalaal instrumentului (c.s.).
Exemplu numeric de date
E=1,5V;Re=30;.
Se cere :
-sa se calculeze R1 stiind ca pentru
-sensibilitatea aparatului electromagnetic;
-sa se calculeze fractiunea variabila pentru compensarea scaderii de tensiune a t.e.m. cu 20%.
Model matematic
Curentul care se stabileste prin circuit este: unde
este rezistenta interna a ohmetrului , rezulta: , unde sensibilitatea instrumentului magnetoelectric,
Dimensionarea rezistentei ,implicit a rezistentei se face impunand conditia pentru ceea ce determina si ,deoarece .
Cand t.e.m. a bateriei scade cu 20% adica devine trebuie sa fie indeplinita conditia adica trebuie sa prezinte o variatie de la 72 ohmi pana la 90 ohmi, ceea ce inseamna .
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void COHMETRUMAGDlg::OnA()
void COHMETRUMAGDlg::OnB()
void COHMETRUMAGDlg::OnC()
Imagine:
Fereastra Windows realizata pentru
introducerea datelor.
Imagini cu ferestrele de rezultate:
Problema nr 28; SCHEMA LUI HORNER
Enunt:
Se citeste de la tastatura un polinom si argumenrul cu care se va face evaluarea acestuia si se obtine restul impartirii polinomului prin x-'argumentul'.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
float polinom( float x, float a[], int n)
/////////////////////////////////////////////////////////////////////////////
void CHORNERDlg::OnCalculeaza()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu fereastra de rezultate:
Problema nr 29;
Enunt:
Inmultirea a n nr. complexe.(Programul poate inmulti maxim 6 nr. complexe)
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void input::OnOK()
for (i=1;i<=N;i++)
////////////////////////////////////////////////////////////////
CString Sir;
Sir.Format('nnnttRezultatul inmultirii numerelor este : nntz1 * z2=%f[cos(%f)+i sin(%f)]',r1,t1,t1);
AfxMessageBox(Sir);
/*///////////////////////////////////////////////////////////////
_ltoa( r1, buffer, 10 );
CEdit *p1=(CEdit *)GetDlgItem(IDC_EDIT13);
p1->SetWindowText(buffer);
}
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu fereastra de rezultate:
Problema nr 30;
Enunt:
Impartirea a doua numere complexe.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CIMPARTIREDlg::OnCalculeaza()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu fereastra de rezultate:
Problema nr 31;
Enunt:
Sa se calculeze radicalul de ordin n dintr-un numar complex.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CRAD_NDlg::OnCalculeaza()
_ltoa( m_a, buffer1, 10 );
CEdit *p1=(CEdit *)GetDlgItem(IDC_EDIT4);
p1->SetWindowText(buffer1);
_ltoa( m_b, buffer2, 10 );
CEdit *p2=(CEdit *)GetDlgItem(IDC_EDIT5);
p2->SetWindowText(buffer2);
}
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu fereastra de rezultate:
Problema nr 32;
Enunt:
Ridicarea la puterea 'n' a unui numar complex.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CZ_LA_NDlg::OnCalculeaza()
Imagine:
Fereastra Windows realizata pentru
introducerea datelor.
Imagini cu fereastra de rezultate:
Problema nr 33;
Enunt:
Doua bile egale de masa m sunt sunspendate in vid de acelasi punctde sustinere din 2 fire de matase de lungime l. Bilele se incarca cu sarciniidentice ca semn si marime. Sa se determine valoarea acestor sarcini stiind ca la echilibru firele formeaza unghiul 2 alfa.
Date de intrare:
masa bilelor - m;
lungimea firului - l ;
unghiul alfa - a;
Modelul matematic:
Pentru o viziune mai clara asupra problemei s-a creat si schema aferenta:
Determinarea sarcinii o realizam cu ajutorul Fortei lui Coulomb:
Intrucat Fortele F1 si F2 sunt de semn contrar ele sunt egale. Le determinam cu ajutorul functiilor trigonometrice cosinus si sinus , obtinand astfel : si .
Aflam distanta d= si inlocuim in F, iar apoi din relatia obtinuta scoatem sarcina q.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CMy1prDlg::OnOK()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu ferestrele de rezultate:
Aplicatii practice:
Rezolvand aceasta problema de dam seama ca o putem extinde si generaliza .
Astfel ca Electroscopul vine ca o aplicatie practica. Acest aparat poate fi construit astfel: la capatul inferior al unei sarme metalice, sunt fixate doua foite subtiri din aluminiu. Sarma si foitele sunt introduse in interiorul unei cutii metalice cu ferestruici din sticla. Daca comunicam sarmei o sarcina electrica, prin atingerea cu un corp electirzat, foitele din aluminiu se electrizeaza si, respingandu-se una pe cealalata diverg. Dupa departarea lor se poate stabili gradul de electrizare ce li s-a comunicat. Pentru aceasta se poate folosi o scara gradata.
"Indicatorul electric" a fost construit pentru prima data in 1745, de Rihman care a cercetat electrizarea ce apare la descarcarile electrice din natura. Acest indicator electric prezinta o rigla metalica suspendata vertical, si de al carei capat se fixeaza un fir de matase. Prin electrizare firul se departeaza de rigla si gradul de deviere poate fi determinat cu ajutorul diviziunilor trasate pe un cadran de lemn.
O alta aplicatie practica poate constitui Electrometrul modern, construit dupa schema lui Rihman . Comunicand o sarcina electrica unei bare D, foita de aluminiu se departeaza de bara fixa. Marimea devierii se masoara pe scara gradata.
Problema nr. 34
Enunt:
Doua corpuri conductoare punctiforme cu sarcini q1>0, q2>q1, sunt plasate in vid la distanta d. Sa se gaseasca pe dreapta care uneste cele doua sarcini, acel punct in care intesitatea este 0, precum si punctul in care intensitatile sunt egale si de acelasi semn.
Schema:
Date de intrare:
Distanta dintre sarcini : d
Valoarea sarcinilor q1 si q2.
Date de iesire:
Punctul in care intensitatile sunt egale si de acelasi sens: x1
Punctul in care intensitatea este 0: x2
Model matematic:
Am notat cu E1 si E2 intensitatea campului electrostatic. Utilizand relatia pentru calcularea campului electrostatic am obtinut : si . Intrucat E1 = E2 vom egala relatiile si vom ajunge la o ecuatie de gradul 2 in x: x2(q2-q1)+2qdx-qd2. Calculam delta, dupa care radacinile x1 si x2 corespunzatoare cerintelor problemei: si x2= ;
Nota: Pentru distanta d nu se va introduce valoare negativa.
A se tine cont de cerinta din enuntz: q2>q1; q1>0;
In cazul in care este vorba de o particula , sarcina acesteia este de ordinul 10-19(sarcina electronului fiind e= 1,6*10-19). Daca ne referim la ioni sarcina acestuia poate lua valori de ordinul: e; 2e; 3e.
Daca ne referim la un corp macroscopic , sarcina acestuia poate lua valori de ordinul 10-3, 10-4, etc.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CMy2Dlg::OnOK()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu ferestrele de rezultate:
Problema nr.35
Enunt:
Patru sarcini punctiforme pozitive de valorea q sunt situate in varfurile unui patrat de latura a. Determinati sarcina punctiforma q1 ce trebuie asezata in centrul patratului astfel incat sistemul format sa fie in echilibru.
Schema:
Date de intrare:
Latura patratului: a
Sarcina electrica :q
Date de iesire:
Sarcina punctiforma: q1
Model matematic:
Determinam Forta rezultanta ca fiind egala cu F1+F2+F3+F4=0
Astfel ca: Intrucat F1=F2 determinam forta F12=F1
si . Dupa sensul considerat al fortei F4 pentru ca forta rezultanta sa fie 0, sarcina q trebuie sa fie de semn contrar sarcinii q1.
F12+F3-F4=0. Din aceasta relatie obtinem ecuatia 2q, de unde aflam pe q1.
Nota: In cazul in care este vorba de o particula , sarcina acesteia este de ordinul 10-19(sarcina electronului fiind e= 1,6*10-19). Daca ne referim la ioni sarcina acestuia poate lua valori de ordinul: e; 2e; 3e, etc.
Daca este vorba de un corp macroscopic , sarcina acestuia poate lua valori de ordinul 10-4, 10-3, sau mai mari.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CMy3Dlg::OnOK()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu ferestre de rezultate:
Problema nr. 36 ; Capitolul Metoda Imaginilor electrice.
Enunt:
Sa se demonstreze ca o sfera conductoare neincarcata capata intr-un camp electrostatic potentialul ce-l avea centrul ei inainte de introducerea sferei in camp. Se noteaza q sarcina ce creeaza camp situata la distanta 'd' de centrul sferei de raza 'a'.
Schema:
Date de intrare:
Sarcina electrica: q
Raza sferei : a
Distanta de la centrul sferei la sarcina q: d
Date de iesire:
Potentialul electric : Vm
Model matematic:
Calculam Vm ca fiind egala
cu V1+V2+V3 , unde:
, si ;
Nota: Raza sferei si distanta d nu pot lua valori negative.
In cazul in care este vorba de o particula , sarcina acesteia este de ordinul 10-19(sarcina electronului fiind e=1,6*10-19). Daca ne referim la ioni sarcina acestuia poate lua valori de ordinul: e; 2e; 3e etc.
Daca este vorba de un corp macroscopic , sarcina acestuia poate lua valori de ordinul 10-3, 10-4, etc.
Unitatea de masura pentru potentialul electric este Voltul.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CMy4Dlg::OnOK()
Problema nr. 37
Enunt:
Un conductor filiform, rectiliniu, paralel cu pamantul situat la inaltimea h, in raport cu acesta e uniform incarcat cu ro_l a sarcinii electrice libere. Prin influenta electrostatica suprafata pamantului se incarca si ea. Determinati densitatea superficiala ro_s a sarcinii electrice libere cu care se incarca suprafata pamantului.
Schema:
Date de intrare:
Inaltimea: h
Sarcina electrica : ro_l
Distanta: x
Date de iesire:
Densitatea superficiala a sarcinii electrice libere: ro_s
Modelul matematic:
Utilizam legea fluxului electric: . In acelasi timp iar . Deducem ca ro_s= -D,(D = inductia electrica) iar pe D calculam cu formula .
Nota: Unitatea de masura pentrul densitatea superficiala este C/m2.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CMy5Dlg::OnOK()
Problema nr. 38
Enunt:
Un electron cu viteza initiala 0 este accelerat sub o tensiune U. Cunoscandu-se masa m electronului, sa se determine lungimea undei de Broglie.
Date de intrare:
Masa electronului: m=9,1*10-31 Kg
Tensiunea:U (Volti)
Sarcina electronului: 1,6*10-19
h-constanta lui Planck- h=6.6*10-34
Date de iesire:
Lungimea undei : l
Model matematic:
Utilizam formula: , h fiind constanta lui Planck , necunoscuta este v.
Aflam v din din egalarea energiei cinetice cu q. De unde rezulva
Nota: Unitatea de masura pentru lungimea de unda va fi : amstrongul .
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CFix_undaDlg::OnOK()
Probleme rezolvate de studenti din anul III ca aplicatii de laborator
Problema rezolvata de studentul Agapi Paul.
Enunt:
Se citesc de la tastatura coordonatele unui trapez si se reprezinta grafic trapezul corespunzator. Se determina lungimea laturilor si lungimea inaltimii trapezului ,aceasta fiind apoi trasata grafic.Se calculeaza perimetrul si aria figurii.
Modelul matematic
a) Se citesc de la tastatura coordonatele a 4 puncte:
A(a1,b1); B(a2,b2); C(a3,b3); D(a4,b4)
b) Se traseaza trapezul corespunzator datelor introduse;
c) Se caluleaza apoi lungimea fiecarei laturi:
L1=sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2));
L2=sqrt((a2-a3)*(a2-a3)+(b2-b3)*(b2-b3));
L3=sqrt((a3-a4)*(a3-a4)+(b3-b4)*(b3-b4));
L4=sqrt((a4-a1)*(a4-a1)+(b4-b1)*(b4-b1));
d) Se determina lungimea inaltimii trapezului(distanta dintre cele 2 laturi paralele ale trapezului):
H=b1-b2;
Se reprezinta inaltimea calculata;
e) Se caculeaza perimetrul trapezului:
Per=L1+L2+L3+L4;
f) Se calculeaza aria trapezului:
Aria=((L2+L4)*H)/2;
Datele de intrare
Pentru citirea datelor de intrare s-au folosit 8 butoane "Edit" , preluarea datelor de la tastatura efecuandu-se cu ajutorul variabilelor: m_a1, m_a2, m_a3, m_a4, m_b1, m_b2, m_b3, m_b4.
Ca variabile globale au fost declarate L1,L2,L3 si L4 reprezentand laturile trapezului, precum si H inaltimea acestuia.
Exemplu de rezolvare concret
a) S-au introdus de la tastatura:
A(300,200); B(250,350); C(550,350); D(500,200)
b) S-a reprezentat grafic trapezul;
c) S-a determinat lungimea celor 4 laturi:
L1=158; L2=300; L3=158; L4= 200.
d) S-a determinat lungimea inaltimii:
H=150.
e) S-a reprezentat in desen inaltimea calculata;
f) S-a calculat perimetrul trapezului:
Per=816.
g) S-a calculat aria trapezului:
Aria=37500.
Programul (*)
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
a) buton "trasare trapez"
void CPaulDlg::OnButton13()
b) buton "lungimea laturilor"
void CPaulDlg::OnButton10()
c) buton "determinarea inaltimii"
void CPaulDlg::OnButton11()
d) buton "arie perimetru"
void CPaulDlg::OnButton12()
;
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Imagini cu ferestre de rezultate:
Problema rezolvata de studentul Ardeleanu Andrei.
Enunt:
Se considera 2 sarcini punctiforme de valoare q situate la distanta d una fata de cealalta si la intaltimea h deasupra pamantului. Sa se calculeze intensitatea campului electric (E) si potentialul campului situat la mijlocul distantei dintre cele 2 sarcini.
Model matematic
Ē = Ē+ Ē+ Ē + Ē (1)
Ē= - Ē = > Ē + Ē= 0 (2)
Introducem (2) in (1) si obtinem:
Ē = Ē+ Ē=2* Ē*cosα (3)
E=q/(4*π*ε0*r) (4)
r=d/4 + 4h r= (5)
cosα=2h/r=2h/ (6)
Folosim (6) in (4) si obtinem:
E= q/4*π*ε0*(d/4 + 4h) (7)
ε0=1/4*π*9*10 (8)
Introducem (8) in (7) si obtinem:
E= q*9*10/(d/4 + 4h) (9)
E=2* [q*9*10/(d/4 + 4h)]*2*h/
E=(4*9*10*q*h)/(d/4 + 4h) (10)
V=V+ V+ V+ V= 2* V+ 2* V =
= 2*q/(4*π*ε0*r) +2*(-q)/( 4*π*ε0*r) (11)
r=d/2 (12)
r= (13)
ε0=1/4*π*9*10 (14)
Folosim (12), (13), (14) in (11) si obtinem:
V=2*q*9*10(2/d - 1/) (15)
Rezolvare
q=1 , d=2 , h=3
E=(4*9*10*1*3)/(2/4 + 4*3)= (108*10)/(1+36)=(108/225,0622)*10
E=0,47986 * 10
V= 2*1*9*10(2/2 - 1/) =
18*(1 - 1/6,0827)*10=18*(1 - 0,1644 )* 10
V= 18 * 0,8356 * 10
V= 15,0407 * 10
Programul (*)
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CProiectDlg::OnOK()
Imagine:
Problema rezolvata de studentul Balmus Alexandru Cristian.
Enunt:
Proiectul s-a dorit a fi o suita de aplicatii matematice. Varianta de fata include inmultirea a doua matrice si rezolvarea ecuatiei de gradul 2, cu trasarea graficului functiei.
Interfata cu utilizatorul este prietenoasa, usor de utilizat pentru a oferi o experienta cat mai placuta.
Din interfata principala se poate lansa fie dialogul pentru operatia cu matrice apasand pe butonul "Matrice" sau pentru ecuatia de gradul 2, butonul "Ec. Gr. 2".
In cazul inmultirii a doua matrice modelul matematic este:
Cm,p = Am,n*Bn,p
iar algoritmul folosit este:
for i = 0, m-1
for j = 0, p-1
Ci,j = 0;
for i = 0, m-1
for j = 0, p-1
for k = 0, n-1
Ci,j = Ci,j + Ai,k*Bk,j;
Pentru ecuatia de gradul doi avem:
aX^2 + bX + C = 0;
D = b^2 - 4ac;
X1 = (-b + sqrt(D))/(2a);
X2 = (-b - sqrt(D))/(2a);
Cazuri particulare:
pt D < 0 ec nu are solutii reale;
pt a = 0 ec este de gradul 1; X = -c/b;
Verificarea functionalitatii:
Pentru inmultirea a doua matrice s-au considerat:
1 3
5 12 16 31 4 14
A4,2 = 7 2 B2, 4 =
9 23 12 24 2 8
52 103 10 38
224 443 44 166
S-a obtinut matricea rezultat C4,4 = 136 265 32 114
420 831 82 310
Pentru ecuatia de gradul 2:
Cazul 1:
0.04X^2 + 4X + 2 = 0
S-au obtinut: D = 15.6, X1 = -0.50, X2 = -99.5
Cazul 2:
0X^2 + 4X + 2 = 0
Utilizatorul este atentionat ca ecuatia este de gradul 1;
S-au obtinut: D = n, X1 = -0.50, X2 = n;
("n" -> nu exista rezultat)
Programul (*)
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CMfc_test4Dlg::OnButtonGen()
CString strText;
strText.Format('%d', m_nr_col);
m_ctrl_linii2.SetWindowText(strText);
m_ctrl_gen.EnableWindow(FALSE);
m_ctrl_gen2.EnableWindow(TRUE);
}
else
MessageBox('Introduceti valori intre 1 si 4!');
}
void CMfc_test4Dlg::OnButtonGen2()
CString strText;
strText.Format('%d', m_nr_linii);
m_ctrl_linii3.SetWindowText(strText);
strText.Format('%d', m_nr_col2);
m_ctrl_col3.SetWindowText(strText);
m_ctrl_gen2.EnableWindow(FALSE);
m_ctrl_calc.EnableWindow(TRUE);
}
else
MessageBox('Introduceti valori intre 1 si 4!');
}
void CMfc_test4Dlg::OnButtonCalc()
for (i = 0; i < m_nr_col; i++)
for (j =0; j < m_nr_col2; j++)
for (i = 0; i < m_nr_linii; i++)
for (j =0; j < m_nr_col2; j++)
m3.val[i][j] = 0;
for (i = 0; i < m_nr_linii; i++)
for (j = 0; j < m_nr_col2; j++)
for (k = 0; k < m_nr_col; k++)
m3.val[i][j] = m3.val[i][j] + m1.val[i][k]*m2.val[k][j];
for (i = 0; i < m_nr_linii; i++)
for (j =0; j < m_nr_col2; j++)
}
void EcGr2Dialog::OnSolve()
else
else
if (m_val_coef_x != 0)
else
if (m_val_coef_x2 != 0)
else
MessageBox('Macar unul din coeficienti (pentru x^2 sau x) trebuie sa fie diferit de zero!');
}
void EcGr2Dialog::OnGraphic()
Imagini:
Problema rezolvata de studenta Banea Elena.
Enunt:
Fie un system dynamic monovariabil a carui tranzitie intrare-iesire in domeniul timp este descrisa de ecuatia diferentiala: a dy(t)/dt + aoy(t) = bo.u(t)
Se cer :
Model mathematic:
a).
= constanta de timp
= factor de transfer
Vom folosi = 1 (majoritatea sistemelor dinamice au = 1)
b) , c) , d)
e)
M(w) = modulul numarului complex H(jw)
f)
Programul (*)
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CFunctiadetransferDlg::OnPaint()
else
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CFunctiadetransferDlg::OnQueryDragIcon()
void CFunctiadetransferDlg:: OnCalculeaza()
UpdateData(FALSE);
CDC * pDC=GetWindowDC();
//axa x:
pDC->MoveTo(225,275);
pDC->LineTo(600,275);
//axa y:
pDC->MoveTo(360,205);
pDC->LineTo(360,360);
//sageata ptr axa y:
CPoint a(355,205),b(365,205),c(360,200);
CPoint v[]=,v1[]=,v2[]=;
pDC->MoveTo(220,275);
pDC->Polyline(v,2);
pDC->Polyline(v1,2);
pDC->Polyline(v2,2);
//sageata ptr axa x:
CPoint d(600,270),e(600,280),f(605,275);
CPoint v3[]=,v4[]=,v5[]=;
pDC->MoveTo(550,270);
pDC->Polyline(v3,2);
pDC->Polyline(v4,2);
pDC->Polyline(v5,2);
pDC->MoveTo(360,276);
for(i=m_w1;i<m_w2;i++)
;
UpdateData();
CDialog::OnPaint();
}
void CFunctiadetransferDlg:: OnCancel()
Imagine:
Problema rezolvata de studentul Constantinescu Marius Alin
Enunt:
Fiind date doua cercuri prin coordonatele centrelor si razele lor, se cere sa se determine pozitiile lor relative.
Se vor trata cazurile: concentrice, identice, tangente interne, tangente externe, secante, interne, externe.
Modelul matematic:
Fiind date doua cercuri C1((x1,y1),r1) , C2((x2,y2),r2) se calculeaza distanta dintre centrele cercurilor cu formula:
________________
d=√(x1-x2) + (y1-y2)
Cercurile sunt:
concentrice daca d= 0 si r1!=r2;
identice daca d=0 si r1=r2;
tangente externe daca d=r1+r2;
tangente interne daca r1=d+r2 sau r2=d+r1;
externe daca d>r1+r2;
un cerc este interior celuilalt daca r1>d+r2 sau r2>d+r1;
secante daca d<r1+r2 si r1<d+r2 si r2<d+r1;
DATE DE INTRARE :
-coordonatele centrului primului cerc si raza sa: x1,y1,r1;
-coordonatele centrului celui de-al doilea cerc si raza sa: x2,y2,r2.
DATE DE IESIRE:
In functie de distanta dintre centrele cercurilor si razele lor se afiseaza un mesaj cu pozitia relativa a celor doua cercuri .
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
class cerc
;
CMariusDlg::CMariusDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMariusDlg::IDD, pParent)
void CMariusDlg::DoDataExchange (CDataExchange* pDX)
}AFX_DATA_MAP
}
void CMariusDlg::OnRezolva()
else
else
return;
}
if(d==(c1.r+c2.r))
if(c1.r==(d+c2.r)||c2.r==d+c1.r)
if(d>(c1.r+c2.r))
//cout<<'Cercurile sunt externe!';
if((c1.r>d+c2.r)||(c2.r>d+c1.r))
if((d<c1.r+c2.r)&&(c1.r<d+c2.r)&&(c2.r<d+c1.r))
}
}
Imagine:
Problema rezolvata de studenta Helgiu Monica
Enunt:
Fie un voltmetru cu n domenii de masurare: Xlim1, Xlim2, Xlim3 in volti; avind indicele clasei de precizie c. Cu acest instrument masuram o tensiune de U1 in Volti. Sa se determine:
a) eroarea absoluta maxima admisibila ale instrumentului,
b) intervalul de incadrare a valorii masurate ,
c) eroarea relativa asupra valorii masurate ,
pe fiecare domeniu de masurare.
Date de intrare:
1. Numarul domeniilor de masurare;
2. Valorile limita ale celor n domenii de masurare;
3. Indicele clasei de precizie c;
4. Valoarea tensiunii care se masoara U1;
Date de iesire:
1. Eroarea absoluta maxima admisibila ale instrumentului, pe fiecare domeniu
2.Intervalul de incadrare a valorii masurate, pe fiecare domeniu
3. Eroarea relativa asupra valorii masurate, pe fiecare domeniu de masurare.
Model matematic:
In problema de fata consideram 3 domenii de masurare iar Xlim1; Xlim2; Xlim3 si reprezinta valorile limita a domeniilor de masurare;
Consideram indicele clasei de precizie c=0,2; scris pe cadranul instrumentului de masura;
Pentru rezolvarea problemei se foloseste formula indicelui clasei de precizie:
c=100*|DXmax|/Xlim;
In aceasta formula cunoastem : c=0,2 si Xlim;
Pe domeniul 1 de masurare avem:
C=0,2 si Xlim1=65;
a) Rezulta ca eroarea absoluta maxima pe acest interval este:
|DXmax|=c*Xlim1/100=0,2*65/100=0,13 V
b)Intervalul de incadrare a rezultatului masurarii va fi:
Fie Xm valoarea obtinuta din masurare(citita de pe aparat)
Xm-|DXmax|<X<Xm+|DXmax|
Inlocuid cu valori numerice avem intervalul:
60-0,13<x<60+0,13 rezulta
intervalul: (59,87;60,13)
c)Eroarea relativa asupra valorii masurate:
Fie X1 valoarea de masurat si rezulta ε1=c*Xlim1/X1; inlocuind numeric avem ε1=0,2*65/60=0,21 %
Pentru domeniul 2 de masurare:
a)|DXmax|=0,2*130/100=0,26 V
b)60-0,26<X<60+0,26 rezulta intervalul (59,74;60,26)
c)ε1=0,2*130/60=0,42;
Pentru domeniul 3 de masurare:
a)|DXmax|=0,2*260/100=0,52 V
b)60-0,52<X<60+0,52 rezulta intervalul (59,48;60,52)
c)ε1=0,2*260/60=0,84 %
Rezulta ca in primul domeniu se obtine cea mai mica eroare absoluta maxima,cel mai redus interval si cel mai mic procent al erorii relative.
Este de observat ca masurarea este cea mai precisa daca se lucreaza cu primul domeniu de masurare si in general se alege domeniul de masurare incit indicatorul deviatiei la instrumentele analogice sa se afle in ultima treime a scarii gradate.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CProiectDlg::OnRezultate()
else
}}
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Problema rezolvata de studenta Iorguta Nicoleta.
Enunt:
Sa se dimensioneze o bara de sectiune circulara plina, stiind ca este solicitata la intindere de o forta axiala de 10 tf ca in figura 1. Este confectionata dintr-un material cu rezistenta la rupere egala cu 120 N/mm2, coeficient de elasticitate longitudinal egal cu 2,1*105 N/mm2. Dupa dimensionare sa se calculeze alungirea barei daca lungimea ei este de 6 m.
Notatii: σa=rezistenta la rupere; F=10tf; F=forta axiala; σa=120N/mm2; l=lungimea barei; E=2,1*105N/mm2. d=diametrul barei;
Δl=alungirea barei;
E=coeficient de elasticitate longitudinal.
Se cere:
(a) d=? (b)Δl =?
Modelul matematic
(1) conditia de rezistenta.
(a) σa=F/Anecesara=> (1) Anecesara=F/σa
(2)Anecesara=(π*d2)/4
(2)=>d=[(4*Anecesara)/π]1/2=>d=[(4*F)/(π*σa)]1/2=>d=[(4*100000)/(3,141592654*120)]1/2=>d=32,573502mm.
F=10tf=10000kgF=100000N. N=F
(b) Δl=(N*l)/(E*A)
A=π*d2/4=>A=(3,141592654*32,5735022)/4=>A=833,3333333mm2
Δl=(N*l)/(E*A)=> Δl=(100000*6*103)/(2,1*105*833,3333333)=>Δl=3,428571mm.
Rezultate: d=32,573502mm.
Δl=3,428571mm.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CProiectfinalDlg::OnButton1()
void CProiectfinalDlg::OnButton2()
Imagine:
Problema rezolvata de studentul Mihaila Marius.
Enunt:
Sa se calculeze aria unui triunghi dat prin coordonatele varfurilor.
Consideram punctele A(xa,ya), B(xb,yb), C(xc,yc) varfurile triunghiului ABC. Pentru determinarea ariei acestui triunghi se va folosi formula:
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CProbaDlg::OnOK()
Imagine:
Problema rezolvata de studentul Onofrei Lucian.
Enunt:
Bobina unui instrument feromagnetic este realizata din conductor de cupru, dimensionat pentru curentul nominal de 0,007A si are doua sectiuni identice, fiecare cu rezistenta R1=R2=32Ω, masurata la temperatura de referinta Ө0=20sC.Se stie coeficientul de variatie cu temperatura a rezistivitatii cuprului, αcu=0,004 /sC.
Sa se determine :
a) Rezistenta aditionala din manganina necesara pentru realizarea unui voltmetru cu domeniul de 1,5 V, daca cele doua sectiuni se conecteaza in serie;
b) Rezistenta specifica a voltmetrului realizat;
c) Eroarea suplimentara de temperatura a voltmetrului pentru o variatie ΔӨ=10sC fata de Ө0=20sC ;
d) Curentul consumat de voltmetru, rezistenta specifica si rezistenta aditionala necesara pentru a realiza limita de masura de 1,5 V, daca cele doua sectiuni ale bobinei se conecteaza in paralel;
e) Clasa in care se poate incadra voltmetrul obtinut, din punct de vedere al erorii suplimentare de temperatura.
Modelul matematic:
a) Pentru Ө=Ө0= 20sC rezistenta bobinei rezulta :
RS=R1+R2=32+32=64 Ω ;
Rezistenta aditionala :
Ra1=(UN-R0S*IN)/IN=( 1,5-64*7*0,001)7*0,001=150 Ω ;
b) Rv=1/IN=1/7*0,001=143 Ω/V ;
c) La temperatura Ө<> Ө0
R'0S=R0S(1+ αcu* ΔӨ)=64[1+0,004*(10)]=66,56 Ω
Sau
61,44 Ω ;
Eroarea suplimentara de temperatura pentru ΔӨ=+10 sC este: εUs[%]=(α'-α)/ α*100 ;
εUs[%]=[[(64+150)* (64+150)/(66,56+150) *(66,56+150)]-1]*100=-2,35%;
Pentru ΔӨ=-10 sC este:
εUs[%]=(α'-α)/ α*100
εUs[%]=[[(64+150)*(64+150)/(61,44+150)*(61,44+150)]-1]* *100=2,44%;
d)La Ө = Ө0=20 sC :
Ivn =2 *IN=2*7*0,001=0,014 A ; ceea ce arata dublarea curentului consumat de voltmetru.
Rv=1/Ivn=1/0,014=71,43 Ω/V ;
R0p=R1/2=32/2=16 Ω ;
Ra2= (UN- R0p* Ivn)/ Ivn=(1,5-16*0,014)/0,014=91 Ω ;
Pentru ΔӨ=-10 sC, cazul mai defavorabil, rezistenta bobinei este: R'0p= R0p(1+ αcu* ΔӨ)=16*(1-0,004*10)=15,36 Ω ; εUs[%]=0,12%;
e)c=0,2.
Date de intrare:
Curentul nominal : Inom =0,007 A];
Temperatura de referinta : theta0 =20 sC ;
Rezistentele de intrare :R1=32 Ω; R2=32 Ω;
Coeficientul de variatie cu temperatura a rezistivitatii cuprului : alfaCu =0,004 /sC ;
Date de iesire :
Rezistenta aditionala necesara pentru realizarea unui voltmetru cu domeniul de 1,5 V, daca cele doua sectiuni se conecteaza in serie: Ra1 Ω ;
Rezistenta specifica a voltmetrului realizat: Rv Ω/V ;
Eroarea suplimentara de temperatura a voltmetrului: εUs %;
Curentul consumat de voltmetru, rezistenta specifica si rezistenta aditionala daca cele doua sectiuni ale bobinei se conecteaza in paralel: Ivn A; Rv Ω/V ; Ra2 Ω ;
Clasa voltmetrului din punct de vedere al erorii suplimentare de temperatura: c;
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CProiectDlg::OnA()
void CProiectDlg::OnB1()
void CProiectDlg::OnB2()
void CProiectDlg::OnC()
void CProiectDlg::OnD()
void CProiectDlg::OnE1()
void CProiectDlg::OnE2()
Imagine:
Problema rezolvata de studentul Pata Andrei Doru.
Enunt:
Sa se realizeze un program care sa implementeze functiile unui decodificator BCD - 7 segmente.
Date de intrare:
Datele de intrare vor fi starile celor 4 intrari A, B, C, D (0 sau 1). Ex A=1, B=0, C=0, D=1;
Date de iesire:
Datele de iesire sunt cele 7 iesiri a, b, c, d, e, f, g care vor lua una din starile 0 si 1 care constituie segmentele afisorului.
Modelul matematic:
Decodificatorul BCD-7 segmente este un circuit logic combinational utilizat pentru comanda circuitelor de afisare numerice ce utilizeaza celule de afisare cu 7 segmente (LED-uri, LCD, becuri).
Circuitul prezinta 4 intrari (A, B, C, D; N=) ce codifica cifra de afisat, si 7 iesiri (a, b, c, d, e, f, g) pentru comanda segmentelor.
In cazul folosirii LED-urilor, celulele de afisare se construiesc cu anod comun sau cu catod comun. Celulele se aprind cu 0 logic (tensiune scazuta) aplicata pe catozii necomuni ai diodelor in cazul anod comun si respectiv cu 1 logic (tensiune ridicata) aplicata pe anozii necomuni in cazul catod comun (caz folosit in acest proiect).
Schemele interne ale celor doua tipuri de afisoare si reprezentarea schematica a decodificatorului sunt prezentate mai jos:
Tabelul de adevar al circuitului arata ca mai jos (catod comun):
Tabelul de adevar prezentat mai sus este incomplet definit, starile de la 10 la 15 lipsind, datorita faptului ca in codul BCD nu exista. Decodificatorul BCD-7 segmente se comanda de regula cu un numarator BCD.
Conform cu tabelul de adevar de mai sus se pot construi diagramele VK:
1 X 1 0 01 1 X 0 1 00 10 11 01 00
DC BA X X 0 1 10 X X 1 1 11 1 X 0 1 01 1 X 1 1 00 10 11 01 00
DC BA X X 0 1 10 X X 1 1 11 1 X 1 1 01 1 X 1 1 00 10 11 01 00
DC BA X X 1 0 10 X X 1 1 11 0 X 1 0 01 1 X 0 1 00 10 11 01 00
DC BA X X 1 1 10 X X 0 1 11 0 X 0 0 01 1 X 0 1 00 10 11 01 00
DC BA X X 1 1 10 X X 0 0 11 1 X 1 0 01 1 X 1 1 00 10 11 01 00
DC BA X X 1 0 10 X X 0 0 11
1 X 1 0 01 1 X 1 0 00 10 11 01 00
DC BA X X 1 1 10 X X 0 1 11
Conform cu ecuatiile determinate mai sus, schema logica a circuitului decodificator BCD - 7 segmente arata ca in figura urmatoare:
A B C D a = AC + D + AB + AC b = C + AB + AB c = B + A + C d = AC + BC + BA + ABC e = AC + AB f = + AB CA + CB + D g = BC + AB + D + CB
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CDecodificatorDlg::OnButton1()
else
if(b==1)
else
if(c==1)
else
if(d==1)
else
if(e==1)
else
if(f==1)
else
if(g==1)
UpdateData();
}
Imagine:
Imagini cu fereastra de rezultate(pentru ex. ales in enunt)
Problema rezolvata de studentul Popa Paul-Constantin
Enunt:
Se considera un condensator plan avand aria armaturii A, distanta d intre armaturi, situat intr-un dielectric de permitivitate εr.
La un moment dat una din armaturi se deplaseaza spre cealalta cu viteza constanta v. Calculati intensitatea curentului I care circula prin conductoarele ce fac legatura intre condensator si sursa de tensiune U la o valoare constanta.
Modelul matematic:
I=
In circuit apare curent numai daca "x" variaza in timp.
Date de intrare:
- se considera ε0=1;
- tensiunea U = 220 V;
- aria armaturii = 3 cm2= 3*10-4 m2;
- permitivitatea relativa εr= 0,2;
- distanta dintre armaturi d =1 cm = 0,01 m;
- viteza deplasarii unei armature v=0,1 m/secunda;
- timpul deplasarii t= 3 secunde.
Date de iesire:
- curentul I= 0,0157 A.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CProiectDlg::OnOK()
Imagine:
Problema rezolvata de studenta Poponea Irinel-Mihai.
Enunt:
Se considera un semiarc de raza "R" pe care este repartizata uniform o sarcina electrica cu densitatea liniara de sarcina ρl. Sa se calculeze intensitatea campului electric "E" creat de sarcina, in centrul semiarcului.
Modelul mathematic :
ρl =
E=
rx=R*cos θ
ry=R*cos θ
r=R
dl=R*dθ
Ex=
Ey=
=
Intensitatea campului :
E=Ex*i+Ey*j= -Ey*j.
Date de intrare :
- sarcina electrica repartizata pe semiarc ρl=1 V;
- permitivitatea electrica ε0=0,1;
- raza semiarcului R=0,5 m.
Date de iesire :
- intensitatea campului electric E= -3,185 V/m;
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CProiectDlg::OnOK()
Imagine:
Problema rezolvata de studenta Solcan Lucian.
Enunt:
Sa se citeasca de la tastatura coordonatele a 3 puncte,sa se traseze triunghiul corespunzator,sa se calculeze punctul de mijloc a fiecarei laturi si sa se traseze medianele,sa se calculeze coordonatele punctului de greutate a triunghiului si sa se traseze cercul inscris in triunghi.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
a) "trasarea triunghiului"
void CProiect1Dlg::OnButton3()
b) "calcularea mijloacelor laturilor"
void CProiect1Dlg::OnButton4()
c) "trasarea medianelor"
void CProiect1Dlg::OnButton5()
d) "centrul de greutate"
void CProiect1Dlg::OnButton6()
e) "cercul inscris"
void CProiect1Dlg::OnButton7()
Problema rezolvata de studentul Tataru Ciprian.
Enunt:
Bobina de excitatie a unui electromagnet are N spire. Conductorul bobinei are diametrul d si grosimea stratului de izolatie δ.
Cunoscanduse dimensiunele geometrice ale circuitului, numarul de spire ale infasurarii de excitatie si grosimea stratului de izolatie, sa se determine:
1. grosimea bobinei
2. rezistenta infasurarii
3. curentul si solenatia
4. temperature exterioara
5. temperature maxima in sectiunea bobinei
Se face urmatoarea obervatie: Se va considera ca suprafetele izoterme sunt cilindri concentrici. Bobina este fara izolatie intre straturi si are infasurare regulata.
Date de intrare:
N - numarul de spire
d - diametrul bobinei
δ - grosimea stratului de izolatie
λiz - conductivitatea termica a izolatiei conductorului
ρ - rezistivitatea
h - inaltimea bobinei
D1 - diametrul interior al bobinei
Өa - temperatura mediului ambient
U - tensiunea de alimentare.
Modelul matematic:
1.
Numarul de spire pe strat:
Numarul
de straturi:
Grosimea
bobinei:
2.
Lungimea conductorului bobinei :
3. Curentul in bobina:
Solenatia
4.
In ipoteza ca fluxul termic
se transmite numai la suprafata laterala exterioara,
supratemperatura maxima va fi:
5.
Puterea dezvoltata in
unitatea de volum:
Conductivitatea
termica echivalenta a bobinei se poate calcula cu relatia:
Cresterea de temperatura in interiorul bobinei este:
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void program::OnCalculeaza()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Problema rezolvata de studenta Toma Daniel Mihai.
Enunt: Metoda diagramei Veitch
Pe baza tabelului de adevar al functiei se construieste o "harta" (tabel) cu mai multe celule, fiecare corespunzand unei anumite combinatii a variabilelor de intrare. Exista atatea celule cate combinatii exista: 2n (n=numarul de variabile de intrare).
Se pot construi harti pentru 2, 3, 4, 5, variabile de intrare.
Diagrama V-K pentru 2 variabile de intrare arata ca mai jos:
m_1
m_3
m_2 B A 0 1 0 1
m_4
Metoda de rezolvare:
- se procedeaza la minimizare prin incercuirea unui numar de 2n (nIN) casute adiacente care contin 1 logic. La final toate casutele ce contin 1 logic trebuie sa fie cuprinse intr-un astfel de grup.
-in expresia finala fiecarui grup ii va corespunde un termen care va contine numai variabilele ale caror valoare nu se modifica pentru toate casutele grupului,daca grupul este cuprins sub 1 atunci variabila apare nenegata, iar daca este in afara acoladei variabila apare negata.
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void CDannielDlg::OnButton1()
else
m_11='^'+m_i2;
}
else
}
if(m_2==1)
if(m_4==1)
else
if(m_1==0)
m_11=m_i1+'^'+m_i2;
if(m_3==1)
if(m_4==1)
else
if(m_1==0)
if(m_2==0)
m_11='^'+m_i1+m_i2;
else
m_11=m_11+'+'+'^'+m_i1+m_i2;
if(m_4==1)
if(m_2==0)
if(m_3==0)
if(m_1==0)
m_11=m_i1+m_i2;
else
m_11=m_11+'+'+m_i1+m_i2;
if(m_1==0)
if(m_2==0)
if(m_3==0)
if(m_4==0)
m_11='null';
sir.Format('%s',m_11);
m_r.SetWindowText(sir);
}
Imagine:
Problema
rezolvata de studentul Verejan Andrian.
Enunt:
Electromagneti.
Un circuit magnetic alimentat in current continuu are forma din figura:
Cunoscanduse dimensiunele geometrice ale circuitului, numarul de spire ale infasurarii de excitatie si inductia in intrefier sa se determine:
a) valoarea curentului de magnetizare;
b) reluctanta echivalenta;
OBS:
Se neglijeaza fluxurile de umflari si scapari si se tinea seama de reluctanta fierului.
DATELE DE INTRARE:
L1, L2, L3 - lungimile (in metri);
A1, A2, A3 - ariile (in metri patrati);
N - numarul de spire ale infasurarii de excitatie;
D - distanta (in metri);
BD - inductia in intrefier;
Model matematic:
a) Inductia magnetica in ramura 3 este egala cu inductia in interfier:
B3=BD;
Pe baza teoremei a doua a lui Kirchhoff, se scrie:
H3*L3+2HD*D-H2*L2=0,
de unde:
H2=
Din curba de magnetizare rezulta: H3=230 A/m
In interfier:
HD=
Din curba de magnetizare rezulta:
B2=f(H2)=1,94 T;
Fluxul din ramura 1 va fi:
F1=F2+F3=B2*A2+B3*A3;
Inductia si intensitatea campului magnetic in ramura 1 vor fi:
B1=
H1=f(B1)=580 A/m;
Solenatia dezvoltata de bobina:
THETA=N*I=H1*L1+H2*L2;
Curentul de magnetizare rezulta:
I=
b) Schema echivalenta este redata in figura:
De unde rezulta reluctanta echivalenta:
Re=
In care:
R1=
R2=
R3=
Rdelta=
(*) Programul a fost scris in Visual C++. De aceea, mai jos se afla descrisa doar secventa de program care rezolva partea matematica a programului, nu si desenarea ferestrei Windows.
void problema::OnCalcul1()
void problema::OnCalcul2()
Imagine:
Fereastra Windows realizata pentru introducerea datelor.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 3347
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved