Buscar

ATV 03 - GRA1033 TÉCNICA DE PROGRAMAÇÃO

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 
 
 
 FADERGS – FACULDADE DE DESENVOLVIMENTO DO RIO GRANDE DO SUL 
 
 ENGENHARIA DE CONTROLE E AUTOMAÇÃO 
 
 TÉCNICA DE PROGRAMAÇÃO 
 
 
 
 
 
LUIZ PAULO DE F. FERNANDES 
 
 
 
 
 
ATIVIDADE UNIDADE 3 
GRA1033 TÉCNICA DE PROGRAMAÇÃO 
 
 
 
 
 
 
 
 
 
 
PARANAVAÍ – PR 
11 de maio de 2021 
2 
 
ATIVIDADE 03 
Em algumas situações, para a implementação de um sistema computacional, não se 
conhece, previamente, qual o tamanho da massa de dados que será efetivamente 
manipulada. Em tais casos, pode ser usado o recurso de alocação dinâmica de 
memória. Com tal recurso, uma região de memória poderá ser alocada, sob demanda 
de modo a tornar o programa mais flexível em relação à quantidade de itens a serem 
manipulados. Essa flexibilidade torna o programa escalável. 
 
O objetivo desta questão é exercitar a manipulação de ponteiros em um cenário onde 
se exige a alocação dinâmica de memória através da implementação de um programa 
computacional. 
 
Antes de falarmos das funcionalidades do programa a ser implementado, convém 
mencionar que, em algumas situações o espaço previamente alocado deve ser 
redimensionado devido, à por exemplo, um aumento ou diminuição inesperada na 
quantidade de itens manipulados. Para realizar o redimensionamento, pode-se, na 
linguagem C, utilizar a função “realloc()”. Essa função segue a seguinte sintaxe: 
void *realloc (void *ptr_original, size_t); 
 
A função “realloc()” retorna a posição do bloco realocado com a nova dimensão. No 
trecho de código acima, o parâmetro “ptr_original” representa o bloco previamente 
alocado com a função “malloc()” ou “calloc()”. Detalhes destas funções, inclusive a 
“realloc()” poderão ser obtidas acessando-se (GARCIA, 2016) através do 
link: <https://www.embarcados.com.br/ponteiro-em-c-alocacao-dinamica/>. 
Para a realização desta atividade, suponha a necessidade de cadastrar clientes de 
uma loja. Por ser uma loja nova e com produtos inovadores, pouco se sabe do 
mercado a ser atingido, sendo assim, não se sabe a quantidade de clientes poderão 
ser cadastrados. Estima-se, inicialmente, em 10 clientes. Cada cliente terá os 
seguintes campos: 
 
- nome (suponha um nome com, no máximo, 30 caracteres) 
- ano de nascimento 
3 
 
- montante de gastos realizados no mês (quanto o clinte pagou em suas compras 
dentro do mês corrente) 
Para tanto, o sistema deverá oferecer as seguintes funcionalidades: 
- incluir um novo cliente 
- remover cliente - atualizar o montante de compras do cliente realizadas no mês 
corrente 
- zerar todos os montantes de compras por ocasião da virada de mês 
- listar o cliente melhor comprador 
- exibir um montante de compras de um cliente específico. 
O programa deverá, ainda, prever a situação que a quantidade de clientes a ser 
cadastrados supere a previsão inicial. Neste caso, quando o espaço de memória 
destinado a receber dados dos clientes estiver cheia, deve-se ampliar esse espaço – 
sempre em blocos de 10. 
 
Poste o código, implementado em C, em seu portfólio. 
Bons Estudos! 
Referência DEITEL, P. J.; DEITEL, H. C: Como Programar. 6. Ed. São Paulo: Pearson 
Prentice Hall, 2011. [Recurso eletrônico, Biblioteca Virtual Universitária] 
GARCIA, F. D. Ponteiro em C: Alocação Dinâmica de Memória. Publicado em 
08/01/2016. Disponível em <https://www.embarcados.com.br/ponteiro-em-c-
alocacao-dinamica/>. Acesso em 05/07/2019. 
 
 
 
 
 
 
 
 
 
 
 
