Ir ao conteúdo
  • Cadastre-se

Ajuda trabalho FACULDADE em C


gvictor00

Posts recomendados

Ae galera, tenho que fazer essa questão, mas não to conseguindo, alguem poderia me ajudar ?

3 – Seu amigo João gosta de saber a distância exata à que ele se encontra da casa dele. Você resolveu ajudá-lo nessa tarefa, desenvolvendo um programa que faça exatamente isso. Seu programa exibirá o seguinte menu:

1 – Cadastrar Localidade

2 – Calcular Distância Direta

3 – Alterar Endereço de João

4 – Calcular Distancia Indireta

5 – Remover Localidade

6 - Sair

Cada localidade possui um nome (string com no Maximo 30 caracteres) e coordenadas (x,y,z). A primeira localidade a ser cadastrada será o endereço de João e terá como coordenadas (0,0,0). Duas localidades não podem ter o mesmo nome.

Para calcular a distancia de algum lugar até a casa do seu amigo, primeiro uma lista com todas as localidades cadastradas deve ser mostrada. Pelo nome, João escolherá o local desejado. Será então exibida a distancia entre esses dois lugares.

Pode acontecer de João resolver se mudar. Quando isso ocorrer deverá ser pedido novas coordenadas para a casa de João, esse ponto agora será a origem do sistema e as coordenadas de todas as outras localidades devem ser recalculadas em função dele. A distancia agora será medida em relação a esse novo (0,0,0).

Todas as localidades cadastradas podem ser removidas, menos a casa de João. Para que uma localidade seja removida deverá ser exibida uma lista com todas as localidades disponíveis e João selecionará a que ele deseja remover pelo nome.

A opção de calcular distancia direta (distancia entre a posição em que João se encontra até a casa dele) e de remover localidade só devem ficar disponíveis quando existirem no mínimo duas localidades cadastradas, caso estas opções sejam selecionadas e as condições não forem satisfeitas, uma mensagem de erro deve ser exibida.

As vezes João não deseja ir direto para casa, nessa situação (calcular distancia indireta) peça para João selecionar o local onde ele deseja ir primeiro e calcule a distancia do percurso (onde ele está – lugar onde irá – casa). Essa opção só ficará disponível quando três ou mais localidades estiverem cadastradas.

Quando João selecionar ‘Sair’, uma lista com todas as localidades cadastradas devem ser mostradas.

Link para o comentário
Compartilhar em outros sites

então, vou tentar ajudar...

No caso aconselho a voce, separar cada modulo de seu programa em funcoes exemplo: void funcao_cadastro ();

E para cada valor a ser recebido o interessante seria fazer estruturas (struct) para facilitar e diminuir seu codigo;

A vantangem de se trabalhar com funcoes e struct's é:

funcao: alem de liberar a memoria após seu uso, ajuda muito eliminando redundancias em seu codigo;

de struct não sei o que falar...rsrs

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
/******************************************************
Defini??o da estrutura de dados e das vari?veis globais
*******************************************************/


//********************************************
struct Detran{
char infracao [500];
char nome[30];
float pontos[1];
};

struct Detran;

FILE *ARQALU;
int i, nr_matric;
char resposta tecla;
//char SISTEMA[34] = "PROGRAMA DE CADASTRO UNIVERSIT?RIO";
/******************************************************/
/******************************************************
FUN??ES DEFINIDAS PELO USU?RIO COM A FINALIDADE DE
SIMPLIFICAR O USO DE ALGUMAS INSTRU??ES DA LINGUAGEM
*******************************************************/
void mostra_dados(){
system("CLS");
system("CLS");
printf("\n\t\tSistema de Controle de Multas\n");
printf("\n\t\tinfracao do Condutor:\t\t %s", Detran.infracao);
printf("\n\t\tNome do Condutor:\t\t%s", Detran.nome);
}
}
/******************************************************
Rotina de pesquisa, comum as rotinas de controle do programa
*******************************************************/
int pesquisa(int numero){
int achou=0;
rewind(ARQALU);
while(!feof(ARQALU) && achou!=1){
fread(&Condutor, sizeof( struct Detran),1,ARQALU);
if(numero== Detran.infracao)
achou=1;
}
return (achou);
}

/******************************************************
Rotina de controle do programa principal
*******************************************************/
void cadastra(){
system("CLS");
printf("\n\t\tSistema de Controle de Multas\n");
printf("\n\t\tDigite os dados abaixo:");
// line();
do{
printf("\n\t\tDigite [0] para encerrar o modulo de cadastro");
printf("\n\t\tDigite o numero da Infracao");
scanf("%d", &nr_Infra);
fflush(stdin);
if(nr_infra!=0){
if(pesquisa(nr_infra)==1){
mostra_dados();
printf("\n\t\tEste registro ja existe");
printf("\n\t\tPressione algo para continuar");
tecla= getche();
}
else{
// localiza posi??o para gravar registro
fseek(ARQALU,(long)sizeof(struct Detran),2);
//grava arquivo
printf("\n\t\tNome ---->");
gets(Detran.nome);
for(i=0;i<4;i++){
printf("\n\t\tNota %d ---->",(i+1));
scanf("%f",&Detran.pontos[i]);
}
Aluno.ra = nr_infra;
fwrite(&Detran, sizeof( struct Detran),1,ARQALU);
system("CLS");
printf("\n\t\tSistema de Controle de Multas\n");
printf("\n\t\tDigite algo para continuar");
tecla= getche();
}

}
}
while(nr_matric !=0);
}
//Consulta dos dados
void consultar(){
system("CLS");
printf("\n\t\tSistema de Controle de Multas\n");
printf("\n\t\tModulo de consulta");
printf("\n\t\tDigite o numero de Infracao");
do{
printf("\n\t\tDigite [0] para encerrar o modulo de consulta");
scanf("%d", &nr_infra);
fflush(stdin);
if(nr_infra !=0){
if(pesquisa(nr_infra)==1){
mostra_dados();
printf("\n\t\tDigite algo para continuar");
tecla= getche();
}
else{
system("CLS");
printf("\n\t\tEste registro nao esta cadastrado");
printf("\n\t\tDigite algo para continuar");
tecla= getche();
}
}

}
while(nr_matric !=0);
}



