[REZOLVAT] Ecuatie?

Aici postaţi orice este legat de tehnologiile "client side". HTML, HTML5, XHTML, CSS, CSS3, XML, Standarde
Manual JS: http://www.phpromania.net/jsmanual/index.html

Moderatori: eyecon, Moderatori

LXS
Senior Member
Mesaje: 375
Membru din: Dum Oct 05, 2008 8:34 pm
Localitate: Timisoara
Contact:

[REZOLVAT] Ecuatie?

Mesajde LXS » Joi Dec 22, 2011 5:01 am

Am o problema de rezolvat, am formula asta:
((0.9*clf*mot)/100)+(exp/8) = eficienta
Ceea ce doresc eu este sa dau o valoare acestei formule, pentru care se va calcula clf, mot respectiv exp. Mentionez ca am rezolvat aceasta ecuatie pentru a afla formulele in functie de eficienta pentru cele 3 variabile, dar se folosesc de restul necunoscutelor si nu rezolv nimic.

Codul in care folosesc formula:

Cod: Selectaţi tot

var LXSGUS = {};
         
         LXSGUS.INIT = function()
         {
            this.object = null;
         }
         
         LXSGUS.INIT.prototype.setReferenceTo = function(objectId)
         {
            this.object = document.getElementById(objectId);
         }
         
         LXSGUS.INIT.prototype.getReference = function()
         {
            return this.object;
         }
         
         LXSGUS.INIT.prototype.getRows = function(type)
         {
            // len for length, obj for object;
            var object = this.object;
            if (type == "len")
            {
               return object.rows.length;
            }
            else if (type == "obj")
            {
               return object.rows;
            }
         }

         LXSGUS.STAFF = function()
         {
            // Influence factors;
            this.skill = 0;
            this.motivation = 0;
            this.experience = 0;
            this.efficiency = 0;
            this.training = 0;
            this.coefficient = 0;
            this.coefficients = {"coach": ["coach",150], "other": ["other",80]};
         }
         
         LXSGUS.STAFF.prototype.add = function(what, value)
         {
            switch(what)
            {
               case "skill":
                  this.skill = value;
               break;
               case "motivation":
                  this.motivation = value;
               break;
               case "experience":
                  this.experience = value;
               break;
               case "efficiency":
                  this.efficiency = value;
               break;
               case "training":
                  this.training = value;
               break;
            }
         }
         
         LXSGUS.STAFF.prototype.efficience = function()
         {
            this.efficiency = ((0.9*this.skill*this.motivation)/100)+(this.experience/8);
            return this.efficiency;
         }
         
         LXSGUS.STAFF.prototype.train = function()
         {
            this.training = this.coefficient*this.skill*this.skill;
            return this.training;
         }
                  
         LXSGUS.EVENT = function()
         {
            this.target = null;
         }
         
         LXSGUS.EVENT.prototype.getTarget = function(){}      
         
         window.onload = function()
         {
            var _INIT = new LXSGUS.INIT;
            var _STAFF = new LXSGUS.STAFF;
            
            _INIT.setReferenceTo('cdata');
            
            var table = _INIT.getReference();
            var tableRowLen = _INIT.getRows("len");
            var i, j;
            
            for (i=1; i<=tableRowLen; i++)
            {
               (table.rows[i]).onkeyup = function()
               {
                  this.cells[7].getElementsByTagName('input')[0].style.fontWeight="bold";
                  this.cells[7].getElementsByTagName('input')[0].value = _STAFF.efficience();
                  
                  if(this.cells[1].innerHTML.toLowerCase() == _STAFF.coefficients.coach[0]){_STAFF.coefficient = _STAFF.coefficients.coach[1];}else{_STAFF.coefficient = _STAFF.coefficients.other[1];}
                  this.cells[8].getElementsByTagName('input')[0].style.fontWeight="bold";
                  this.cells[8].getElementsByTagName('input')[0].value = _STAFF.train();
               }
               
               for (j=2; j<=8; j++)
               {
                  (table.rows[i].cells[j]).getElementsByTagName('input')[0].onfocus = function()
                  {
                     this.readOnly = false;
                     this.select();
                     
                     this.onkeyup = function()
                     {
                        if (this.getAttribute('id') == 'skl'){_STAFF.add("skill", this.value);}
                        else if (this.getAttribute('id') == 'mot'){_STAFF.add("motivation", this.value);}
                        else if (this.getAttribute('id') == 'exp'){_STAFF.add("experience", this.value);}
                        else{ /*table.rows[1].cells[7].innerHTML = target.value;*/ }
                     }
                     
                     this.onfocus = function()
                     {
                        if (this.getAttribute('id') == 'skl'){_STAFF.add("skill", this.value);}
                        else if (this.getAttribute('id') == 'mot'){_STAFF.add("motivation", this.value);}
                        else if (this.getAttribute('id') == 'exp'){_STAFF.add("experience", this.value);}
                        else{ /*table.rows[1].cells[7].innerHTML = target.value;*/ }
                     }
                  }
               }
            }
         }