4 
 
Lógia desenvolvida pelo sotfware DEV – C++ 
 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <ctype.h> 
struct pedido 
{ 
 char namePed[200]; 
 char CPF[200]; 
 char numPed[200]; 
 char qtdPed[200]; 
 char valorped[200]; 
 int cod; 
}logP[200]; 
struct cadastro 
{ 
 char CPF[200]; 
 char telefone[200]; 
 char nome[200]; 
 char endereco[200]; 
 char data[200]; 
 int vazio,cod; 
 struct pedido clientePed; 
 
}log[200]; 
//DECLARACAO DAS FUNÇÕES A SEREM USADAS 
int verifica_pos(void); 
int verifica_cod( int cod ); 
int opt; 
void cadastroP(int cod,int pos); 
5 
 
void list(); 
void cadastroPedido(); 
void consultaCod (void); 
void excluirCliente (void); 
int main(void){ //INICIO DO MAIN 
 
 int i,Opcao,OpcaoCliente,posicao,retorno; 
 int codaux; 
 do 
 { 
 printf("1 - Cadastrar Novo Cliente\n"); 
 printf("2 - Cliente\n"); 
 printf("3 - Alterar Cliente\n"); 
 printf("4 - Excluir Cliente\n"); 
 printf("5 - Cadastrar Pedido\n"); 
 printf("6 - Alterar Pedido\n"); 
 printf("7 - Excluir Pedido\n"); 
 printf("8 - Sair\n"); 
 printf(" Selecione uma opcao por favor: "); 
 scanf("%d", &Opcao); 
 getchar(); 
 if (Opcao == 1) 
 { 
 printf("Voce selecionou a opcao 1 - Cadastrar Novo Cliente\n"); 
 posicao=verifica_pos(); 
 
 if ( posicao != -1 ) 
 { 
 
 printf("\nEntre com um codigo de 1 a 200 para seu cadastro: \n"); 
 scanf("%d",&codaux);fflush(stdin); 
6 
 
 
 retorno = verifica_cod( codaux ); 
 
 if ( retorno == 1 ) 
 cadastroP( codaux, posicao ); 
 else{ 
 printf("\nCodigo ja existente ou invalido pressione enter para voltar ao menu 
principal\n"); 
 getchar(); 
 system("cls"); 
 main(); 
 } 
 } 
 else 
 printf("\nNao e possivel realizar mais cadastros!\n"); 
 break; 
 
 } 
 else if (Opcao == 2) 
 { 
 system("cls"); 
 do{ 
 printf("Voce selecionou a opcao 2 - Clientes\n\n"); 
 printf("1 - Pesquisar cliente por codigo\n"); 
 printf("2 - Listar todos os clientes\n"); 
 printf("3 - Voltar ao menu principal\n"); 
 printf("Selecione uma opcao por favor: "); 
 scanf("%d", &OpcaoCliente); 
 getchar(); 
 if(OpcaoCliente == 1){ 
 consultaCod(); 
7 
 
 } 
 else if(OpcaoCliente == 2){ 
 list(); 
 } 
 else if(OpcaoCliente == 3){ 
 printf("Voce selecionou voltar ao menu principal, pressione ENTER para continuar"); 
 getchar(); 
 system("cls"); 
 } 
 else 
 printf("Opcao Invalida\n\n"); 
 }while(OpcaoCliente =!3 || OpcaoCliente > 3 || OpcaoCliente < 0 || OpcaoCliente == 0); 
 } 
 else if (Opcao == 3) 
 { 
 printf("Voce selecionou a opcao 3 - Alterar Cliente\n"); 
 } 
 else if (Opcao == 4) 
 { 
 printf("Voce selecionou a opcao 4 - Excluir Cliente\n"); 
 excluirCliente(); 
 } 
 else if (Opcao == 5) 
 { 
 printf("Voce selecionou a opcao 5 - Cadastrar Pedido\n"); 
 cadastroPedido(); 
 } 
 else if (Opcao == 6) 
 { 
 printf("Voce selecionou a opcao 6 - Alterar Pedido\n"); 
 } 
8 
 
 else if (Opcao == 7) 
 { 
 printf("Voce selecionou a opcao 7 - Excluir Pedido\n"); 
 } 
 else if (Opcao == 8) 
 { 
 printf("Voce selecionou a opcao 8 - Sair\n"); 
 } 
 else{ 
 printf("Opcao invalida, favor pressione enter para voltar ao menu principal"); 
 getchar(); 
 system("cls"); 
 } 
 } while (Opcao != 8 || Opcao < 8); 
 
} // FIM DO MAIN 
void list(){ // Lista os usuarios cadastrados. 
 int i,j; 
 for(i=0;i<200;i++){ 
 if(log[i].cod!=NULL){printf("\nCodigo: %d \nNome: %s\nCPF: %s\nEndereco: %s\nTelefone: %s\n\n", 
log[i].cod,log[i].nome,log[i].CPF,log[i].endereco,log[i].telefone); 
 } 
} 
 printf("Pressione enter para volta ao menu principal"); 
 getchar(); 
 system("cls"); 
 
} //FIM DO LIST 
void cadastroP(int cod, int pos){ //Cadastro das pessoas 
 int i; 
9 
 
 do{ 
 pos = verifica_pos(); 
 log[pos].cod = cod; 
 printf("\nDigite seu nome: "); 
 gets(log[pos].nome); 
 printf("\nDigite seu CPF: "); 
 gets(log[pos].CPF); 
 printf("\nDigite seu Endereco: "); 
 gets(log[pos].endereco); 
 printf("\nDigite seu Telefone: "); 
 gets(log[pos].telefone); 
 log[pos].vazio = 1; 
 //printf("\nDigite enter para efetuar novo cadastro ou qualquer outra tecla para volar ao menu 
principal"); 
 //scanf("%d", &opt); 
 opt ==1; 
 getchar(); 
 }while(opt==1); 
 system("cls"); 
 main(); 
 
} // FIM DO CADASTRO DE PESSOAS 
int verifica_pos( void ) //VERIFICADOR DA POSIÇÃO 
{ 
 int cont = 0; 
 
 while ( cont <= 200 ) 
 { 
 
 if ( log[cont].vazio == 0 ) 
 return(cont); 
10 
 
 cont++; 
 } 
 return(-1); 
 
} // FIM DO VERIFICADOR 
int verifica_cod( int cod ) // VERIFICADOR DE CÓDIGO 
{ 
 int cont = 0; 
 while ( cont <= 200 ) 
 { 
 if ( log[cont].cod == cod ) 
 return(0); 
 cont++; 
 } 
 return(1); 
 
} // FIM DO VERIFICADOR 
void cadastroPedido(){ //Cadastro dos pedidos 
 system("cls"); 
 int i; 
 int Option; 
 int OpcaoPedido; 
 char nomeCad[200]; 
 printf("\nDigite seu nome como esta no cadastro: "); 
 gets(nomeCad); 
 for(i=0;i<200;i++){ 
 if(strcmp(log[i].nome, nomeCad)==0){ 
 do{ 
 printf("\nEscolha o seu pedido: "); //PEDIDOS MERAMENTE ILUSTRATIVOS, COLOQUEI SÓ 
PARA VER SE CONSEGUIA ANEXAR A 1 CADATRO MAS NÃO CONSEGUI. 
 printf("\n1- Sanduba esperto"); 
11 
 
 printf("\n2- Ceasar Salad"); 
 printf("\n3- Raviolli\n:"); 
 scanf("%d", &OpcaoPedido); 
 if(OpcaoPedido == 1){ 
 strcpy(log[i].clientePed.namePed, "Sanduba esperto"); 
 printf("\nVoce escolheu %s, seu pedido foi adicionado ao seu 
cadastro.",log[i].clientePed.namePed); 
 printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: "); 
 scanf("%d", &Option); 
 i++; 
 } 
 else if(OpcaoPedido == 2){ 
 strcpy(log[i].clientePed.namePed, "Ceasar Salad"); 
 printf("\nVoce escolheu %s, seu pedido foi adicionado ao seu cadastro.", 
log[i].clientePed.namePed); 
 printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: "); 
 scanf("%d", &Option); 
 i++; 
 } 
 else if(OpcaoPedido == 3){ 
 strcpy(log[i].clientePed.namePed, "Raviolli"); 
 printf("\nVoce escolheu %s, seu pedido foi adicionado ao seu cadastro.", 
log[i].clientePed.namePed); 
 printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: "); 
 scanf("%d", &Option); 
 i++; 
 } 
 }while(Option == 1); 
 system("cls"); 
} 
} 
} // FIM DO CADASTRO DE PEDIDOS. 
12 
 
void consultaCod (void) // CONSULTAR 1 CADASTRADO QUALQUER VIA CÓDIGO DADO POR 
USUÁRIO. 
{ 
 int cont = 0, cod; 
 printf("\nEntre com o codigo\n"); 
 scanf("%d",&cod); 
 fflush(stdin); 
 system("cls"); 
 
 while ( cont <= 200 ) 
 { 
 
 if (log[cont].cod==cod) 
 { 
 if (log[cont].vazio==1) 
 { 
 
 printf("\nCodigo: %d \nNome: %s\nCPF: %s\nEndereco: %s\nTelefone: %s\n\n", 
log[cont].cod,log[cont].nome,log[cont].CPF,log[cont].endereco,log[cont].telefone); 
 
 
 system ("pause"); 
 
 system("cls"); 
 
 break; 
 
 } 
 } 
 
 cont++; 
13 
 
 
 if ( cont > 200 ){ 
 printf("\nCodigo nao encontrado, pressione enter para volar ao menu principal\n"); 
 getchar(); 
 system("cls"); 
 } 
 
 } 
} // FIM DA FUNÇÃO CONSULTAR 
void excluirCliente(void) // EXCLUI CLIENTE 
{ 
 int cod, cont = 0; 
 char resp; 
 printf("\nEntre com o codigo do registro que deseja excluir: \n"); 
 scanf("%d", &cod ); 
 
 while ( cont <= 200 ) 
 { 
 
 if ( log[cont].cod == cod ) 
 { 
 
 if (log[cont].vazio == 1 ) 
 { 
 printf("\nCodigo: %d \nNome: %s\nCPF: %s\nEndereco: %s\nTelefone: %s\n\n", 
log[cont].cod,log[cont].nome,log[cont].CPF,log[cont].endereco,log[cont].telefone); 
 getchar(); 
 printf("\nDeseja realmente exlucir? s/n: "); 
 scanf("%s",&resp); 
 
 if ( ( resp == 'S' ) || ( resp == 's' ) ) 
14 
 
 { 
 log[cont].vazio=0; 
 log[cont].cod = NULL; 
 printf("\nExclusao feita com sucesso\n"); 
 break; 
 } 
 else 
 { 
 if ( ( resp == 'N' ) || ( resp == 'n' ) ) 
 { 
 printf("Exclusao cancelada!\n"); 
 break; 
 } 
 } 
 
 } 
 
 } 
 
 cont++; 
 
 if ( cont > 200 ) 
 printf("\nCodigo nao encontrado\n"); 
 
 } 
 
 system("pause"); 
 system("cls"); 
 
}

Continue navegando