Jump to content

[C++] Ajuda: Código


Recommended Posts

Posted

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

Posted

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];
    }
  }
}
Posted

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
}
Posted

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.

Posted

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.

Posted
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;
Posted

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.