Ir ao conteúdo
  • Cadastre-se

C# Como usar struct e vetores c# ?


Vanutty Santana

Posts recomendados

Em linguagens de programação estruturadas, tal como a linguagem C/C++ 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:

-1-marca do veículo

2-modelo - ano de fabricação

3-placa (formato XXX-YYYY; onde X denota as letras e Y denota os números da placa).

O sistema deverá oferecer, ao usuário, as seguintes funcionalidades:

4-Listar os veículos cadastrados;

5-Inserir um novo veículo;

6-Listar os veículos filtrando-se por ano de fabricação;

7-Listar os veículos com o ano de fabricação acima de um certo valor especificado pelo usuário

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

Comecei o desenvolvimento, já criei o menu e o case 1.

Gostaria de auxilio no restante e andamento, e na organização das Strings.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Moderador

Caro usuário,

 

Seja bem-vindo ao Clube do Hardware.

 

No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware.

 

Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício.

 

Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal.

 

Esperamos que compreenda.

 

Atenciosamente,

Equipe Clube do Hardware

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

vou te mostrar só o começo. O resto é contigo.

 

#include <stdio.h>
typedef struct
{
	float preco;
	char* marca;
	char* modelo;
	char* placa;
} Carro;

int imprimeCarro(Carro *exemplo)
{
	printf("marca:%s \t modelo:%s \t placa: %s \t preço: %.2f \n", 
		exemplo->marca, exemplo->modelo, exemplo->placa, exemplo->preco);
	return 1;
}

