Ir ao conteúdo

Posts recomendados

Postado

Boa noite, estou a ter a cadeira de programação na faculdade e estou com algumas dificuldades em fazer um programa com estruturas. Podem dar uma ajuda?

O enunciado segue em pdf no anexo (É o programa 1 do pdf).

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>


typedef struct // Definição da Estrutura "Endereço"
{
	char rua[50];
	int numero;
	char cidade[30];
	char codigo_postal[8];
	
}tipo_endereco;


typedef struct // Definição da Estrutura "Pessoal"
{
	char nome[50];
	int telefone;
	tipo_endereco endereco;
}ficha_pessoal; 


int main()

{



	system("pause");
}

 

PC_Prat_Estruturas.pdf

Postado

Ahh, show então o código fica assim:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>


typedef struct // Definição da Estrutura "Endereço"
{
	char rua[50];
	int numero;
	char cidade[30];
	char codigo_postal[8];
	
}tipo_endereco;


typedef struct // Definição da Estrutura "Pessoal"
{
	char nome[50];
	int telefone;
	tipo_endereco endereco;
}ficha_pessoal; 


int main()

{
	ficha_pessoal funcionario;
	
	printf("Digite o nome do funcionario: ");
	scanf("%s", funcionario.nome);
	
	printf("Digite a rua do funionario:");
	scanf("%s", funcionario.endereco.rua);
	
	printf("Nome do funcionario: %s", funcionario.nome);
	printf("Rua do funcionario: %s", funcionario.endereco.rua);


	system("pause");
}

 Lembrando que só fiz um exemplo, você tem que terminar de fazer mas segue o mesmo padrão!

 

Você declara a estrutura dentro da main dando um nome a ela, lembrando que se for mais de um funcionário você pode colocar [x] e no lugar do "x" escrever a quantidade como um vetor. : )

ai pra utilizar nos printfs, scanfs e até dentro dos fors ou whiles é só usar o nome que você deu e um "." e o que você quiser atribuir (nome,rua,numero) ! Caso for 2 estruturas deve-se colocar o nome dado na main "." o nome dado na estrutura que você declarou a outra "." o nome da outra..

Entendeu?

  • Obrigado 1
Postado

Boa Tarde, depois de conseguir fazer o primeiro programa do pdf estou a tentar fazer o segundo mas não estou a conseguir. Tentei fazer um ciclo for mas não sei se está correto. Alguma ajuda?

/*Repita o programa anterior criando um vector que permita guardar até 20 contactos.
O programa deverá:

o pedir o número de contactos a inserir
o permitir inserir os n contactos
o perguntar qual o número do contacto que pretende visualizar
o mostrar contacto pretendido
o repetir todo o processo se o utilizador assim o desejar*/

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>


typedef struct // Definição da Estrutura "Endereço"
{
	char rua[50];
	char numero[3];
	char cidade[30];
	char codigo_postal[9];

}tipo_endereco;


typedef struct // Definição da Estrutura "Pessoal"
{
	char nome[50];
	int telefone[9];
	tipo_endereco endereco;

}ficha_pessoal;


int main()

{
	ficha_pessoal funcionario[20];
	void funcionarios(ficha_pessoal funcionario[20]);
	funcionarios(0);

	//-------------------------------------------------------------------------------------------------//
	printf("\n--------------------------------------------------------------------------\n");
	printf("\n--------------------------------------------------------------------------\n");
	//-------------------------------------------------------------------------------------------------//

	printf("\n Nome do funcionario: %s", funcionario[20].nome);  // Print das informações inseridas
	printf("\n Telefone do funcionario: %s", funcionario[20].telefone);
	printf("\n Rua do funcionario: %s", funcionario[20].endereco.rua);
	printf("\n Numero do funcionario: %s", funcionario[20].endereco.numero);
	printf("\n Codigo Postal do funcionario: %s", funcionario[20].endereco.codigo_postal);
	printf("\n Cidade do funcionario: %s \n\n", funcionario[20].endereco.cidade);


	system("pause");
}


