Ir ao conteúdo
  • Cadastre-se

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


abcabc
Ir à solução Resolvido por abcabc,

Posts recomendados

  • Solução

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
Link para o comentário
Compartilhar em outros sites

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!