Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
NunoRibeiro22

Capicua PHP

Recommended Posts

NunoRibeiro22

Boas...

sou aluno e tenho que fazer um trabalho  em dreamweaver (saber se nome/numero é capicua, ou não) cliente-servidor

é trabalho simples em que o cliente escreve nome/numero e o cliente responde se é ou não um capicua.....se me poderem ajudar a fazer, agradecia...

aguardo ajuda...


NR22

Share this post


Link to post
Share on other sites
scorch

O que é que já tens feito na parte do servidor? Que dúvidas é que tens?


scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
NunoRibeiro22

O que é que já tens feito na parte do servidor? Que dúvidas é que tens?

já tentei fazer e pedir ajuda a colegas mas nao deu em nada...

o trabalho até é bastante simples, mas ainda nao consegui fazer

gostava é que alguem que perceba das capicuas me ajudasse a fazer...


NR22

Share this post


Link to post
Share on other sites
Caya

Divides o número/palavra em 2;

Invertes a ordem da segunda parte (strrev);

Comparas se são iguais;

Voilá, ai tens um verdadeiro ou falso;

PS: Tens de fazer em dreamweaver? o.O

Share this post


Link to post
Share on other sites
NunoRibeiro22

Divides o número/palavra em 2;

Invertes a ordem da segunda parte (strrev);

Compares se são iguais;

Voilá, ai tens um verdadeiro ou falso;

PS: Tens de fazer em dreamweaver? o.O

tenho mesmo que fazer em dreamweaver...

pois isso na teoria é facil, mas na pratica para um utilizador inexperiente como eu...

nao vou ser hipocrita, se poderem fazer o essencial agradeci, agora.. eu sei que nem toda a gente o quer fazer...


NR22

Share this post


Link to post
Share on other sites
KiNgPiTo

Deixo-te aqui uma função que usei já há um valente tempo num trabalho quando andava a aprender:

<?php

//Funcao de retorno capicua
function capicua($frase){
$len = strlen($frase); //length da string
$par = (1 & $len) ? 'Impar' : 'Par'; //Se par ou impar para nao associar o do meio

if ( $par == 'Par' ){	// Se par
	$str1 = substr($frase, 0, $len / 2); // Divide por 2 e cria uma string da 1ª parte
	$str2 = strrev(substr($frase, $len / 2)); // Divide por 2 e cria uma string da 2ª parte e ainda faz um reverse
}else{	 // Se impar
	$str1 = substr($frase, 0, $len / 2); // Divide por 2 e cria uma string da 1ª parte
	$str2 = strrev(substr($frase, ($len / 2) + 1));	// Divide por 2 e soma um para ignorar o do meio e cria uma string da 2ª parte e faz o reverse
}

if ( $str1 == $str2 ) // Se forem iguais, é capicua e retorna true
	$ret = true;
else
	$ret = false; // Se não forem iguais, não é capicua e retorna false

return $ret; // Retorna o valor
}

//exemplo de uso...
if ( capicua("01hha10") ) // Chama a função capicua e adiciona como parametro a frase que queremos verificar
echo 'É uma capicua'; // Se true, imprime É uma capicua
else
echo 'Não é uma capicua'; // Se false, imprime Não é uma capicua

?>

Agora que vejo isto com melhor olho, pode ser reduzido, mas dá para perceber a ideia e podes adaptar ao que precisares...

Share this post


Link to post
Share on other sites
NunoRibeiro22

antes de mais obrigado..

pois...vou testar o quanto antes...

não te esqueças que  é uma arquitecturas Cliente-Servidor, logo terá que existir um ficheiro php para cliente e outro pro servidor...


NR22

Share this post


Link to post
Share on other sites
Caya

tenho mesmo que fazer em dreamweaver...

pois isso na teoria é facil, mas na pratica para um utilizador inexperiente como eu...

nao vou ser hipocrita, se poderem fazer o essencial agradeci, agora.. eu sei que nem toda a gente o quer fazer...

Como é que o teu professor vai saber se fizeste no Dreamweaver ou no bloco de notas?

A questão aqui não é querer fazer ou não, mas este fórum serve para ajudar os users a aprender a programar, não para programar por eles. O que eu te disse no meu primeiro post diz exactamente o que tens de fazer, até te disse funções que tens de utilizar, bastava "traduzires" para PHP. Quando tens a teoria toda, não há nada mais fácil que a prática...

