You are on page 1of 10

ESTRUCTURES / TUPLES:

Les tuples sn estructures de dades que consten de diversos camps que poden contenir dades
de tipus diferents. Laccs al contingut dels camps en les estructures o tuples es fa emprant el
nom dels camps en comptes de la seva posici.

Emprem estructures o tuples per introduir dades dun usuari (DNI, NIF, tipus string).

typedef struct // struct per estructures i typedef per redefinir tipus.


{

// Defineixo tots els camps.

tipus1 main1;
tipus 2 main2;
tipusn mainn;

} nomnoutipus;

int main()
{

nomnoutipus nom;

Exemple 1:

// Programa que escriu dades de lusuari.

typedef struct
{

string nom, cognom1, cognom2;


int edat;
string treball;
double sou;

} persona;

int main() // Definim el nombre de persones que volem que tinguin struct persona.
{

persona treballador1, treballador2;

cout << Introdueix nom i cognoms. << endl;

// Com accedim a una component tupla? Hi accedim amb loperador (.)


// La sintaxi s la segent: nomvar.nomcamp

cin >> treballador1.nom >> treballador1.cognom1 >> treballador1.cognom2;


cout << Introdueix edat. << endl;
cin >> treballador1.edat;
cout << Introdueix lloc de treball. << endl;
cin >> treballador1.treball;
cout << Introdueix el teu sou. << endl;
cin >> treballador1.sou;

// Les funcions no poden retornar taules per poden retornar tuples de tipus taula.
// En lexemple, podrem tenir un vector en la variable treball. Podem fer una funci que
// llegeix la tupla i la retorna.

Exemple 1:

// Programa que escriu dades de lusuari (amb funcions).

typedef struct { int dia,mes,any} data;

typedef struct
{

string nom, cognom1, cognom2;


int edat;
string treball;
double sou;

} persona;

persona LlegirPersona();

int main() // Definim el nombre de persones que volem que tinguin struct persona.
{
persona treballador1, treballador2;

treballador1 = LlegirPersona();
treballador2 = LlegirPersona();

if(treballador1.edat < treballador2.edat)


{

cout << El ms petit s << treballador1.nom << i ledat s << treballador1.edat;

else if (treballador1.edat > treballador2.edat)


{

cout << El ms petit s << treballador2.nom << i ledat s << treballador2.edat;

else cout << Sn iguals. << endl;

persona LlegirPersona()
{

persona p;

cout << Introdueix nom i cognoms. << endl;


cin >> p.nom >> p.cognom1 >> p.cognom2;
cout << Introdueix edat. << endl;
cin >> p.edat;
cout << Introdueix lloc de treball. << endl;
cin >> p.treball;
cout << Introdueix el teu sou. << endl;
cin >> p.sou;

return p;

Exemple 1:
// Programa que escriu dades de lusuari (amb funcions de tuples).

typedef int data[3]; // s ms eficient per menys clar. Ho definim amb tuples:
typedef struct { int dia,mes,any} data;

typedef struct
{

string nom, cognom1, cognom2;


data datanaixement;
string treball;
double sou;

} persona;

persona LlegirPersona();

int main() // Definim el nombre de persones que volem que tinguin struct persona.
{

persona treballador1, treballador2;

treballador1 = LlegirPersona();
treballador2 = LlegirPersona();

if(treballador1.datanaixement.any < treballador2.datanaixement.any)


{

cout << El ms petit s << treballador2.nom;

else if (treballador1.datanaixement.any > treballador2.datanaixement.any)


{

cout << El ms petit s << treballador1.nom;

else if(treballador1.datanaixement.mes > treballador2.datanaixement.mes)


{

cout << s ms gran: << treballador2.nom << endl;


}

persona LlegirPersona()
{

persona p;

cout << Introdueix nom i cognoms. << endl;


cin >> p.nom >> p.cognom1 >> p.cognom2;
cout << Introdueix data, mes (numric) i any de naixement. << endl;
cin >> p.datanaixement.dia;
cin >> p.datanaixement.mes;
cin >> p.datanaixement.any;

return p;

Exemple 2:

// Programa que suma una seqncia de nombres complexes acabats en 0.0.

// Un nombre complex es representa com una tupla amb dos camps: part real i part
// imaginria.

#include <iostream>
using namespace std;

typedef struct { double real, im; } complex;

int main()
{

complex num, suma;


suma.real = 0.0;
suma.im = 0.0;

cout << Introdueix una seqncia de complexos acabada en 0.0: << endl;
cin >> num.real >> num.im;
while(num.real != 0.0 || num.im != 0.0)
{
suma.real = suma.real + num.real;
suma.im = suma.im + num.im;

cin >> num.real >> num.im;

cout << suma.real << + << suma.im << i << endl;

Tuples amb taules:

Exemple 3:

// Programa que llegeixi la informaci dun estudiant i retorni la seva nota mitjana.

typedef struct
{

string nom, cognom1, cognom2;


double notes[5]; // Tenim 5 notes per alumne.

// No podem fer una funci perqu cont una taula. Les funcions no poden retornar tuples que
continguin taules.

} estudiant;

void LlegirEstudiant (estudiant &e);

int main()
{

estudiant e;
double suma = 0; // Ha de ser del mateix tipus que la variable notes.
int i;

LlegirEstudiant(e);
for (i=0;i<5;i++)
{
suma = suma + e.notes[i];

cout << La mitjana de notes de << e.nom << << e.cognom << s: << suma / 5.0;

} // Fi main.

void LlegirEstudiant (estudiant &e)


{

cout << Introdueix nom i notes. << endl;


cin >> e.nom >> e.cognom1 >> e.cognom2;

for (int i=0;i<5;i++)


{

cin >> e.notes[i];

} // Fi for.

} // Fi acci.

Exemple 4:

// Programa que llegeix les dades i les notes de N = 40 estudiants.

// N s conegut (40), per tant, no tenim centinella.

typedef struct
{

string nom, cognom1, cognom2;


double notes[5]; // Tenim 5 notes per alumne.

} estudiant;

// No podem fer una funci perqu cont una taula. Les funcions no poden retornar tuples que
continguin taules.
void LlegirEstudiant (estudiant &e);

int main()
{
estudiant classe[40];
int i;

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

cout << Introdueix informaci de lestudiant. << endl;

LlegirEstudiant (classe[i]);

// No cal que li passi tota la classe, sin que li he de passar la posici de la classe on ha de
// guardar tota la informaci del nou estudiant. Per aix poso classe [i].

} // Fi for.
} // Fi main.

void LlegirEstudiant (estudiant &e)


{

cout << Introdueix nom i notes. << endl;


cin >> e.nom >> e.cognom1 >> e.cognom2;

for (int i=0;i<5;i++)


{

cin >> e.notes[i];

} // Fi for.

} // Fi acci.

Exemple 4:

// Programa que llegeix les dades i les notes de N = 40 estudiants i retorna quin
// estudiant t millors notes.

// N s conegut (40), per tant, no tenim centinella.


typedef struct
{

string nom, cognom1, cognom2;


double notes[5]; // Tenim 5 notes per alumne.
} estudiant;

// No podem fer una funci perqu cont una taula. Les funcions no poden retornar tuples que
continguin taules.

void LlegirEstudiant (estudiant &e);


double Mitjana (estudiant e);

int main()
{
estudiant classe[40];
int i, imax = 0;
double max = 0, mitja;

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

cout << Introdueix informaci de lestudiant. << endl;

LlegirEstudiant (classe[i]);

// No cal que li passi tota la classe, sin que li he de passar la posici de la classe on ha de
// guardar tota la informaci del nou estudiant. Per aix poso classe [i].

mitja = Mitjana (classe[i]);

if (mitja > max) { max = mitja; imax = i; }

} // Fi for.

cout << Mitjana mxima: << max << de lestudiant << classe[imax].nom;

} // Fi main.

void LlegirEstudiant (estudiant &e)


{

cout << Introdueix nom i notes. << endl;


cin >> e.nom >> e.cognom1 >> e.cognom2;

for (int i=0;i<5;i++)


{

cin >> e.notes[i];

} // Fi for.

} // Fi acci.

double Mitjana (estudiant e)


{

double suma = 0;
int i;

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

suma = suma + e.notes[i];

} // Fi for.

return suma / 5;

} // Fi funci.

You might also like