Home> PHP

PHP Archive

Inserir strings dentro de strings por contagem de ocorrências de strings!

janeiro 14, 2013 Category :Computação| PHP| Web Off

Quem souber um titulo melhor pra esse post me diga, ficou meio estranho, mas vamos lá!

Uma função bem util para portais de noticias ou afins. Com ela vc tem a possibilidade de inserir qualquer texto entre o conteúdo de um post ou de uma string qualquer.

O 1º parâmetro ($txt) é a string que você quer que insira algo;
O 2º parâmetro ($ocorrencia) é a string que a função encontrar para inserir depois da ocorrencia dela;
O 3º parâmetro ($inserir) é a string que vai ser inserida;
O 4º parâmetro ($cont) é utilizado para contar a $ocorrencia, só depois dessa contagem ele inseri ($inserir).

function insert_txt($txt,$ocorrencia,$inserir,$cont=4){
	$pos = 0;
	$len_str = strlen($ocorrencia);
	$str_o = $txt;
	for($i=0;$i<$cont;$i++){
		$pos1 = stripos($str_o,$ocorrencia);
		if($pos1){
			$pos += $pos1+$len_str;
			$str_o = substr($str_o,$pos1+$len_str);	
		}
	}
	$str1 = substr($txt,0,$pos);
	$str2 = substr($txt,$pos);
	return $str1.$inserir.$str2;
}

Essa vai para meu amigo Leonay…
inté…

Algoritimo Simplex para problemas de Maximização

novembro 25, 2011 Category :Computação| JavaScript| Notícia| PHP| Web Off

Realizado como trabalho na faculdade. Profº mandou ver e ainda faltou o minimizar e o método das duas fazes!!!