void funcionarios(ficha_pessoal funcionario[20])
{
	int n;

	printf("\n Quantos Contactos Pretende Inserir? \n");
	scanf("%i", &n);

	for (int i = 0; i < n; i++)
	{
		printf("Digite o Nome do funcionario: ");           // Estrutura Pessoal
		scanf("%s", funcionario[20].nome);                   
		
		printf("Digite o Telefone do funcionario: ");       // Estrutura Pessoal
		scanf("%s", funcionario[20].telefone);
		
		printf("Digite a Rua do funionario: ");             // Estrutura Endereço
		scanf("%s", funcionario[20].endereco.rua);

		printf("Digite o Numero da Rua do funionario: ");   // Estrutura Endereço
		scanf("%s", funcionario[20].endereco.numero);

		printf("Digite o Codigo Postal do funionario: ");   // Estrutura Endereço
		scanf("%s", funcionario[20].endereco.codigo_postal);

		printf("Digite a Cidade do funionario: ");          // Estrutura Endereço
		scanf("%s", funcionario[20].endereco.cidade);
	}
}

 

Postado
/*Repita o programa anterior criando um vector que permita guardar até 20 contactos.
O programa deverá:

o pedir o número de contactos a inserir
o permitir inserir os n contactos
o perguntar qual o número do contacto que pretende visualizar
o mostrar contacto pretendido
o repetir todo o processo se o utilizador assim o desejar*/

 

1 hora atrás, Infante98 disse:

depois de conseguir fazer o primeiro programa do pdf estou a tentar fazer o segundo mas não estou a conseguir. Tentei fazer um ciclo for mas não sei se está correto

 

Não entendi. Primeiro você diz que não conseguiu e depois que não sabe se está correto.

Se você sabe que não conseguiu sabe que não está correto. Você listou 5 itens no início. Seu programa está funcionando para qual deles?

 

Devia postar outro tópico para outro problema, assim é mais fácil de alguém ver e poder ajudar.

E postar um link com um pdf e o número do problema é um pouco chato para alguém que quer ajudar. Precisa clicar num link, baixar um anexo, abrir em outro programa...
 

Compare com isso:
 

trecho.thumb.png.4b41f9d8b697992b4f28b79e638e4010.png



E isso
 

trecho2.png.7e1c9dd1f864206a4d1e022d045b6860.png

 

Pronto. Teria todo o necessário aqui.

Note que o título

Sumário: Representações estruturadas de dados não homogéneos.

 

Não faz sentido. Para uma struct{} tanto faz se os dados são homogêneos ou não. Trata-se apenas da função de agregar dados em um registro.

 

É mesmo essa a grafia aí: homogéneos e não homogêneos?


Sobre seu programa número dois:

 


Você está perguntando ANTES quantos contatos vai processar. Isso não condiz com o enunciado: 
 

1 hora atrás, Infante98 disse:

repetir todo o processo se o utilizador assim o desejar

 

O utilizador pode consultar dois contatos e depois querer ver outro sem saber antes que queria ver 3. Apenas coloque uma opção no menu para terminar as consultas.

 

O número que você pergunta antes é o total de contatos a inserir, Depois de inseridos os N contatos --- até 20 --- você deve usar outro loop para permitir as consultas enquanto o usuário quiser, ou mesmo inserir algum outro contato.

 

Postado

Obrigado pelas dicas, no próximo post vou implementar.

 

Quanto ao programa, o meu objetivo é fazer os cinco pontos propostos:

 

-pedir o número de contactos a inserir;

-permitir inserir os n contactos;

-perguntar qual o número do contacto que pretende visualizar;

-mostrar contacto pretendido;

- repetir todo o processo se o utilizador assim o desejar.

 

Não consigo entender como vou fazer isso tudo.

Postado

Ainda está um pouco longe de funcionar...

 

funcionarios(0);

Que pretende com essa linha?

 

	for (int i = 0; i < n; i++)
	{
		printf("Digite o Nome do funcionario: ");           // Estrutura Pessoal
		scanf("%s", funcionario[20].nome);                   
		
		printf("Digite o Telefone do funcionario: ");       // Estrutura Pessoal
		scanf("%s", funcionario[20].telefone);	
      
      
      ...

E aqui?

 

Você reservou um índice para ler os funcionários, esa variável 'i'. Mas está sempre usando o índice ]20] que sequer existe, já que eles vão de 0 a 19 inclusive.  Era pra usar o indice

 

Acho que não precisa ler todos os 20 sempre ou vai levar uma época pra testar isso. Melhor você permitir que o cara entre com um e pergunte se ele quer ler mais, até 20.

 

