Ir ao conteúdo

Ajuda Capícua e Quadrado perfeito


johnlenonx

Posts recomendados

Postado

Fazer um algoritmo que determine e escreva todos os numeros inteiros menores que

10.000 que sao quadrados perfeitos e capicuas ao mesmo tempo.

Olá amigos estou tendo um pouco de dificuldade para concluir esse algoritmo, eu acho todos os numeros palindromos menores que 10000 mas nao estou conseguindo terminar a parte do quadrado perfeito.

Por que eu estou usando um char, aí quando eu vou tirar a raiz do numero diz que nao pode por causa que é incompativel. Bom eu tava usando esse código pra converter char para int, mas o resultado nao é o esperado.

aux = atoi (numero1); // Converte uma variavel char para int, a função atoi

raiz=sqrt(aux);

printf ("%d",aux);

if (pow(raiz,2)==aux)

{

printf("\n");

printf ("O numero %d. e quadrado perfeito",aux,raiz);

}

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <math.h>

#include <windows.h>

#include <stdlib.h>

main()

{

int i,raiz,aux;

raiz=0;

char numero1[1000],numero2[1000];

for (i=0;i<10000;i++)

{

sprintf(numero1,"%d",i);// Gravar os numeros gerados no meu numero1

strcpy(numero2,numero1); //Copia o valor do numero1 para o numero2

strrev(numero1); // Inverter a string

if (!strcmp(numero1,numero2))// Compara as strings

{

printf ("\n");

printf ("%s",numero1);

//printf ("\tPalindromo");

}

}

getch();

}

Essa função deu certo pra converter um char para um int!


printf(" %d",atoi(numero1));

mas quando vou tirar a raiz quadrada da erro.
raiz=sqrt(numero1);

cannot convert char* to doubke for argument 1 to double sqrt(double)

Postado

O que o Petrolífero estava falando é essa linha aqui:

for (i=0;i<10000;i++) //ESTÁ 10000, suponho que era pra ser 1000 apenas...

O seguinte trecho funciona:


#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include <windows.h>
#include <stdlib.h>

using namespace std;

int main()
{
double aux;
double raiz;
char numero1 [] = "16";
aux = atof ( numero1 );
raiz = sqrt(aux);
cout << "\n" << raiz << "\n";
system("PAUSE");
return 0;
}

Postado

Sim entendi, mas essa linha aqui, ela tem que ir até 10000 mesmo, pois eu tenho que encontrar todos os numeros que possui a mesma caracteristica, e o fato deu ter criado o vetor de 1000, é por que eu sei que existe poucos numeros que possui essa caracteristica; for (i=0;i<10000;i++)

Edit: Ghost killer, eu fiz como você disse, mas o meu código na hora de compilar nao saiu o esperado!!!

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include <windows.h>
#include <stdlib.h>
main()
{
int i;
double aux;
double raiz;
char numero1[1000],numero2[1000];


for (i=0;i<10000;i++)
{
sprintf(numero1,"%d",i);
strcpy(numero2,numero1);
strrev(numero1);

if (!strcmp(numero1,numero2))
{
printf ("\n");
printf ("%s",numero1);
//printf ("\tPalindromo");
}

}

printf ("\n\n");
numero1 [1000];
aux = atof (numero1);
raiz = sqrt(aux);
printf ("%d ",raiz);



getch();
}

Postado

Olha só, esse código tem algumas coisas erradas e fora que existem métodos melhores pra fazer algumas das coisas certas.

Não é necessário 2 vetores pra verificar se um numero é palindromo (muito menos pra verificar se ele é um quadrado perfeito). Se voce parar pra pensar, se o primeiro numero de um vetor for igual ao ultimo, o segundo igual ao penultimo, o terceiro igual ao antepenultimo e assim até o meio do vetor, então esse numero é um palindromo (ou seja, só fazer um loop, e verificar se vetor == vetor [N-i], sendo N o tamanho do vetor).

Quanto a erros:

printf ("%d ",raiz); //voce está falando que raiz é decimal, mas não, raiz é numero quebrado, ou float.. Coloque um %f no lugar de %d

