Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Constrangeri pentru tipurile generice

Presupunem ca avem urmatoarea metoda generica in care declaram si initializam o variabila de tip T. Apoi, apelam metoda ToString.

        static void GenericMethod<T>(T obj)
        {
            T item = obj;
            Console.WriteLine(item.ToString());
        }

Acest cod functioneaza pentru toate tipurile de date din .Net. Chiar daca T este tip valoare sau tip referinta, in ambele cazuri variabila suporta atribuirea unei valori si apelul metodei ToString (metoda definita de Object).

Urmatoarea metoda generica va genera eroare la compilare: ‘T’ does not contain a definition for ‘CompareTo’ and no extension method ‘CompareTo’ accepting a first argument of type ‘T’ could be found (are you missing a using directive or an assembly reference?). Motivul este simplu, nu toate tipurile ofera metoda CompareTo.

        static T AnotherGenericMethod<T>(T obj1, T obj2)
        {
            if (obj1.CompareTo(obj2) < 0) return obj1;

            return obj2;
        }

Pentru a scapa de aceasta eroare se foloseste un mecanism pe care CLR il numeste constrangere, adica un mod de a limita tipuri care pot fi specificate tipului generic. Implementarea este realizata cu ajutorul lui where, iar compilatorul va sti ca toate tipurile specificate pentru T trebuie sa implementeze interfata IComparable.

        static T AnotherGenericMethod<T>(T obj1, T obj2) where T : IComparable
        {
            if (obj1.CompareTo(obj2) < 0) return obj1;

            return obj2;
        }

An bisect

Pentru ca tot se apropie sfarsitul de an, propun un simplu exercitiu pentru a calcula daca un an este sau nu bisect.

using System;

namespace LeapYear
{
    class Program
    {
        static void Main(string[] args)
        {
            bool isLeapYear = false;

            Console.WriteLine("Introduceti anul in formatul de 4 cifre:");
            int year = Convert.ToInt32(Console.ReadLine());

            //prima varianta
            if(DateTime.IsLeapYear(year))
                isLeapYear = true;

            //a doua varianta
            if CheckIsLeapYear(year))
                isLeapYear = true;

            if (isLeapYear)
                Console.WriteLine("Este an bisect");
            else
                Console.WriteLine("Nu este an bisect");

            Console.ReadLine();
        }

        private static bool CheckIsLeapYear(int year)
        { 
            if((year % 4 == 0) || (year % 100 == 0 && year % 400 != 0))
                return true;

            return false;
        }
    }
}

La multi ani! :)

Terminologie transfer date in telefonia mobila.

Pe ecranul telefonului mobil apar numerosi indicatori care ne informeaza ce se intampla in spatele ecranului, indicatori pe care nu ii observam, sau cu care suntem atat de obisnuiti incat nici nu ne mai intrebam ce reprezinta si de ce sunt acolo – pur si simplu ne-am obisnuit sa ii vedem pe ecran.

Am gasit astazi o explicatie (in engleza – daca cineva dintre cei care citesc o traduce il rog sa puna traducerea intr-un comentariu) a simbolurilor care apar in iconul care indica conectarea la serviciul de date. Explicatia este urmatoarea:

Continue reading

Putere

Fie b un numar natural si e un alt numar natural. Sa se calculeze b la e.

Analiza Programului
Vom utiliza o variabila in care vom calcula puterea. Pentru fiecare iteratie de la 1 la e vom inmulti valoarea bazei cu ea insasi.

using System;

namespace Power
{
    class Program
    {
        static void Main(string[] args)
        {
            int b, p;
            
            Console.WriteLine("Introduceti baza:");
            if (!int.TryParse(Console.ReadLine(), out b))
                throw new FormatException("Format incorect");
            
            Console.WriteLine("Introduceti puterea:");
            if(!int.TryParse(Console.ReadLine(), out p))
                throw new FormatException("Format incorect");
          
            Console.WriteLine(Power(b,p));

            Console.Read();
        }

        public static int Power(int baza, int exponent)
        {
            int result = 1;

            for (int i = 1; i <= exponent; i++)
            {
                result = result * baza;
            }

            return result;
        }
    }
}