Ir ao conteúdo

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


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

Posts recomendados

Postado

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

Postado

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
  • Solução
Postado
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
Postado

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

Postado

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.

 

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