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

maiden

[Pascal] Verificar se um número é capicua

15 mensagens neste tópico

Boas,

Com o aparecimento do tópico "Caça às Capicuas" verifiquei que algum pessoal ainda não percebeu o que é uma capicua.

Deixo aqui um aplicativo que não tem utilidade para além da verificação se um numero é capicua ou não (e a aprendizagem claro).

Program Capicuas;
Uses crt;
Var i,ilen,inum:integer;
snum:string;
capicua:boolean;

Begin
clrscr;
write('Introduza um numero: ');
readln(inum);
str(inum,snum);
ilen:=length(snum);
for i:=1 to ilen div 2 do begin
	if snum[i] = snum[ilen-i+1] then
		capicua:=True
	else capicua:=False;
end;
if capicua = True then
	writeln('O numero e capicua')
else writeln('O numero nao e capicua');
readln;
End.

Abaixo fica um ficheiro comprimido com o código e o executável.

Espero que seja útil.

Cumps,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Está interessante, mas encontrei 2 bugs:

capicua1oz.jpg

Acho que 3226 não é uma capicua.

Se introduzires 3225 fecha o programa automáticamente nem dá feedback!

EDIT# com o 2226 fecha a aplicação também e o 2225 diz que é capicua !

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Está interessante, mas encontrei 2 bugs:

capicua1oz.jpg

Acho que 3226 não é uma capicua.

Se introduzires 3225 fecha o programa automáticamente nem dá feedback!

EDIT# com o 2226 fecha a aplicação também e o 2225 diz que é capicua !

:x

Um bug a verificar com mais tempo.

Se alguém souber uma solução não se acanhe. :shame:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenta assim !

PROGRAM Capicuas(INPUT,OUTPUT);

VAR n,potencias,i,num,auxnum,totalnumcont,quoc,resto,numerocont:WORD;

BEGIN
     WRITE('Quantos d¡gitos compõe o número? ');
     READLN(n);
     potencias:=1;
     FOR i:=1 TO n-1 DO
     BEGIN
          potencias:=potencias*10
     END;
     WRITE('Digite o número-> ');
     READLN(num);
     auxnum:=num;
     totalnumcont:=0;
     REPEAT
           quoc:=num DIV 10;
           resto:=num MOD 10;
           numerocont:=resto*potencias;
           totalnumcont:=totalnumcont+numerocont;
           potencias:=potencias DIV 10;
           num:=quoc;
     UNTIL quoc=0;
     IF totalnumcont=auxnum THEN WRITELN('O número inserido é palindrómico')
                            ELSE WRITELN('O número inserido não é palindrómico');
END.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora:  :cheesygrin::P

def isPal(n):
  numero = str(n)
  if numero == numero[::-1]:
    return 1
  else:
    return 0

if isPal(input('Insira um numero: ')):
    print 'O numero e palindromico.'
else:
    print 'O numero nao e palindromico.'
    

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Há muito que não brincava com C e aproveitando a deixa....

#include <stdio.h>
#include <conio.h>
#include <string.h>

char *noBufferOverflowReading(char *, int);

int main(int argc, char *argv[])
  {
  char buffer[101], *value, *secondString;
  int z, x, max;
  value = noBufferOverflowReading(buffer, 100);
  secondString = (char *) malloc((sizeof(char) * strlen(value)) + 1);
  max = strlen(value);
  for(z = 0, x = max-1; z < max; z++, x--)
    secondString[z] = value[x];
  if(!strcmp(value, secondString))
    printf("Capicua!\n");
  else
    printf("Nao Capicua!\n");
  printf("Prima qualquer tecla para terminar....");
  getch();
  return 0;
  }

char *noBufferOverflowReading(char *buffer, int count)
  {
  /*Codigo criada ha' alguns anos atrás! Alteracoes minimas.
  Notar que nao e' tido em conta a ocorrencia de sinais, logo 
  este codigo nao devera' ser usado em ambientes unix sem as 
  devidas correccoes!*/
  
  char *result = buffer, *np;
  if ((buffer == NULL) || (count < 1))
    result = NULL;
  else
    if (count == 1)
      *result = '\0';
    else 
      if ((result = fgets(buffer, count, stdin)) != NULL)
        if (np = strchr(buffer, '\n'))
          *np = '\0';
  return result;
  }

Único problema, se introduzirem "olo" o programa indicará uma capicua, mas não creio que será um problema :cheesygrin:.

Segue código fonte... http://www.student.estg.ipleiria.pt/~ei10635/downloads/just4fun/capicua.c

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aqui fica uma versão do capicuas.

Espero que o MAiDEN_DuDE não se importe de estar a postar aqui.

Se alguém souber uma solução não se acanhe. :shame:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e o programa só detecta capicuas até 4 dígitos, eu pus 123321 e ele disse k não era...:cheesygrin:

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e o programa só detecta capicuas até 4 dígitos, eu pus 123321 e ele disse k não era...:cheesygrin:

Cumps

Detecta até 5 , o jogo aqui no fórum é só até 4 !  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Detecta até 5 , o jogo aqui no fórum é só até 4 ! :P

Não é até 4 mas sim apartir de 4

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é até 4 mas sim apartir de 4

:-[ Eu sei, exprimi-me mal.

E dá até 5 mas mais de 4 são raras.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:-[ Eu sei, exprimi-me mal.

E dá até 5 mas mais de 4 são raras.

Eheh na boa :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aqui está um excerto dum programa meu antigo, que calcula se qualquer número de qualquer tamanho (va va nao exageremos) é capicua, a função recebe valores em formato texto para permitir uma maior extensão (e principalmente porque o programa original era direccionado para valores binários).

function palindromic(str: string): boolean;
var
tamanho: byte;
auxchar: char;
palok: boolean;
map: array[1..maxmap] of char;
map2: array[1..maxmap] of char;
begin
for cont1:=1 to last do map[cont1]:='%';
palok:=true;  

Cortei esta parte para poupar espaço, devolvia o tamanho da string, deve haver uma funçao imbutida para fazer o mesmo, esta é outra coisa que não sabia fazer quando este programa foi feito lol

if tamanho>1 then begin  
assign(ficheiro,'temp');
reset(ficheiro);
for cont1:=1 to trunc(tamanho/2) do
read(ficheiro,map[cont1]);
if tamanho mod 2<>0 then read(ficheiro,auxchar);
for cont1:=1 to trunc(tamanho/2) do begin
read(ficheiro,map2[cont1]);
if map[trunc(tamanho/2)+1-cont1]<>map2[cont1] then palok:=false;
end;
close(ficheiro);        
end;
palindromic:=palok;
last:=tamanho+1;
end;

Como se pode ver conhecendo Pascal, o código perde tempo ao retirar chars do meio da string, porque quando este programa foi feito não sabia outra maneira  :confused: não pensem menos de mim por isso :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora