Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
martinhocosta

comparar

Recommended Posts

martinhocosta

boas!!

um utilizador introduz um valor de 8 dígitos!

e depois já a guardado num vector 4 valores aleatórios !

e eu gostava de saber qual e o valor dos aleatórios que esta mais próximo???

por exemplo:

utilizador:12345678

dados no vector:10000000

                              12349877

e depois tem de aparecer: 12349877

Share this post


Link to post
Share on other sites
Antimatéria

? Tens que te explicar melhor :x


#include <stdio.h>main(){  printf("Hello World");}

Share this post


Link to post
Share on other sites
JoaoNascimento

? Tens que te explicar melhor :x

É assim o utilizador insere: 12

E tem de ver qual é a posição do valor do vector mais proximo...

O codigo é o seguinte:

int loc(int *a, int num)//Função recebe o vector com as cordenadas das estações de serviço
{
int x1, x2[N], y1, y2[N], c,  i, pos=0; //variaveis do tipo inteiro
float  min,d[N];//variaveis do tipo string

for (i=0;i<N;i++)
{
x1=*a/10000;//calcula o x
y1=*a%10000;//calcula o y
}

printf("Insira a coordenada da sua posicao actual: ");
scanf("%d",&c);//le a coordenada da posição actual

if (c>99999999 || c<0)//VALIDA SE A COORDENADA TEM MAIS DE 8 DIGITOS
{
	while (c>99999999 || c<0)//REPETE O SEGUINTE BLOCO DE CODIGO (LN 79-81)
	{
		printf("\nA coordenada inserida e invalida:\n ");
		printf("Volte a inserir a coordenada correspondente:\n ");
		scanf("%d",&c);
	}
}
for (i=0;i<N;i++) //Repete
{
	x2[i]=c/10000;//Armazena a longitude da coordenada inserida
	y2[i]=c%10000;//Armazena a latitude da coordenada inserida
	d[i]=sqrt(pow((x2[i]-x1),2)+(pow((y2[i]-y1),2)));//Armazena no vector o calculo da distancia
}
min=d[0];//O minimo é a primeira posição do vector
for (i=0; i<N; i++)//Repete
{
	if (d[i]<min)//Se a posição i for menor que o minimo:
	{
		min=d[i];//O minimo é a posição i do vector d(istancias)
		pos=i;//variavel auxiliar pos serve para armazenar o numero de i para saber a posição do vector coordenadas
	}
	else 
	{
		min=min;
	}
}
	printf("A estacao mais proxima é: %d\n",a[pos]);//Mostra no ecrá o registo do vector onde a posição é a minima

}

Share this post


Link to post
Share on other sites
Localhost

mribeiro: O que tens de fazer basicamente é checar a cada posição do array a diferença entre o valor que o utilizador digita e o valor que estás a percorrer no momento.

Por exemplo, se o utilizador digitar 13 e tu tiveres um array com as posições {7,9,10} o que fazes é a cada posição do array calcular a diferença, por exemplo: 7 - 13 = -6; 9 - 13 = -4; 10 - 13 = -3; agora checas o modulo de cada um e vês qual é o menor valor, o que for menor é o valor que se encontra mais próximo do valor introduzido pelo utilizador.

Resumindo:

→ Percorrer array (geralmente com um loop);

→ Dentro do loop calcular a diferença entre a posição e o valor introduzido;

→ Calcular o módulo do valor resultante;

→ Verificar se é menor que a variável que contém o valor que contém o menor até ao momento;

→ Se for afectas essa variável, se não for, continuas, aka não fazer nada;


here since 2009

Share this post


Link to post
Share on other sites
mribeiro

mribeiro: O que tens de fazer basicamente é checar a cada posição do array a diferença entre o valor que o utilizador digita e o valor que estás a percorrer no momento.

Por exemplo, se o utilizador digitar 13 e tu tiveres um array com as posições {7,9,10} o que fazes é a cada posição do array calcular a diferença, por exemplo: 7 - 13 = -6; 9 - 13 = -4; 10 - 13 = -3; agora checas o modulo de cada um e vês qual é o menor valor, o que for menor é o valor que se encontra mais próximo do valor introduzido pelo utilizador.

Resumindo:

→ Percorrer array (geralmente com um loop);

→ Dentro do loop calcular a diferença entre a posição e o valor introduzido;

→ Calcular o módulo do valor resultante;

→ Verificar se é menor que a variável que contém o valor que contém o menor até ao momento;

→ Se for afectas essa variável, se não for, continuas, aka não fazer nada;

Haa.. ja entendi :thumbsup:

Sim, subscrevo a tua solução :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.