array_funzioni/Program.cs
2024-12-13 21:35:32 +01:00

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;
}
}