Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Ecuatie de gradul II

Să se rezolve o ecuaţie de gradul II de forma ax2+bx+c=0, cu coeficienţi numere reale.

Analiza Programului

In vederea realizarii unei rezolvari riguroase, trebuiesc facute niste teste asupra valorilor a, b, c.
Se detecteaza urmatoarele situatii:
– daca a=0, b=0, c=0 avem de-a face cu o ecuatie nedeterminata
– daca a=0, b=0, c diferit de 0 avem de-a face cu o ecuatie imposibila
– daca a=0, b diferit de 0 iar c are orice valoare, avem de-a face cu o ecuatie de gradul I, situatie in care exista o singura solutie x=-c/b
Acestea sunt cazuri particulare care trebuiesc tratate.
– daca a diferit de 0 iar b si c au orice valoare, avem de-a face cu o ecuatie de gradul II, situatie in care se poate trece la calculul lui delta. Urmeaza acum o alta discutie dupa valoarea lui Δ.
Astfel:
– daca delta<0 avem de-a face cu solutii complexe (pe care in aceasta rezolvare nu le vom mai calcula ci vom afisa doar un mesaj)
– daca delta=0 ecuatia are doua solutii egale x1,x2=-b/(2*a)
– daca delta>0 ecuatia are doua solutii diferite:
x1=(-b+radical din delta)/(2*a)
x2=(-b-radical din delta)/(2*a)
Se observa ca pentru rationamentul enuntat mai sus, au fost folosite in program trei instructiuni if-else imbricate (if inclus in alt if) cu ajutorul carora se testeaza valorile lui a, b si c.

Rezolvarea problemei in C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _3 
{
    class Program
    {
        static void Main(string[] args)
        {
            float a, b, c, dt;
            double x1, x2;
            Console.Write("a = ");
            a = float.Parse(Console.ReadLine());
            Console.Write("b = ");
            b = float.Parse(Console.ReadLine());
            Console.Write("c = ");
            c = float.Parse(Console.ReadLine());
            if (a == 0)
                if (b == 0)
                    if (c == 0) Console.WriteLine("Ec. nedeterminat.");
                    else Console.WriteLine("Ec. imposibila");
                else
                {
                    x1 = -c / b;
                    Console.WriteLine("Ec. de gr. 1 cu x1 = {0}", x1);
                }
            else
            {
                dt = b * b - 4 * a * c;
                if (dt < 0)
                    Console.WriteLine("Ec. are solutii complxe");
                else
                {
                    if (dt == 0)
                    {
                        x1 = x2 = -b / (2 * a);
                        Console.WriteLine("x1 = x2 = {0}", x1);
                    }
                    else
                    {
                        x1 = (-b + Math.Sqrt(dt)) / (2 * a);
                        x2 = (-b - Math.Sqrt(dt)) / (2 * a);
                        Console.WriteLine("Solutiile sunt x1 = {0}, x2 = {1}", x1, x2);
                    }
                }
            }
            Console.ReadLine();

        }
    }
}

Rezolvarea problemei in C++

//the header conio, which include library functions for performing "console input and output"
#include <conio.h>
//the header iostream, which supports the C++ I/O system
#include <iostream>
//tells the compiler to use the std namespace
using namespace std;

