#pragma region IntelliSense_Fix
#ifdef __INTELLISENSE__
#include <print>
#include <string>
#include <chrono>
#endif
#pragma endregion
import std;
int valuta_fattore(std::string_view expr = "");
int valore_assoluto(int n);
int stima_ampiezza();
void riga_divisoria(char simbolo, int lunghezza=stima_ampiezza());
//Definizione di una funzione
// Intestazione
// {
// dichiarazione/definizione di VARIABILI LOCALI
// corpo con istruzioni
// }
//
//versioni legacy e moderne
//INTESTAZIONE LEGACY per funzione con valore di ritorno
// tipo_valore_restituito nome_funzione(lista parametri, anche vuota)
// {
// istruzioni
//
// return espressione_tipo_restituito
// }
int f() { return 200;}
//void f2(int p1, int p2 = 10, int p3 = 20, int p4=56);
//void disegnaRettangolo(int base, int altezza, int colore = NERO, int spessore = 1, int livello = 0);
int valuta_espressione(std::string_view& expr) {
// Un'espressione inizia sempre con un fattore
int risultato = valuta_fattore(expr);
//... ecc
return risultato;
}
int valuta_fattore(std::string_view expr) {
if (expr.empty()) return 0;
// Caso 1: Trova una parentesi. La delega torna all'espressione.
if (expr.front() == '(') {
expr.remove_prefix(1); // Consuma '('
int risultato = valuta_espressione(expr); // Chiamata mutuamente ricorsiva
//... ecc
}
}
//emula la funzione abs della STL (ma solo per gli int)
int valore_assoluto(int n)
{
//if (n < 0)
//{
// n = -n;
//}
//
//return n;
return n >= 0 ? n : -n;
}
int stima_ampiezza() { return 60; }
void riga_divisoria(char simbolo, int lunghezza)
{
std::println("{}", std::string(lunghezza, simbolo));
return;
}
auto main() -> int
{
//f2(10,20);
int risultato = -100;
std::println("{}", valore_assoluto(34));
riga_divisoria('-');
std::println("{}", risultato);
int v = valore_assoluto(-9);
if (valore_assoluto(risultato) > 80)
{
std::println("Soglia sicurezza superata!!");
}
riga_divisoria('-');
}