Ir ao conteúdo

C Repetição de raios das circunferências em C


Ir à solução Resolvido por abcabc,

Posts recomendados

  • Solução
Postado

Faça um programa para resolver o seguinte problema: 

 

São dadas as coordenadas reais x e y de um ponto, um número natural n, e as coordenadas reais de n pontos (1 < n < 100). Deseja-se calcular e imprimir sem repetição os raios das circunferências centradas no ponto (x,y) que passam por pelo menos um dos n pontos dados.

 

Exemplo :

(x,y) = (1.0, 1.0) ; n = 5 

Pontos : (-1.0, 1.2) , (1.5, 2.0) , (0.0, -2.0) , (0.0, 0.5) , (4.0, 2.0)

Nesse caso há três circunferências de raios: 1.12, 2.01 e 3.162.

 

Dois pontos estão na mesma circunferência se estão à mesma distância do centro.

 

 

#include<stdio.h>
#include<math.h>

int main(void)

{
    float xp,yp;
    printf("Coordenada x:");
    scanf("%f",&xp);

    printf("Coordenada y:");
    scanf("%f",&yp);

    int n;
    printf("Valor de n:");
    scanf("%d",&n);

    if(n<1 || n>100)
    {
        printf("n deve ser menor do que 100 e maior do que 1.");
    }

    float x[n],y[n];
    int i;

    for(i=0;i<n;++i)
    {
        printf("Valor de x%d:",i+1);
        scanf("%f",&x[i]);
        printf("Valor de y%d:",i+1);
        scanf("%f",&y[i]);

    }

    float raio[n];

    for(i=0;i<n;++i)
    {
       float dx=pow(xp-x[i],2);
       float dy=pow(yp-y[i],2);
       float R=sqrt(dx+dy);
       raio[i]=R;

       int j, repetido=0;
       for(j=0;j<i;++j)
       {
           if(R==raio[j])
           {
               repetido=1;
           }
       }

       if(repetido==0)
       {
           printf("%f\n",R);
       }
    }

    return 0;
}

 

  • Curtir 1
  • Obrigado 1
Postado

Eu alocaria memória só para armazenar o raio, nos inputs das coordenadas deixaria na mesma linha e a distância pode ser calculada sem a função pow,

 

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

int main(){
    float px, py, cx, cy;
    float dist, *raio;
    int n, i = 0, r = 0;
    
    printf("Coordenadas (X,Y) e N: ");
    scanf("%f,%f %d",&px,&py,&n);

    if(n < 1 || n > 100){
        printf("N deve ser menor que 100 e maior que 1.\n");
        return 1;
    }
    raio = (float *)malloc(sizeof(float) * n);

    while(i < n){
        int repete = 0, j = 0;
        printf("Coordenadas (X,Y): ");
        scanf("%f,%f",&cx,&cy);

        dist = sqrt(
            (px - cx) * (px - cx)+
            (py - cy) * (py - cy)
        );
        while(j < i){
            if(raio[j] == dist){
                repete = 1;
                break;
            }
            j++;
        }
        if(!repete){raio[r++] = dist;}
        i++;
    }    
    i = 0;
    while(i < r){
        printf("%.2f\n",raio[i++]);
    }
    free(raio);   
    return 0;
}

 

  • Curtir 1

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