A menos que quieras que un hacker pueda secuestrar su portátil..... Si parece un cable de carga, se ve q es un cable de carga y carga su teléfono, debe ser un cable de carga, ¿verdad? Bueno, un poco si. Pero eso no significa que eso únicamente sea eso. Mike Grover, un investigador de seguridad con sede en San Francisco, ha hecho un cable de carga para iPhone, que, cuando está conectado al teléfono en un extremo y su portátil en el otro, puede piratear el portátil. ¿Suena siniestro? Solo porque hay mucho en juego. El autor intelectual detrás del hack puede enviar correos electrónicos de phishing, etc... Grover comenzó a experimentar con cables maliciosos en 2017 como parte de un intento de aprender cómo diseñar, fabricar y ensamblar placas de circuito impreso, lo que hace a mano con herramientas de consumo de su cocina. Entonces comenzó a suceder algo gracioso: la gente se enteró de los cables de Grover, por lo que decidió comenzar a venderlos. En este momento, los cables O...
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.