Ultima modifica:
C++:
#include <iostream>
#include <string>
using namespace std;
struct libro {
string nome;
int anno;
bool operator==(const libro&) const = default;
bool operator==(int i) { return anno == i; }
bool operator<(int i) { return anno < i; }
};
struct libreria {
libro L[100];
int n;
};
void Carica(libreria& o) {
for (int i = 0; i < o.n; i++) {
cout << "Inserisci nome libro: ";
cin >> o.L[i].nome;
cout << "Inserisci anno libro: ";
cin >> o.L[i].anno;
}
}
void Mostra(libreria& o) {
for (int i = 0; i < o.n; i++) {
cout << "Nome del libro: " << o.L[i].nome << " (" << o.L[i].anno << ")" << endl;
}
}
void Elimina(libreria& o, int x) {
for (int i = 0; i < o.n; i++) {
if (o.L[i] == x) {
for (int j = i; j < o.n; j++) {
libro b = o.L[j];
o.L[j] = o.L[j + 1];
o.L[j + 1] = b;
}
i--;
o.n--;
}
}
}
void Ordinamento(libreria& o) {
bool scambio = true;
while ((o.n > 1) and (scambio == true)) {
scambio = false;
int i = 0;
while (i < o.n - 1) {
if (o.L[i].anno > o.L[i + 1].anno) {
libro y = o.L[i];
o.L[i] = o.L[i + 1];
o.L[i + 1] = y;
scambio = true;
} else if ((o.L[i].anno == o.L[i + 1].anno) and (o.L[i].nome > o.L[i + 1].nome)) {
libro y = o.L[i];
o.L[i] = o.L[i + 1];
o.L[i + 1] = y;
scambio = true;
}
i--;
}
o.n--;
}
}
int Ricerca(libreria& o, int s, int d, int y) {
if (s < d) {
int m = (s + d) / 2;
if (o.L[m] == y) {
return m;
} else if (o.L[m] < y) {
return Ricerca(o, m + 1, d, y);
} else {
return Ricerca(o, s, m - 1, y);
}
} else {
return -1;
}
}
int main() {
libreria b;
cout << "Numero di libri da inserire: ";
cin >> b.n;
Carica(b);
Ordinamento(b);
int x;
cout << "Elemento da eliminare: ";
cin >> x;
Elimina(b, x);
int y;
cout << "Elemento da ricercare: ";
cin >> y;
int n;
Ricerca(b, 0, n, y);
Mostra(b);
return 0;
}