Ir ao conteúdo
  • Cadastre-se

C Funçao com ponteiros, vetores, laços e condicionais. FAETERJ. 2017. FAC. AV2.


jcgs98
Ir à solução Resolvido por Flávio Pedroza,

Posts recomendados

Bom dia.

 

Minha dúvida está na função.

 

Teria outra maneira de verificar os números digitados sem ter que repetir o "while"?

 

#include <stdio.h>

int encontraDoisVals (int limInf, int limSup, int *dig1, int *dig2){

	int n1,n2;
	
	printf("\nDigite um valor inteiro.......................: ");
	scanf("%d",&n1);
	
	while (n1>limInf&&n1<limSup){
	
	printf("\nDigite um valor inteiro.......................: ");
	scanf("%d",&n1);
	}
	
	*dig1=n1;
	
	printf("\nDigite um valor inteiro.......................: ");
	scanf("%d",&n2);
	
	while (n2>limInf&&n2<limSup){
	
	printf("\nDigite um valor inteiro.......................: ");
	scanf("%d",&n2);
	}
	
	*dig2=n2;
}


int main(void){
	
	int limI, limS, dig1, dig2;
	int soma;
	int i;
	
	printf("\nDigite o limite inferior......................: ");
	scanf("%d",&limI);
	
	printf("\nDigite o limite superior......................: ");
	scanf("%d",&limS);
	
encontraDoisVals (limI, limS, &dig1, &dig2);

	soma=dig1+dig2;
	
	printf("\nSoma dos valores digitado fora do intervalo...: %d",soma);
		
		
return 0;
}

 

2017_q1.PNG

adicionado 5 minutos depois

Função é "void" não 'int".

Link para o comentário
Compartilhar em outros sites

Eu faria assim:

void encontraDoisVals (int limInf, int limSup, int *dig1, int *dig2)
{
 int n[2];
 for (int i=0; i < 2; i++)
 {
  do
  {
   printf("\nDigite um valor inteiro %d.......................: ", i+1);
   scanf("%d",&n[i]);
  } while ((n[i] >= limInf) && (n[i] <= limSup));
 }
 *dig1=n[0];
 *dig2=n[1];
}

 

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

  • Solução
void encontraDoisVals (int limInf, int limSup, int *dig1, int *dig2)
{
 int n[2];
 for (int i=0; i < 2; i++)
 {
  while (1)
  {
   printf("\nDigite um valor inteiro %d.......................: ", i+1);
   scanf("%d",&n[i]);
   if (n[i] < limInf) && (n[i] > limSup) break;
  } 
 }
 *dig1=n[0];
 *dig2=n[1];
}

 

adicionado 2 minutos depois

Alternativamente, se você puder ler os dois número de uma só vez:

 

void encontraDoisVals (int limInf, int limSup, int *dig1, int *dig2)
{
 do
 {
   printf("\nDigite dois valores inteiros.......................: ");
   scanf("%d %d",dig1, dig2);
  } while (((*dig1 >= limInf) && (*dig1 <= limSup)) || ((*dig2 >= limInf) && (*dig2 <= limSup)));
 
}

 

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

Perfeito!

Esse eu acho que peguei o jeito:

 

#include <stdio.h>


float encontraMenor(int numEmp, float *vetorSal){
	
	int menorSal=vetorSal[0],i;
	
	for (i=0;i<numEmp;i++){
		
	if (menorSal>vetorSal[i]) menorSal=vetorSal[i];
	}
	
	return menorSal;
	
}


float exibeDifMenorRetornaSoma (float vMenorSal, int numEmp, int *vetorInsc, float *vetorSal){
	
	int i;
	float somaDif;
		
	for (i=0;i<numEmp;i++){
		
	printf("\n\nFuncionario %d - Diferenca do salario ..: R$ %.2f",vetorInsc[i],vetorSal[i]-vMenorSal);
		
		somaDif=somaDif+(vetorSal[i]-vMenorSal);								
	}
	
	printf("\n\nSoma das diferencas .......................: R$ %.2f",somaDif);
}


int main (void){

int vInsc[6]={1010,1020,1030,1040,1050,1060};

float vSal[6]={1000.00,4020.00,900.00,10400.00,20000.00,1000.00};

float menorSal;

menorSal=encontraMenor(6,vSal);

printf("\n\nO menor salario e ........................: R$ %.2f",menorSal);

exibeDifMenorRetornaSoma (menorSal, 6, vInsc, vSal);

return 0;
}

 

2017_q2.PNG

Link para o comentário
Compartilhar em outros sites

Isso. Dei mole.

adicionado 2 minutos depois

@Flávio Pedroza

3 horas atrás, Flávio Pedroza disse:

void encontraDoisVals (int limInf, int limSup, int *dig1, int *dig2)
{
 int n[2];
 for (int i=0; i < 2; i++)
 {
  while (1)
  {
   printf("\nDigite um valor inteiro %d.......................: ", i+1);
   scanf("%d",&n[i]);
   if (n[i] < limInf) && (n[i] > limSup) break;
  } 
 }
 *dig1=n[0];
 *dig2=n[1];
}

 

adicionado 2 minutos depois

Alternativamente, se você puder ler os dois número de uma só vez:

 


void encontraDoisVals (int limInf, int limSup, int *dig1, int *dig2)
{
 do
 {
   printf("\nDigite dois valores inteiros.......................: ");
   scanf("%d %d",dig1, dig2);
  } while (((*dig1 >= limInf) && (*dig1 <= limSup)) || ((*dig2 >= limInf) && (*dig2 <= limSup)));
 
}

Acho que o correto é esse mesmo que você fez agora. Foi isso que a questão pediu.

 

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

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!