Declare 2pontos, leia a posicao (coordenadas x e y) de cada um e calcule a distancia entre eles.Apresente no final a distancia entre os dois pontos.Estruturas - Segunda parteAtribuindoPodemos atribuir duas estruturas que sejam do mesmo tipo. O C ira, neste caso, copiaruma estrutura, campo por campo, na outra. Veja o programa abaixo:struct est1 {int i;float f;};void main(){struct est1 primeira, segunda; /* Declara primeira e segunda como structs do tipoest1 */primeira.i = 10;primeira.f = 3.1415;segunda = primeira; /* A segunda struct e agora igual a primeira */printf(" Os valores armazenasdos na segunda struct sao : %d e %f ", segunda.i ,segunda.f);}Sao declaradas duas estruturas do tipo est1, uma chamada primeira e outra chamadasegunda. Atribuem-se valores aos dois campos da struct primeira. Os valores de primeira saocopiados em segunda apenas com a expressao de atribuicao:102segunda = primeira;Todos os campos de primeira serao copiados na segunda. Note que isto e diferente doque acontecia em vetores, onde, para fazer a copia dos elementos de um vetor em outro,tinhamos que copiar elemento por elemento do vetor. Nas structs e muito mais facil!Porem, devemos tomar cuidado na atribuicao de structs que contenham camposponteiros. Veja abaixo:#include <stdio.h>#include <string.h>#include <stdlib.h>struct tipo_end{char *rua; /* A struct possui um campo que e um ponteiro */int numero;};void main(){struct tipo_end end1, end2;char buffer[50];printf("\nEntre o nome da rua:");gets(buffer); /* Le o nome da rua em uma string de buffer */end1.rua = (char *) malloc((strlen(buffer)+1)*sizeof(char)); /* Aloca a quantidade dememoriasuficiente para armazenar astring */strcpy(end1.rua, buffer); /* Copia a string */printf("\nEntre o numero:");scanf("%d", &end1.numero);end2 = end1; /* ERRADO end2.rua e end1.rua estao apontando para a mesmaregiao de memoria */printf("Depois da atribuicao:\n Endereco em end1 %s %d \n Endereco em end2 %s%d", end1.rua,end1.numero,end2.rua, end2.numero);strcpy(end2.rua, "Rua Mesquita"); /* Uma modificacao na memoriaapontada por end2.rua causara a modificacao doque e apontado por end1.rua, o que,esta errado !!! */end2.numero = 1100; /* Nesta atribuicao nao haproblemas */printf(" \n\nApos modificar o endereco em end2:\n Endereco em end1 %s %d \nEndereco em end2 %s %d", end1.rua, end1.numero, end2.rua, end2.numero);}Neste programa ha um erro grave, pois ao se fazer a atribuicao end2 = end1, o camporua de end2 estara apontando para a mesma posicao de memoria que o campo rua de end1.103Assim, ao se modificar o conteudo apontado por end2.rua estaremos tambem modificando oconteudo apontado por end1.rua !!!Passando para funcoesNo exemplo apresentado no item usando, vimos o seguinte comando:strcpy (ficha.nome,"Luiz Osvaldo Silva");Neste comando um elemento de uma estrutura e passado para uma funcao. Este tipo deoperacao pode ser feita sem maiores consideracoes.Podemos tambem passar para uma funcao uma estrutura inteira. Veja a seguinte funcao:void PreencheFicha (struct ficha_pessoal ficha){...}Como vemos acima e facil passar a estrutura como um todo para a funcao. Devemosobservar que, como em qualquer outra funcao no C, a passagem da estrutura e feita por valor.A estrutura que esta sendo passada, vai ser copiada, campo por campo, em uma variavel localda funcao PreencheFicha. Isto significa que alteracoes na estrutura dentro da funcao nao teraoefeito na variavel fora da funcao. Mais uma vez podemos contornar este pormenor usandoponteiros e passando para a funcao um ponteiro para a estrutura.PonteirosPodemos ter um ponteiro para