Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

ptrci

[C] Ajuda: Pesquisa em estruturas

Mensagens Recomendadas

ptrci    0
ptrci

Ola a todos estou a tentar fazer uma função que faz uma pesquisa numa estrutura em que a informação é guardada num vector, já ando as volta com isto e não consigo.

tenho esta estretura:

/* ---------------------------  Inicio  Estretura motas ---------------------------------------------*/

typedef struct { /* O typedef server para não estar a repetir a palavra stuct no código */	
	int agrupamento;				 /*Tipo de agrupamento: motos, carros, camiões*/
	int numero;						 /*Numero de indentificação */
	int tempo;                       /*Tempo ( temp acumualdao das etapas hh-mm-ss );*/
	int hh;						     /* Tempo horas */
	int mm;							 /* Tempo minutos */
	int ss;                          /* Tempo segundos */
	int classificacao;               /* Número de classificativas concluidas */ 
	char equipa [limequipa];         /*Equipa*/
	char marca [limmarca];			 /*Marca*/
	char modelo [limmodelo];		 /*Modelo*/
	char piloto [limpiloto];         /*Nome Piloto */
}motas;
/* ---------------------------  Fim  Estretura motas    ---------------------------------------------*/

os dados são guardados neste vector:

motas dakar1[250];  /* vector 250 ( motos)  */

alguém pode ajudar.

Isto é um trabalho sobe o Dakar que tenho de entregar, parece uma estupidez já ando a mais de três dias as voltas com isto e não sou capaz de fazer isto.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ptrci    0
ptrci

Pois esqueci me :wallbash:.

Digamos que inseri uma equipa com o n.º de identificação : "4"  ( [motas.numero] )  .

E quero fazer uma pesquisa em que encontre o n.º de identificação " 4" , e que diga o nome da equipa; piloto; marca ; ou seja os dados da estrutura que pertencem ao n.º de identificação 4.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
merlin3000    0
merlin3000

Pelo que percebi queres uma função deste tipo.

int pesquisa(int n_id)
{
    int i;
    
    for(i=0;i<250;i++)
        if(dakar[i].numero==n_id)
        {
            printf(".........Os dados que queres");
            return 1;
        }
        
    return 0;
}

Podia igualmente ser feito com um while, mas a lógica é a mesma, percorrer dakar1 até ao fim. Se encontrarmos um numero de identificação compativel imprimes os seus dados. Retornei 0 só para ter algo que me diga no código se encontrou ou não, se não quiseres podes simplesmente dizer que quando encontrar o número i=250 isso terminaria o for;

se o vector dakar não for global. Tens que enviá-lo também para a função.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
magician    2
magician

Pa faz algo do tipo....

//n é o numero que tás a procura.
int i = 0;
while(dakar1[i]->numero != n && i < 250){
i++;
}
printf("%d\n",dakar1[i]->agrupamento);
printf("%d\n",dakar1[i]->tempo);
printf("%d\n",dakar1[i]->classificacao);
//..... e por ai fora

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
magician    2
magician

Pelo que percebi queres uma função deste tipo.

int pesquisa(int n_id)
{
    int i;
    
    for(i=0;i<250;i++)
        if(dakar[i].numero==n_id)
        {
            printf(".........Os dados que queres");
            return 1;
        }
    return 0;
}

se o vector dakar não for global. Tens que enviá-lo também para a função.

Essa tá mais formal :thumbsup: e talvez mais simples..

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
merlin3000    0
merlin3000

lol tava agora a modificar o post para por a hipótese do while  :-[ pessoalmente até gosto mais de usar whiles mas quando percorro vectores por alguma razão acho mais legivel o for :P

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
magician    2
magician

A"->" e o "." tem a mesma funcionalidade como programo muito em Java normalmente uso o "." mas não sei porque em C uso sempre a "->" tal como em php.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ptrci    0
ptrci

A"->" e o "." tem a mesma funcionalidade como programo muito em Java normalmente uso o "." mas não sei porque em C uso sempre a "->" tal como em php.

Não sabia. que tinham a mesma funcionalidade a mim explicaram que eram diferentes.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Hipnoted    6
Hipnoted

A"->" e o "." tem a mesma funcionalidade como programo muito em Java normalmente uso o "." mas não sei porque em C uso sempre a "->" tal como em php.

Não sabia. que tinham a mesma funcionalidade a mim explicaram que eram diferentes.

E são diferentes. Quando usas apontadores usas o -> quando usar arrays usas o .

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
merlin3000    0
merlin3000

Ambos dependem do uso que lhe quiseres dar é apenas um auxílio visual. Por exemplo:

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

typedef struct {
   int v1;
   int v2;
} estrutura;

int main()
{
estrutura a, *b;
   b=&a;
a.v1=1;
a.v2=2;

printf("%d - %d",a.v1, b->v2);

return 0;
}

o -> serve para que em vez de *b.v2 escrevas b->v2. Ou seja é a tradução visual para código da expressão "o elemento apontado por", se tentares usar nese caso em vez de a.v1, a->v1 vai dar erro porque a não é um apontador.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
magician    2
magician

Precisamente por isso é que uso a "->" é muito mais simples, para alem disso quando consultamos uma struct estamos a apontar para argumentos da mesma.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
merlin3000    0
merlin3000

Mas nem sempre serve usar o ->. Não sabia que já tinhas respondido e alterei a minha resposta anterior. Vê na última linha o exemplo que eu dou.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
merlin3000    0
merlin3000

Lol usando apontadores nem se discute. o "->" torna tudo muito mais legível, pelo menos na minha opinião.

Para ser sincero até nunca as tinha usado em C só em C++ mas quando fizes-te o teu exemplo fui testar a ver se se realmente dava. Pensava que era mais uma coisa exclusiva do c++  :-[

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
magician    2
magician

Eu não domino muito C sou mais Java :thumbsup: mas como tive 3 trabalho para fazer em C tive que aprender há força sozinho e fiz sempre com as "->" e foi sempre o que usei por isso é que não uso os "." no C ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Warrior    68
Warrior

Atenção com a ordem das prioridades.

Em C, o "." tem mais prioridade do que o "*", logo, *b.v1 estaria incorrecto. Estarias a aceder ao elemento apontado por b.v1, e não ao elemento v1 apontado pela estrutura b.

O que tu querias usar era (*:thumbsup:.v1. Daí ter nascido o b->v1, porque repara, entre *b.v1, e b->v1 o número de caracteres é igual, agora com os parênteses a coisa complicava..

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
merlin3000    0
merlin3000

Upx.. Esqueci-me de por ai os  () :-[ bem visto. Mas o -> não apareceu só por serem menos caractéres, mas também porque facilita em muito a leitura do código principalmente em expressões complexas.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade