Según se comenta, el examen de programación del 3 de Febrero, no será un programa a desarrollar, si no más bien una prueba que constará de varios ejercicios.
// Definición de constantes const unsigned int MAX = 10;
// Definición de tipos typedef int TpElemento; typedef TpElemento TpVector[MAX+1]; struct TpDatos{ TpVector v; unsigned int numDatos; };
// Declaración de prototipos // Algoritmo de búsqueda secuencial: si encuentra // el elemento, devuelve true; false, si no lo // encuentra. Se hace búsqueda con centinela: // el elemento a buscar se inserta en la posición // datos.numDatos. // PRECONDICIÓN: datos.numDatos >= 0 && datos.numDatos<=MAX bool BuscarSecCent(TpDatos &datos, const TpElemento x);
// Escribe por pantalla la lista de datos void EscribirDatos(const TpDatos &datos);
int main(){ TpDatos datos = {{10, 5, 11, 44, -7, 12, 14, -6, 21, 129, 0},10}; TpElemento elem;
cout << "Los datos son: " << endl; EscribirDatos(datos);
cout << "Introduzca un elemento a buscar: "; cin >> elem;
if (BuscarSecCent(datos, elem)){ cout << elem << " está en la lista de datos." << endl; } else{ cout << elem << " NO está en la lista de datos." << endl; } }
bool BuscarSecCent(TpDatos &datos, const TpElemento x){ bool encontrado = false; unsigned int ind = 0;
datos.v[datos.numDatos] = x; // Se inserta el centinela while (datos.v[ind] != x){ ind++; } if (ind != datos.numDatos){ encontrado = true; } return encontrado; }
// Definición de constantes const unsigned int MAX = 10;
// Definición de tipos typedef int TpElemento; typedef TpElemento TpVector[MAX]; struct TpDatos{ TpVector v; unsigned int numDatos; };
// Declaración de prototipos // Algoritmo de búsqueda binaria: si encuentra // el elemento, devuelve true; false, si no lo // encuentra bool BuscarBin(const TpDatos &datos, const TpElemento x);
// Escribe por pantalla la lista de datos void EscribirDatos(const TpDatos &datos);
int main(){ TpDatos datos = {{-1, 3, 5, 7, 11, 13, 15, 17, 19, 21},10}; TpElemento elem;
cout << "Los datos son: " << endl; EscribirDatos(datos);
cout << "Introduzca un elemento a buscar: "; cin >> elem;
if (BuscarBin(datos, elem)){ cout << elem << " está en la lista de datos." << endl; } else{ cout << elem << " NO está en la lista de datos." << endl; } }
bool BuscarBin(const TpDatos &datos, const TpElemento x){ bool encontrado = false; unsigned int izq, der, m;
izq = 0; der = datos.numDatos - 1;
while (izq <= der && !encontrado){ m = (izq + der) / 2; // Posición central de la lista if (datos.v[m] == x){ encontrado = true; } else if (datos.v[m] < x){ izq = m + 1; // Buscamos en la mitad derecha } else{ der = m - 1; // Buscamos en la mitad izquierda } }
esto si que viene bien para el examen:
ResponderEliminar--------------------------------------
(burbuja + centinela)
#include
using namespace std;
// Definición de constantes
const unsigned int MAX = 10;
// Definición de tipos
typedef int TpElemento; // Debe permitir los operadores relacionales
typedef TpElemento TpVector[MAX];
struct TpDatos{
TpVector v;
unsigned int numDatos;
};
// Ordena en orden creciente una lista de datos
void OrdenarPorIntercambio(TpDatos &dato);
// Escribe por pantalla los datos
void EscribirDatos(const TpDatos &datos);
int main(){
TpDatos datos = {{10, 5, 11, 44, -7, 12, 14, -6, 21, 129},10};
cout << "Los datos son: " << endl;
EscribirDatos(datos);
OrdenarPorIntercambio(datos);
cout << "Los datos son ORDENADOS son: " << endl;
EscribirDatos(datos);
return 0;
}
// Ordena en orden creciente una lista de datos
void OrdenarPorIntercambio(TpDatos &datos){
TpElemento temp;
unsigned int i;
bool hayInter = true;
i = 1;
while (i < datos.numDatos && hayInter){
hayInter = false;
for (unsigned int j = datos.numDatos-1; j >= i; --j){
if (datos.v[j-1] > datos.v[j] ){ // ¿Intercambiar?
// Intercambiamos los elementos:
hayInter = true;
temp = datos.v[j-1];
datos.v[j-1] = datos.v[j];
datos.v[j] = temp;
}
}
++i;
}
}
void EscribirDatos(const TpDatos &datos){
for (unsigned i=0; i<datos.numDatos; ++i){
cout << datos.v[i] << ' ';
}
cout << endl << datos.numDatos << " elementos." << endl;
}
(búsqueda secuencial + centinela):
ResponderEliminar#include
using namespace std;
// Definición de constantes
const unsigned int MAX = 10;
// Definición de tipos
typedef int TpElemento;
typedef TpElemento TpVector[MAX+1];
struct TpDatos{
TpVector v;
unsigned int numDatos;
};
// Declaración de prototipos
// Algoritmo de búsqueda secuencial: si encuentra
// el elemento, devuelve true; false, si no lo
// encuentra. Se hace búsqueda con centinela:
// el elemento a buscar se inserta en la posición
// datos.numDatos.
// PRECONDICIÓN: datos.numDatos >= 0 && datos.numDatos<=MAX
bool BuscarSecCent(TpDatos &datos, const TpElemento x);
// Escribe por pantalla la lista de datos
void EscribirDatos(const TpDatos &datos);
int main(){
TpDatos datos = {{10, 5, 11, 44, -7, 12, 14, -6, 21, 129, 0},10};
TpElemento elem;
cout << "Los datos son: " << endl;
EscribirDatos(datos);
cout << "Introduzca un elemento a buscar: ";
cin >> elem;
if (BuscarSecCent(datos, elem)){
cout << elem << " está en la lista de datos." << endl;
}
else{
cout << elem << " NO está en la lista de datos." << endl;
}
}
bool BuscarSecCent(TpDatos &datos, const TpElemento x){
bool encontrado = false;
unsigned int ind = 0;
datos.v[datos.numDatos] = x; // Se inserta el centinela
while (datos.v[ind] != x){
ind++;
}
if (ind != datos.numDatos){
encontrado = true;
}
return encontrado;
}
void EscribirDatos(const TpDatos &datos){
for (unsigned i=0; i<datos.numDatos; ++i){
cout << datos.v[i] << ' ';
}
cout << endl << datos.numDatos << " elementos." << endl;
}
(búsqueda binaria):
ResponderEliminar#include
using namespace std;
// Definición de constantes
const unsigned int MAX = 10;
// Definición de tipos
typedef int TpElemento;
typedef TpElemento TpVector[MAX];
struct TpDatos{
TpVector v;
unsigned int numDatos;
};
// Declaración de prototipos
// Algoritmo de búsqueda binaria: si encuentra
// el elemento, devuelve true; false, si no lo
// encuentra
bool BuscarBin(const TpDatos &datos, const TpElemento x);
// Escribe por pantalla la lista de datos
void EscribirDatos(const TpDatos &datos);
int main(){
TpDatos datos = {{-1, 3, 5, 7, 11, 13, 15, 17, 19, 21},10};
TpElemento elem;
cout << "Los datos son: " << endl;
EscribirDatos(datos);
cout << "Introduzca un elemento a buscar: ";
cin >> elem;
if (BuscarBin(datos, elem)){
cout << elem << " está en la lista de datos." << endl;
}
else{
cout << elem << " NO está en la lista de datos." << endl;
}
}
bool BuscarBin(const TpDatos &datos, const TpElemento x){
bool encontrado = false;
unsigned int izq, der, m;
izq = 0;
der = datos.numDatos - 1;
while (izq <= der && !encontrado){
m = (izq + der) / 2; // Posición central de la lista
if (datos.v[m] == x){
encontrado = true;
}
else if (datos.v[m] < x){
izq = m + 1; // Buscamos en la mitad derecha
}
else{
der = m - 1; // Buscamos en la mitad izquierda
}
}
return encontrado;
}
void EscribirDatos(const TpDatos &datos){
for (unsigned i=0; i<datos.numDatos; ++i){
cout << datos.v[i] << ' ';
}
cout << endl << datos.numDatos << " elementos." << endl;
}
Gracias por la aportación juanma, seguro q nos pone alguna ordenación si que si.
ResponderEliminarSuerte y al toro!!!!
la lástima ha sido que no había internet jajajaja
ResponderEliminarPues al final, ni ordenación, ni na.
ResponderEliminarMe esperaba otro tipo de examen.