<?php
if(!$_POST){
?>
<form id="form1" name="form1" method="post" action="">
<table width="550" border="0" cellspacing="2" cellpadding="0">
<tr>
<td width="127"><label for="foo2">Função Objetivo(Z):</label></td>
<td width="417"><label>
<input name="foo" type="text" id="foo2" value="3x1 +5x2" size="30" />
<input name="tipo" type="radio" id="tipo_0" value="MAX" checked="checked" />
MAX</label>
</td>
</tr>
<tr>
<td valign="top"><label for="restricoes">Restrições:</label></td>
<td><textarea name="restricoes" id="restricoes" cols="45" rows="4">x1 <= 4
x2 <= 6
3x1 +2x2 <= 18</textarea></td>
</tr>
<tr>
<td valign="top"> </td>
<td><input type="submit" name="CALCULAR" id="CALCULAR" value="CALCULAR" /></td>
</tr>
</table>
</form>
<? }else{

echo "<pre>";

class algoritmo_simplex{

public $post;
public $variaveis;
public $restricoes = "";
public $v_basicas_iniciais = "";
public $b;
public $foo;
public $coe_foo;
public $matriz_iteracao;
public $b_foo = 0;

public function __construct($post){
$this->post = $post;
$this->foo = $post[foo];
$this->restricoes = explode("<br />",nl2br($this->post[restricoes]));

//limpando espaços em branco das restrições
for($i=0;$i<count($this->restricoes);$i++){
$this->restricoes[$i] = trim($this->restricoes[$i]);
}

//obeter ultimi indece para a variavel de folga
$num_variaveis_foo = $this->proximo_x()-1;

//tranformado restrições em igualdade (parametros: restrições e ponteiro para as variaveis basicas iniciais)
$this->restricoes = $this->tranforma_igualdade();

//quantidade de varias no problema
$total_num_variaveis = $num_variaveis_foo + count($this->v_basicas_iniciais);

//obtendo todas as variaveis
for($i=1;$i<=$total_num_variaveis;$i++){
$this->variaveis[] = "x$i";
}

$this->get_coeficientes_foo();
}

function remover_x($str){
for($i=1;$i<=20;$i++){
$str = str_replace("x$i","",$str);
$str = str_replace("+","",$str);
if($str=='' or $str=='+' or $str=='-') $str .= "1";
}
return $str;
}

function get_coeficientes(){
$var = $this->variaveis;
$func = $this->restricoes;
$i=0;
foreach($func as $r){
$r = explode(" = ",$r);
$this->b[] = $r[1];
$r = $r[0];
//for para complementar coeficientes das variaveis de folga
for($j=0;$j<count($var);$j++){
if(!stristr($r,$var[$j])){
$r .= " 0".$var[$j];
}
}
$l = "";
//for para montar a função com todas as variaveis de folga
$termos = explode(" ",$r);
foreach($var as $v){
foreach($termos as $t){
if(stristr($t,$v)!='')
$l[] = $t;
}
}
$linhas[$i] = $l;
$i++;
}
//aki motra o vetor das restrições com as variaveis de folga e coeficientes return ($linhas);
for($i=0;$i<count($linhas);$i++){
for($j=0;$j<count($linhas[$i]);$j++){
$linhas[$i][$j] = $this->remover_x($linhas[$i][$j]);
}
}

//returna as linhas da matriz
return $linhas;
}

function get_coeficientes_foo(){
$var = $this->variaveis;
$r = $this->foo;
//for para complementar coeficientes das variaveis de folga
for($j=0;$j<count($var);$j++){
if(!stristr($r,$var[$j])){
$r .= " 0".$var[$j];
}
}

$l = "";
//for para montar a função com todas as variaveis de folga
$termos = explode(" ",$r);
foreach($var as $v){
foreach($termos as $t){
if(stristr($t,$v)!='')
$l[] = $t;
}
}
$linhas = $l;
//aki motra o vetor das restrições com as variaveis de folga e coeficientes return ($linhas);
for($j=0;$j<count($linhas);$j++)
if($this->post[tipo]=='MAX')
$linhas[$j] = (-1)*$this->remover_x($linhas[$j]);
else
$linhas[$j] = $this->remover_x($linhas[$j]);
//returna as linhas da matriz
$this->coe_foo = $linhas;
}

function proximo_x(){
$restr = $this->restricoes;
//obtendo o proximo indice do x
foreach($restr as $r){
$str = explode(" ",$r);
foreach($str as $r1):
for($i=0;$i<10;$i++){
if(strpos($r1,"x".$i)!='')
$xs[] = str_replace("x","",substr($r1,strpos($r1,"x".$i),2));
}
endforeach;
}
//prdena vetor
ksort($xs);
//ultimo indice +1
return end($xs)+1;
}

//metodo de transformação da restrições para igualdade
function tranforma_igualdade(){
$restr = $this->restricoes;
$j = $this->proximo_x($restr);
foreach($restr as $r){
$r = explode(" <= ",$r);
$restricoes[] = $r[0]." +x".$j." = ".$r[1];
$this->v_basicas_iniciais[] = "x".$j;
$j++;
}
return $restricoes;
}

//return o indice do maior negativo dos coe da foo
function maior_negativo(){
$menor = 0;
$j = -1;
for($i=0;$i<count($this->coe_foo);$i++){
if($this->coe_foo[$i]<$menor and $this->coe_foo[$i]!=0){
$menor = $this->coe_foo[$i];
$j = $i;
}
}
return $j;
}

function parar(){
$parar = false;
for($i=0;$i<count($this->coe_foo);$i++){
if($this->coe_foo[$i]<0){
$parar = false;
break;
}else
$parar = true;
}
return $parar;
}

function arredondar_dois_decimal($valor) {
$float_arredondar=round($valor * 100) / 100;
return $float_arredondado;
}

//função main
function main(){
$this->gerar_matriz(-1,-1);
echo '<br />------ ITERAÇÕES ------<br /><br />';
$contt = 1;
$parar = false;
while($contt<4){

if($this->parar())
$parar = true;

$indice = $this->maior_negativo();
//obtendo pivo [indice,j]
$menor = 9999;
for($i=0;$i<count($this->matriz_iteracao);$i++){
$n = $this->matriz_iteracao[$i][$indice];
if($n>0){
if(($this->b[$i]/$n)<$menor){
$menor = ($this->b[$i]/$n);
$linha = $i;
}
}
}
$pivo[$linha][$indice] = $this->matriz_iteracao[$linha][$indice];

$this->gerar_matriz($linha,$indice);

if($parar)
break;
echo "<br />------ ITERÇÃO $contt ------<br /><br />";

//substituindo variavel basica pela variavel nao basica da linha e coluna do pivo
$this->v_basicas_iniciais[$linha] = $this->variaveis[$indice];

//se o pivo não for igual a 1 faz o caluclo sobre a linha para tranformar em 1
if($pivo[$linha][$indice]!=1){
for($i=0;$i<count($this->matriz_iteracao[$linha]);$i++){
$num = "";
if($this->matriz_iteracao[$linha][$i]!=0){
$num = $this->matriz_iteracao[$linha][$i] / $pivo[$linha][$indice];
if(is_float($num))
$num = number_format($num,2);
$this->matriz_iteracao[$linha][$i] = $num;
}
}

//matriz B
$num = $this->b[$linha] /$pivo[$linha][$indice];
if(is_float($num))
$num = number_format($num,2);
$this->b[$linha] = $num;
}

//verifica a coluna do pivo se está na forma canonica, se não, transforma os elementos em ZERO
for($i=0;$i<count($this->matriz_iteracao);$i++){
if($this->matriz_iteracao[$i][$indice]!=0 and $i!=$linha){
//coeficientes das restições
$elemento = $this->matriz_iteracao[$i][$indice];
$elemento = $elemento*-1;

for($j=0;$j<count($this->matriz_iteracao[$i]);$j++){
$this->matriz_iteracao[$i][$j] =
($elemento * $this->matriz_iteracao[$linha][$j]) + $this->matriz_iteracao[$i][$j];
}

$this->b[$i] = ($this->b[$linha] * $elemento) + $this->b[$i];
}
}

//coeficientes da foo
$elemento = $this->coe_foo[$indice];
$elemento = $elemento*-1;

//calculo do termo independente da foo
$num = ($this->b[$linha] * $elemento) + $this->b_foo;
if(is_float($num))
$num = number_format($num,2);
$this->b_foo = $num;

for($j=0;$j<count($this->coe_foo);$j++){
$this->coe_foo[$j] =
($elemento * $this->matriz_iteracao[$linha][$j]) + $this->coe_foo[$j];
}

$contt++;
}
}

function gerar_matriz($pivoi,$pivoj){
echo "____|____";
foreach($this->variaveis as $v):
echo "<u>".$v."</u>____|____";
endforeach;
echo "<u>b</u>__n";

//inicializando matriz de coeficientes
if(!is_array($this->matriz_iteracao))
$this->matriz_iteracao = $matriz = $this->get_coeficientes();
else
$matriz = $this->matriz_iteracao;

for($i=0;$i<count($matriz);$i++){
echo " ".$this->v_basicas_iniciais[$i]." |";
for($j=0;$j<count($matriz[$i]);$j++){
if($pivoi == $i and $pivoj == $j)
echo "<strong>*".str_pad($matriz[$i][$j],8," ",STR_PAD_BOTH)."*|</strong>";
else
echo str_pad($matriz[$i][$j],10," ",STR_PAD_BOTH)."|";
}
echo str_pad($this->b[$i],10," ",STR_PAD_BOTH)."n";
}

echo "<div style='border-top:1px solid #000; width:550px;'> Z' |";
foreach($this->coe_foo as $v):
echo str_pad($v,10," ",STR_PAD_BOTH)."|";
endforeach;
echo str_pad($this->b_foo,10," ",STR_PAD_BOTH)."</div>";

}
}

$teste = new algoritmo_simplex($_POST);
$teste->main();
}
?>

