346 lines
12 KiB
C#
346 lines
12 KiB
C#
namespace array_funzioni;
|
|
|
|
class Program
|
|
{
|
|
const int dimensione=5;
|
|
|
|
const int divisibile=7;
|
|
|
|
|
|
static void Main(string[] args)
|
|
{
|
|
Console.Clear();
|
|
//dichiarazione e inizializzazione variabili
|
|
int scelta;
|
|
bool opzione1=false, opzione5=false;
|
|
|
|
int[] insieme1=new int[dimensione];
|
|
int[] insieme2=new int[dimensione];
|
|
int[] insieme3=new int[dimensione];
|
|
int[] pari=new int[dimensione];
|
|
int[] dispari=new int[dimensione];
|
|
|
|
|
|
int[] insiemeDoppio=new int[dimensione*2];
|
|
int[] intersezione=new int[dimensione*2];
|
|
int[] insiemeTriplo=new int[dimensione*3];
|
|
//--------------------------------------------------------------------------------------------//
|
|
|
|
//menù
|
|
do{
|
|
Console.WriteLine("Scegliere un'opzione:");
|
|
Console.WriteLine("1. Crea un'insieme di numeri");
|
|
Console.WriteLine("2. Mostra insieme di numeri");
|
|
Console.WriteLine("3. Calcolo media dei numeri");
|
|
Console.WriteLine("4. Mostra multipli di " +divisibile);
|
|
Console.WriteLine("5. Crea due insiemi di numeri, divisi tra pari e dispari");
|
|
Console.WriteLine("6. Mostra l'insieme dei numeri pari e dispari");
|
|
Console.WriteLine("7. Intersezione di due insiemi");
|
|
Console.WriteLine("8. Due insiemi mischiati");
|
|
Console.WriteLine("9. Altri due insiemi mischiati diversamente");
|
|
Console.WriteLine("10. Ancora altri due insiemi mischiati");
|
|
Console.WriteLine("0. Esci");
|
|
Console.Write("Scelta: ");
|
|
scelta=Convert.ToInt32(Console.ReadLine());
|
|
|
|
|
|
switch (scelta){
|
|
case 0:
|
|
Console.Clear();
|
|
break;
|
|
case 1:
|
|
Console.Clear();
|
|
insieme1=CreaArray(dimensione);
|
|
opzione1=true;//opzione1 indica che la traccia è stata eseguita
|
|
Pausa();
|
|
break;
|
|
case 2:
|
|
Console.Clear();
|
|
if(opzione1==false){
|
|
Console.WriteLine("Errore: è necessario creare l'insieme di numeri prima di stamparlo");
|
|
}
|
|
else{
|
|
StampaArray(insieme1);
|
|
}
|
|
Pausa();
|
|
break;
|
|
case 3:
|
|
Console.Clear();
|
|
if(opzione1==false){
|
|
Console.WriteLine("Errore: è necessario creare l'insieme di numeri prima di calcolarne la media");
|
|
}
|
|
else{
|
|
MediaArray(insieme1);
|
|
}
|
|
Pausa();
|
|
break;
|
|
case 4:
|
|
Console.Clear();
|
|
if(opzione1==false){
|
|
Console.WriteLine("Errore: è necessario creare l'insieme di numeri prima di individuare i suoi multipli di " +divisibile);
|
|
}
|
|
else{
|
|
PariMultipliDi(insieme1);
|
|
}
|
|
Pausa();
|
|
break;
|
|
case 5: //non può essere semplificato in funzione perché avrei bisogno di restituire due array e non uno, e non sono in grado di dividerla
|
|
Console.Clear();
|
|
|
|
pari=CreaArrayPari(dimensione, true);
|
|
dispari=CreaArrayPari(dimensione, false);
|
|
|
|
//output
|
|
Console.WriteLine("Numeri pari:");
|
|
for(int j=0; j<dimensione; j++){
|
|
if(pari[j]!=0){
|
|
Console.WriteLine("Elemento " +j+ ": " +pari[j]);
|
|
}
|
|
}
|
|
Console.WriteLine("Numeri dispari:");
|
|
for(int j=0; j<dimensione; j++){
|
|
if(dispari[j]!=0){
|
|
Console.WriteLine("Elemento " +j+ ": " +dispari[j]);
|
|
}
|
|
}
|
|
opzione5=true;
|
|
Pausa();
|
|
break;
|
|
case 6:
|
|
Console.Clear();
|
|
if(opzione5==false){
|
|
Console.WriteLine("Errore: è necessario creare l'insieme dei numeri pari e dispari prima di stamparne l'unione");
|
|
}
|
|
else{
|
|
insiemeDoppio=Unione(pari,dispari);
|
|
StampaArray(insiemeDoppio);
|
|
}
|
|
Pausa();
|
|
break;
|
|
case 7:
|
|
Console.Clear();
|
|
Console.WriteLine("Insieme 1");
|
|
insieme2=CreaArray(dimensione);
|
|
|
|
Console.Clear();
|
|
Console.WriteLine("Insieme 2");
|
|
insieme3=CreaArray(dimensione);
|
|
|
|
Console.Clear();
|
|
intersezione=Intersezione(insieme2, insieme3);
|
|
|
|
for(int j=0; j<dimensione; j++){ //non è la funzione StampaArray perché non voglio far vedere gli zero
|
|
if(intersezione[j]!=0){
|
|
Console.WriteLine("Elemento " +j+ ": " +intersezione[j]);
|
|
}
|
|
}
|
|
Pausa();
|
|
break;
|
|
case 8:
|
|
Console.Clear();
|
|
Console.WriteLine("Insieme 1");
|
|
insieme2=CreaArray(dimensione);
|
|
|
|
Console.Clear();
|
|
Console.WriteLine("Insieme 2");
|
|
insieme3=CreaArray(dimensione);
|
|
|
|
Console.Clear();
|
|
insiemeDoppio=MischiaInsiemi(insieme2, insieme3);
|
|
StampaArray(insiemeDoppio);
|
|
Pausa();
|
|
break;
|
|
case 9:
|
|
Console.Clear();
|
|
Console.WriteLine("Insieme 1");
|
|
insieme2=CreaArray(dimensione);
|
|
|
|
Console.Clear();
|
|
Console.WriteLine("Insieme 2");
|
|
insieme3=CreaArray(dimensione);
|
|
|
|
Console.Clear();
|
|
insiemeDoppio=MischiaInsiemi2(insieme2, insieme3, dimensione*2);
|
|
StampaArray(insiemeDoppio);
|
|
Pausa();
|
|
break;
|
|
case 10:
|
|
Console.Clear();
|
|
Console.WriteLine("Insieme 1");
|
|
insieme2=CreaArray(dimensione);
|
|
|
|
Console.Clear();
|
|
Console.WriteLine("Insieme 2");
|
|
insiemeDoppio=CreaArray(dimensione*2);
|
|
|
|
Console.Clear();
|
|
insiemeTriplo=MischiaInsiemi2(insieme2, insiemeDoppio, dimensione*3);
|
|
insiemeTriplo=Accoda(insiemeTriplo, insiemeDoppio);
|
|
StampaArray(insiemeTriplo);
|
|
Pausa();
|
|
break;
|
|
default:
|
|
Console.WriteLine("Scelta non valida");
|
|
Pausa();
|
|
break;
|
|
}
|
|
}
|
|
while (scelta!=0);
|
|
}
|
|
static void Pausa(){
|
|
Console.WriteLine("Premere invio per continuare. . .");
|
|
Console.ReadLine();
|
|
Console.Clear();
|
|
}
|
|
static int[] CreaArray(int p_dimensione){
|
|
int[] ritorno=new int[p_dimensione];
|
|
int i=0;
|
|
string input;
|
|
|
|
do{
|
|
Console.Write("Inserire un numero, massimo " +p_dimensione+ " numeri ([q] per uscire): ");
|
|
input=Console.ReadLine(); //non posso ancora fare il catch dell'eccezione se viene inserito un qualcosa che non sia un numero o q
|
|
if(input!="q"){
|
|
ritorno[i]=Convert.ToInt32(input);
|
|
}
|
|
i++;
|
|
}
|
|
while(input!="q" && i<p_dimensione);
|
|
return ritorno;
|
|
}
|
|
static void StampaArray(int [] p_insieme) {
|
|
for (int j=0; j<p_insieme.Length; j++){
|
|
Console.WriteLine("Elemento " +j+ ": " +p_insieme[j]);
|
|
}
|
|
}
|
|
static void MediaArray(int[] p_insieme) {
|
|
int i=0, somma=0, media;
|
|
for(int j=0; j<dimensione; j++){
|
|
if(p_insieme[j]!=0){
|
|
i++;
|
|
somma=somma+p_insieme[j];
|
|
}
|
|
}
|
|
media=somma/i;
|
|
Console.WriteLine("Media: " +media);
|
|
}
|
|
static void PariMultipliDi(int[] p_insieme) {
|
|
for(int j=0; j<dimensione; j++){
|
|
if(p_insieme[j]%2==0 && p_insieme[j]%divisibile==0 && p_insieme[j]!=0){
|
|
Console.WriteLine("Elemento " +j+ ": " +p_insieme[j]);
|
|
}
|
|
}
|
|
}
|
|
static int[] CreaArrayPari(int p_dimensione, bool p_pari){
|
|
int[] ritorno=new int[p_dimensione];
|
|
int i=0;
|
|
string input;
|
|
|
|
Console.Clear();
|
|
if(p_pari==true){
|
|
do{
|
|
Console.Write("Inserire un numero pari, massimo " +p_dimensione+ " numeri ([q] per uscire): ");
|
|
input=Console.ReadLine(); //non posso ancora fare il catch dell'eccezione se viene inserito un qualcosa che non sia un numero o q
|
|
if(input!="q"){
|
|
if(Convert.ToInt32(input)%2==0){//se pari
|
|
ritorno[i]=Convert.ToInt32(input);
|
|
i++;
|
|
}
|
|
else{
|
|
Console.WriteLine("Errore: Inserire un numero pari.");
|
|
Pausa();
|
|
}
|
|
}
|
|
|
|
}
|
|
while(input!="q" && i<p_dimensione);
|
|
}
|
|
else{
|
|
do{
|
|
Console.Write("Inserire un numero dispari, massimo " +p_dimensione+ " numeri ([q] per uscire): ");
|
|
input=Console.ReadLine(); //non posso ancora fare il catch dell'eccezione se viene inserito un qualcosa che non sia un numero o q
|
|
if(input!="q"){
|
|
if(Convert.ToInt32(input)%2!=0){//se dispari
|
|
ritorno[i]=Convert.ToInt32(input);
|
|
i++;
|
|
}
|
|
else{
|
|
Console.WriteLine("Errore: Inserire un numero dispari.");
|
|
Pausa();
|
|
}
|
|
}
|
|
|
|
}
|
|
while(input!="q" && i<p_dimensione);
|
|
}
|
|
return ritorno;
|
|
}
|
|
static int[] MischiaInsiemi(int[] p_insieme1, int[] p_insieme2){
|
|
int[] ritorno=new int[dimensione*2];
|
|
int j=dimensione-1, k=0;
|
|
for (int i=0; i<dimensione*2; i++){
|
|
if(i%2!=0){
|
|
ritorno[i]=p_insieme2[j];
|
|
j--;
|
|
}
|
|
else{
|
|
ritorno[i]=p_insieme1[k];
|
|
k++;
|
|
}
|
|
}
|
|
return ritorno;
|
|
|
|
}
|
|
static int[] MischiaInsiemi2(int[] p_insieme1, int[] p_insieme2, int p_dimensione){
|
|
int[] ritorno=new int[p_dimensione];
|
|
int j=0;
|
|
for(int i=0; j<dimensione; i++){
|
|
if(i%2!=0){
|
|
ritorno[i]=p_insieme2[j];
|
|
j++;
|
|
}
|
|
else{
|
|
ritorno[i]=p_insieme1[j];
|
|
}
|
|
}
|
|
return ritorno;
|
|
}
|
|
static int[] Unione(int[] p_array1, int[] p_array2){
|
|
//Dichiarazione e inizializzazione delle variabili
|
|
int [] ritorno=new int[dimensione*2];
|
|
for (int i=0; i<dimensione; i++){
|
|
ritorno[i]=p_array1[i];
|
|
}
|
|
|
|
for (int i=0; i<dimensione; i++){
|
|
ritorno[i+dimensione]=p_array2[i];
|
|
}
|
|
return ritorno;
|
|
}
|
|
static int[] Intersezione(int[] p_array1, int[] p_array2){
|
|
//Dichiarazione e inizializzazione delle variabili
|
|
int [] ritorno = new int[dimensione];
|
|
for (int j=0; j<dimensione; j++){
|
|
ritorno[j]=0;
|
|
}
|
|
|
|
for (int i=0; i<dimensione; i++){
|
|
for (int j=0; j<dimensione; j++){ //cerca l'elemento alla cella p_array1[i] in ogni cella di p_array2
|
|
if (p_array1[i]==p_array2[j] && p_array1[i]!=0){//se c'è un elemento uguale e non è zero
|
|
ritorno[j]=p_array1[i];
|
|
}
|
|
}
|
|
}
|
|
return ritorno;
|
|
|
|
}
|
|
static int[] Accoda(int[] p_insieme1, int[] p_insieme2){
|
|
int i=dimensione;
|
|
for(int j=0; j<dimensione; j++){
|
|
p_insieme1[dimensione*2+j]=p_insieme2[i];
|
|
i++;
|
|
}
|
|
return p_insieme1;
|
|
}
|
|
}
|