Ciao ragazzi con questo post non vi chiedo di risolvermi l'esercizio (anche perchè è già risolto) ma vorrei chiedervi dei chiarimenti sul suo funzionamento
- class E1{
/** Realizzare in modo iterativo la funzione f qui sotto riportata che riconosce se l'array in ingresso
* corrisponde ad una frase della grammatica {0}1{0}1{0}1{0}1. Si prediligono soluzioni che usano il
* minor numero possibile di cicli for (o while).
*
* Come riferimento si consideri che l'esecuzione del test
* (eseguita dal metodo main) deve riportare il risultato true.
**/
public static boolean f(int[] a){
if (a.length==0 || a[a.length-1]!=1){
return false;
}
int c=0;
for (int i=0;i<a.length-1;i++){
if (a[i]!=0 && a[i]!=1){
return false;
}
if (a[i]==1){
c++;
}
}
System.out.println(arrayToString(a));
return (c==3);
}
public static boolean test(){
return f(new int[]{1,1,1,1}) &&
f(new int[]{0,0,0,1,0,1,1,0,0,1}) &&
f(new int[]{1,0,0,1,1,0,0,0,0,1}) &&
f(new int[]{1,0,0,1,0,0,1,0,0,0,0,1}) &&
!f(new int[]{}) &&
!f(new int[]{1,1,1}) &&
!f(new int[]{1,1}) &&
!f(new int[]{1,0}) &&
!f(new int[]{0,0,1,0,1,0,0,1}) &&
!f(new int[]{0,1,0,1,1,0,0,1,1}) &&
!f(new int[]{1,1,1,1,0}) &&
!f(new int[]{0,0,1,0,0,1,0,1,0,0,0,1,0,0}) &&
!f(new int[]{0,1,0,1,0,1,2,1}) &&
!f(new int[]{0,1,0,1,3,1,0,1});
}
public static void main(String[] s){
System.out.println(""+test());
}
static String arrayToString(int[] a){
String s="";
for (int i=0;i<a.length;i++) {
s+=a[i]+";";
}
return s;
}
static boolean arrayEquals(int[] a,int[] b){
if (a.length!=b.length) return false;
for (int i=0;i<a.length;i++){
if (a[i]!=b[i]) {
return false;
}
}
return true;
}
}
Il problema è che essendo ignorante (anche dopo aver letto 3-4 libri sull'argomento) non mi è chiaro cosa mi viene richiesto, cosa si intende per grammatica {0}1{0}1 ... e come fà a tornare true ?
Ciauz !!!![]()

Rispondi quotando