Ultima oară modificat Mie Ian 04, 2012 4:48 am de către LXS, modificat 1 dată în total.



LXS
Senior Member
Mesaje: 375
Membru din: Dum Oct 05, 2008 8:34 pm
Localitate: Timisoara
Contact:

Mesajde LXS » Joi Dec 22, 2011 6:29 am

Formula am gasit-o, rezolvand ecuatia dar postez din nou, deoarece am uitat sa mentionez ca NU imi doresc ca dupa ce introduc eficienta sa imi dea valorile celor 3 necunoscute de acelasi fel.

TEST:
ASA NU:

((0.9*clf*mot)/100)+(exp/8 ) = eficienta

eficienta = 58

clf = (5*sqrt(84145)-125)/18 => 73.63266
mot = (5*sqrt(84145)-125)/18 => 73.63266
exp = (5*sqrt(84145)-125)/18 => 73.63266

[ASA DA] CEVA DE GENUL (FORMULA?):

clf = 53
mot = 99
exp = 86

LXS
Senior Member
Mesaje: 375
Membru din: Dum Oct 05, 2008 8:34 pm
Localitate: Timisoara
Contact:

Mesajde LXS » Sâm Dec 24, 2011 1:25 pm

Chiar nu stie nimeni?
Cod sursa:

Cod: Selectaţi tot