Melhor ainda seria você não ler nenhum noo começo. Apenas crie dois constantes e termine o programa.

 

O enunciado é tão ruim que além de ter aquele título sem sentido mostra uma descrição de endereço com 5 campos e a estrutura com 4... Sumiu o bairro.

 

Então você lê até os 20 ou até o usuário dizer que não quer mais entrar com contatos. E aí mostras essas operações para ele e executa até ele dizer que quer terminar....

 

 

 

Postado

Vou te mostrar um programa que endereça essas coisas, usando recortar e colar e seu próprio código.


Só pra te mostrar como declarar e passar parâmetros e tal. É só um exemplo bem primário para tentar ajudar.

 

Mudei um pouco a declaração das estruturas para ficar mais legível. Preste atenção às diferenças.
 

O programa preenche dois registros em main() e passa para uma função mostrar na tela. Depois tem uma outra só pra tratar o conjunto. Não tem nenhum sentido prático. Só pra você entender.

 

Eis o que sai na tela
 

Nome: Primeiro
Telefone +55 (12) 9 1234-5678
Endereco
Rua: Rua um
Numero: 1234
Bairro: Vila 1
Cidade: Cidade 1
CEP: 32000-123

Nome: Segundo
Telefone +56 (34) 9 8765-4321
Endereco
Rua: Rua Dois
Numero: 45
Bairro: Jardim 2
Cidade: Cidade 23
CEP: 12345-678

Nome do primeiro funcionario: Primeiro
CEP do segundo funcionario: 12345-678


E o programa

 

/*Repita o programa anterior criando um vector que permita guardar ate 20 contactos.
O programa devera:

o pedir o numero de contactos a inserir
o permitir inserir os n contactos
o perguntar qual o numero do contacto que pretende visualizar
o mostrar contacto pretendido
o repetir todo o processo se o utilizador assim o desejar*/

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct s_endereco
{
	char rua[50];
	char numero[6];
	char bairro[30];
	char cidade[30];
	char codigo_postal[10];
};
typedef struct s_endereco Endereco;

struct s_pessoal
{
	char nome[50];
	char telefone[25];
	Endereco endereco;
};
typedef struct s_pessoal Pessoal;

void funcionarios(Pessoal[]);
void mostra(Pessoal);

int main()
{
	Pessoal		cadastro[20];
	// primeiro
	strcpy(cadastro[0].nome, "Primeiro");
	strcpy(cadastro[0].telefone, "+55 (12) 9 1234-5678");
	strcpy(cadastro[0].endereco.rua, "Rua um");
	strcpy(cadastro[0].endereco.numero, "1234");
	strcpy(cadastro[0].endereco.bairro, "Vila 1");
	strcpy(cadastro[0].endereco.cidade, "Cidade 1");
	strcpy(cadastro[0].endereco.codigo_postal, "32000-123");

	// segundo
	strcpy(cadastro[1].nome, "Segundo");
	strcpy(cadastro[1].telefone, "+56 (34) 9 8765-4321");
	strcpy(cadastro[1].endereco.rua, "Rua Dois");
	strcpy(cadastro[1].endereco.numero, "45");
	strcpy(cadastro[1].endereco.bairro, "Jardim 2");
	strcpy(cadastro[1].endereco.cidade, "Cidade 23");
	strcpy(cadastro[1].endereco.codigo_postal, "12345-678");

	mostra(cadastro[0]);
	mostra(cadastro[1]);

	funcionarios(cadastro);

	return;
}

void		mostra(Pessoal funcionario)
{
 	printf("\n");
	printf("Nome: %s\n", funcionario.nome);
	printf("Telefone %s\n", funcionario.telefone);

	printf("Endereco\n");
	printf("Rua: %s\n",     funcionario.endereco.rua);
	printf("Numero: %s\n",  funcionario.endereco.numero);
	printf("Bairro: %s\n",  funcionario.endereco.bairro);
	printf("Cidade: %s\n",  funcionario.endereco.cidade);
	printf("CEP: %s\n",     funcionario.endereco.codigo_postal);

	return;
};	// mostra()

void funcionarios(Pessoal f[20])
{
	printf("\n");
	printf("Nome do primeiro funcionario: %s\n", f[0].nome);
	printf(
		"CEP do segundo funcionario: %s\n",
		f[1].endereco.codigo_postal);
	return;
};	// funcionarios()

 

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