Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Ricorsione in java!

    Avreste qualche idea su come implementare l'algoritmo che segue vi posto quello che ho scritto (praticamente nulla fatemi sapere).

    Si scriva un programma che presa in input una espressione matematica da linea di comando ne
    calcoli il risultato e lo visualizzi.
    Tale espressione dovrà seguire la grammatica:
    espressione = numero | numero operatore espressione| (espressione)
    operatore = + | *
    dove numero è un numero intero decimale positivo.
    Esempi:
    10+20
    15+(12+6+4*(5+8))
    Il risultato deve essere calcolato assumendo che tutti gli operatori abbiano la stessa
    precedenza e che, come di norma, le parentesi eventualmente presenti siano usate per
    modificare l'associatività.
    L'algoritmo implementato per il calcolo dovrà essere ricorsivo (ogni espressione fra parentesi
    dovrà essere valutata attraverso una chiamata ricorsiva).
    Il programma può assumere che l'espressione fornita su linea di comando sia consistente con
    la grammatica proposta.


    public class EspressioniRicorsive {


    public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    System.out.println("Inserire la espressione:");
    String strExpr = scan.nextLine();
    System.out.println("Risultato:"+ calcoloEspressione(strExpr));
    }

    public int calcoloEspression(String espressione){
    ?!?!?!?!?!??!??!??!??!??!??!??!??!??!?
    }
    }

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,459

    Moderazione

    Originariamente inviato da riccardocandido
    Avreste qualche idea su come implementare l'algoritmo che segue vi posto quello che ho scritto (praticamente nulla fatemi sapere).
    Siccome qui non si fanno i compiti a casa conto terzi, dovresti almeno dire cosa non ti è chiaro o cosa non riesci a fare nello specifico della funzione ricorsiva.

    Se la risposta alla domanda di cui sopra è tutto, allora non è a un forum che devi rivolgerti, ma alla documentazione del linguaggio o al manuale su cui studi per approfondire un minimo l'argomento e porre un dubbio più specifico o almeno tentare di implementare una soluzione, anche se non corretta o con errori.

    Provvedi a fornire le informazioni o le parti mancanti e saremo ben felici di darti una mano per chiarire i tuoi dubbi.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Non voglio il codice davvero mi basta sapere secondo VOI come si può implementare un codice che risolva tale problema. Ho provato a verificare carattere per carattere e una volta trovato un + * ( ) a richiamare la funzione ma non riesco ad andare ad avanti. Mi basta la logica poi se volte cancellate pure il post davvero non vi chiedo altro!

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Premetto che non mi sono mai cimentato nel fare un parser algebrico (di ciò si parla) , ma ho qualche idea (forse campata per aria o addirittura sbagliata) su come potrebbe essere strutturato..
    Penso che un parser debba procedere similmente così:
    - ottiene in input la stringa "espressione"
    - costruisca una sorta di albero a partire dall'espressione , seguendo le priorità degli operatori , sulla linea della notazione polacca
    -partendo dalle foglie dell'albero creato risale e "computa" man mano l'espressione

    Non ho ben letto la risorsa che sto per linkarti ma fa un accenno alla notazione polacca e abbozza anche qualcosa in linguaggio java a riguardo link


  5. #5
    grazie mille ho risolto. Grazie per non avermi fatto la paternale come certi altri. SEI UN GRANDE

  6. #6

    Moderazione

    Originariamente inviato da riccardocandido
    Grazie per non avermi fatto la paternale come certi altri.
    Giusto per dovere di cronaca... hai postato un thread che sembrava la classica richiesta "plz give me teh codez" ed era fuori regolamento per diversi altri motivi che ti sono stati spiegati in maniera estremamente pacata. Nonostante questo, il thread ti è stato chiuso solo perché ne hai aperto un altro qui; non mi pare che ci siano motivi per offendersi e tirare frecciatine di questo genere.

    In ogni caso, il tipo di parser più semplice per gestire espressioni matematiche è il parser a discesa ricorsiva (recursive descent parser), che corrisponde perfettamente alla tua richiesta iniziale; trovi in rete moltissimo materiale in proposito. Occhio che le implementazioni che trovi in giro in genere seguono le regole di precedenza di * sul +, mentre nella tua consegna sono equiparati.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.