Ir ao conteúdo

Posts recomendados

Postado

tenho que fazer um algoritmo que leia um número inteiro qualquer e verifique se ele é quadrangular(quadrado perfeito). Se for, mostrar os próximos 10 quadrangulares depois dele. Se não for, informar.

#include <stdio.h>

#include <stdlib.h>

#include <iostream>



int main() {

using namespace std;

int valor, soma=0, fator, i;

int cont;



cout << ("Informe um numero: ");

cin >> valor;



for(i=1; soma < valor; i+=2)

soma += i;

(fator = ((i+1) / 2) - 1);

cont++;

if ((fator*fator) == valor)

cout << (" eh quadrangular\n");

else cout << ("nao eh quadrangular") << endl;

}

meu problema esta no laco de repetição, já tentei de tudo e não consigo fazer com que  repita os 10 números subsequentes, peço auxilio pra qualquer um que possa ajudar

 

 

 

 

 

Postado

Bom, existe um erro evidente aqui

 

2 horas atrás, diogoBRRN disse:

for(i=1; soma < valor; i+=2) soma += i;

 

Você provavelmente não gostaria de incrementar apenas a soma mas incluir as demais linhas no loop. Então,

 

for(i = 1; i <= valor; ++i)
{
	// todo o bloco deve ir entre { }
}

 

Mas especificamente sobre o algoritmo, eu acho que você está fazendo da maneira mais complicada (quiçá correta). O valor de valor é quadrado se valor == i*i, então basta algo como

 

for(i = 1; i <= valor; ++i)
{
	if (valor == i*i)
	{
		// valor é o quadrado do i: printar o resultado, os proximos 10 e terminar
	}
}

 

E caso seja quadrado, incrementar um novo loop de valor em diante e fazer o mesmo teste pra cada novo elemento (serão necessários dois loops portanto).

Postado

como ficaria então?  assim? 

#include <stdio.h>

#include <stdlib.h>

#include <iostream>



int main() {

using namespace std;

int valor, soma=0, fator, i;

int cont;

cout << ("Informe um numero: ");

cin >> valor;

for(i = 0; soma <= valor; ++i)

{

  if (valor == i*i)

cont=0;

  {

while(cont<12){



cout<< valor;

cont++;

  }

}

}

}

não deu certo, apos eu digitar o numero não aconteceu nada.

Citação

V!OLADOR

 

Postado

@diogoBRRN  Para mostrar os 10 próximos você pode incrementar o fator em outro loop e imprimir os quadrados,

 

#include <iostream>
using namespace std;

int main(){
    int fator, i, soma = 0, valor;

    cout << "Informe um numero: ";
    cin >> valor;

    for(i = 1; soma < valor; i+=2){
        soma += i;
    }
    fator = ((i + 1) / 2) - 1;
    
    if((fator * fator) == valor){
        cout << "Quadrado perfeito" << endl;

        for(i = 0; i < 10; i++){
            fator++;
            cout << fator * fator << endl;
        }
    }else{
        cout << "Nao e quadrado perfeito" << endl;
    }
    return 0;
}

 

Postado
1 hora atrás, diogoBRRN disse:

como ficaria então?

 

Bom, a @Midori já resolveu perfeitamente. No caso da minha versão, eu faria algo similar a ela, ou seja criar uma função que teste se um dado valor é quadrado ou não primeiro:

 

bool quadrado_perfeito(const int valor)
{
	for(int i = 1; i <= valor; ++i)
	{
		if (valor == i*i) return true;
	}
  
	return false;
}

 

Até tomei a liberdade de roubar a interface da Midori. Dai basta usar essa função pra testar o valor dado pelo usuário e, caso seja um quadrado perfeito, você faz um novo loop testando os próximos 10 depois dele (vou usar n como um contador no exemplo abaixo, e j pro candidato a quadrado perfeito), algo como,

 

int j = valor + 1, n = 0;

while (n < 10)
{
	// testa se j seria um quadrado perfeito usando a função, e se for incrementa o contador até chegar em 10: ++n
	++j;
}

 

Você sabe criar e usar funções?

 

ps.: eu não escrevo o exemplo completo porque acredito que seja importante que o faça por conta própria, pro aprendizado. 

Postado
1 minuto atrás, Midori disse:

@V!OLADOR  Eu tinha sugerido com função, mas lembrei da variável fator que pode ser usada com incremento para mostrar os quadrados dos próximos números.

 

Sim, já eu estou assumindo que ele venha a resolver com um simples loop, sem fatores nem somatórios. Deixo a decisão da forma mais conveniente pra ele. :D 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!