int main()
{
	// como guardar variaveis no novo tipo de dado que inventou:
	Carro exemplo;
	exemplo.preco=35000.0;
	exemplo.marca="MotoLouca";
	exemplo.modelo="1970";
	exemplo.placa="ABC-7777/RJ";

	//pra imprimir deve colocar os especificadores %s para strings conhecer outros
	printf("marca:%s \t modelo:%s \t placa: %s \t preço: %.2f \n", 
		exemplo.marca, exemplo.modelo, exemplo.placa, exemplo.preco);

	// só pra dar uma ideia do que é loop ou laço de repetição e função
	Carro ex1[2];
	ex1[0].preco=25000.0;
	ex1[0].marca="MotoVeia";
	ex1[0].modelo="1960";
	ex1[0].placa="ABC-9999/RJ";

	ex1[1].preco=15000.0;
	ex1[1].marca="MotoFoda";
	ex1[1].modelo="1990";
	ex1[1].placa="ABC-0000/RJ";

	int tm = sizeof(ex1)/sizeof(Carro);
	for(int i=0; i<tm; i++)
	{
		imprimeCarro(&ex1[i]);
	}
	
	return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

6 horas atrás, Vanutty Santana disse:

Em linguagens de programação estruturadas, tal como a linguagem C/C++ 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”.

 

Fascinante :D 

 

Não existe a linguagem C/C++. Existe C, existe C++ e existe C#.

 

Você marcou o tópico de seu problema como sendo C#.

 

Que linguagem vai usar? 

 

 

Link para o comentário
Compartilhar em outros sites

5 horas atrás, Vanutty Santana disse:

@arfneto estou utilizando a linguaguem C#, pelo Code Blocks.

Poderia me ajudar a tirar algumas dúvidas?

Estou travado em uma parte e não consigo sair :(((

Ué cara! já mudou a linguagem?
 

 

9 horas atrás, Vanutty Santana disse:

@codigo rápido posso te mostrar como eu fiz meu começo?


O forum é livre. Irá receber a ajuda de muita gente. Mas realmente C# não é meu foco a uns 15 anos. Pode mostrar, mas possivelmente não tenho como ajudar. Boa sorte pra você.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Em 15/09/2021 às 01:37, arfneto disse:

 

C# no Code::Blocks? Está seguro disso?

 

Poste o código

E sua dúvida...

 

Perdão, estou programando em Linguagem C no Code:Blocks.

Gostaria que desse uma olhada no meu código, acabei de finalizar para ver se posso implementar alguma coisa ou da uma melhorada na minha formatação. Agradecido.

 

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

typedef struct
{
    int  menu;
    char marca[30];
    char modelo[30];
    int  ano [5];
    char placa[10];
} Carro;

int main()
{
    int  i;
    int menu;
    int ano;
    char modelo[30];
    Carro car[10];
    i  = 0;

    strcpy(car[i].marca, "NULL");
    strcpy(car[i].modelo, "NULL");
    strcpy(car[i].ano, "NULL");
    strcpy(car[i].placa, "NULL");

    do
    {
        printf("\n opções:");
        printf("\n 1. CADASTRAR VEICULOS");
        printf("\n 2. LISTAR VEICULOS");
        printf("\n 3. PESQUISAR UM MODELO");
        printf("\n 4. MOSTRAR VEICULOS A PARTIR DE UM ANO");
        printf("\n 5. SAIR");
        printf("\n \n DIGITE A OPCAO: ");
        scanf("%d", &menu);
        switch (menu)

        {
        case 1:
            system("cls");

            if (i<=10)
            {
                car[i];
                printf("\n Digite a marca do veiculo:");
                scanf("%s", car[i].marca);
                printf("\n Digite o modelo do veiculo:");
                scanf("%s", car[i].modelo);
                printf("\n Digite a placa (XXX-YYYY) do veiculo: ");
                scanf("%s", car[i].placa);
                printf("\n Digite o ano de fabricação: ");
                scanf("%s", car[i].ano);
                i=i+1;
                system("cls");
            }
            else
            {
                printf("\n Sistema só aceita 10! cadastros");
            }
            break;

        case 2:
            system("cls");
            for (int i=0; i<=10; i++)
            {
                printf("\n A marca do veiculo: %s\n", car[i].marca);
                printf("\n O modelo do veiculo: %s\n", car[i].modelo );
                printf("\n A placa do veiculo: %s\n", car[i].placa);
                printf("\n O ano do veiculo: %s\n", car[i].ano);
                system("\t pause");

            }
            break;
        case 3:
            system("cls");
            printf("\n INSIRA O MODELO A SER PESQUISADO: ");
            scanf("%s", &modelo);
            for (int i=0; i<=10; i++)
            {
                if (strcmp(car[i].modelo,modelo) == 0);
                {
                    printf("\n A marca do veiculo: %s\n", car[i].marca);
                    printf("\n O modelo do veiculo: %s\n", car[i].modelo );
                    printf("\n A placa do veiculo: %s\n", car[i].placa);
                    printf("\n O ano do veiculo: %s\n", car[i].ano);
                    system("\t pause");
                }
            }
            break;
        case 4:
            system("cls");
            printf("\n INSIRA O ANO A SER PESQUISADO: ");
            scanf("%d", &ano);
            for (int i=0; i<=10; i++)
            {
                if(car[i].ano>=ano);
                {
                    printf("\n A marca do veiculo: %s\n", car[i].marca);
                    printf("\n O modelo do veiculo: %s\n", car[i].modelo );
                    printf("\n A placa do veiculo: %s\n", car[i].placa);
                    printf("\n O ano do veiculo: %s\n", car[i].ano);
                    system("\t pause");
                }
                break;
            }
        }

    }
    while (menu!=5 && i<=10);
    if (i>=10)
    {
        printf("\n \n SISTEMA APENAS ACEITA 10 CADASTROS DE VEICULOS! \n");
    }
}

@codigo rápido Perdão amigo, eu acabei confundindo! A linguagem que estou utilizando é a C no Code Blocks. Acabei de postar o código um pouco acima, se pudesse da uma comentário sobre algum ajuste ou modificação para ficar melhor ficaria agradecido! :)

Link para o comentário
Compartilhar em outros sites

Olá

 

seu programa não está assim muito bom ainda.

 

vou te mostrar algumas coisas e você vê se vale a pena mudar...

 

de seu programa

 


typedef struct
{
    int  menu;
    char marca[30];
    char modelo[30];
    int  ano[5];
    char placa[10];
} Carro;

int main()
{
    int  i;
    int menu;
    int ano;

 

que faz um int menu DENTRO da estrutura que descreve um carro? E tem outro int menu logo abaixo. GLOBAL?

 

Porque o menu não é uma função? É muito mais simples.

 

    Carro car[10];
    i = 0;

    strcpy(car[i].marca, "NULL");
    strcpy(car[i].modelo, "NULL");
    strcpy(car[i].ano, "NULL");
    strcpy(car[i].placa, "NULL");

 

Que pretende fazer aqui?

 

Se quer inicializar a estrutura toda use um único 0, como em

 

    Carro car[10] = {0} 

 

Não sei o que quer fazer, mas "NULL" é um valor, são 5 bytes e não sei porque coloca isso apenas nos campos do primeiro Carro do vetor.

 

        printf("\n opções:");
        printf("\n 1. CADASTRAR VEICULOS");
        printf("\n 2. LISTAR VEICULOS");
        printf("\n 3. PESQUISAR UM MODELO");
        printf("\n 4. MOSTRAR VEICULOS A PARTIR DE UM ANO");
        printf("\n 5. SAIR");
        printf("\n \n DIGITE A OPCAO: ");

 

isso quer dizer que você chamou 7 vezes uma função para escrever uma linha, ao invés de uma vez para escrever 7 linhas. Não é uma boa ideia.

 

Prefira

 

        printf("\
\n\
    Opções:\n\
\n\
 1. CADASTRAR VEICULOS\n\
 2. LISTAR VEICULOS\n\
 3. PESQUISAR UM MODELO\n\
 4. MOSTRAR VEICULOS A PARTIR DE UM ANO\n\
 5. SAIR\n\
\n\
    DIGITE A OPCAO: ");

 

porque é mais fácil de ler e de alinhar e alterar. E é uma chamada apenas a printf()

 

        scanf("%d", &menu);
        switch (menu)

 

Teste SEMPRE o retorno de scanf(). Que sentido faz seguir se não leu nada?

 

Use uma função para mostrar o menu e retornar a opção.

 

Não use system(). Não estará fazendo nada nem aprendendo nada. system() apenas envia uma string para o sistema. Está programando em C. system foi escrita em C. O sistema foi escrito em C. Pode fazer qualquer coisa em C.

 

Escreva em torno dos dados

 

Seu programa tem uma coleção de carros. Se tiver isso no seu programa sua vida fica mais fácil

 

Veja isso

 

typedef struct
{
    unsigned N;          // quantos carros
    Carro       car[10]; // os carros

}   Frota;

 

E você declara

 

    Frota    frota;
    frota.N = 0; // sem carros

 

E tem um lugar para colocar os 10 carros. E o programa fica mais simples porque o contador de carros está dentro da frota e não solto pelo programa.

 

 

Link para o comentário
Compartilhar em outros sites

1 hora atrás, arfneto disse:

Escreva em torno dos dados

Isso não ajuda o usuário iniciante em nada. Lembre-se: O usuário, principalmente o iniciante, não adivinha o que quer dizer se não for detalhado. Isso ai que está dizendo só um usuário mais avançado vai entender pelo costume do desenvolvimento.

O que o AfNeto tá dizendo é que você deve se preocupar menos com menus, janelas e mais com os dados e as funções que irão trabalhar com eles.
 

Pra ser mais especifico, recomendo o usuário dar uma lida nisso:
https://pt.wikipedia.org/wiki/MVC

Isso vai lhe ajudar a entender que você deve separar seus dados da view e do controller.

No inicio é toleravel misturar um pouco as coisas. Não se preocupe se não quiser ler tambem...

Apenas continue andando.
 

Observe esse exemplo de como estou trabalhando com nós:
https://www.clubedohardware.com.br/forums/topic/1563367-lista-encadeada-erro-de-execução/?tab=comments#comment-8269440

 

Veja que não utilizei menus... não usei nada. Apenas usuei o main pra fazer alguns testes diretos com as funções que foram criadas. Não se preocupe em ter de mostrar dados a usuário como se já estivesse vendendo o programa.
 

Outro exemplo, não tão bom, mas que tambem exemplifica o que quero dizer quanto ao tempo dos seus testes:
https://www.clubedohardware.com.br/forums/topic/1562153-questão-com-condicionais-em-c/

Se você já der uma lista de testes pra popular sua struct, e testar suas funções, você vai poupar tempo nos seus testes.

 

Link para o comentário
Compartilhar em outros sites

image.png.ee47d5b4d663e5fa2bae4d93bd91a4cb.png


@codigo rápido sugiro ler o tópico todo ao invés de citar um título de 5 palavras

 

e você vai poder ler por exemplo o parágrafo logo abaixo:

 

19 horas atrás, arfneto disse:

Seu programa tem uma coleção de carros. Se tiver isso no seu programa sua vida fica mais fácil

 

E já que leu isso pode ler o exemplo em C logo na linha de baixo, em C

 

image.png.9029b87d66cc1a0f6b4b8281493159fb.png

Link para o comentário
Compartilhar em outros sites

@codigo rápido @arfneto 

Pessoal muito obrigado pelo feedback! Essa foi minha primeira atividade do meu curso de programação e eu até esperaria que tivesse mais erros!

Mas continuarei estudando para aperfeiçoar mais minhas habilidades, e em caso de dúvida retornarei para o fórum! :)

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Citação

@codigo rápido sugiro ler o tópico todo ao invés de citar um título de 5 palavras


Nossa moço, eu li. Eu to só te ajudando... Eu sugiro também que o senhor procure um curso de interpretação de texto. Tá cheio desse jargão seu por ai que o usuário iniciante não vai entender que relação tem com seus códigos. É bom, né? A gente vem pra ajudar e o cara acha tudo ruim...
 

 

3 horas atrás, Vanutty Santana disse:

@codigo rápido

Pessoal muito obrigado pelo feedback! Essa foi minha primeira atividade do meu curso de programação e eu até esperaria que tivesse mais erros!

Mas continuarei estudando para aperfeiçoar mais minhas habilidades, e em caso de dúvida retornarei para o fórum! :)


Pra mim é sempre um prazer ajudar alguém. Infelizmente esses dias está um pouco complicado pra mim. Gostariad e ter ajudado mais.

Link para o comentário
Compartilhar em outros sites

45 minutos atrás, codigo rápido disse:

Nossa moço, eu li. Eu to só te ajudando... Eu sugiro também que o senhor procure um curso de interpretação de texto. Tá cheio desse jargão seu por ai que o usuário iniciante não vai entender que relação tem com seus códigos

 

Agradeço mesmo por tentar me ajudar. 

 

Sobre a interpretação de texto, eis o que eu escrevi, em 4 parágrafos seguidos e dois trechos de código compilável em C

 

trecho.jpg.b4c6d2743a6fd3cfae9d732f25f2c66b.jpg

 

E essa a sua avaliação:

 

47 minutos atrás, codigo rápido disse:

jargão seu por ai que o usuário iniciante não vai entender que relação tem com seus códigos

 

Pois é. Ao menos um usuário achou MUITO complexo esse jargão de colocar uma estrutura frota com um total N e um vetor de 10 Carro num problema que pede exatamente isso.

 

 

Link para o comentário
Compartilhar em outros sites

Citação

Pois é. Ao menos um usuário achou MUITO complexo esse jargão de colocar uma estrutura frota com um total N e um vetor de 10 Carro num problema que pede exatamente isso.


Só to te ajudando dando exemplo de como o usuário, leigo, possa te entender melhor. É assim que se ensina nas salas de aulas. Exigir que usuário novato separe modelo (dados e logica de negocio) de view e controller, não faz sentido agora. Isso é algo que vai acontecer naturalmente. Mas exigir no começo, pode parecer excelente, mas simplesmente jogar os jargões da profissão assim, de cara, no inicio, sem nenhuma explicação do que quer dizer, não ajuda ninguem que está começando. Lembre-se: Esse é um forum em que iniciantes acessam a todo momento.
Inclusive eu acho que ficar procurando defeitos nas formas como os outros usuários ajudam os outros é sempre bem vindo, mas desde que seja feito com atenciosidade, empatia e respeito e sempre com muito cuidado pra não dar a entender o que não gostaria nas entrelinhas.
 

Link para o comentário
Compartilhar em outros sites

47 minutos atrás, codigo rápido disse:

Só to te ajudando dando exemplo de como o usuário, leigo, possa te entender melhor. É assim que se ensina nas salas de aulas. Exigir que usuário novato separe modelo (dados e logica de negocio) de view e controller, não faz sentido agora. Isso é algo que vai acontecer naturalmente. Mas exigir no começo, pode parecer excelente, mas simplesmente jogar os jargões da profissão assim, de cara, no inicio, sem nenhuma explicação do que quer dizer, não ajuda ninguem que está começando

 

Bem, isso não é mais C. Note que eu mostrei o código, as estruturas em C, a razão e a conclusão...

 

E o "jargão" no meu caso era criar uma struct Frota e colocar dentro dela um contador chamado N e um vetor de 10 struct Carro :D 

 

E aí vem um usuário com essa parada de 
 

49 minutos atrás, codigo rápido disse:

separe modelo (dados e logica de negocio) de view e controller

 

E traz esse folclórico jargão para o tópico. Isso depois de ter postado o título de algo que eu escrevi, totalmente fora de contexto, e apresentar seu julgamento. Eu uso um jargão incompreensível para um iniciante em uma struct Frota com um vetor de Carro dentro, e um contador, e o usuário @codigo rápido vem falar em MVC, business model, controller... OK.

 

Talvez você seja um desenvolvedor muito avançado para ler as coisas que eu escrevo para iniciantes.

 

53 minutos atrás, codigo rápido disse:

Mas exigir no começo, pode parecer excelente, mas simplesmente jogar os jargões da profissão assim, de cara, no inicio, sem nenhuma explicação do que quer dizer, não ajuda ninguem que está começando

 

Recomendo ler o que eu escrevi e o que você escreveu... Talvez encontre o tal jargão incompreensível para iniciantes exatamente em seu post. Post esse que não tem qualquer código e parece apenas querer rebater uma seção de um texto que eu expliquei.

 

55 minutos atrás, codigo rápido disse:

Inclusive eu acho que ficar procurando defeitos nas formas como os outros usuários ajudam os outros é sempre bem vindo, mas desde que seja feito com atenciosidade, empatia e respeito e sempre com muito cuidado pra não dar a entender o que não gostaria nas entrelinhas

 

Obrigado por tentar me ajudar

Link para o comentário
Compartilhar em outros sites

Citação

Bem, isso não é mais C. Note que eu mostrei o código, as estruturas em C, a razão e a conclusão...


Não é... Mas quando se usa um jargão como:

Citação

Escreva ao redor dos dados


poderia ser sobre o que? Sobre C, C#, C++, Java, Delphi... Até sobre Assembly, que na verdade não tem nada de C. Mas que tem a ver com desenvolvimento. Então, mesmo em C, o jargão faz sentido sim. Programar é mais fácil do que isso. Estou só te ensinando como falar com os usuários iniciantes.
 

Citação

E o "jargão" no meu caso era criar uma struct Frota e colocar dentro dela um contador chamado N e um vetor de 10 struct Carro  

O senhor saber o que significa jargão? Sugiro olhar o dicionário, pois estou tentando lhe ajudar. Quando se usa jargão, normalmente entre profissionais experientes não é necessário explicações. Mas para os leigos, normalmente devem seguir palavras ou frases como:
isso significa que...
quero dizer com isso que...

E explicar o que quer dizer com o jargão dado...

E fazer um jargão e simplesmente jogar um código apos o jargão, não ajuda. É só isso que quero demonstrar ao senhor. Agora veja como foi diferente do que eu fiz:
 

Citação

Pra ser mais especifico, recomendo o usuário dar uma lida nisso:
https://pt.wikipedia.org/wiki/MVC

Isso vai lhe ajudar a entender que você deve separar seus dados da view e do controller.


Em que isso está fora de contexto sendo que eu apenas cobri um gancho que estava faltando? E isso é utilizado até em C. Pode ser para Web, mas as motivações de se separar dados e lógica de negócios é algo para todas as linguagens.
 

Citação

Talvez você seja um desenvolvedor muito avançado para ler as coisas que eu escrevo para iniciantes.

Nem tanto, mestre. Apesar de ter só uns 30 anos de experiencia com desenvolvimento, estou sempre aprendendo. E agradeço muito a ajuda que venho recebendo de todos. Inclusive do senhor, que vem me mostrando até assembly, quando nem teria obrigação nenhuma de mostrar em tópicos de C.
 

Citação

Recomendo ler o que eu escrevi e o que você escreveu...


Mas eu li... e não li de olhos de fora. Eu entendo e entendi. Só que, novamente, estou só de mostrando porque deve-se evitar os jargões sem explicações.
 

Citação

Obrigado por tentar me ajudar


De nada! Agora aqui é sempre uma mão lavando a outra, não é?



 

Link para o comentário
Compartilhar em outros sites

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!