• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Briooosa

[C++] Ajuda: Código

7 mensagens neste tópico

fazer uma estrutura tbi que armazene informação sobre bilhetes de identidade:

preciso de implementar uma função que receba como parametros uma tabela com 5 elementos do tipo tbi(previamente preenchida) e o numero de elementos da tabela.a função devera imprimir o nome e o numero de identificação do elemento mais novo;

já fiz isto e penso que esta correcto:

->>em anexo

agora nao estou a conseguir é comparar as datas dos bi's inserido e escolher o mais novo.

se alguem me puder dar uns toques agradecia.

desde ja obg

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

acho que a função de comparação das datas estava errada e penso que o primeiro ciclo devia terminar antes do segundo começar

fiz as seguintes alterações (mas não testei!!!)

  for (i = 0; i < n; i++) {
    cout << "introduza o nome :";
    cin.getline(t[i].nome, 50);
    cout << "introduza data de nascimento" << endl;
    cout << "ano ";
    cin >> t[i].datanasc[0];
    cout << "mes";
    cin >> t[i].datanasc[1];
    cout << "dia";
    cin >> t[i].datanasc[2];
    cout << "introduza o numero de indentificacao";
    cin >> t[i].numident;
    cin.get();
    cout << endl;

    int             ano_maximo = 0, mes_maximo = 0, dia_maximo = 0, i = 0;
    tbi             mais_novo;
  }

  for (i = 0; i < n; i++) {
    if (t[i].datanasc[0] == ano_maximo) {
      if (t[i].datanasc[1] == mes_maximo) {
        if (t[i].datanasc[2] >= dia_maximo) {
          mais_novo = t[i];
          ano_maximo = t[i].datanasc[0];
          mes_maximo = t[i].datanasc[1];
          dia_maximo = t[i].datanasc[2];
        }
      } else if (t[i].datanasc[1] > mes_maximo) {
        mais_novo = t[i];
        ano_maximo = t[i].datanasc[0];
        mes_maximo = t[i].datanasc[1];
        dia_maximo = t[i].datanasc[2];
      }
    } else if (t[i].datanasc[0] > ano_maximo) {
      mais_novo = t[i];
      ano_maximo = t[i].datanasc[0];
      mes_maximo = t[i].datanasc[1];
      dia_maximo = t[i].datanasc[2];
    }
  }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

muito obrigado,nao tinha quase erros nenhuns.

mas nao sei como fazer cout<<mais_novo //imprimir os dados do mais novo,isso é feito dentro da funçao criada?ou no void main?

ja tentei mas aparece sempre endereços de memoria,preciso de usar ponteiros?se me puderes ajudar agradecia mais uma vez.

#include<iostream.h>
#include<iomanip.h>

struct tbi{

char nome[50];
int datanasc[3];
unsigned int numident;
};


void inseretab(tbi t[],int n);



void main(){

tbi tabela[5];

inseretab(tabela,5);


}