//begin program execution
int main()
{
    //declare variables
    float a, b, c, dt;
    double x1, x2;

    //display message on the screen
    cout<<"Introduceti a:"<<endl;
    //read from keyboard
    cin>>a;
    cout<<"Introduceti b:"<<endl;
    cin>>b;
    cout<<"Introduceti c:"<<endl;
    cin>>c;
    if(a == 0)
        if(b == 0)
            if(c == 0)
                cout<<"Ecuatie nedeterminata"<<endl;
            else
                cout<<"Ecuatie imposibila"<<endl;
        else
            {
                x1 = -b/a;
                cout<<"Ecuatie de gradul 1 cu solutia x1 = "<<x1<<endl;
            }
    else
    {
        dt = b*b - 4*a*c;
        if(dt < 0)
            cout<<"Ecuatia are solutii complexe"<<endl;
        else if(dt == 0)
            {
                x1 = x2 = -b/2*a;
                cout<<"x1 = x2 = "<<x1<<endl;
            }
        else
            {
                x1 = (-b+sqrt(dt))/2*a;
                x2 = (-b-sqrt(dt))/2*a;
                cout<<"Solutiile sunt x1 = "<<x1<<" si x2 ="<<x2<<endl;
            }
    }
//terminates main and return value to the calling process
    return 0;
}
Category: Uncategorized
  • Bogdan says:

    Astept cu nerabdare si problemele de backtracking.

    April 2, 2011 at 8:56 am
  • zeltera says:

    Deocamdata nu sunt planificate astfel de probleme, insa, daca vrei poti propune (si rezolva) tu acest tip de probleme. Am pus o lista cu problemele care au fost sau urmeaza sa fie publicate/rezolvare aici. Lista cuprinde, deocamdata, vre-o 55 de probleme, elementare, insa destul de intalnite la scoala. Aceste rezolvari se adreseaza elevilor in primii ani de studiu – si mai putin avansatilor, pentru care rezolvarea lor nu ar trebui sa fie dificila.

    April 6, 2011 at 1:21 am
  • Lucia says:

    buna…poti sa rezolvi problema asta si in borland c? si ink ceva…poti sa imi trimiti, pe mail, te rog borland c sau c++ (ca am vazut ca c++ accepta si limbajul c) caci nu il gasesc pe net:(

    October 22, 2011 at 10:27 am
    • zeltera says:

      Lucia, rezolvarea in borland c nu ar trebui sa fie diferita de rezolvarea in c++ (cu mici adaptari). Din pacate eu nu folosesc borland c, motiv pentru care nu stiu cum ar trebui adaptat codul pentru a trece compilatia acolo.

      Daca o sa cauti pe google Borland c o sa gasesti cateva locuri de unde poti downloada un compilator.

      October 22, 2011 at 12:47 pm
      • matematica says:

        dt = b*2 – 4*a*c; nu e corect

        conform formulei matematice delta = b^2- 4*a*c deci…

        dt = b*b – 4*a*c; sau dt = pow(b,2) – 4*a*c;

        March 24, 2012 at 8:43 pm
        • zeltera says:

          Multumesc pentru semnalarea greselei. Acum corectez.

          March 24, 2012 at 11:40 pm
  • Cristian says:

    // autor Cristian Badescu
    /*
    Rezolvarea ecuatiei de gradul 2
    */

    #include
    #include
    #include
    #include

    using namespace std;

    void grad1(int b,int c)
    {
    cout<<"Ecuatie de gradul 1"<<endl;
    cout<<"X= "<<float((-c))/(b)<<endl;
    }

    void grad2(int a,int b,int c)
    {
    int delta;

    delta=b*b-4*a*c;

    if(delta<0)
    {
    cout<<"Ecuatia are solutii complexe!"<<endl;
    cout<<"x1= "<<(float (-b)/(2*a))<<"+i*"<<(float (sqrt(abs(delta))))/(2*a)<<endl;
    cout<<"x2= "<<(float (-b)/(2*a))<<"-i*"<<(float (sqrt(abs(delta))))/(2*a)<<endl;
    }
    if(delta==0) cout<<"X1=X2= "<<(-b)/(2*a)<0) {
    cout<<"X1= "<<((-b)+sqrt(float (delta)))/(2*a)<<endl;
    cout<<"X2= "<<((-b)-sqrt(float (delta)))/(2*a)<<endl;
    }
    }

    int main()
    {
    cout<<"Forma generala a ecuatiei de gradul doi este: ax^2+bx+c=0"<<endl;
    int a,b,c,x1,x2,x;

    //Introducere date

    cout<>a;
    cout<>b;
    cout<>c;

    cout<0)
    if(a==1) cout<<"x^2";else cout<<a<<"x^2";
    if(a<0)
    if(a==-1)cout<<"-x^2";else cout<<a<0)
    if(b==1)cout<<"+x";else cout<<"+"<<b<<"x";
    if(b<0)
    if(b==-1)cout<<"-x";else cout<<b<<"x";

    if(a==0&&b==0)
    {
    cout<<" nedefinita!"<0)cout<<"+";
    cout<<c;
    }
    }
    cout<<"=0"<<endl;

    if(a==0)grad1(b,c);
    else grad2(a,b,c);

    system("PAUSE");
    return 0;
    }

    July 9, 2012 at 10:02 pm
  • Dragosh says:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace EcuatieGradul2
    {
    class Program
    {
    static void Main(string[] args)
    {
    int a, b, c;
    Console.Write(“Introduceti a = “);
    a = int.Parse(Console.ReadLine());
    Console.Write(“Introduceti b = “);
    b = int.Parse(Console.ReadLine());
    Console.Write(“Introduceti c = “);
    c = int.Parse(Console.ReadLine());
    if (a == 0 && b == 0 && c == 0)
    {
    Console.WriteLine(“\nEcuatie nedeterminata”);
    }
    else if (a == 0 && b == 0)
    {
    Console.WriteLine(“\nEcuatie imposibila”);
    }
    else if (a == 0)
    {
    double x;
    x = (-c) / b;
    Console.WriteLine(“\nSolutia este x = {0}”, x);
    }
    // Pentru cazul cind avem ecuatie de cind b = 0
    // Exemplu a*x^2 – 25 = 0
    /* else if (b == 0)
    {
    double __x;
    if (c > 0.0)
    {
    Console.WriteLine(“Nu se extrage radical din numere negative”);
    }
    else
    {
    __x = Math.Sqrt((c / a));
    Console.WriteLine(“Solutiile sunt x1 = x2 = {0}”, __x);
    }
    }*/
    else
    {
    double dt, x1, x2, _x;
    dt = Math.Pow(b, 2.0) – 4.0 * a * c;
    if (dt < 0.0)
    {
    Console.WriteLine("Delta este mai mic ca 0, ecuatia se rezolva cu numere imaginare");
    }
    else if (dt == 0.0)
    {
    _x = (-b) / (2.0 * a);
    Console.WriteLine("Solutia este x1 = x2 = ", _x);
    }
    else
    {
    x1 = ((-b) – Math.Sqrt(dt)) / (2.0 * a);
    x2 = ((-b) + Math.Sqrt(dt)) / (2.0 * a);
    Console.WriteLine("Solutile sunt x1 = {0} si x2 = {1} ", x1, x2);
    }

    }
    Console.ReadKey();
    }
    }
    }

    July 22, 2013 at 5:36 pm
  • dDany says:

    Daca b=0 delta mai poate fi posibila?

    March 24, 2014 at 9:39 pm
    • dDany says:

      Ma refer daca b= 0 iar a si c diferite de 0.

      March 24, 2014 at 9:44 pm

Your email address will not be published. Required fields are marked *

*