Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

AndersonDutra

Trabalhando com Recursividade

Recommended Posts

Preciso fazer o seguinte. Tenho uma colsulta do banco que me retorna a uma letra. Aí tenho que fazer alguma coisa parecida com isso:

 

<?php
$x;
function Recursivo($y){
$x=$y.$Letradobanco;
}
Recursivo($x);
print 'Imprimir 1º concatenacao '.$x;
Recursivo($x);
print 'Imprimir 2º concatenacao '.$x;
Recursivo($x);
print 'Imprimir 3º concatenacao '.$x;
?>

Começo com meu x vazio e após a consulta ao banco eu faço uma concatenação com a string passada, depois pego o resultado e chamo a função de novo passando a variavel x. Conseguiram entender?? Como faço isso??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou tentar com números:

 

<?php
$x;
function Recursivo($y){
$x=$y+1;

}
Recursivo($x);
print 'Print X '.$x;
Recursivo($x);
print 'Print X '.$x;
Recursivo($x);
print 'Print X '.$x;
?>

No exemplo acima eu tento fazer uma soma da seguinte forma. Eu faço o calculo do meu x e quando eu chamo de novo a função Recursivo, ele pega o x e passa como parametro. Neste exemplo ele teria que dar 3 no meu ultimo print. Tenho que fazer alguma coisa parecida, mas ao invés de numeros eu vou concatenar uma string. Chamo a função uma vez e ela me retorna um A. Chamo de novo e ela me retorna um B e concateno formando AB, e por aí vai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

class Concat
{
	var $res;
	
	function Concat( $var )
	{
		$this->res .= $var;
	}
}

$obj = new Concat('A');
echo $obj->res . "<br />";

$obj->Concat('B');
echo $obj->res . "<br />";

$obj->Concat('C');
echo $obj->res . "<br />";

?>

Assim? :huh:

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso. Agora vou ver como aplico isso no meu código. O meu código pega um pedaço de uma placa de carro e compara com um banco de dados, aí eu sei qual letra é aquele trecho. Faço isso para as 7 partes da placa, sendo as 3 primeiras letras e os 4 números. Aí depois tenho que concatenar cada resultado formando uma string tipo DBZ1234.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não está dando muito certo não. No meu caso eu tenho a seguinte estrutura:

 

<?php

function TamanhodaImagem($imagemInic)
{

aqui vem meu código

$variavel de resultado
}

Aqui eu chamo a função 6 vezes:

TamanhodaImagem("image/L1.jpg");
TamanhodaImagem("image/L2.jpg");
TamanhodaImagem("image/L3.jpg");
TamanhodaImagem("image/N1.jpg");
TamanhodaImagem("image/N2.jpg");
TamanhodaImagem("image/N3.jpg");
TamanhodaImagem("image/N4.jpg");

?>

Não coloquei o código pq ele é muito grande, mas em resumo minha função é isso. Como eu aplico o seu código nesta minha estrutura?? Preciso que quando ele chama a primeira vez a função e retorna por exemplo A, ele seja passado de novo e concatenado com o resultado da 2º vez que eu chamo e assim por diante, até formar uma string que eu possa buscar no banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda sim tô apanhando para fazer. O problema agora é que eu passo a variavel e ele não concatena. Aparentemente está no lugar errado, mas não sei aonde eu coloco para acertar:

 

<?php

class Concat
{
	var $res;