Share this post


Link to post
Share on other sites
NunoRibeiro22

Como é que o teu professor vai saber se fizeste no Dreamweaver ou no bloco de notas?

A questão aqui não é querer fazer ou não, mas este fórum serve para ajudar os users a aprender a programar, não para programar por eles. O que eu te disse no meu primeiro post diz exactamente o que tens de fazer, até te disse funções que tens de utilizar, bastava "traduzires" para PHP. Quando tens a teoria toda, não há nada mais fácil que a prática...

o trabalho consiste na elaboração de 1 programa em dreamweaver em que o cliente escreve um numero/nome e o servidor responde se o numero/nome é ou não capicua.

o problema é que percebo pouco de dreamweaver logo nao sei fazer o exercicio...apesar de ser um trabalho simples...


NR22

Share this post


Link to post
Share on other sites
Caya

O Dreamweaver é apenas um IDE, ele não faz programas, ele fornece um ambiente para os desenvolver. O que fazes no Dreamweaver podes fazer perfeitamente no Bloco de notas do Windows.

Share this post


Link to post
Share on other sites
KiNgPiTo

Quanto ao lado do servidor, já tens o que deixei, não precisas de mais. Quanto ao lado do cliente, crias um form cuja acção vai ser o script onde metas o código que te deixei, procuras na net o que é o POST e como passar os dados do form para o script, e chamas a função com o valor que é passado...

Quanto ao ser em dreamweaver ou não, é relativo. Pode haver profs que para além do ensino do html ou do php em si, podem querer adoptar uma ferramenta para a construção do mesmo usando um wysiwyg ou um editor de código apenas, talvez o dele optou por escolher o dreamweaver, óbvio que não obriga a que seja lá criado, o código é igual em todo o lado, mas não deixa de ser ensinado para além de uma linguagem, uma ferramenta de edição.

Share this post


Link to post
Share on other sites
NunoRibeiro22

agradeço a quem ajudou, agora vou ver o que consigo fazer...

se souberem de mais alguma coisa....avisem...


NR22

Share this post


Link to post
Share on other sites
NunoRibeiro22

tenho aqui um exemplo do que fiz num trabalho em que cliente insere um numero e o servidor responde se é par ou impar..

agora queria é q me ajudassem, (em vez de ter o codigo para o par ou impar) era o codigo pra ver se é ou nao uma capicua....

<?php 

// don't timeout 
set_time_limit (0); 

// set some variables 
$host = "localhost"; 
$port = 1234; 

// create socket 
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Não consegui criar o socket\n"); 

// bind socket to port 
$result = socket_bind($socket, $host, $port) or die("Não consegui ligar o socket\n"); 

// start listening for connections 
$result = socket_listen($socket, 3) or die("Não consegui estabalecer escutas\n"); 

echo "À espera de clientes...\n"; 

// accept incoming connections 
// spawn another socket to handle communication 
$spawn = socket_accept($socket) or die("Não consegui aceitar conexão\n"); 

echo "Pedido de cliente aceite\n"; 

// write a welcome message to the client 
$welcome = "Bem vindo ao inverter a palavra!\n\r? "; 
socket_write($spawn, $welcome, strlen ($welcome)) or die("Não consegui enviar a palavra\n"); 


// read client input 
$input = socket_read($spawn, 1024, 1) or die("Não consegui ler do cliente\n"); 

if (trim($input) != "") 
{ 
echo "Texto recebido: $input\n"; 

// reverse client input and send back 
if($input%2==0)
{
$output = "par"."\n\r? "; 
}
else
{
$output="impar"."\n\r? ";
}



socket_write($spawn, $output, strlen ($output)) or die("Não consegui enviar a palavra\n"); 
echo "palavra enviada: " . trim($output) . "\n"; 

} 

// close primary socket 
socket_close($socket); 
echo "Socket terminado\n"; 

?>

APARTE: Usa o Geshi, torna o post mais apresentável. :)


NR22

Share this post


Link to post
Share on other sites
softklin

Bem, é original usar o PHP dessa forma. De qualquer modo, acho que uma forma muito fácil de veres se um número é capicua é usar a função:

