Homework 3: riconoscimento di parentesi

Bisogna riconoscere se in una stringa di testo contenente solo parentesi aperte e chiuse le parentesi sono corrette, ovvero:

  • una stringa di 0 caratteri è un gruppo di parentesi corretto
  • un gruppo corretto seguito da altri gruppi corretti è corretto
  • per ogni parentesi aperta ci deve essere la corrispondente parentesi chiusa
  • tra due parentesi è contenuto un gruppo di parentesi corretto

I caratteri che dovete considerare come parentesi sono:

  • parentesi aperte: { [ ( <
  • parentesi chiuse: } ] ) >

Realizzate la funzione ricorsiva riconosci che:

  • riceve come argomento una stringa di testo e tutti gli altri argomenti che ritenete necessari
  • riconosce se le parentesi sono corrette oppure no
  • torna 0 (FALSE) o 1 (TRUE) per indicare il risultato del test

Il main deve:

  • leggere una stringa lunga al massimo 100 caratteri
  • chiamare la funzione riconosci
  • stampare SI oppure NO a seconda del risultato del test
  • uscire

Esempi:

  • Input: {[][(<>([])<{}[]>)<>]}
  • Output: SI
  • Input: {[][(<>(])<{}[]>)<>]}
  • Output: NO (manca una parentesi aperta)
  • Input : {[][(<>([])<{}[>)<>]}
  • Output: NO (manca una parentesi chiusa)

Risultati completi

Ho fatto una prima correzione degli homework, che trovate QUI
  • alcuni hanno lasciato dei prompt nel programma, li ho commentati
  • per uno il prog si è bloccato su un esempio, ho dovuto ammazzarlo con ^C (trova il diff vuoto)
  • qualcuno ha usato lh invece di lb che dà un errore di allineamento

Ho competato i test e l'analisi dei programmi

  • Alcuni non hanno svolto il programma come funzione ricorsiva (prendendo metà del punteggio)
  • Altri contano le parentesi e falliscono un test in cui il conteggio è giusto ma le parentesi non sono nidificate correttamente (prendendo metà del punteggio)
    • Esempio: <(<[<<{(<([<[[[({<{<}>()[]>})]]]>])>)}>>]>)>

Studente PASSED ricorsivaSorted ascending test conteggio punti
Federica Spini 15 NO NO 3.75/20 = 0.1825
Lorenzo Pirro 10 NO NO 2.5/20 = 0.125
Lorenzo Zarfati 10 NO NO 2.5/20 = 0.125
Massotti Melvin 20 NO SI 10/20 = 0.5
Sara Tramonte 20 NO SI 10/20 = 0.5
Simone Martinello 20 NO NO 5/20 = 0.25
Stefano Senarighi 20 NO NO 5/20 = 0.25
Bardh Prenkaj 20 SI NO 10/20 = 0.5
Davide Sericoli 20 SI NO 10/20 = 0.5

Gli altri hanno preso PASSED/20


This topic: Architetture2/MZ/AA13_14 > HomeWork3
Topic revision: r5 - 2014-06-28 - AndreaSterbini
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback