Em linguagens de programação estruturadas, tal como a linguagem C/C mais mais , temos a possibilidade de organizar as informações a serem manipuladas sob dois aspectos: organização homogênea e organização heterogênea No viés homogêneo, todas as informações, possuidoras de um único tipo de dados, estão dispostas em uma estrutura denominada vetor. E, por sua vez, no viés heterogêneo, as informações, podendo possuir tipagens distintas, estão armazenadas em estruturas de dados denominadas como “struct”. Com base nisso, suponha que é necessário armazenar informações relacionadas à veículos, totalizando, no máximo, 10 veículos. Para cada veículo, deverão ser fornecidos os seguintes dados:- marca do veículo- modelo - ano de fabricação- pplaca (formato X X X-Y Y Y Y; onde X denota as letras e Y denota os números da placa).O sistema deverá oferecer, ao usuário, as seguintes funcionalidades:- Listar os veículos cadastrados;- Inserir um novo veículo;- Listar os veículos filtrando-se por ano de fabricação;- Listar os veículos com o ano de fabricação acima de um certo valor especificado pelo usuário. - Listar os veículos filtrando-se pelo modelo.O sistema deverá armazenar os veículos ordenados pelo ano de fabricação, ou seja, ao inserir um novo veículo, este deve ser inserido em ordem crescente de ano de fabricação.
Soluções para a tarefa
Abaixo segue um exemplo de sistema de organização homogênea e organização heterogênea, considerando todas as instruções dadas no enunciado.
#include<stdio.h>
#include<stdlib.h>
#include <locale.h>
struct Aluno{
char nome[20];
char email[20];
float peso;
float altura;
float IMC;
};
struct Aluno cad_aluno[20];
float calculaimc(float p, float a){
float resultado = p / (a*a);
return resultado;
}
int main (){
int opcao, i, l;
setlocale(LC_ALL, "Portuguese");
for (i = 1; i <=20;){
printf("\n\nCadastro dos Alunos: \n");
printf("Digite o numero de uma das opções: \n");
printf("1- Cadastrar aluno \n");
printf("2- Listar alunos \n");
printf("3- Apagar alunos \n");
printf("4- Listar IMC de alunos \n");
printf("0- Sair \n");
scanf("%d", &opcao);
switch(opcao) {
case 1:
fflush(stdin);
printf ("\n Nome do aluno:");
scanf ("%s", &cad_aluno[i].nome);
fflush(stdin);
printf ("\n Email do aluno:");
scanf ("%s", &cad_aluno[i].email);
fflush(stdin);
printf ("\n Peso do aluno: ");
scanf ("%f", &cad_aluno[i].peso);
fflush(stdin);
printf ("\n Altura do aluno: ");
scanf ("%f", &cad_aluno[i].altura);
fflush(stdin);
cad_aluno[i].IMC = calculaimc(cad_aluno[i].peso, cad_aluno[i].altura);
fflush(stdin);
i++;
break;
case 2:
for (l = 1; l <=20; l++) {
if(l < i){
printf("\n\nNome: %s", &cad_aluno[l].nome);
printf("\nEmail: %s", &cad_aluno[l].email);
printf("\nPeso: %1.2f", &cad_aluno[l].peso);
printf("\nAltura: %1.2f", &cad_aluno[l].altura);
printf("\nIMC: %1.2f", &cad_aluno[l].IMC);
}
else{
l = 20;
}
}
break;
case 3 :
break;
case 4 :
for (l = 0; l <20; l++) {
if(l < i){
printf("IMC do aluno %d: %1.2f", l, &cad_aluno[l].IMC);
}
else{
l = 20;
}
}
break;
case 0 : exit(0);
default:
printf ("Opção invalida\n");
break;
}
}
return 0;
}
Resposta:
#include <iostream>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct carro
{
int cod;
char marca [20];
char modelo [20];
int ano;
char placa[10];
}carro;
carro car[10];
void menu();
void inicializar();
void imprimir();
void cadastrar();
int main(int argc, char** argv) {
setlocale(LC_ALL,"portuguese");
int i;
int op;
int ano;
int z;
char modelo[20];
z=0;
ano=0;
i=0;
car[i].cod = 0;
strcpy(car[i].marca,"NULL");
strcpy(car[i].modelo,"NULL");
strcpy(car[i].placa,"NULL");
car[i].ano = 0;
do
{
printf("\n Opções:");
printf("\n 1. CADASTRAR VEÍCULO");
printf("\n 2. LISTAR VEÍCULOS");
printf("\n 3. PESQUISAR UM MODELO");
printf("\n 4. MOSTRAR VEÍCULOS A PARTIR DE UM ANO");
printf("\n 5. SAIR");
printf("\n \n DIGITE A OPÇÃO: ");
scanf("%d",&op);
switch(op)
{
case 1:
if (car[i].cod<=9)
{
car[i].cod=i;
printf("\n Digite a marca do veículo:");
scanf("%s",&car[i].marca);
printf("\n Digite o modelo do veículo:");
scanf("%s",&car[i].modelo);
printf("\n Digite a placa do veículo:");
scanf("%s",&car[i].placa);
printf("\n Digite o ano do veículo:");
scanf("%d",&car[i].ano);
i=i+1;
}
else
{
printf("\n Limite de cadastro é 10!");
}
break;
case 2:
for(int x=0; x<i; x++)
{
printf("\n A marca do veículo é: %s",car[x].marca);
printf("\n O modelo do veículo é: %s",car[x].modelo);
printf("\n O ano do veículo é: %d",car[x].ano);
printf("\n A placa do veículo é: %s",car[x].placa);
printf("\n\n =================================== \n \n");
}
break;
case 3:
printf("\n INSIRA O MODELO A SER PESQUISADO:");
scanf("%s",&modelo);
for (int x=0; x<i; x++)
{
if (strcmp(car[x].modelo,strlwr(modelo)) == 0)
{
printf("\n A marca do veículo é: %s",car[x].marca);
printf("\n O modelo do veículo é: %s",car[x].modelo);
printf("\n O ano do veículo é: %d",car[x].ano);
printf("\n A placa do veículo é: %s",car[x].placa);
printf("\n\n =================================== \n \n");
z++;
}
}
if (z==0)
{
printf("\n NÃO FOI ENCONTRADO O MODELO %s \n\n",modelo);
}
else
{
z=0;
}
break;
case 4:
printf("\n INSIRA O ANO A SER PESQUISADO:");
scanf("%d",&ano);
for (int x=0; x<i; x++)
{
if (car[x].ano >= ano)
{
printf("\n A marca do veículo é: %s",car[x].marca);
printf("\n O modelo do veículo é: %s",car[x].modelo);
printf("\n O ano do veículo é: %d",car[x].ano);
printf("\n A placa do veículo é: %s",car[x].placa);
printf("\n\n =================================== \n \n");
z++;
}
}
if (z==0)
{
printf("\n NÃO FOI ENCONTRADO VEÍCULOS ACIMA DE %d \n\n",ano);
}
else
{
z=0;
}
break;
default:
printf("\n Opção não existe");
break;
}
}
while (op!=5 && i<=9);
if (i==9)
{
printf("\n \n LIMITE DE VEÍCULOS ALCANÇADO! \n \n \n");
}
for (int y=0; y<i; y++)
{
printf("\n A marca do veículo é: %s",car[y].marca);
printf("\n O modelo do veículo é: %s",car[y].modelo);
printf("\n O ano do veículo é: %d",car[y].ano);
printf("\n A placa do veículo é: %s",car[y].placa);
printf("\n\n =================================== \n \n");
}
return 0;
}
Explicação:
Atividade também disponível no .txt