Briooosa Posted December 11, 2006 at 04:44 PM Report #70126 Posted December 11, 2006 at 04:44 PM 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
Rui Carlos Posted December 11, 2006 at 07:06 PM Report #70171 Posted December 11, 2006 at 07:06 PM 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]; } } } Rui Carlos Gonçalves
Briooosa Posted December 11, 2006 at 07:32 PM Author Report #70175 Posted December 11, 2006 at 07:32 PM 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 }
Rui Carlos Posted December 11, 2006 at 07:39 PM Report #70176 Posted December 11, 2006 at 07:39 PM 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. Rui Carlos Gonçalves
Briooosa Posted December 11, 2006 at 07:50 PM Author Report #70180 Posted December 11, 2006 at 07:50 PM 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.
Rui Carlos Posted December 11, 2006 at 07:58 PM Report #70181 Posted December 11, 2006 at 07:58 PM 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; Rui Carlos Gonçalves
Briooosa Posted December 11, 2006 at 09:04 PM Author Report #70190 Posted December 11, 2006 at 09:04 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now