Ir ao conteúdo
  • Cadastre-se

C++ Problema no else e como inserir um for (loop de 10 vezes)


Davi Lobo

Posts recomendados

Questão : sendo a questão: receba 3 notas, exibir a media das 2 notas mais altas, media das 3, a nota mais alta e nota baixa.

*Utilizando funções

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int maior(int v1, int v2, int v3)
{

if((v1>v2) && (v1>v3))

return (v1);

else 

if ((v2>v1) && (v2>v3))

return(v2);

else 

return(v3);
}
int menor(int v1, int v2, int v3)
{

 if ((v1<v2) && (v1<v3))
 
 return (v1);
 
 else 
  if ((v2<v3) && (v2<v1))
 
 return (v2);
 
 else {
 
 ((v3<v2) && (v3<v1));
 
 
 return (v3);
}
  
}
 

int main ()
{
	int v1, v2, v3 ;
	float media, mediaalta;
	printf("informe três valores: / digite 2 para finalizar");
	scanf("%d", &v1);
	scanf("%d", &v2);
	scanf("%d", &v3);
	media = ((v1 + v2 + v3)/3);
	
	if { 
	((v1<v2 ) && (v1<v3));
	mediaalta = (v2 + v3)/2;
	printf("a media das altas é : %2f ", mediaalta);
}
	else {
	
	if ((v2<v3)&&(v2<v1))
 	mediaalta = (v3 + v1)/2;
 	printf("a media das altas é : %2f ", mediaalta);
 }
	 else 
	 mediaalta = (v2 + v1)/2;
 
	 printf("a media das altas é : %2f ", mediaalta);
 	printf("media das notas é: %2f ", media );
	printf("a menor nota é: %d ", menor(v1, v2, v3));
	printf("a maior nota é : %d ", maior(v1, v2, v3));
	system("pause");
	return 0;
	 
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Boa tarde Davi,

 

Se possível, cole o código utilizando a a tag code do aqui do próprio fórum, ajuda bastante na visualização. Como a visualização não está muito boa, acredito que você esteja cometendo alguns errinhos nas estruturas condicionais do seu código, onde você está relacionando dos else's para um único if. Neste trecho, por exemplo: 

 

  if {                                         
    ((v1<v2 ) && (v1<v3));
    mediaalta = (v2 + v3)/2;
    printf("a media das altas é : %2f ", mediaalta);
}
    else {
    
    if ((v2<v3)&&(v2<v1))
     mediaalta = (v3 + v1)/2;
     printf("a media das altas é : %2f ", mediaalta);
 }
     else 
     mediaalta = (v2 + v1)/2;

Note que você está atribuindo dois else's para um único if, o que não faz sentido. O correto, neste caso, seria criar uma estrutura que o computador verificasse duas opções, caso ambas não fossem verdadeiras, ele executaria a terceira. Você quase fez isso, porém executou um pouco diferente do que deveria ser. Em estruturas condicionais, temos a ordem cronológica: if (primeiro a ser verificado), else if (caso o if não seja verdadeiro), else (caso o if e nem o else if sejam verdadeiros). Perceba que uma estrutura condicional, pode ter a quantidade necessária de else if's, porém só pode ter um else. 

 

A estrutura de um else if, seria mais ou menos como essa aqui: 

 

if(comparacao)
{
  // Código aqui
}

else if(segunda comparacao)
{
	// Código aqui
}

else if(terceira comparacao)
{
	// Código aqui
}

else
{
	// Código aqui
}

Perceba que realizei duas comparações antes de realizar o else. A estrutura básica condicional segue essa linha de raciocínio. É só adaptar no seu código agora! Em relação aos laços de repetição, é necessário realizar uma busca mais afunda para utiliza-los, porém de grosso modo, laços de repetição, no seu caso o for, segue uma estrutura onde executará um bloco de código, até que uma condição seja atingida, também no seu caso, se uma variável auxiliar chegar ao total de 10, o que significaria que o código foi executado 10 vezes.

 

A estrutura de um laço de repetição, basicamente é esta:

 

for(int i=0;i<10;i++)
{
 	// Bloco de código a manter-se em loop                     
}

Onde temos que i é uma variável auxiliar, que será utilizada para contabilizar a quantidade de ciclos do seu laço de repetição. Trazendo para palavras, a estrutura da declaração de um for é:

 

(variável que definirá o início da consulta;até quando o laço será executado;o que será executado quando cada ciclo do laço for executado)

 

Não tem segredo!

 

Qualquer dúvida é só postar aí, abraços!

 

E não esquece de editar o tópico adicionando a tag code!

 

Bons estudos!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, XenoStory disse:

Boa tarde Davi,

 

Se possível, cole o código utilizando a a tag code do aqui do próprio fórum, ajuda bastante na visualização. Como a visualização não está muito boa, acredito que você esteja cometendo alguns errinhos nas estruturas condicionais do seu código, onde você está relacionando dos else's para um único if. Neste trecho, por exemplo: 

 


  if {                                         
    ((v1<v2 ) && (v1<v3));
    mediaalta = (v2 + v3)/2;
    printf("a media das altas é : %2f ", mediaalta);
}
    else {
    
    if ((v2<v3)&&(v2<v1))
     mediaalta = (v3 + v1)/2;
     printf("a media das altas é : %2f ", mediaalta);
 }
     else 
     mediaalta = (v2 + v1)/2;

Note que você está atribuindo dois else's para um único if, o que não faz sentido. O correto, neste caso, seria criar uma estrutura que o computador verificasse duas opções, caso ambas não fossem verdadeiras, ele executaria a terceira. Você quase fez isso, porém executou um pouco diferente do que deveria ser. Em estruturas condicionais, temos a ordem cronológica: if (primeiro a ser verificado), else if (caso o if não seja verdadeiro), else (caso o if e nem o else if sejam verdadeiros). Perceba que uma estrutura condicional, pode ter a quantidade necessária de else if's, porém só pode ter um else. 

 

A estrutura de um else if, seria mais ou menos como essa aqui: 

 


if(comparacao)
{
  // Código aqui
}

else if(segunda comparacao)
{
	// Código aqui
}

else if(terceira comparacao)
{
	// Código aqui
}

else
{
	// Código aqui
}

Perceba que realizei duas comparações antes de realizar o else. A estrutura básica condicional segue essa linha de raciocínio. É só adaptar no seu código agora! Em relação aos laços de repetição, é necessário realizar uma busca mais afunda para utiliza-los, porém de grosso modo, laços de repetição, no seu caso o for, segue uma estrutura onde executará um bloco de código, até que uma condição seja atingida, também no seu caso, se uma variável auxiliar chegar ao total de 10, o que significaria que o código foi executado 10 vezes.

 

A estrutura de um laço de repetição, basicamente é esta:

 


for(int i=0;i<10;i++)
{
 	// Bloco de código a manter-se em loop                     
}

Onde temos que i é uma variável auxiliar, que será utilizada para contabilizar a quantidade de ciclos do seu laço de repetição. Trazendo para palavras, a estrutura da declaração de um for é:

 

(variável que definirá o início da consulta;até quando o laço será executado;o que será executado quando cada ciclo do laço for executado)

 

Não tem segredo!

 

Qualquer dúvida é só postar aí, abraços!

 

E não esquece de editar o tópico adicionando a tag code!

 

Bons estudos!

 

 

 

Obrigado pela ajuda (else), mas tipo o loop esta ocorrendo no, main em " printf("informe tres valores: ");

" ou seja de forma diferente do planejado, que era o PROGRAMA repetir...

 

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int maior(int v1, int v2, int v3)
{

if((v1>v2) && (v1>v3))

return (v1);

else 

if ((v2>v1) && (v2>v3))

return(v2);

else 

return(v3);
}
int menor(int v1, int v2, int v3)
{

 if ((v1<v2) && (v1<v3))
 
 return (v1);
 
 else 
  if ((v2<v3) && (v2<v1))
 
 return (v2);
 
 else {
 
 ((v3<v2) && (v3<v1));
 
 
 return (v3);
}
  
}
 
int main ()
{
	int v1, v2, v3; 
	int i;
	float media, mediaalta;
	
	for (i=0 ; i<10 ; i++)

	
	printf("informe tres valores: ");

	scanf("%d", &v1);
	scanf("%d", &v2);
	scanf("%d", &v3);
	media = ((v1 + v2 + v3)/3);

	if ((v1<v2 ) && (v1<v3))
	{
	
	mediaalta = (v2 + v3)/2;
	printf("a media das altas é : %2f ", mediaalta);
}
	else if ((v2<v3)&&(v2<v1))
	{
	
 	mediaalta = (v3 + v1)/2;
 	printf("a media das altas é : %2f ", mediaalta);
 }
	 else 
	 {
	  mediaalta = (v2 + v1)/2;
  	printf("a media das altas é : %2f ", mediaalta);
}
 	printf("media das notas é: %2f ", media );
	printf("a menor nota é: %d ", menor(v1, v2, v3));
	printf("a maior nota é : %d ", maior(v1, v2, v3));
	system("pause");
	return 0;

}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

13 minutos atrás, Mauro Britivaldo disse:

Se entendi bem;

Para o programa que se encontra dentro do main repetir n-vezes: Coloque o seu conteúdo dentro de uma função e declare essa dentro do main n-vezes por meio da declaração for.

 


int main (void) {
  int i;
  for (i = 0; 10 > i; i++) programa();
}

 

int main (void) {
  int i;
  for (i = 0; 10 > i; i++) programa(int main);
}

int main ()
{
	int v1, v2, v3; 

	float media, mediaalta;
	
	

	
	printf("informe tres valores: ");

Assim ?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Cara se tem que indentar seu código, tem vários erros de logica, o for esta vazio, colocou " ; " no if, isso é erro que apesar de ser um código totalmente valido para o C++ o if fica sem função, não importa o teste.

 

Abre os { }, faz os recuos direitinho ou use uma ide, notepad++ pelo menos para facilitar tua vida.

int i;
for(i=1;i<=10;i++) {           
    printf("%i. Devo indentar meu codigo. \n",i);
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

:oops:Eita "danou-se"

 Devo ter me expressado muito mal, você entendeu tudo atravessadinho.

 

Hipoteticamente um exercício tem seguinte enunciado:

 

// Desenvolva um software que determina de 3 números inteiros qual é o 
//maior e exibe no prompt seu valor. Esse software para os testes após 5 instâncias. 

A resposta:

#include<stdio.h>

// função retorna o maior valor entres os números e escreve na tela.
int maior(void);

int main(void) {

    int repetir; // Vai repertir 5 vezes
    for (repetir = 0; 5 > repetir; repetir++) maior();

    return 0;
    }


// Programa do exércio hipotético fica aqui fora da função main.
// Pode ter qualquer nome diferente de main.
int maior (void) {


    int a, b, c, m;
    scanf (" %d%d%d", &a,&b,&c);

    if (a < b) {m = a; a = b; b = m;}
    if (a < c) {m = a; a = c; m = c;}

    printf("O maior eh: %d\n", a);
    return a; // a sempre é maior ou um dentre eles.
    }

 Ficando assim:

 

void programa (void)
int main (void) {
  int i;
  for (i = 0; 10 > i; i++) programa();
  
  return 0;
}

void programa (void)
{
	int v1, v2, v3; 

	float media, mediaalta;
	
	

	
	printf("informe tres valores: ");

:wiggle:

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

56 minutos atrás, Mauro Britivaldo disse:

:oops:Eita "danou-se"

 Devo ter me expressado muito mal, você entendeu tudo atravessadinho.

 

Hipoteticamente um exercício tem seguinte enunciado:

 


// Desenvolva um software que determina de 3 números inteiros qual é o 
//maior e exibe no prompt seu valor. Esse software para os testes após 5 instâncias. 

A resposta:


#include<stdio.h>

// função retorna o maior valor entres os números e escreve na tela.
int maior(void);

int main(void) {

    int repetir; // Vai repertir 5 vezes
    for (repetir = 0; 5 > repetir; repetir++) maior();

    return 0;
    }


// Programa do exércio hipotético fica aqui fora da função main.
// Pode ter qualquer nome diferente de main.
int maior (void) {


    int a, b, c, m;
    scanf (" %d%d%d", &a,&b,&c);

    if (a < b) {m = a; a = b; b = m;}
    if (a < c) {m = a; a = c; m = c;}

    printf("O maior eh: %d\n", a);
    return a; // a sempre é maior ou um dentre eles.
    }

 Ficando assim:

 


void programa (void)
int main (void) {
  int i;
  for (i = 0; 10 > i; i++) programa();
  
  return 0;
}

void programa (void)
{
	int v1, v2, v3; 

	float media, mediaalta;
	
	

	
	printf("informe tres valores: ");

:wiggle:

Muito obrigado, valeu mesmo, funcionou direitinho.

* Faltou o ";" no"void programa (void)".

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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