Advertisement
fcamuso

Untitled

Jul 13th, 2020
639
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.65 KB | None | 0 0
  1. using System;
  2.  
  3. namespace funzioni_1
  4. {
  5.  
  6.   static class Program
  7.   {
  8.     static bool Bisestile(int anno)
  9.     {
  10.       return anno % 400 == 0 || (anno % 4 == 0 && anno % 100 != 0);
  11.     }
  12.  
  13.     static int GiorniAnno(int anno)
  14.     { return 365 + (Bisestile(anno) ? 1 : 0); }
  15.  
  16.  
  17.     static int GiorniMese1(int mese,int anno) //parametri formali
  18.     {
  19.       if (mese == 4 || mese == 6 || mese == 9 || mese == 11)
  20.         return 30;
  21.       else
  22.         if (mese == 2)
  23.           return 28 + (Bisestile(anno) ? 1 : 0);
  24.       else
  25.         return 31;
  26.     }
  27.  
  28.     static int GiorniMese1Difensiva(int mese, int anno) //parametri formali
  29.     {
  30.       //check parametri
  31.       if (mese < 1 || mese > 12 || anno < 1900)
  32.       {
  33.         //NO!! MAI COMANDARE INPUT/OUTPUT IN FUNZIONI NON SPECIFICHE PER INPUT/OUTPUT
  34.         Console.WriteLine("un messaggio bello esaustivo e informativo");
  35.         return -1;
  36.       }
  37.       else
  38.         if (mese == 4 || mese == 6 || mese == 9 || mese == 11)
  39.         return 30;
  40.       else
  41.           if (mese == 2)
  42.         return 28 + (anno % 400 == 0 || (anno % 4 == 0 && anno % 100 != 0) ? 1 : 0);
  43.       else
  44.         return 31;
  45.     }
  46.  
  47.     static int GiorniMese(int mese, int anno) //parametri formali
  48.     {
  49.       switch (mese)
  50.       {
  51.         case 4: case 6: case 9: case 11:
  52.           return 30;
  53.  
  54.         case 2:
  55.           return 28 + (anno % 400 == 0 || (anno % 4 == 0 && anno % 100 != 0) ? 1 : 0);
  56.  
  57.         default:
  58.           return 31;
  59.       }
  60.     }
  61.  
  62.     static int GiorniMese2Difensiva(int mese, int anno) //parametri formali
  63.     {
  64.       //check parametri
  65.       if (mese < 1 || mese > 12 || anno < 1900)
  66.         return -1;
  67.       else
  68.         switch (mese)
  69.         {
  70.           case 4:
  71.           case 6:
  72.           case 9:
  73.           case 11:
  74.             return 30;
  75.  
  76.           case 2:
  77.             return 28 + (anno % 400 == 0 || (anno % 4 == 0 && anno % 100 != 0) ? 1 : 0);
  78.  
  79.           default:
  80.             return 31;
  81.         }
  82.     }
  83.  
  84.     static int GiorniMese3(int mese, int anno) //parametri formali
  85.     {
  86.       int [] giorni = {31,28,31,30,31,30, 31,31,30,31,30,31};
  87.       return giorni[mese - 1] +
  88.         (mese == 2 && (anno % 400 == 0 || (anno % 4 == 0 && anno % 100 != 0)) ? 1 : 0);
  89.     }
  90.  
  91.     static bool DataCorretta(int g, int m, int a)
  92.     {
  93.       return a > 0 && m > 0 && m < 13 && g > 0 && g <= GiorniMese(m, a);
  94.     }
  95.  
  96.     static int DifferenzaDateInGiorni(int g1, int m1, int a1, int g2, int m2, int a2)
  97.     {
  98.       if (m1 == m2 && a1 == a2) return Math.Abs(g2 - g1);
  99.  
  100.       //se non in ordine cronologico, inverti le date
  101.       if (a1>a2 || (a1==a2 && m1>m2) )
  102.       {
  103.         Scambia(ref g1, ref g2); Scambia(ref m1, ref m2); Scambia(ref a1, ref a2);
  104.       }
  105.      
  106.       int differenza = GiorniMese(m1, a1) - g1; //a fine mese
  107.  
  108.       //sommo i giorni dei mesi intermedi
  109.       if (a1==a2)
  110.         for (int mese = m1 + 1; mese < m2; mese++) differenza += GiorniMese(mese, a1);
  111.       else
  112.       {
  113.  
  114.         //mesi anno di partenza fino a fine anno
  115.         for (int mese = m1+1; mese <= 12; mese++) differenza += GiorniMese(mese, a1);
  116.  
  117.         //anni intermedi
  118.         for (int anno = a1 + 1; anno < a2; anno++) differenza += GiorniAnno(anno);
  119.  
  120.         //mesi anno finale escluso ultimo
  121.         for (int mese = 1; mese < m2; mese++) differenza += GiorniMese(mese, a2);
  122.       }
  123.  
  124.       //sommo i giorni restanti
  125.       return differenza + g2;
  126.     }
  127.  
  128.     static int LeggiIntero(string messaggio)
  129.     {
  130.       bool esito = false;
  131.       int n = 0;
  132.  
  133.       do
  134.       {
  135.         Console.Write(messaggio + "-> ");
  136.  
  137.         if (!(esito = int.TryParse(Console.ReadLine(), out n)))
  138.         {
  139.           Console.WriteLine("Non è un numero intero, riprova ... premi un tasto per continuare");
  140.           Console.ReadKey(true);
  141.         }
  142.       } while (!esito);
  143.  
  144.       return n;
  145.     }
  146.  
  147.     static int[] LeggiData(string messaggio)
  148.     {
  149.  
  150.       int[] laData = new int[3];
  151.  
  152.       do
  153.       {
  154.         laData[0] = LeggiIntero("Giorno");
  155.         laData[1] = LeggiIntero("Mese");
  156.         laData[2] = LeggiIntero("Anno");
  157.  
  158.         if (DataCorretta(laData[0], laData[1], laData[2])) break;
  159.  
  160.         Console.WriteLine("Data errata ... Riprova, premi un tasto per continuare");
  161.         Console.ReadKey(true);
  162.       } while (true);
  163.  
  164.       return laData;
  165.     }
  166.  
  167.      static void Scambia(ref int a, ref int b)
  168.     {
  169.       int temp = a; a = b; b = temp;
  170.     }
  171.  
  172.     static void f(ref int[] v)
  173.     {
  174.       v[0] = 999;
  175.  
  176.       int[] mioV = { 7, 7, 9 , 12, 45};
  177.       v = mioV;
  178.     }
  179.  
  180.     static void f2(ref DateTime d)
  181.     {
  182.       d = new DateTime(2001, 12, 31);
  183.     }
  184.  
  185.     static void Main(string[] args)
  186.     {
  187.  
  188.       //int n1 = 22, n2 = 44;
  189.       //Scambia(n1, n2);
  190.       //Console.WriteLine($"n1: {n1}   n2:{n2}");
  191.  
  192.       //int[] numeri = { 1, 2, 3 };
  193.       //f(ref numeri);
  194.  
  195.       //Console.WriteLine(numeri[0]);
  196.  
  197.       //DateTime d8 = new DateTime(2020, 2, 1);
  198.       //f2(ref d8);
  199.  
  200.       //Console.WriteLine(d8);
  201.  
  202.       //return;
  203.  
  204.       //Una ditta di noleggi affitta biciclette elettriche a un tot al giorno anc > he per lunghi periodi.
  205.       //Per ogni cliente saranno registrate le date di inizio e fine noleggio.
  206.       //Inseriti come dati il prezzo giornaliero di noleggio e le date del periodo
  207.       //di noleggio calcolare l`importo totale dovuto.
  208.  
  209.       //12-6-2020  e 18-10-2020
  210.  
  211.       //for (int anno = 1995; anno < 2101; anno++)
  212.       //  if (GiorniMese3(2, anno) == 29) Console.WriteLine($"Anno {anno}: bisestile");
  213.  
  214.       int[] data1 = { 30, 11, 2020 }; //LeggiData("Inserire una data");
  215.       int[] data2 = { 1, 3, 2038 }; //LeggiData("Inserire una data");
  216.  
  217.       Console.WriteLine(DifferenzaDateInGiorni(data1[0], data1[1], data1[2],
  218.                                                 data2[0], data2[1], data2[2]));
  219.  
  220.       DateTime d1 = new DateTime(data1[2], data1[1], data1[0]);
  221.       DateTime d2 = new DateTime(data2[2], data2[1], data2[0]);
  222.       Console.WriteLine(d2.Subtract(d1));
  223.  
  224.       DateTime d3 = new DateTime(2000, 1, 1);
  225.       data1 = new int [] {1,1,2000};
  226.  
  227.       //confronto sistematico per 10000 giorni
  228.       //dei risultati forniti da DateTime e la nostra funzione
  229.       DateTime d4 = d3.AddDays(1);
  230.       for (int i=0; i<10000;i++)
  231.       {
  232.  
  233.         data2[0] = d4.Day; data2[1] = d4.Month; data2[2] = d4.Year;
  234.        
  235.         //Console.WriteLine(d4);
  236.         if (d4.Subtract(d3).Days != DifferenzaDateInGiorni(data1[0], data1[1], data1[2],
  237.                                                 data2[0], data2[1], data2[2]))
  238.           Console.WriteLine($"Risultato diverso per la data: {d4}");
  239.  
  240.         d4 = d4.AddDays(1);
  241.  
  242.       }      
  243.     }
  244.   }
  245. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement