Ir ao conteúdo
  • Cadastre-se

Ajuda, struct, unions ?


wesleyWWW
Ir à solução Resolvido por ScreenBlack,

Posts recomendados

obs: Em Linguagem C

Preciso de ajuda, se alguém poder me ajudar eu agradeço.

Primeiro, o que eu preciso fazer é isso:

24q232q.jpg

 

O meu comando atual é esse:
obs: agradeço ao ScreenBlack do forum, que me ajudou no exercício anterior e fiz esse usando a mesma ideia...

#include <stdio.h>#include <stdlib.h>struct multas{    char placa[20];    char data[20];    char lRua[20];    char lBairro[20];    char lCidade[20];        int lNum;    int velVia;    int velVeiculo;           };int main(void){    int opcao = 0;    int qtdCadastrada = 0;    int i = 0;	    struct multas m[10];    while(1)    {        printf("Digite 1 para cadastrar, 2 para ver infrações cadastrados, 3 para pesquisar multas e 4 para sair: ");        scanf(" %d", &opcao);        switch (opcao)        {            case 1:                if ( qtdCadastrada >= 10 )                {                    printf("\n## Limite de cadastros alcançado ##\n\n");                    break;                }                printf("Digite a placa: ");                scanf(" %[^\n]s", m[qtdCadastrada].placa);                printf("Local - Rua: ");                scanf(" %[^\n]s", m[qtdCadastrada].lRua);		printf("Local - Número: ");                scanf(" %d", &m[qtdCadastrada].lNum);		printf("Local - Bairro: ");                scanf(" %[^\n]s", m[qtdCadastrada].lBairro);		printf("Local - Cidade: ");                scanf(" %[^\n]s", m[qtdCadastrada].lCidade); 		printf("Velocidade máxima da via: ");                scanf(" %d", &m[qtdCadastrada].velVia);                printf("Velocidade instantânea do veiculo: ");                scanf(" %d", &m[qtdCadastrada].velVeiculo);		printf("Data: ");                scanf(" %[^\n]s", m[qtdCadastrada].data);                qtdCadastrada++;                 break;            case 2:		                 for ( i = 0; i < qtdCadastrada; i++ )                {	                               printf("placa: %s\n", m[i].placa);                    printf("Local: "); 		          printf("(Rua) - %s", m[i].lRua);			  printf(" (Número) - %d", m[i].lNum);			  printf(" (Bairro) - %s", m[i].lBairro);			  printf(" (Cidade) - %s\n", m[i].lCidade); 		    printf("Velocidade máxima da via: %d\n", m[i].velVia);	            printf("Velocidade instantânea do veiculo: %d\n", m[i].velVeiculo); 		    printf("Data: %s\n\n", m[i].data);		                               		}								                break;	case 3:		//fazer		                break;				            case 4:                return 0;                break;        }    }    return 0;}

 

Resumindo, até agora tem a parte "a" pronta e falta a parte "b"

 

Meus problemas são: 

primeiro: como faço a soma das multas ? eu sei que tem que pegar o valor da velocidade da via e o da velocidade do veículo e fazer os cálculos, mas não sei como exatamente posso fazer isso no comando e mostrar...

segundo: a parte que eu realmente não tenho ideia é a de fazer a pesquisa pela placa ou código, primeiro que comando devo utilizar ? da pra fazer com Unions ? foi o último conteúdo que a professora mostrou pra nos, só que ela explicou correndo no fim da aula e eu não consegui entender muito bem, se a pesquisa é com ele como devo utilizar ele no comando ?

Bom, se alguém poder responder minhas dúvidas ou mostrar como se faz no comando, eu agradeço mesmo.

Link para o comentário
Compartilhar em outros sites

  • Solução

1) A declaração da union segue o mesmo princípio de uma struct, porém, a diferença é que ela compartilha a mesma área de memória entre todos os elementos contidos no "bloco".

    O tamanho dessa área de memória será o do maior elemento contido nela.

    Como a área de memória é compartilhada, logo, o conteúdo de um elemento será sobrescrito e/ou lido pelo do outro.

 

Por exemplo:

union Teste{    int valor; // tipo inteiro contém 32 bits    char letra; // tipo char contém 8 bits};
 

Memória alocada para a union é de 32 bits.

 

Exemplo struct:

struct Teste{    int valor; // tipo inteiro contém 32 bits    char letra; // tipo char contém 8 bits};
 

Memória alocada para a struct é de 40 bits.

 

2) Para mostrar o valor da multa, pode ser feito através de uma função, onde esta receberá os valores de velocidade da via e do veículo. A partir daí você pode decidir se quer que a função retorne o resultado do cálculo ou ela mesma mostre na tela.

    Depois disso, é só chamar essa função sempre que for mostrar os dados de um veículo.

 

3) Para fazer a busca pela placa, atualmente você já faz uma leitura dela (para cadastro do veículo), basta fazer outra leitura e então compará-las.

    A comparação seguirá o mesmo princípio que a atual opção 2 do programa, onde mostra os valores.

    Pode utilizar a função strcmp() para isso.

 

Exemplo:

    char placa[20];     scanf(" %[^\n]s", placa);     if ( strcmp(placa, m[i].placa) == 0 )        printf("Sao Iguais!\n");
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...