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

c.m.m.d.c.

Sa se determine c.m.m.d.c. a doua numere naturale

Varianta 1:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _12 // Sa se determine c.m.m.d.c. a doua numere naturale. (varianta 1)
{
    class Program
    {
            static void Main()
        {
            int nr1, nr2, n, m;
            Console.Write("Introduceti primul numar: ");
            nr1 = int.Parse(Console.ReadLine());
            Console.Write("Introduceti al doilea numar: ");
            nr2 = int.Parse(Console.ReadLine());
            n = nr1; m = nr2;
            while (nr1 != nr2)
              if (nr1 > nr2) 
                  nr1 -=nr2;
              else 
                  nr2 -= nr1;
              Console.WriteLine("c.m.m.d.c. ({0},{1}) = {2}", n,m,nr1);
              Console.ReadLine();
        }
    }
}

Continue reading

Suma cifre

Calculati suma cifrelor unui numar natural dot cu maximum 9 cifre.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _10 
{
    class Program
    {
        static void Main(string[] args)
        {
            int n, m, suma = 0;
            Console.Write("Dati un numar de maxim 9 cifre : ");
            n = int.Parse(Console.ReadLine());
            m = n;
            while (m != 0)
            {
                suma += m % 10;
                m /= 10; // m = m / 10;
            }
            Console.WriteLine("Suma cifrelor lui {0} este {1}", n, suma);
            Console.ReadLine();
        }
    }
}

Analiza Programului
– Pe prima linie sunt declarate variabilele m si n de tip intreg si variabila s, in care vom calcula suma cifrelor lui n (observam initializarea acesteia de la declarare cu 0, deoarece insumarea cifrelor se va face pornind de la 0);
– Citirea de la tastatura numarului n;
– Lui m i se atribuie variabila n, pentru a nu pierde valoarea n; aceasta este o tehnica utilizata intotdeauna cand avem de modificat valoarea retinuta de o variabila, insa nu dorim sa pierdem valoarea initiala. Daca nu am folosi atribuirea m=n, am impartit variabila n la 10 pana cand valoarea acesteia ar deveni 0 si evident nu am mai sti care a fost valoarea initiala. Utilizand insa atribuirea m=n, valoarea lui n ramane nealterata.
– Urmeaza o instructiune while care contine doua instructiuni de atribuire compusa (in prima se adauga la s ultima cifra a lui m, iar in a doua se trunchiaza m de ultima cifra); aceste instructiuni se repeta pana cand m va avea valoarea 0 ;
– Se afiseaza rezultatul folosind o functie Console.WriteLine(); se vor afisa valorile retinute de variabilele n si s.

Interschimbare valori

Interschimbati continutul a doua numere de tip intreg citite de la tastatura

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a, b, aux; 
            Console.Write("Introduceti primul numar a = "); 
            a = int.Parse(Console.ReadLine()); 
            Console.Write("Introduceti al doilea numar b = "); 
            b = int.Parse(Console.ReadLine()); 
            Console.WriteLine("a={0}, b={1}", a, b); 
            aux = a; a = b; b = aux; 
            Console.Write("Dupa interschimbare a={0}, b={1}", a, b); 
            Console.ReadKey();
        }
    }
}

Analiza programului

Citeste in continuare analiza programului si variante alternative de rezolvare

Ghiceste numarul

Sa se ghiceasca un numar intreg din intervalul 1 – 100

Analiza Programului

Acesta este un exemplu de utilizare a instructiuni repetitive do-while cu numar nedeterminat de pasi. Se seteaza din programo vaoare din intervalul 0 – 100 (in variabila solutie) care urmeaza sa fie ghicita de catre utilizator pe baza indicatiilor mai mare sau mai mic pe care le va primi. Pentru generarea numerelor aleatore s-a creat un obiect sol din clasa Random dupa care s-a generat un numar aleator din intervalul 0 – 100 cu ajutorul metodei Next, valoarea care a fost atribuita variabilei solutie,
Atata timp cat solutia nu este ghicita, daca se introduce de la tastatura o valoare mai mica decat solutia se va afisa mesajul “Numarul e prea mic”,altfel se va afisa mesajul “Numarul e prea mare”, iar daca se ghiceste se va afisa mesajul “BRAVO! Ati ghicit !” si programul se incheie.

Rezolvarea in C# si C++

de weekend – glume de pe YM

  • Daca razi de greselile pe care le faci s-ar putea sa iti lungesti viata. Daca razi de greselile altuia s-ar putea sa ti-o scurtezi. (Cullen Hightower)
  • O familie a gasit in cutia postala 2 bilete la un concert si o scrisoare: “Ghici de la cine?” Intorcandu-se seara tarziu de la concert, si-au gasit apartamentul gol, iar de dulap era agatata o alta scrisoare cu continutul: “Ei, ati ghicit?”
  • Burlac – barbat care vine in fiecare dimineata la serviciu din directii diferite.
  • Ochiul nevestei vede un fir de păr de altă culoare pe umărul soţului, dar nu vede bine uşa de la garaj. (Carlo Nell)
  • Când un băiat vine şi-ţi ia fata la plimbare, te simţi ca un om care dă un Stradivarius pe mâna unei gorile. (Jim Bishop)

Factorial

Sa se calculeze n!=1*2*3*…*n (factorialul lui n), pentru un n natural citit de la tastatura

Analiza Programului

n! inseamna inmultirea tuturor numerelor naturale de la 1 pana la n.
Aceasta inseamna ca trebuie parcurse toate valorile de la 1 la n si trebuiesc inmultite. Pentru aceasta este potrivita instructiunea for cu limitele 1 si n. La fiecare pas a lui for o valoare i din intervalul [1,n] va fi inmultita la fact.

Variabila fact este initializata cu 1 si la final, in urma inmultirilor repetate va contine voaloarea factorialului lui n. Deoarece factorialul are o crestere foarte rapida, variabila fact a fost declarata de tip long.

Rezolvarea in C# si C++

Inmultire prin adunare

Înmultirea a doua numere naturale prin adunari repetate.

Analiza Programului

Deoarece se stie ca a trebuie adunat de exact b ori pentru a se obtine rezultatul dorit, se utilizeaza instructiunea for care are un numar determinat de pasi (de cate ori repeta un set de instructiuni). Valoarea a se aduna de b ri in variabila p, care la final ca contine rezultatul cautat (a*b). Variabila produs este initializata cu 0 dupa care i se va adauga in cadrul instructiunii for cate un a.

Rezolvarea in c# si c++

Impartire prin scadere

Impartirea a doua numere prin scaderi repetate

Analiza Programului

Se stie din clasele elementare ca impartirea inseamna de fapt niste scaderi repetate. Astfel, a:b inseamna b scazut de c ori si este posibil sa existe si un rest apartine [0, b-1]. nu se stie de cate ori se va scadea b din a, acest lucru se va afla doar la final, de asemenea si eventualul rest. in acest sens, pentru a repeta scaderea se va utiliza instructiunea repetitiva cu numar necunoscut de pasi si anume while. Conditia ca scaderea sa se mai repete esta ca a>=b. De fiecare data cand se mai face o scadere se va incrementa variabila c, care in final va reprezenta catul. Valoarea care ramane in final in a reprezinta restul.
Variabilele c si r se initializeaza cu 0, urmand ca la final sa contina catul (obtinut in cadrul ciclului while) si restul impartirii. Deoarece valoarea lui a se alterneaza in timpul calculului, daca se doreste se poate face o copie a sa inainte de a intra in ciclul while

Rezolvarea in c# si c++

Ecuatie de gradul II

Să se rezolve o ecuaţie de gradul II de forma ax2+bx+c=0, cu coeficienţi numere reale.

Analiza Programului

In vederea realizarii unei rezolvari riguroase, trebuiesc facute niste teste asupra valorilor a, b, c.
Se detecteaza urmatoarele situatii:
– daca a=0, b=0, c=0 avem de-a face cu o ecuatie nedeterminata
– daca a=0, b=0, c diferit de 0 avem de-a face cu o ecuatie imposibila
– daca a=0, b diferit de 0 iar c are orice valoare, avem de-a face cu o ecuatie de gradul I, situatie in care exista o singura solutie x=-c/b
Acestea sunt cazuri particulare care trebuiesc tratate.
– daca a diferit de 0 iar b si c au orice valoare, avem de-a face cu o ecuatie de gradul II, situatie in care se poate trece la calculul lui delta. Urmeaza acum o alta discutie dupa valoarea lui Δ.
Astfel:
– daca delta<0 avem de-a face cu solutii complexe (pe care in aceasta rezolvare nu le vom mai calcula ci vom afisa doar un mesaj)
– daca delta=0 ecuatia are doua solutii egale x1,x2=-b/(2*a)
– daca delta>0 ecuatia are doua solutii diferite:
x1=(-b+radical din delta)/(2*a)
x2=(-b-radical din delta)/(2*a)
Se observa ca pentru rationamentul enuntat mai sus, au fost folosite in program trei instructiuni if-else imbricate (if inclus in alt if) cu ajutorul carora se testeaza valorile lui a, b si c.

Rezolvarea in c# si c++