CCCPaste

Corso C++ 23 - lezione 31 (funzioni seconda p...

#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('-');


}