Função para converter fórmulas condicionais do Excel para PHP

janeiro 3, 2011 Category :PHP| Sistemas| Tecnologia| Web Off

A algum tempo atrás precisei de uma função que convertesse pra mim estruturas condicionais do Excel [SE()], em estruturas condicionais da linguagem PHP. Após perder muito tempo a procura e não encontrar nada, resolvi criar uma função para estruturas simples.

Exemplo:

$x = 15;
$result = excelToPhp(“SE($x<=4;0;SE($x=15;111;666))”);
echo $result;
[Resultado: 15<=4?0:(15==15?111:666) ]

Com isso basta utilizar o eval e receber o valor da condição:

echo eval(“$test = $result;”);
echo $test;
[Resultado: 111]

Simples não!

Agora veja a função aqui:

function excelToPhp($for){

$operadores = "-*/=><";
$for = str_replace("SE","IF",$for);
$str = $for;
$pos = strpos($for,"E(");
while($pos!=''){
     $exp = substr($str,$pos+1);
     $pos1 = strpos($exp,"(");
     $pos2 = strpos($exp,")");
     $str1 = substr($exp,$pos1+1,$pos2-1);
     $str = str_replace(";","#",$str1);
     $for = str_replace($str1,$str,$for);
     $pos = strpos($str,"E");
}

$str = $for;
$pos = strpos($for,"OU(");
while($pos!=''){
     $exp = substr($str,$pos+1);
     $pos1 = strpos($exp,"(");
     $pos2 = strpos($exp,")");
     $str1 = substr($exp,$pos1+1,$pos2-1);
     $str = str_replace(";","@",$str1);
     $for = str_replace($str1,$str,$for);
     $pos = strpos($str,"OU");
}

$i = 0;
$str = explode(";",$for);
while($i<count($str)){
     $str[$i] .= ";";
     $j=0;
     while($j<strlen($operadores)){
          $op = $operadores{$j};
          if(strpos($str[$i],$op)!=''){
               $str[$i] = $str[$i]."?";
          }
          $j++;
     }
     $str[$i] = str_replace("IF","",$str[$i]);
     $forr .= $str[$i];
     $i++;
}

$forr = substr($forr,1);
$forr = str_replace(";?","?",$forr);
$forr = str_replace("|??","AA",$forr);
$forr = str_replace("AA","?",$forr);
$forr = str_replace("??","?",$forr);
$forr = str_replace("@"," || ",$forr);
$forr = str_replace("E","",$forr);
$forr = str_replace("OU","",$forr);
$forr = str_replace(";",":",$forr);
$forr = str_replace(":)",")",$forr);
$forr = str_replace("||):",")?",$forr);
$forr = substr($forr,0,strlen($forr)-2);
$forr = str_replace("=","==",$forr);
$forr = str_replace("<==","<=",$forr);
$forr = str_replace("|):",")?",$forr);
$forr = str_replace("?(",":(",$forr);
$forr = str_replace("#"," && ",$forr);
$forr = str_replace("?0)"," : 0)",$forr);
return $forr;
}

Ainda tem muita coisa pra fazer nessa função e deixar ela mais limpa, mas ja quebra um grande galho.

inté mais!

Sistema para escritórios de contabilidade – contadeapoio.com.br

dezembro 31, 2010 Category :Computação| Contabilidade| Mysql| PHP| Sistemas| Web Off

Em parceria com nosso colega de trabalho, Helenaldo, desenvolvemos um sistema para auxílio aos escritórios de contabilidade. Com esse sistema o contador tem controle total sobre as obrigações das empresas, tarefas delegadas aos seus funcionários, cadastros de empresas e relatórios em html e pdf.

Acesso: www.contadeapoio.com.br

, , , , , , ,

Código de Simulação de Financiamento em PHP+JavaScript

dezembro 28, 2010 Category :JavaScript| PHP| Web Off

Com a ajuda do meu colega de trabalho e contador Helenaldo, desenvolvemos essa    pequena rotina que faz  o calculo de um financiamento.



Clique aqui para abrir

, , ,