O correto:

printf ("%f",raiz);

Fora que isso deveria ficar dentro do loop pra cada iteração voce verificar se o numero é palindromo E se é um quadrado perfeito e só então exibir.

Postado

Eu fiz de outro jeito diferente, mais só que nao ta pegando os numeros que tenham 2 digitos. Compile aí pessoal!

#include <iostream>

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <math.h>

#include <windows.h>

#include <stdlib.h>

main(){

// declaracao das variaveis

int N,raiz=0; // um numero qualquer entre 0 e 10.000

int A,B,C,D,E; // auxiliares

// definicao das condicoes inciais

N = 0; // valor inicial do intervalo [0,10.000]

while ( N <= 9999 )

{

A = ( N / 1000 );

B = ( N - A * 1000 ) / 100;

C = ( N - A*1000 - B*100 ) / 10;

D = N - A*1000 - B*100 - C*10;

if ( A == D & B == C )

{

printf("\n");

printf ("%d", N );

}

N++;

}

getch();

}

Postado

Isso só vai funcionar para 4 digitos... Ao invés de simplificar voce complicou. Porque não continuou com a ideia de usar string? voce só teria que comparar as posições das strings como eu sugeri e aí utilizaria menos memória.

Se ainda assim quiser separar numeros de quaisquer tamanhos por digitos, de uma olhada no código que fiz nesse tópico: http://forum.clubedohardware.com.br/problema-vetores-dev/930825?t=930825

Ele separa unidades, dezenas (se o numero tiver), centena (se tiver) e assim por diante, até 8 casas decimais. Como voce só precisa até 10000, funciona fácil.

Postado

, Seu código é massa, e funciona corretamente.

mas como você mesmo disse, desta outra forma que eu fiz, ficou foi mais complicado.

eu queria fazer esse exercicio com string, mas nao estou conseguindo finalizar.

Eu acho todos os números palindromos menores que 10000 fácilmente, mas na hora de fazer a parte do quadrado perfeito não tá dando certo, por que os numeros estão armazenado numa string, e como eu tinho que tirar a raiz do numero não da certo, usei o seu códigp pra converter pra um float, mas não sai o resultado esperado.

estou meio confuso, olha aí tentei fazer usando strings.

mas ainda nao tá dando certo, compilar compila sem problemas, mas nao sair nao tenho resultados satisfatório.

=/

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include <windows.h>
#include <stdlib.h>
main()
{
int i ,raiz=0,aux=0;


char numero1[1000],numero2[1000];

for (i=0;i<10000;i++)
{
sprintf(numero1,"%d",i);// Gravar os numeros gerados no meu numero1

strcpy(numero2,numero1); //Copia o valor do numero1 para o numero2
strrev(numero1); // Inverter a string

if (!strcmp(numero1,numero2)) // Compara as strings
{
printf ("\n");
//printf ("%s",numero1); // mostrar todos os numeros palindromos
}

aux = atoi (numero1); // convertie o meu numero1 para um int e armazenei no aux
raiz = sqrt(aux); // tira a raiz quadrada
if ((!strcmp(numero1,numero2)) && (pow(raiz,2)==aux))// Se o numero for capicua e quadrado perfeito ele exibe.
{
printf ("%d",aux);
}
}

getch();
}

Aê galera acho que terminei, alguém poderia verificar se estar correto?

:D:D:D:D:D:D:D:D:D:D

ENUNCIADO DA QUESTÃO.

Fazer um algoritmo que determine e escreva todos os numeros inteiros menores que10.000 que são quadrados perfeitos e capicuas ao mesmo tempo.