void inseretab(tbi t[],int n){


int i;
cout<<"insira os dados de :"<<n<<" elementos"<<endl;




for (i = 0; i < n; i++) {
    cout << "introduza o nome :";
    cin.getline(t[i].nome, 50);
    cout << "introduza data de nascimento" << endl;
    cout << "ano ";
    cin >> t[i].datanasc[0];
    cout << "mes";
    cin >> t[i].datanasc[1];
    cout << "dia";
    cin >> t[i].datanasc[2];
    cout << "introduza o numero de indentificacao";
    cin >> t[i].numident;
    cin.get();
    cout << endl;
}
    int             ano_maximo = 0, mes_maximo = 0, dia_maximo = 0;
    tbi             mais_novo;


  for (i = 0; i < n; i++) {
    if (t[i].datanasc[0] == ano_maximo) {
      if (t[i].datanasc[1] == mes_maximo) {
        if (t[i].datanasc[2] >= dia_maximo) {
          mais_novo = t[i];
          ano_maximo = t[i].datanasc[0];
          mes_maximo = t[i].datanasc[1];
          dia_maximo = t[i].datanasc[2];
        }
      } else if (t[i].datanasc[1] > mes_maximo) {
        mais_novo = t[i];
        ano_maximo = t[i].datanasc[0];
        mes_maximo = t[i].datanasc[1];
        dia_maximo = t[i].datanasc[2];
      }
    } else if (t[i].datanasc[0] > ano_maximo) {
      mais_novo = t[i];
      ano_maximo = t[i].datanasc[0];
      mes_maximo = t[i].datanasc[1];
      dia_maximo = t[i].datanasc[2];
    }
  }                             //onde faço cout agora??obrigadissimo
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a forma mais fácil é imprimir o resultado da função inseretab.

mas esse programa está mal estruturado.

tendo em conta que estás a calcular o registo que tem a data de nascimento maior recorrendo a um ciclo separado (podias fazer tudo no ciclo de inserção...), esta operação devia ser feita numa função separada. essa função devia determinar a maior data de nascimento e devolve-la para a main, que por sua vez a mostraria.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e como é que eu a faço retornar o mais_novo,tenho estado a tentar e da-me sempre erro,

desculpa mas nao percebo muito disto etenho que entregar isto feito

cada vez percebo menos disto :down:

obrigado na mesma.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

void maior(tbi valores[],int n,int res[3])
{
  for (i=0;i<n;i++) {
    if (t.datanasc[0] == ano_maximo) {
      if (t.datanasc[1] == mes_maximo) {
        if (t.datanasc[2] >= dia_maximo) {
          mais_novo = t;
          ano_maximo = t.datanasc[0];
          mes_maximo = t.datanasc[1];
          dia_maximo = t.datanasc[2];
        }
      } else if (t.datanasc[1] > mes_maximo) {
        mais_novo = t;
        ano_maximo = t.datanasc[0];
        mes_maximo = t.datanasc[1];
        dia_maximo = t.datanasc[2];
      }
    } else if (t.datanasc[0] > ano_maximo) {
      mais_novo = t;
      ano_maximo = t.datanasc[0];
      mes_maximo = t.datanasc[1];
      dia_maximo = t.datanasc[2];
    }
  }

  res[0]=dia_maximo;
  res[1]=mes_maximo;
  res[2]=ano_maximo;
}

esta função coloca na variável 'res' a maior data.

na 'main' fazes

int data[3];
maior(t,n,data); // t é a tabela com os dados e n é o número de elementos da tabela

cout << data[0] << "/" << data[1] << "/" << data[2] << endl;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigado,ja esta.fiz assim

#include<iostream.h>
#include<iomanip.h>


struct tbi{

   char nome[50];
   int datanasc[3];
   unsigned int numident;
};


void inseretab(tbi t[],int n);
void maior(tbi valores[],int n,int res[3]);


void main(){

tbi tabela[5];

inseretab(tabela,5);
int data[3];
maior(tabela,5,data);

cout << data[0] << "/" << data[1] << "/" << data[2] << endl;

}

void inseretab(tbi t[],int n){
   

   int i;
   cout<<"insira os dados de :"<<n<<" elementos"<<endl;




for (i = 0; i < n; i++) {

    cout << "introduza o nome :";
    cin.getline(t[i].nome, 50);
    cout << "introduza data de nascimento" << endl;
    cout << "ano ";
    cin >> t[i].datanasc[0];
    cout << "mes";
    cin >> t[i].datanasc[1];
    cout << "dia";
    cin >> t[i].datanasc[2];
    cout << "introduza o numero de indentificacao";
    cin >> t[i].numident;
    cin.get();
    cout << endl;
}
}

void maior(tbi tabela[],int n,int res[3])
{

 int  ano_maximo = 0, mes_maximo = 0, dia_maximo = 0,i=0;
    tbi             mais_novo;

  for (i=0;i<n;i++) {

    if (tabela[i].datanasc[0] == ano_maximo) {
      if (tabela[i].datanasc[1] == mes_maximo) {
        if (tabela[i].datanasc[2] >= dia_maximo) {
          mais_novo = tabela[i];
          ano_maximo = tabela[i].datanasc[0];
          mes_maximo = tabela[i].datanasc[1];
          dia_maximo = tabela[i].datanasc[2];
        }
      } else if (tabela[i].datanasc[1] > mes_maximo) {
        mais_novo = tabela[i];
        ano_maximo = tabela[i].datanasc[0];
        mes_maximo = tabela[i].datanasc[1];
        dia_maximo = tabela[i].datanasc[2];
      }
    } else if (tabela[i].datanasc[0] > ano_maximo) {
      mais_novo = tabela[i];
      ano_maximo = tabela[i].datanasc[0];
      mes_maximo = tabela[i].datanasc[1];
      dia_maximo = tabela[i].datanasc[2];
    }
  }

  res[0]=dia_maximo;
  res[1]=mes_maximo;
  res[2]=ano_maximo;
}

e assim imprime a data do mais novo,agora vou tentar imprimir o nome e o numero de identificaçao que é o que problema pede.

:)


EDIT: Da próxima usa a ferramenta GeSHi para postares código. Ass. bk@ero

0

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