<html>
   <head>
      <title>GU Efficiency & Costs</title>
      <style type="text/css">
         #cdata
         {
            font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;
            width:100%;
            border-collapse:collapse;
         }

         #cdata td, #cdata th
         {
            font-size:1.2em;
            border:1px solid #98bf21;
            padding:3px 7px 2px 7px;
         }

         #cdata th
         {
            font-size:1.4em;
            text-align:left;
            padding-top:5px;
            padding-bottom:4px;
            background-color:#A7C942;
            color:#fff;
         }

         #cdata tr.alt td
         {
            color:#000;
            background-color:#EAF2D3;
         }
         
         #cdata tr.alt input
         {
            background-color: #EAF2D3;
         }
         
         #cdata tr input
         {
            width: 100%;
            font-size:0.8em;
         }
         
         #cdata .cell
         {
            border: none;
         }
      </style>
      <script type="text/javascript">
         var LXSGUS = {};
         
         LXSGUS.INIT = function()
         {
            this.object = null;
         }
         
         LXSGUS.INIT.prototype.setReferenceTo = function(objectId)
         {
            this.object = document.getElementById(objectId);
         }
         
         LXSGUS.INIT.prototype.getReference = function()
         {
            return this.object;
         }
         
         LXSGUS.INIT.prototype.getRows = function(type)
         {
            // len for length, obj for object;
            var object = this.object;
            if (type == "len")
            {
               return object.rows.length;
            }
            else if (type == "obj")
            {
               return object.rows;
            }
         }
         
         LXSGUS.NUMBER = function()
         {
            this.number = 0;
         }
         
         LXSGUS.NUMBER.prototype.add = function(n)
         {
            this.number = n;
         }
         
         LXSGUS.NUMBER.prototype.roundTo = function(digits)
         {
            var x = "1", i;
            for (i=1; i<=digits; i++){x+="0";}
            var mdiv = parseInt(x);
            return Math.round(this.number*mdiv)/mdiv;
         }

         LXSGUS.STAFF = function()
         {
            // Influence factors;
            this.skill = 0;
            this.motivation = 0;
            this.experience = 0;
            this.efficiency = 0;
            this.training = 0;
            this.coefficient = 0;
            this.coefficients = {"coach": ["coach",150], "other": ["other",80]};
         }
         
         LXSGUS.STAFF.prototype.add = function(what, value)
         {
            switch(what)
            {
               case "skill":
                  this.skill = value;
               break;
               case "motivation":
                  this.motivation = value;
               break;
               case "experience":
                  this.experience = value;
               break;
               case "efficiency":
                  this.efficiency = value;
               break;
               case "training":
                  this.training = value;
               break;
            }
         }
         
         LXSGUS.STAFF.prototype.efficience = function()
         {
            this.efficiency = ((0.9*this.skill*this.motivation)/100)+(this.experience/8);
            return this.efficiency;
         }
         
         LXSGUS.STAFF.prototype.train = function()
         {
            this.training = this.coefficient*this.skill*this.skill;
            return this.training;
         }
                  
         LXSGUS.EVENT = function()
         {
            this.target = null;
         }
         
         LXSGUS.EVENT.prototype.getTarget = function(){}      
         
         window.onload = function()
         {
            var _INIT = new LXSGUS.INIT;
            var _NUMBER = new LXSGUS.NUMBER;
            var _STAFF = new LXSGUS.STAFF;
            
            _INIT.setReferenceTo('cdata');
            
            var table = _INIT.getReference();
            var tableRowLen = _INIT.getRows("len");
            var i, j;
            
            for (i=1; i<=tableRowLen; i++)
            {
               (table.rows[i]).onkeyup = function()
               {
                  _NUMBER.add(_STAFF.efficience());
                  var ef = _NUMBER.roundTo(1);
                  
                  // Cell 7 contain efficiency value;
                  this.cells[7].getElementsByTagName('input')[0].style.fontWeight="bold";
                  this.cells[7].getElementsByTagName('input')[0].value = ef;
                  
                  var stg;
                  
                  if(this.cells[1].innerHTML.toLowerCase() == _STAFF.coefficients.coach[0])
                  {
                     _STAFF.coefficient = _STAFF.coefficients.coach[1];
                     stg=(_STAFF.efficiency*10/100);
                  }
                  else
                  {
                     _STAFF.coefficient = _STAFF.coefficients.other[1];
                     stg=0;
                  }
                  
                  _NUMBER.add(stg);
                  var mw = _NUMBER.roundTo(1);
                  
                  _NUMBER.add(mw*2);
                  var fw = _NUMBER.roundTo(1);
            
                  // Cell 8 contain train cost value;
                  this.cells[8].getElementsByTagName('input')[0].style.fontWeight="bold";
                  this.cells[8].getElementsByTagName('input')[0].value = +fw+"%,"+mw+"%";
                  
                  // Cell 9 contain train cost value;
                  this.cells[9].getElementsByTagName('input')[0].style.fontWeight="bold";
                  this.cells[9].getElementsByTagName('input')[0].value = _STAFF.train();
               }
               
               for (j=2; j<=9; j++)
               {
                  (table.rows[i].cells[j]).getElementsByTagName('input')[0].onfocus = function()
                  {
                     this.readOnly = false;
                     this.select();
                     
                     this.onkeyup = function()
                     {
                        if (this.getAttribute('id') == 'skl'){_STAFF.add("skill", this.value);}
                        else if (this.getAttribute('id') == 'mot'){_STAFF.add("motivation", this.value);}
                        else if (this.getAttribute('id') == 'exp'){_STAFF.add("experience", this.value);}
                        else{ /*table.rows[1].cells[7].innerHTML = target.value;*/ }
                     }
                     
                     this.onfocus = function()
                     {
                        if (this.getAttribute('id') == 'skl'){_STAFF.add("skill", this.value);}
                        else if (this.getAttribute('id') == 'mot'){_STAFF.add("motivation", this.value);}
                        else if (this.getAttribute('id') == 'exp'){_STAFF.add("experience", this.value);}
                        else{ /*table.rows[1].cells[7].innerHTML = target.value;*/ }
                     }
                  }
               }
            }
         }
   
      </script>
   </head>
   <body>
      <center>
         <h1>Calculators</h1>
      </center>
      <h2>_STAFF Efficience</h2>
      <table id="cdata">
         <tbody>
            <tr>
               <th>Number</th>
               <th>_STAFF type</th>
               <th>Full name (opt.)</th>
               <th>Qualification</th>
               <th>Motivation</th>
               <th>Experience</th>
               <th>Salary (opt.)</th>
               <th>Efficiency</th>
               <th>Bonuses</th>
               <th>Train cost</th>
            </tr>
            <tr>
               <td>1</td>
               <td>Coach</td>
               <td><input class="cell" value="empty" readonly></td>
               <td><input id="skl" class="cell" value="0" readonly></td>
               <td><input id="mot" class="cell" value="0" readonly></td>
               <td><input id="exp" class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
            </tr>
            <tr class="alt">
               <td>2</td>
               <td>Physical therapist</td>
               <td><input class="cell" value="empty" readonly></td>
               <td><input id="skl" class="cell" value="0" readonly></td>
               <td><input id="mot" class="cell" value="0" readonly></td>
               <td><input id="exp" class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
            </tr>
            <tr>
               <td>3</td>
               <td>Fitness coach</td>
               <td><input class="cell" value="empty" readonly></td>
               <td><input id="skl" class="cell" value="0" readonly></td>
               <td><input id="mot" class="cell" value="0" readonly></td>
               <td><input id="exp" class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
            </tr>
            <tr class="alt">
               <td>4</td>
               <td>Mental coach</td>
               <td><input class="cell" value="empty" readonly></td>
               <td><input id="skl" class="cell" value="0" readonly></td>
               <td><input id="mot" class="cell" value="0" readonly></td>
               <td><input id="exp" class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
            </tr>
            <tr>
               <td>5</td>
               <td>Coach assistant</td>
               <td><input class="cell" value="empty" readonly></td>
               <td><input id="skl" class="cell" value="0" readonly></td>
               <td><input id="mot" class="cell" value="0" readonly></td>
               <td><input id="exp" class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
            </tr>
            <tr class="alt">
               <td>6</td>
               <td>Goalkeeper coach</td>
               <td><input class="cell" value="empty" readonly></td>
               <td><input id="skl" class="cell" value="0" readonly></td>
               <td><input id="mot" class="cell" value="0" readonly></td>
               <td><input id="exp" class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
            </tr>
            <tr>
               <td>7</td>
               <td>Doctor</td>
               <td><input class="cell" value="empty" readonly></td>
               <td><input id="skl" class="cell" value="0" readonly></td>
               <td><input id="mot" class="cell" value="0" readonly></td>
               <td><input id="exp" class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
            </tr>
            <tr class="alt">
               <td>8</td>
               <td>Financial consultant</td>
               <td><input class="cell" value="empty" readonly></td>
               <td><input id="skl" class="cell" value="0" readonly></td>
               <td><input id="mot" class="cell" value="0" readonly></td>
               <td><input id="exp" class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
            </tr>
            <tr>
               <td>9</td>
               <td>Public relations manager</td>
               <td><input class="cell" value="empty" readonly></td>
               <td><input id="skl" class="cell" value="0" readonly></td>
               <td><input id="mot" class="cell" value="0" readonly></td>
               <td><input id="exp" class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
            </tr>
            <tr class="alt">
               <td>10</td>
               <td>Youth coach</td>
               <td><input class="cell" value="empty" readonly></td>
               <td><input id="skl" class="cell" value="0" readonly></td>
               <td><input id="mot" class="cell" value="0" readonly></td>
               <td><input id="exp" class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
               <td><input class="cell" value="0" readonly></td>
            </tr>
         </tbody>
      </table>
   </body>
</html>

Avatar utilizator
socu
Senior Member
Mesaje: 470
Membru din: Mie Apr 22, 2009 11:05 pm
Localitate: Marghita

Mesajde socu » Mar Dec 27, 2011 11:54 pm

Exprimarea ta lasa de dorit, eu personal nu am inteles ce vrei sa gasesti.
Cred ca trebuie sa o luam clasic si sa incercam sa rezolvam matematic (daca tot vorbim de ecuatii):
ce se da?
ce se cere?

whooper
Senior Member
Mesaje: 866
Membru din: Mar Apr 05, 2005 9:58 pm
Localitate: Toronto ON

Mesajde whooper » Joi Dec 29, 2011 6:56 pm

socu : Are o functie f(clf,mot,exp)= eficienta si inca nu exista atata matematica sa afle clf, mot si exp daca stie doar eficienta.

LXS : matematica de clasa a 8-a zice ca iti trebue 3 ecuatii (diferite) sa aflii valorile celor 3 variabile (daca exista). Tu ai numai una :
((0.9*clf*mot)/100)+(exp/8 ) = eficienta
Join The Forums - Time Well Wasted!

Avatar utilizator
socu
Senior Member
Mesaje: 470
Membru din: Mie Apr 22, 2009 11:05 pm
Localitate: Marghita

Mesajde socu » Joi Dec 29, 2011 8:15 pm

deoarece am uitat sa mentionez ca NU imi doresc ca dupa ce introduc eficienta sa imi dea valorile celor 3 necunoscute de acelasi fel.

whooper: A zis asta mai sus (deci nu e ceea ce crezi tu) si de aceea astept lamuriri de la el.

Ca o paranteza, la
Are o functie f(clf,mot,exp)= eficienta si inca nu exista atata matematica sa afle clf, mot si exp daca stie doar eficienta.

gresesti enorm.

whooper
Senior Member
Mesaje: 866
Membru din: Mar Apr 05, 2005 9:58 pm
Localitate: Toronto ON

Mesajde whooper » Joi Dec 29, 2011 9:07 pm

Sa dea Dumnezeu sa gresesc eu.

Ceea ce a zis el mai sus e ca nu vrea ca cele trei valori (clf, mot, exp) pe care le obtine sa fie identice (egale).
Join The Forums - Time Well Wasted!

Avatar utilizator
socu
Senior Member
Mesaje: 470
Membru din: Mie Apr 22, 2009 11:05 pm
Localitate: Marghita

Mesajde socu » Joi Dec 29, 2011 9:38 pm

Sa dea Dumnezeu sa gresesc eu.

Am vrut sa zic ca sunt cazuri speciale in care o sa poti (in general nu, dar sa nu uitam ca exista).

Acum problema e ca a scos niste numere din burta, dar daca ar da cateva exemple poate am gasi legea functiei
ex: f(1,2,3)=7; f(3,4,5)=12 etc.
Cu datele care le avem e imposibil de determinat.

LXS
Senior Member
Mesaje: 375
Membru din: Dum Oct 05, 2008 8:34 pm
Localitate: Timisoara
Contact:

Mesajde LXS » Lun Ian 02, 2012 2:09 am

Am vrut sa zic ca sunt cazuri speciale in care o sa poti (in general nu, dar sa nu uitam ca exista).

Acum problema e ca a scos niste numere din burta, dar daca ar da cateva exemple poate am gasi legea functiei
ex: f(1,2,3)=7; f(3,4,5)=12 etc.
Cu datele care le avem e imposibil de determinat.


Raspunsul la aceasta problema ar fi rezolvarea ecuatiei, dar nu ma intereseaza un rezultat al valorilor necunoscute de acelasi fel. Deci la formula respectiva inlocuim variabilele cu x, rezolvam ecuatia, si aflam valoarea x-urilor, pentru o eficienta data, DAR acel x va fi egal, in formula data sunt 3 variabile, asa ca nu doresc ca valorile necunoscutelor sa fie egale.

EXEMPLU:
var1
clf = 10
mot = 10
exp = 10
Dupa formula eficienta va fi egala cu 2.2, dar eficienta va fi tot egala cu 2.2 pentru urmatoarele valori:
var2
clf = 8
mot = 18
exp = 7

In concluzie varianta 2, este cea care ma intereseaza.

LXS
Senior Member
Mesaje: 375
Membru din: Dum Oct 05, 2008 8:34 pm
Localitate: Timisoara
Contact:

Mesajde LXS » Lun Ian 02, 2012 4:23 pm

Ca sa se inteleaga mai bine, dau o problema.

Un evaluator, evalueaza eficienta angajatului, ajungand la concluzia ca eficienta lui este aproximativ egala cu 2 *(un interval 1 ... 3), ca un reper formula pentru calculul eficientei, este Eficienta = (0.9*calificare*motivatie)+(experienta/la opt).

Sa se afle plaja de valori al nivelului de calificare, motivatie si experienta, pentru care formula de calcul al eficientei este adevarata, pe intervalul (effMin) 1 ... 3 (effMax).

(?) Un algoritm incomplet la care m-am gandit ar suna asa:
- Se citeste un numar E, care reprezinta eficienta evaluata
- Se imparte E/2, care va rezulta eficienta minima, si va fi notat cu Emin, iar E*2 pentru eficianta maxima, care va fi notat cu Emax.
- (?) Se calculeaza inecuatiile pentru intervalul (0.9*calificare*motivatie)+(experienta/la opt) >= Emin && (0.9*calificare*motivatie)+(experienta/la opt) <= Emax, in caz ca afirmatiile sunt adevarate se vor stoca in variabile temporare, calificarea, motvatia respectiv experianta, angajatului obosit :D
- ...

OFFTOPIC
Titlul topicului este "Ecuatie?", deoarece nu am inteles nici eu ce este... :D :D :D

Avatar utilizator
socu
Senior Member
Mesaje: 470
Membru din: Mie Apr 22, 2009 11:05 pm
Localitate: Marghita

Mesajde socu » Mar Ian 03, 2012 2:39 am

Ok, intr-un final am cam inteles ce vrei sa faci. Sa incep:

Notam eficienta=e, calificare=a, motivatie=b, experienta=c.
Atunci avem:
e = 0.9*ab + c/8
e = 9ab/10 + c/8
e = (72ab + 10c)/80
e = (36ab + 5c)/40
40e = 36ab + 5c

Pentru a continua mai departe trebuie sa restrangem valorile posibile a lui a, b sau c ca fiind din N (numere naturale). Facand asta e va apartine multimii {x/10 | x din N} = {0, 0.1, 0.2, ..., 1, 1.1, 1.2, ...}. In plus observam ca c trebuie sa fie mereu numar par pentru a se satisface egalitatea.

Avand la dispozitie un interval din care face parte e putem afla cel mai mare c. Presupunem ca 36ab=0 atunci cmax = 40e/5 = 8e. Acum putem parcurge fiecare c (natural, par) incepand de la 0 pana la cmax pentru a afla ab. Daca (40e - 5c) se divide cu 36 atunci avem ab. Cand avem ab trebuie sa gasim toti divizorii numarului ab pentru a putea gasi separat pe a si b. Atentie! E posibil ca o anumita eficienta sa nu aiba solutii din cauza ca am impus a, b, c din N (sigur exista o rezolvare pentru a face a, b, c cel putin din multimea din care face parte e, ma gandesc si revin daca am timp sa o fac).

