Ultima modifica:
Ne ho fatti un paio a saltare, ero partito col volerli fare tutti ma non ho proprio tempo, ho implementato 1, 2, 3, 19 e 21.
C++:
#include <iostream>
#include <vector>
#include <string>
int ask_num(const char* prompt = nullptr)
{
if (prompt == nullptr)
prompt = "Inserisci un numero: ";
int n;
std::cout << prompt;
std::cin >> n;
std::cin.ignore();
return n;
}
std::vector<int> ask_numbers(int count)
{
std::vector<int> nums;
for (int i = 0; i < count; i++)
nums.push_back(ask_num());
return nums;
}
void print_vector(const char* label, const std::vector<int> &nums)
{
std::cout << label << std::endl;
for (const auto& n : nums)
std::cout << n << std::endl;
}
void esercizio1()
{
int n = ask_num("Quanti numeri vuoi inserire? ");
auto numbers = ask_numbers(n);
double media = 0;
int n_min = numbers.at(0);
int n_max = n_min;
for (const auto& x : numbers)
{
media += x;
if (x < n_min)
n_min = x;
if (x > n_max)
n_max = x;
}
media /= n;
std::cout << "Media: " << media << std::endl
<< "Min: " << n_min << std::endl << "Max: " << n_max << std::endl;
}
void esercizio2()
{
int n = ask_num("Quanti numeri vuoi inserire? ");
auto numbers = ask_numbers(n);
std::vector<int> even_nums, odd_nums;
for (const auto& n : numbers)
{
if ((n & 1) == 0)
even_nums.push_back(n);
else
odd_nums.push_back(n);
}
print_vector("Even numbers:", even_nums);
print_vector("Odd numbers:", odd_nums);
}
void esercizio3()
{
int n = ask_num("Quanti numeri vuoi inserire? ");
auto numbers = ask_numbers(n);
for (int i = 0; i < numbers.size(); i++)
if (numbers.at(i) == i)
std::cout << "Value at index " << i << " has same value as its index" << std::endl;
}
void esercizio19()
{
typedef struct
{
std::string Name;
std::string PhoneNumber;
} PhonebookEntry;
std::string a, b;
PhonebookEntry entry;
std::vector<PhonebookEntry> phonebook;
int c, i;
do
{
std::cout << "Scegli un'operazione:" << std::endl
<< "[0] Esci dal programma" << std::endl
<< "[1] Inserisci contatto" << std::endl
<< "[2] Modifica contatto" << std::endl
<< "[3] Elimina contatto" << std::endl
<< "[4] Lista rubrica" << std::endl;
std::cout << "Sono presenti " << phonebook.size() << " contatti in rubrica" << std::endl;
c = ask_num("# ");
switch (c)
{
case 1:
// Inserimento
std::cout << "Nome contatto: ";
std::getline(std::cin, entry.Name);
std::cout << "Numero di telefono: ";
std::getline(std::cin, entry.PhoneNumber);
phonebook.push_back(entry);
std::cout << "Contatto inserito" << std::endl;
break;
case 2:
// Modifica
std::cout << "Cerca per nome: ";
std::getline(std::cin, a);
for (auto& e : phonebook)
{
if (e.Name != a)
continue;
std::cout << "Il contatto ha numero: " << e.PhoneNumber << std::endl
<< "Inserisci nuovo numero: ";
std::getline(std::cin, e.PhoneNumber);
}
break;
case 3:
// Eliminazione
std::cout << "Cerca per nome: ";
std::getline(std::cin, a);
for (i = 0; i < phonebook.size(); i++)
{
const auto e = phonebook.at(i);
if (e.Name == a)
{
phonebook.erase(phonebook.begin() + i);
std::cout << "Il contatto e' stato rimosso" << std::endl;
break;
}
}
break;
case 4:
for (const auto& e : phonebook)
std::cout << "Nome: " << e.Name << " - Numero: " << e.PhoneNumber << std::endl;
break;
}
} while (c != 0);
}
void esercizio21()
{
int n;
do
{
n = ask_num("Inserisci la chiave tra 0 e 26: ");
} while (n < 0 || n > 26);
std::string plainText, cipherText;
std::cout << "Inserisci il messaggio da cifrare: ";
std::getline(std::cin, plainText);
int len = plainText.size();
for (int i = 0; i < len; i++)
{
char c = toupper(plainText[i]);
if ('A' <= c && c <= 'Z')
cipherText += (char)('A' + ((c - 'A' + n) % 26));
else
cipherText += c;
}
std::cout << "Messaggio cifrato: " << cipherText << std::endl;
}
int main()
{
esercizio1();
esercizio2();
esercizio3();
esercizio19();
esercizio21();
return 0;
}