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é…

Upload de arquivos remotos usando PHP

novembro 25, 2011 Category :Notícia Off

Eis um problema que eu não imaginava que seria tão simples de resolver.

Esse problema veio da necessidade de puxar um arquivo de um outro servidor (Ex: http://marcosiran.wordpress.com/file/livro.pdf) e criar uma cópia em um servidor destino (Ex: http://www.site.com/arquivos/livro.pdf). Isso sem a intervenção de um usuário para baixar o arquivo e em seguida enviar por um formulário usando move_uploaded_file.

Obs: Meu amigo samuel me deu uma grande ajuda nisso ai!

$origem = "http://marcosiran.wordpress.com/file/livro.pdf";
$destino = "arquivos/livro.pdf";
$orig = fopen($origem, "r");
$dest = fopen($destino, "w");
while (!feof($orig)) {
     $line = fread ($orig, 1024*10);
     fwrite($dest, $line);
}
fclose($orig);
fclose($dest);

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();
}
?>

Joguinho de memória em pascal – Trabalho feito no curso

fevereiro 12, 2011 Category :Computação| Notícia| Tecnologia Off

Essa foi bem interessante. Professor de Programação colocou pra matar mesmo. Logo no 1º bloco pra fazer um jogo de memória usando matriz e arrays em pascal.

Bem simples mas divertido.

//B - numero certo na casa correta
//E - numero certo na casa errada
program jogo;
uses crt;
var
senha: array[1..4] of integer;
i,j,l,n,cont:integer;
gab: array[1..8,1..4] of string;
resp: array[1..8,1..4] of integer;
ganhou:boolean;
key:char;

//procedimento para mostrar matriz completa
procedure matrix;
var i,j,k:integer;
begin
clrscr;
writeln('B - numero certo na casa correta');
writeln('E - numero certo na casa errada');
writeln;
for i:=8 downto 1 do
begin
for j:=1 to 4 do
begin
write(gab[i,j],' ');
end;
for k:=1 to 4 do
begin
write(' ',resp[i,k]);
end;
writeln;
end;
writeln;
end;

//procedimento de encerramento do jogo - acertou
procedure fim;
var i:integer;
begin
clrscr;
textbackground(blue);
for i:=1 to 20 do
begin
write('<');
for j:=1 to 30 do
begin
if (i=10) and (j=10) then
begin
write('VOCE ACERTOU TUDO!');
j:=j+8;
end
else
write('--');
delay(5);
end;
write('>');
writeln;
end;

for i:=1 to 100 do
begin
gotoxy(20,10);
if i mod 2 = 0 then
write('VOCE ACERTOU TUDO!')
else
write('----ABESTADO------');
delay(600);
end;
readkey;
end;

//procedimento de encerramento do jogo - perdeu
procedure gameover;
var i:integer;
begin
clrscr;
textbackground(red);
for i:=1 to 20 do
begin
write('<');
for j:=1 to 30 do
begin
if (i=10) and (j=10) then
begin
write('VAI SER BURRO LONGE!');
j:=j+9;
end
else
write('--');
delay(5);
end;
write('>');
writeln;
end;

for i:=1 to 100 do
begin
gotoxy(20,10);
if i mod 2 = 0 then
write('VAI SER BURRO LONGE!')
else
write('----ABESTADO--------');
delay(600);
end;
readkey;
end;

//inicio do programa
begin
TEXTCOLOR(white);
ganhou:=false;
//zerando matrizes
for i:=1 to 8 do
begin
for j:=1 to 4 do
begin
gab[i,j]:='*';
resp[i,j]:=0;
end;
end;

writeln('Digite 4 numeros inteiros(1-8): ');
for i:=1 to 4 do
begin
TEXTCOLOR(black);
readln(senha[i]);
TEXTCOLOR(white);
write('*');
end;
clrscr;
//desenha matriz limpa
matrix;
TEXTCOLOR(white);
writeln;
//inicio do jogo - loop de 8 tentativas
for i:=1 to 8 do
begin
if ganhou=true then
begin
fim;
break;
end
else
begin
if i>1 then
begin
TEXTCOLOR(yellow);
writeln('Errado! Tente novamente!!!');
TEXTCOLOR(white);
writeln;
end;
end;
writeln('Digite sua ',i,'a resposta (4 numeros inteiros - 1 a 8): ');
n:=1;
cont:=0;
for j:=1 to 4 do
begin
readln(resp[i,j]);
if senha[j]=resp[i,j] then
begin
gab[i,n] := 'B';
n:=n+1;
//se cont for igual a 4 o jogador acertou tudo na sequencia certa
cont:=cont+1;
if cont=4 then
ganhou:=true;
end
else
//se não achar na sequencia certa, verifica se tem elementos iguais nas sequencias erradas
begin
for l:=1 to 4 do
begin
if resp[i,j] = senha[l] then
begin
gab[i,n] := 'E';
n:=n+1;
end;
end;
end;
end;
matrix;
end;
//fim do jogo
if ganhou=false then
gameover;

readkey;
end.

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

Meu 1º Post!

dezembro 17, 2009 Category :Notícia Off

Meu primeiro post de aqui no wordpress.

Logo mais novidades de programação e banco de dados.