/***********************************************************
PROGRAMA PRINCIPAL COM O CONTROLE DE ABERTURA OU CRIA??O DO
ARQUIVO DE DADOS, E APRESENTA??O DE MENU PRINCIPAL
*******************************************************/

main(){
/*VERIFICA EXIST?NCIA DE ARQUIVO, SE N?O EXISTE, CRIA-SE UM*/
char opcao;
if((ARQALU = fopen("CADASTRO.txt","rb+"))==NULL)
{
ARQALU=fopen("CADASTRO.txt","wb+");
fwrite(&Detran, sizeof(struct Detran), 1,ARQALU);
}
do
{
// line();
system("CLS");
printf("\n\t\tSistema de Controle de Multas\n");
printf("\n\t\tMenu de opções\n");
// line();
printf("\n\t\tCadastrar ................: [1]");
printf("\n\t\tConsultar ................: [2]");
printf("\n\t\tFinalizar ................: [3]");
printf("\n\t\tEntre com a opcao desejada: ");
scanf("%c", &opcao);
fflush(stdin);
switch(opcao)
{
case '1': cadastra(); break;
case '2': consultar(); break;
}
}while(opcao!='3');

fclose(ARQALU);
printf("\n");
system("PAUSE");

} // fim do main()
[/spoiler]

 

Alguem pode me ajudar preciso entregar na segunda as 08:00 dia 28/11/10

Link para o comentário
Compartilhar em outros sites

para o problema das casas eu tava pensando em usar alocação dinamica, mas se for só para um numero limitado da pra editar

meu codigo fica algo assim:


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

typedef struct city{
char nome[20];
float x,y,z;
struct city *prox;
}cidade;

void cadastrar(cidade **inicio,float x,float y,float z,char *nome){
cidade *novo;
novo=(cidade*)malloc(sizeof(cidade));
novo->prox=*inicio;
*inicio=novo;
novo->x=x;
novo->y=y;
novo->z=z;
strcpy(novo->nome,nome);
}

void remove_cidade(char *nome, cidade **inicio){
cidade *aux,*eliminado;

if(*inicio!=NULL)
if(strcmp((*inicio)->nome, nome)){
for(aux=*inicio , eliminado=(*inicio)->prox;
eliminado!= NULL && strcmp(eliminado->nome,nome);
aux=aux->prox)
{
eliminado=aux->prox;
}
if(eliminado!=NULL)
aux->prox=eliminado->prox;

free(eliminado);
}
else{
eliminado=*inicio;
*inicio=eliminado->prox;
free(eliminado);
}

}

void nova_origem(cidade *inicio,float x,float y,float z){
cidade *aux;

for(aux=inicio->prox;aux!=NULL;aux=aux->prox){
aux->x=aux->x-x;
aux->y=aux->y-y;
aux->z=aux->z-z;
}
}

float distancia(cidade c1, cidade c2){
float dist;

dist=(c1.x-c2.x)*(c1.x-c2.x);
dist+=(c1.y-c2.y)*(c1.y-c2.y);
dist+=(c1.z-c2.z)*(c1.z-c2.z);
dist=pow(dist,0.5);
return dist;
}

void exibe(cidade *inicio){
cidade *aux;

for(aux=inicio;aux!=NULL;aux=aux->prox)
printf("%s (%g,%g,%g)\n",aux->nome,aux->x,aux->y,aux->z);
}

int main(){
cidade *inicio=NULL;
cadastrar(&inicio,0,0,0,"origem");
cadastrar(&(inicio->prox),1,2,3,"casa de pedro");
cadastrar(&(inicio->prox),1,1,1,"casa de luiz");
cadastrar(&(inicio->prox),1,5,4,"casa de zeca");
exibe(inicio);
printf("\n\n %f\n", distancia(*inicio,*(inicio->prox)));

system("pause");
return 0;
}

mas ainda falta fazer o menu, criar umas outras fuções, mais a ideia central ta ai

espero q ajude :)

Link para o comentário
Compartilhar em outros sites

jefterror, qual o enuciado do seu problema? ajudaria muito saber o que você pretende fazer... pelo prog q você postou você quer fazer algo tipo um lista de infrações, mas seu codigo ta cheio de variaveis não declaradas... reparei também q você usou variaveis globais... eu num sou muito experiente em programação mas nos progs q eu vi ate hoje as variaveis só sao declaradas dentro de uma função...

pra gente te ajudar você precisa nos ajudar, põe a pergunta direitinho e o que é pra usar (alocação dinamica, arquivo, struct, ...) q eu te ajudo a fazer um prog em C q roda.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!