	function Concat( $var )
	{
		$this->res .= $var;
	}
}
$Concat;
$Letra;
function TamanhodaImagem($imagemInic,$carac)
{
		$corpixelInic[34][34];
		$contalinhaInic[34]=0;
		$contalinhaComp[34]=0;
		$perc=0;

		$LetraFinal;
		//$total=0;
		$perctotal=0;
		$dif=0;
		$LetraEnc="Não encontrado";
		$tam_img = getimagesize($imagemInic);
		$imInic = imagecreatefromjpeg($imagemInic);
		//Conexão banco
$link = mysql_connect('localhost', '97241', 'projeto9')
	or die('Não foi possível conectar: ' . mysql_error());
echo 'Conexão bem sucedida';
mysql_select_db('97241') or die('Não foi possível	selecionar o banco da dados');
		echo '  <p>Imagem Inserida<p>
	<img src="'.$imagemInic.'" width="40" height="40"><p>';

	   //print 'Largura da Imagem: ' .$tam_img[0]. '<br />';
	//print 'Altura da Imagem: ' .$tam_img[1]. '.<br />';

//Teste seleciona tabela
$result2 = mysql_list_tables('97241');

	if (!$result2) {
		print "DB Error, não pude listar as tabelas\n";
		print 'MySQL Error: ' . mysql_error();
		exit;
	}

	while ($row = mysql_fetch_row($result2)) {
	  //  print "\n Table : $row[0]\n";
$tabelavalor='Motoristas';
$tabelafoto='foto';
//teste,se ocorrer erro é só tirar
//print ' Tabela' .$row[0]. '<br />';
   if(($row[0]!=$tabelavalor) && ($row[0]!=$tabelafoto)){
   for ($jj = 0; $jj < $tam_img[1]; $jj++){
		$contalinhaInic[$jj]=0;
	}

//http://www.viasite.com.br/phpmanual/function.mysql-list-tables.html
//Fim teste seleciona table

// Executando a consulta SQL
$result = mysql_query("select * from ". $row[0]);
//print "\n Table : $result\n";
while($linha = mysql_fetch_array($result))
{
	 $contalinhaComp[$linha['linha']]=$linha['qtdpreto'];
	 $LetraEnc=$linha['letra'];
		  //print 'Verificando erro no dado do banco '.$contalinhaComp[$linha['linha']].'<br/>';
}
//Fim conexão banco

//Teste 6/12/2007
$fundo=0;
for ($a = 0; $a < $tam_img[0]; $a++){
   for ($b = 0; $b < $tam_img[1]; $b++){
   $rgbteste = ImageColorAt($imInic, $a, $b);
   $r1 = ($rgbteste >> 16) & 0xFF;
   $g2 = ($rgbteste >> 8) & 0xFF;
   $b3 = $rgbteste & 0xFF;
   if(($r1>209) and ($g2>209) and ($b3>209)){
   $fundo=$fundo+1;
   }
   }
}
if($fundo>650){
print 'Cor do Fundo é branco ' .$fundo.'<br />';
}
else{
print 'Cor do Fundo é preto ' .$fundo.'<br />';
}
//print 'Cor do Fundo ' .$fundo.'<br />';
//fim teste 6/12/2007
if($fundo>650){
for ($i = 0; $i < $tam_img[0]; $i++){
   for ($j = 0; $j < $tam_img[1]; $j++){
   //Pixel atual
   $rgb = ImageColorAt($imInic, $j, $i);
   $r = ($rgb >> 16) & 0xFF;
   $g = ($rgb >> 8) & 0xFF;
   $b = $rgb & 0xFF;

   if(($r<200) and ($g<200) and ($b<200)){
   $corpixelInic[$i][$j]=1;
   }else{
   $corpixelInic[$i][$j]=0;
   }
  }
}
}else{//Fundo preto
for ($i = 0; $i < $tam_img[0]; $i++){
   for ($j = 0; $j < $tam_img[1]; $j++){
   //Pixel atual
   $rgb = ImageColorAt($imInic, $j, $i);
   $r = ($rgb >> 16) & 0xFF;
   $g = ($rgb >> 8) & 0xFF;
   $b = $rgb & 0xFF;

   if(($r>200) and ($g>200) and ($b>200)){
   $corpixelInic[$i][$j]=1;
   }else{
   $corpixelInic[$i][$j]=0;
   }
  }
}
}
for ($x = 0;$x < $tam_img[0]; $x++) {
   for ($y = 0;$y < $tam_img[1]; $y++){
	  if($corpixelInic[$x][$y]==1){
	  $contalinhaInic[$x]=$contalinhaInic[$x]+1;
	  }
	 }

	  }

$total=0;
//Compara para ver se é a letra
for($comp=0;$comp<$tam_img[0];$comp++){
//print ' contalinhaComp ' .$contalinhaComp[$comp]. '<br />';
	  //print ''.'<br />';

//print ' contalinhaInic ' .$contalinhaInic[$comp]. '<br />';
	  //print ''.'<br />';
if($contalinhaComp[$comp]>=$contalinhaInic[$comp]){
$dif= $contalinhaComp[$comp]-$contalinhaInic[$comp];
$perc=($dif/$contalinhaComp[$comp])*100;
//print ' perc comp ' .$perc. '<br />';
	  //print ''.'<br />';

}else
{
$dif= $contalinhaInic[$comp]-$contalinhaComp[$comp];
$perc=($dif/$contalinhaInic[$comp])*100;
//print ' perc inic' .$perc. '<br />';
	  //print ''.'<br />';
}

  if($perc<20){
	 $total++;

  }

}
//print ' Total' .$total. '<br />';
 //	 print ''.'<br />';
// Liberar o conjunto de resultados
mysql_free_result($result);
if($total>=27){

$Letra=$LetraEnc;
				 }
	}//fim do teste do if
   //print $Letra;
   $LetraFinal=$Letra;
$Concat=$Concat.$Letra;

}

$obj = new Concat($Letra);
echo $obj->res . "<br />";
$teste = $LetraFinal;
print 'Letra Final: '.$LetraFinal. '<br />';
$obj->Concat($LetraFinal);
echo $obj->res . "<br />";
//mysql_free_result($result2);
}

TamanhodaImagem("image/L1.jpg",$Concat);
TamanhodaImagem("image/L2.jpg",$Concat);
TamanhodaImagem("image/L3.jpg",$Concat);
TamanhodaImagem("image/N1.jpg",$Concat);
TamanhodaImagem("image/N2.jpg",$Concat);
TamanhodaImagem("image/N3.jpg",$Concat);
TamanhodaImagem("image/N4.jpg",$Concat);

?>

Esse que é resultado:

 

http://andersonpdutra.ueuo.com/projeto9/Compara.php

 

Neste caso por exemplo, teria que Contactenar todas as letras

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.