function ehCapicua($numero) {
  // cast para o tipo string, de forma a operar como se fosse texto;
  $numero = (string) $numero;
  return ($numero == strrev($numero));
}

A função retorna true se o número for uma capicua, ou falso caso contrário. Não deve apresentar dificuldades adoptar para o teu código.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
NunoRibeiro22

o que eu queria exactamente, era... substituir o que tenho....

{

$output = "par"."\n\r? ";

}

else

{

$output="impar"."\n\r? ";

}

pela funçao da capicua

...


NR22

Share this post


Link to post
Share on other sites
KiNgPiTo
<?php

function ehCapicua($numero) {
  // cast para o tipo string, de forma a operar como se fosse texto;
  $numero = (string) $numero;
  return ($numero == strrev($numero));
}

// don't timeout
set_time_limit (0);

// set some variables
$host = "localhost";
$port = 1234;

// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Não consegui criar o socket\n");

// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Não consegui ligar o socket\n");

// start listening for connections
$result = socket_listen($socket, 3) or die("Não consegui estabalecer escutas\n");

echo "À espera de clientes...\n";

// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die("Não consegui aceitar conexão\n");

echo "Pedido de cliente aceite\n";

// write a welcome message to the client
$welcome = "Bem vindo ao inverter a palavra!\n\r? ";
socket_write($spawn, $welcome, strlen ($welcome)) or die("Não consegui enviar a palavra\n");


// read client input
$input = socket_read($spawn, 1024, 1) or die("Não consegui ler do cliente\n");

if (trim($input) != "")
{
echo "Texto recebido: $input\n";

$varaux = ehCapicua($input);
$output = $varaux."\n\r? ";

socket_write($spawn, $output, strlen ($output)) or die("Não consegui enviar a palavra\n");
echo "palavra enviada: " . trim($output) . "\n";

}

// close primary socket
socket_close($socket);
echo "Socket terminado\n";

?>

Share this post


Link to post
Share on other sites
NunoRibeiro22

antes de mais agradeço...

tens a certeza que o codigo k me passastes está correcto?


NR22

Share this post


Link to post
Share on other sites
NunoRibeiro22

estive a testar e o que programa nao funciona....tentei alterar e adaptar, mas mesmo assim nao consegui por a funcionar....se poderem continuar a ajudar....


NR22

Share this post


Link to post
Share on other sites
NunoRibeiro22

Em que linguagem criaste a aplicação cliente?

em php....dreamweaver, tanto o cliente, como o servidor foi em php...


NR22

Share this post


Link to post
Share on other sites
NunoRibeiro22

cliente...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<?php 
// form not yet submitted 
if(empty($_POST['submit']))
{ 
?> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
Enter some text:<br> 
<input type="Text" name="xptoo" size="15" id="xptoo">
<input type="submit" name="submit" value="Send"> 
</form> 
<?php 
} 
else 
{ 
// form submitted 

// where is the socket server? 
$host="localhost"; 
$port = 1234; 

// create socket 
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); 

// connect to server 
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n"); 

$mensagem=socket_read ($socket, 1024) or die("Could not read server response\n"); 

// send string to server 
$xptoo=$_POST['xptoo']."\n";
socket_write($socket, $xptoo, strlen($xptoo)) or die("Could not send data to server\n"); 

// get server response 
$result = socket_read ($socket, 1024) or die("Could not read server response\n"); 

// end session 
socket_write($socket, "END", 3) or die("Could not end session\n"); 

// close socket 
socket_close($socket); 

// clean up result 
$result = trim($result); 
$result = substr($result, 0, strlen($result)-1); 

// print result to browser 
?> 
<p>Objectivo: <?php echo $mensagem ?></p> 
<p>Server said: <b><?php echo $result; ?></b></p> 
<?php 
} 
?> 
</body>
</html>

APARTE: Usa o Geshi, torna o post mais apresentável. :P


NR22

Share this post


Link to post
Share on other sites
NunoRibeiro22

penso que esta parte do cliente está correcta...o que deve estar incorrecto é o servidor, mas...


NR22

Share this post


Link to post
Share on other sites
Caya

Porque estás a complicar isto e a usar sockets em vez de um simples $_POST? O script tem de usar sockets obrigatoriamente?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.