Implementare in cod php:

Cod: Selectaţi tot

<?php

// Afisam solutiile pentru eficiente intre 1 si 3.
$effMin = 1; $effMax = 3;
// e este din {x/10 | x din N}
for ($e = $effMin; $e <= $effMax; $e += 0.1) {
  echo '<h3>Experienta ', $e ,'</h3>';
  echo '<pre>', print_r(solutii($e), TRUE), '</pre>';
}

/**
 * Functia primeste ca parametru eficienta si returneaza
 * un array cu valori posibile.
 */
function solutii($e) {
  $solutii = array();
  // Ecuatia este 40e = 36ab + 5c
  // Gasim cel mai mare c.
  $e = 40 * $e;
  $cmax = $e / 5;
  // Pentru fiecare c incercam sa gasim ab.
  for ($c = 0; $c <= $cmax; $c += 2) {
    $eaux = $e - 5*$c;
    if ($eaux == 0) {
      // In acest caz ab=0 => unul trebuie sa fie 0 iar celalat poate fi oricat.
      // Vom folosi ambele 0 pentru simplitate.
      $solutii[] = array(
        'calificare' => 0,
        'motivatie' => 0,
        'experienta' => $c,
      );
      continue;
    }
    elseif ($eaux % 36 != 0) {
      // Nu putem gasi ab pentru acest c.
      continue;
    }
    // Calculam ab.
    $eaux = $eaux / 36;
    // Acum trebuie sa gasim toate combinatiile pentru care ab = eaux
    // Algoritmul de mai jos pentru gasirea divizorilor unui numar
    // este rudimentar si folosit doar in scop demonstrativ.
    for ($i = 1; $i <= $eaux; $i++) {
      if ($eaux % $i == 0) {
        // Adaugam solutia.
        $solutii[] = array(
          'calificare' => $i,
          'motivatie' => $eaux / $i,
          'experienta' => $c,
        );
      }
    }
  }
  // Returnam solutiile.
  return $solutii;
}


Avatar utilizator
socu
Senior Member
Mesaje: 470
Membru din: Mie Apr 22, 2009 11:05 pm
Localitate: Marghita

Mesajde socu » Mar Ian 03, 2012 3:21 am

Am uitat sa precizez ca e (eficienta) poate face parte doar dintr-o multime finita. Daca multimea este infinita atunci avem o infinitate de solutii.

Am modificat codul si acum c (experienta) este din aceeasi multime cu e si (cred ca) fiecare eficienta e are acum solutii. Acum sunt minimum 5 solutii la fiecare eficienta si de aici e treaba ta care o alegi. Din pacate cu cat eficienta e mai mare cu atat sunt mai multe solutii. De exemplu pt 100 sunt 543 solutii.

Cod: Selectaţi tot

<?php

echo '<pre>', print_r(solutii(100), TRUE), '</pre>';

/**
 * Functia primeste ca parametru eficienta si returneaza
 * un array cu valori posibile.
 */
function solutii($e) {
  $solutii = array();
  // Ecuatia este 40e = 36ab + 5c
  // Gasim cel mai mare c.
  $e = 40 * $e;
  $cmax = $e / 5 + 0.01;
  // Pentru fiecare c incercam sa gasim ab.
  for ($c = 0; $c <= $cmax; $c += 0.2) {
    $eaux = $e - 5*$c;
    if ($eaux < 0.1) {
      // In acest caz ab=0 => unul trebuie sa fie 0 iar celalat poate fi oricat.
      // Vom folosi ambele 0 pentru simplitate.
      $solutii[] = array(
        'calificare' => 0,
        'motivatie' => 0,
        'experienta' => round($c, 2),
      );
      continue;
    }
    elseif ($eaux % 36 != 0) {
      // Nu putem gasi ab pentru acest c.
      continue;
    }
    // Calculam ab.
    $eaux = $eaux / 36;
    // Acum trebuie sa gasim toate combinatiile pentru care ab = eaux
    // Algoritmul de mai jos pentru gasirea divizorilor unui numar
    // este rudimentar si folosit doar in scop demonstrativ.
    for ($i = 1; $i <= $eaux; $i++) {
      if ($eaux % $i == 0) {
        // Adaugam solutia.
        $solutii[] = array(
          'calificare' => $i,
          'motivatie' => round($eaux / $i, 2),
          'experienta' => round($c, 2),
        );
      }
    }
  }
  // Returnam solutiile.
  return $solutii;
}


