fedez_
14-01-2015, 20:02
TESTO DELL'ESERCIZIO
Scrivere un programma, composto da due classi, una denominata Programma contenente il main, l’altra i metodi necessari allo svolgimento delle operazioni, denominata Metodi, che svolga quanto segue:
Classe Programma:
Riceve un numero positivo n, istanziando un array di interi denominato interi di dimensione n;
Riceve in ingresso due interi a e b, tali che a < b;
Invoca il metodo occorrenzeContenuto() (decritto sotto) passando come parametri interi, a e b;
Stampa l’array originale e quello modificato;
Qualora il contenuto dei due array sia diverso, invoca il metodo uniformaContenuto() (descritto sotto) passando come parametri i due array;
Stampa a video il risultato del metodo uniformaContenuto();
Classe Metodi:
Definisce un metodo occorrenzeContenuto() che riceve come parametri un array di interi denominato par e due interi a e b e conta quanti elementi di par non sono compresi strettamente fra a e b. Se tale valore è maggiore di (lunghezza di par)/3, sostituisce i valori di par non compresi fra a e b con il risultato del metodo calcolaMedia(); lascia l’array inalterato altrimenti;
Definisce un metodo calcolaMedia() che riceve come parametri un array di interi denominato par e due interi a e b e restituisce la media dei valori di par non compresi fra a e b;
Definisce un metodo uniformaContenuto() che riceve come parametri due array di interi denominati par1 e par2, creando un terzo array denominato rit i cui valori in posizione i sono pari alla differenza dei valori di par1 e par2 in posizione i; ad esempio, dati gli array {6, 7, 8, 9, 10} e {1, 2, 3, 4, 5} il risultato sarebbe un terzo array {5, 5, 5, 5, 5};
import java.util.Scanner;
public class ProgrammaB {
public static void main (String [] args) {
Scanner tastiera = new Scanner (System.in);
System.out.println("Inserisci la dimensione dell'array");
int d = tastiera.nextInt();
int i;
int interi [] = new int [d];
System.out.println("Riempi l'array di elementi");
for (i=0; i<interi.length; i++)
interi[i]= tastiera.nextInt();
int a, b;
do {
System.out.println("Inserisci il valore di a");
a = tastiera.nextInt();
System.out.println("Inserisci il valore di b");
b = tastiera.nextInt();
if (a>b)
System.out.println("Riprova, a deve essere minore di b");
} while (a>b);
int [] interiOriginale = new int [d];
for (i=0; i<interi.length; i++)
interiOriginale[i] = interi[i];
int par [] = occorrenzeContenuto(interi, a, b);
System.out.println("Array interiOriginale");
for (i=0; i<interiOriginale.length; i++)
System.out.print(interiOriginale[i] + " ");
System.out.println();
System.out.println("Array par");
for (i=0; i<par.length; i++)
System.out.print(par[i] + " ");
System.out.println();
boolean flag = true;
for (i=0; i<interiOriginale.length && flag; i++) {
if (interiOriginale[i] != par[i])
flag = false;
}
if (!(flag)) {
int [] rit = uniformaContenuto(interiOriginale, par);
System.out.println("Array rit");
for (i=0; i<rit.length; i++)
System.out.print(rit[i] + " ");
}
}
public static int [] occorrenzeContenuto (int [] par, int a, int b) {
int i;
int contatore =0;
for (i=0; i<par.length; i++) {
if ((par[i]<a) || (par[i]>b))
contatore++;
}
if (contatore > (par.length/2)) {
for (i=0; i<par.length; i++) {
if ((par[i]<a) || (par[i]>b)) {
par [i] = calcolaMedia (par, a, b);
}
}
}
return par;
}
public static int calcolaMedia (int [] par, int a, int b) {
int i;
int somma = 0;
int contatore = 0;
for (i=0; i<par.length; i++) {
if ((par[i]<a) || (par[i]>b)) {
somma = somma + par [i];
contatore++;
}
}
System.out.println("Somma prima divisione: "+somma);
somma = somma / contatore;
System.out.println("Somma finale: "+somma);
return somma;
}
public static int [] uniformaContenuto (int [] par1, int [] par2) {
int i;
int [] rit = new int [par1.length];
for (i=0; i<par1.length; i++)
rit[i] = par1[i] - par2 [i];
return rit;
}
}
Il problema è semplice: ogni elemento dell'array da modificare riceve inspiegabilmente, una media diversa... ? chi sa aiutarmi?! esame in vista :S
Scrivere un programma, composto da due classi, una denominata Programma contenente il main, l’altra i metodi necessari allo svolgimento delle operazioni, denominata Metodi, che svolga quanto segue:
Classe Programma:
Riceve un numero positivo n, istanziando un array di interi denominato interi di dimensione n;
Riceve in ingresso due interi a e b, tali che a < b;
Invoca il metodo occorrenzeContenuto() (decritto sotto) passando come parametri interi, a e b;
Stampa l’array originale e quello modificato;
Qualora il contenuto dei due array sia diverso, invoca il metodo uniformaContenuto() (descritto sotto) passando come parametri i due array;
Stampa a video il risultato del metodo uniformaContenuto();
Classe Metodi:
Definisce un metodo occorrenzeContenuto() che riceve come parametri un array di interi denominato par e due interi a e b e conta quanti elementi di par non sono compresi strettamente fra a e b. Se tale valore è maggiore di (lunghezza di par)/3, sostituisce i valori di par non compresi fra a e b con il risultato del metodo calcolaMedia(); lascia l’array inalterato altrimenti;
Definisce un metodo calcolaMedia() che riceve come parametri un array di interi denominato par e due interi a e b e restituisce la media dei valori di par non compresi fra a e b;
Definisce un metodo uniformaContenuto() che riceve come parametri due array di interi denominati par1 e par2, creando un terzo array denominato rit i cui valori in posizione i sono pari alla differenza dei valori di par1 e par2 in posizione i; ad esempio, dati gli array {6, 7, 8, 9, 10} e {1, 2, 3, 4, 5} il risultato sarebbe un terzo array {5, 5, 5, 5, 5};
import java.util.Scanner;
public class ProgrammaB {
public static void main (String [] args) {
Scanner tastiera = new Scanner (System.in);
System.out.println("Inserisci la dimensione dell'array");
int d = tastiera.nextInt();
int i;
int interi [] = new int [d];
System.out.println("Riempi l'array di elementi");
for (i=0; i<interi.length; i++)
interi[i]= tastiera.nextInt();
int a, b;
do {
System.out.println("Inserisci il valore di a");
a = tastiera.nextInt();
System.out.println("Inserisci il valore di b");
b = tastiera.nextInt();
if (a>b)
System.out.println("Riprova, a deve essere minore di b");
} while (a>b);
int [] interiOriginale = new int [d];
for (i=0; i<interi.length; i++)
interiOriginale[i] = interi[i];
int par [] = occorrenzeContenuto(interi, a, b);
System.out.println("Array interiOriginale");
for (i=0; i<interiOriginale.length; i++)
System.out.print(interiOriginale[i] + " ");
System.out.println();
System.out.println("Array par");
for (i=0; i<par.length; i++)
System.out.print(par[i] + " ");
System.out.println();
boolean flag = true;
for (i=0; i<interiOriginale.length && flag; i++) {
if (interiOriginale[i] != par[i])
flag = false;
}
if (!(flag)) {
int [] rit = uniformaContenuto(interiOriginale, par);
System.out.println("Array rit");
for (i=0; i<rit.length; i++)
System.out.print(rit[i] + " ");
}
}
public static int [] occorrenzeContenuto (int [] par, int a, int b) {
int i;
int contatore =0;
for (i=0; i<par.length; i++) {
if ((par[i]<a) || (par[i]>b))
contatore++;
}
if (contatore > (par.length/2)) {
for (i=0; i<par.length; i++) {
if ((par[i]<a) || (par[i]>b)) {
par [i] = calcolaMedia (par, a, b);
}
}
}
return par;
}
public static int calcolaMedia (int [] par, int a, int b) {
int i;
int somma = 0;
int contatore = 0;
for (i=0; i<par.length; i++) {
if ((par[i]<a) || (par[i]>b)) {
somma = somma + par [i];
contatore++;
}
}
System.out.println("Somma prima divisione: "+somma);
somma = somma / contatore;
System.out.println("Somma finale: "+somma);
return somma;
}
public static int [] uniformaContenuto (int [] par1, int [] par2) {
int i;
int [] rit = new int [par1.length];
for (i=0; i<par1.length; i++)
rit[i] = par1[i] - par2 [i];
return rit;
}
}
Il problema è semplice: ogni elemento dell'array da modificare riceve inspiegabilmente, una media diversa... ? chi sa aiutarmi?! esame in vista :S