Ps. Para quem não sabe o que é capícua, são aqueles números que você pode le da esquerda para direita, como da direita para esquerda ex.: 9119, 484.

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>
main()
{
int i ,raiz,aux,opções;
char numero1[1000],numero2[1000];
printf("\n\t\tMENU DE opções\n\n");
printf ("\nPressione 1 para todos os numeros palindromos ");
printf ("\nPressione 2 para Quadrado perfeito e Palindromo\n\n");
scanf("%d",&opções);
system("cls");

switch(opções)
{

case 1: printf ("\n\t\t\tTODOS OS PALINDROMOS MENORES QUE 10 MIL. ");
for (i=0;i<10000;i++)
{
sprintf(numero1,"%d",i);// Gravar os numeros gerados no meu numero1
strcpy(numero2,numero1); //Copia o valor do numero1 para o numero2
strrev(numero1); // Inverter a string

if (!strcmp(numero1,numero2))// Compara as strings
{
printf ("\n");
printf ("%s",numero1);
}
}
break;

case 2: printf ("\n\tPALINDROMOS E QUADRADOS PERFEITOS MENORES QUE 10 MIL\n\n ");

for (i=0;i<10000;i++)
{
sprintf(numero1,"%d",i);// Gravar os numeros gerados no meu numero1
strcpy(numero2,numero1); //Copia o valor do numero1 para o numero2
strrev(numero1); // Inverter a string
if (!strcmp(numero1,numero2))// Compara as strings
{
// printf ("\n");
// printf ("%s",numero1);
}

aux = atoi (numero1);
raiz= sqrt(aux); //sqrt----->raiz quadrada
if (pow(raiz,2)==aux)//pow ----> potenciacao
{
// printf("\nO numero digitado %d e um quadrado perfeito sua raiz quadrada e: %d",aux,raiz);
}

if ((!strcmp(numero1,numero2)) && (pow(raiz,2)==aux))
{
printf ("\nPalindromos e Quadrado perfeito ");
printf ("%d ",aux);
}
}
break;
}
printf ("\n\n\n\t\tSISTEMA DESENVOLVIDO POR JOHN LENON");
printf ("\n\n\n\t..................Final do Sistema...............");
getch();
}

Postado

ENUNCIADO

Fazer um algoritmo que determine e escreva todos os numeros inteiros menores que

10.000 que são quadrados perfeitos e capicuas ao mesmo tempo.

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i, raiz, aux;
raiz = 0;
char number1 [1000], number2 [1000];

for (i = 0; i <10000; i++)
{
sprintf(number1, "%d", i); // Write the numbers generated in my number1

strcpy(number2, number1); // Copies the value of number1 to number2
strrev(number1); // Reverse the string


if (!strcmp(number1, number2)) // Compare strings
{
aux = atoi (number1); // Converts a char to int variable, the function atoi
raiz = sqrt (aux);
if (pow(raiz, 2) == aux)
{
printf ("%d. Pallindrome and Perfect square\n", aux);
}
}

}
getch();

}

O resultado era pra ser esse!

0. Palindromo e quadrado perfeito

1. Palindromo e quadrado perfeito

4. Palindromo e quadrado perfeito

9.Palindromo e quadrado perfeito

121. Palindromo e quadrado perfeito

484. Palindromo e quadrado perfeito

676. Palindromo e quadrado perfeito

mas o meu só aparece esse!

0. Palindromo e quadrado perfeito

1. Palindromo e quadrado perfeito

4. Palindromo e quadrado perfeito

9.Palindromo e quadrado perfeito

Postado

Não mudei quase nada nesse código ai...

mas aqui funcionou perfeitamente e saiu esses resultados:

0

1

4

9

121

484

676

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int i, raiz, aux;
raiz = 0;
char number1[1000], number2[1000];

for (i = 0; i <10000; i++)
{
sprintf(number1, "%d", i); // Write the numbers generated in my number1
strcpy(number2, number1); // Copies the value of number1 to number2
strrev(number1); // Reverse the string
if (!strcmp(number1, number2)) // Compare strings
{
aux = atoi (number1); // Converts a char to int variable, the function atoi
raiz = sqrt((double)aux); // coisas do meu compilador, pode tirar o (double) se quiser
if (pow((double)raiz, 2) == aux)
{
printf ("%d. Pallindrome and Perfect square\n", aux);
}
}
}
getch();
return 0;
}

Postado

Aqui só aparece esse!

qual compilador você usa?

0. Palindromo e quadrado perfeito

1. Palindromo e quadrado perfeito

4. Palindromo e quadrado perfeito

9.Palindromo e quadrado perfeito

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...