Avatar utilizator
socu
Senior Member
Mesaje: 470
Membru din: Mie Apr 22, 2009 11:05 pm
Localitate: Marghita

Mesajde socu » Mar Ian 03, 2012 4:01 am

Ma enerveaza ca sunt o gramada de solutii asa ca eu am decis sa le iau pe cele mai bune (cu diferenta dintre a si b minima) si pentru 100 avem 200+ solutii, de 2 ori mai putine. Am mai rezolvat problemele cu virgula.

Cod: Selectaţi tot

<?php

echo '<pre>', print_r(solutii(2.2), TRUE), '</pre>';

/**
 * Functia primeste ca parametru eficienta si returneaza
 * un array cu valori posibile.
 */
function solutii($e) {
  $solutii = array();
  // Ecuatia este 40e = 36ab + 5c
  // Gasim cel mai mare c.
  $e = 40 * $e;
  // Pentru fiecare c incercam sa gasim ab.
  for ($k = 0; $k <= $e; $k++) {
    $c = $k * 0.2;
    $eaux = ceil($e - 5 * $c);
    if ($eaux == 0) {
      // In acest caz ab=0 => unul trebuie sa fie 0 iar celalat poate fi oricat.
      // Vom folosi ambele 0 pentru simplitate.
      $solutii[] = array(
        'calificare' => 0,
        'motivatie' => 0,
        'experienta' => $c,
      );
      continue;
    }
    elseif ($eaux % 36 != 0) {
      // Nu putem gasi ab pentru acest c.
      continue;
    }
    // Calculam ab.
    $eaux = $eaux / 36;
    // Acum trebuie sa gasim a si b maxime pentru care ab = eaux.
    for ($i = floor(sqrt($eaux)); $i > 0; $i--) {
      if ($eaux % $i == 0) {
        $eaux = $eaux / $i;
        $solutii[] = array(
          'calificare' => $i,
          'motivatie' => $eaux,
          'experienta' => $c,
        );
        // Urmatorul block if este optional pentru a adauga si solutia inversa.
        // Deoarece a si b se inmultesc nu conteaza daca valorile lor se interschimba, dar de dragul matematicii bagam si aceasta solutie.
        if ($eaux != $i) {
          $solutii[] = array(
            'calificare' => $eaux,
            'motivatie' => $i,
            'experienta' => $c,
          );
        }
        break;
      }
    }
  }
  // Returnam solutiile.
  return $solutii;
}


LXS
Senior Member
Mesaje: 375
Membru din: Dum Oct 05, 2008 8:34 pm
Localitate: Timisoara
Contact:

Mesajde LXS » Mie Ian 04, 2012 4:48 am

Explicatiile si codurile sursa de mai sus sunt de nota 10! Pana la urma am inteles si eu ce trebuie sa fac de fapt :D, o sa mai am de facut mici ajustari ca cei 3 parametrii sa fie strict intregi, si sa gaseasca rezultatul cel mai apropiat, sau cel mai putin departat de eficienta testata, daca nu exista solutii voi rotunji parametrii to up sau down, sa fie un match cat de cat mai apropiat de eficienta testata.

Multumesc din nou, raspunsurile primite sunt excelente!


Înapoi la “HTML/JavaScript/CSS”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 12 vizitatori