Totul despre PC și mai mult de atât!

Etichetă: c++

Algorithm for primality test C++

A prime number (or a prime) is a natural number greater than 1 that cannot be formed by multiplying two smaller natural numbers. A natural number greater than 1 that is not prime is called a composite number. For example, 5 is prime because the only ways of writing it as a product, 1 × 5 or 5 × 1, involve 5 itself. However, 6 is composite because it is the product of two numbers (2 × 3) that are both smaller than 6. Primes are central in number theory because of the fundamental theorem of arithmetic: every natural number greater than 1 is either a prime itself or can be factorized as a product of primes that is unique up to their order.

source: Wikipedia

Considering a number n we can find out whether it is prime or not applying by the following C++ algorithm:

#include <iostream.h>
long int n, prim, d;
main()
{
cin>>n;
prim=1;
d=2;
while (d<=n/2)
{if (n%d==0) 
prim=0;
d=d+1;
}
if (prim==1)
cout<<"Yes";
else cout<<"No";
}

Algoritmul lui Euclid

Algoritmul lui Euclid ne poate ajuta să determinăm, având 2 numere, cel mai mare divizor comun, printr-o metodă simplă şi eficientă din punctul de vedere al consumului de resurse.

„Un număr întreg d se numește cel mai mare divizor comun a numerelor întregi a și b dacă și numai dacă pentru orice divizor comun c al lui a și b, d este un divizor al lui c.

În cazul în care impunem condiția d>0 este relativ simplu de verificat dacă d este unic. Acest număr se notează cu c.m.m.d.c(a,b), sau mai simplu: (a,b).

Folosind principiul bunei ordonări a numerelor naturale, putem deduce că c.m.m.d.c(a,b) este cel mai mic număr pozitiv care poate fi scris ca o combinație liniară a lui a și b, adică cel mai mic număr natural de forma a*x+b*y, unde x,y sunt numere întregi.”

Sursă: Wikipedia

Pseudocod

Di: n, m
De: n

citeşte n, m
┌cât timp n!=m execută
│   ┌dacă n>m
│   │   atunci n←n-m
│   │   altfel m←m-n
│   └■
└■
Scrie n

Limbaj C++

#include <iostream.h>
unsigned int n, m;
main()
{
cin>>n>>m;
while (n=m)
if (n>m) 
n=n-m;
else m=m-n;
Cout<<n;
}

Algoritmul pentru testarea unui număr prim

„Un număr prim este un număr natural care are exact doi divizori: numărul 1 și numărul în sine. Cel mai mic număr prim este 2, în afară de 2 toate numerele prime sunt numere impare.

Un număr natural p > 1 se numește prim dacă : p | ab atunci p | a sau p | b, unde a, b sunt numere naturale.

De exemplu 15 | 9 * 5, dar 15 | 9, 15 | 5, adică 15 nu este număr prim.

În anul 300 î.Hr. Euclid a demonstrat că există o infinitate de numere prime. Iată demonstrația: presupunând prin absurd că p ar fi cel mai mare număr prim, construim numărul n=2x3x5x……xp+1. Acesta nu se divide cu nici unul din numerele 2, 3, 5, ….., p, așadar sau este prim, sau are un divizor prim mai mare ca p, ceea ce contrazice presupunerea că p ar fi cel mai mare număr prim.

Nu se știe dacă există o infinitate de numere prime gemene (impare consecutive ca: [3, 5]; [41, 43]; [59, 61]; [101, 103] etc.).”

Sursă: Wikipedia

Considerand un numar n putem afla daca acesta este prim sau nu aplicand urmatorul algoritm:

Pseudocod

Di: n
De: mesaj (Da/Nu)
Daux: prim, d

citeşte n
prim←1
d←2
┌cât timp d<=n/2 execută
│   ┌dacă n%d=0
│   │   atunci prim←0
│   └■
│ d←d+1
└■
┌dacă prim=1
│   atunci scrie "Da"
│   altfel scrie "Nu"
└■

Limbaj C++

#include <iostream.h>
long int n, prim, d;
main()
{
cin>>n;
prim=1;
d=2;
while (d<=n/2)
{if (n%d==0) 
prim=0;
d=d+1;
}
if (prim==1)
cout<<"Da";
else cout<<"Nu";
}

Algoritmul de spargere a unui numar in cifre

„C++ este un limbaj de programare general, compilat. Este un limbaj multi-paradigmă, cu verificarea statică a tipului variabilelor ce suportă programare procedurală, abstractizare a datelor, programare orientată pe obiecte. În anii 1990, C++ a devenit unul din cele mai populare limbaje de programare comerciale, rămânând astfel până azi.

Bjarne Stroustrup de la Bell Labs a dezvoltat C++ (inițial denumit C cu clase) în anii 1980, ca o serie de îmbunătățiri ale limbajului C. Acestea au început cu adăugarea noțiunii de clase, apoi de funcții virtuale, suprascrierea operatorilor, moștenire multiplă, șabloane și excepții.”

Sursă: Wikipedia

 

Presupunem ca avem un numar n si vrem sa aflam suma cfrelor acestui numar. Pentru asta aveam nevoie de algoritmul de spargere a unui numar in cifre.

 

Pseudocod

Di: n
De: s
Daux: c

citeşte n
s←0
┌cât timp n>0 execută
│ c← n%10
│ s← s+c
│ n← n/10
└■

Limbaj C++

#include <iostream.h>
unsigned int n,s,c;
main()
{
cin>>n;
s=0;
while (n>0)
{c=c%10;
s=s+c;
n=n/10;}
cout<<s;
}

Algoritmi C++

Algoritmul este o succesiune finită de pași, pe baza căreia se rezolvă o problemă (se prelucrează datele inițiale pentru a obține date finale).

Proprietățile unui algoritm:
1. Claritatea (pașii trebuie să fie descriși clar, fără ambiguități);
2. Generalitatea (pașii algoritmului trebuie să fie valabili pentru tot setul datelor de intrare și nu numai pentru un set particular);
3. Finititudinea (rezultatul să se obțină după un număr bine precizat de pași).

Di = date de intrare
De = date de ieșire
Daux = data auxiliare

Operatori -> aritmetici: + – * / %
-> logici: și  sau  not
-> relaționali < = > <= => <> !

Structuri de decizie: dacă;
dacă „expresie” atunci „instrucțiunea 1”
altfel „instrucțiunea 2”

Structuri repetitive cu test inițial: cât timp, pentru;

1. Cât timp: cât timp „expresie” execută „instrucțiune”

2. Pentru
a) ascendent:  pentru „v <- v1, vf”  execută  „instrucțiune” (v1 <= vf)
b) descendent:  pentru „v <- v1, vf”  execută  „instrucțiune” (v1=> vf)

Structuri repetitive cu test final: repetă;
┌repetă
│ „instrucțiune”
└până când „expresie”

Algoritmul de cautare binara (ACB)

„Algoritmul de căutare binară este un algoritm de căutare folosit pentru a găsi un element într-o listă ordonată (tablou unidimensional/vector). Algoritmul funcționează pe baza tehnicii divide et impera. Valoarea căutată este comparată cu cea a elementului din mijlocul listei. Dacă e egală cu cea a acelui element, algoritmul se termină. Dacă e mai mare decât acea valoare, algoritmul se reia, de la mijlocul listei până la sfârșit, iar dacă e mai mică, algoritmul se reia pentru elementele de la începutul listei până la mijloc. Întrucât la fiecare pas cardinalul mulțimii de elemente în care se efectuează căutarea se înjumătățește, algoritmul are complexitate logaritmică.” (Wikipedia)

#include <iostream.h>
#include <fstream.h>
int v[100]; //se poate da orice valoare dorim în funcție de numărul de valori în care se efectuează căutarea
int n, i, ok, st, dr, m, x, gasit, aux;
ifstream fin("vector.txt");
main()
{
fin>>n;
for (i=1; i<=n; i++) fin>>v[i];
do {ok=0;
	for (i=1; i<=n-1; i++)
		if (v[i]>v[i+1]) {v[i]=v[i]+v[i+1];
							v[i+1]=v[i]-v[i+1];
							v[i]=v[i]-v[i+1];
							ok=1;}
	}
while (ok==1);

cout<<"Introduceti numarul cautat "; cin>>x;
st=1; dr=n; //definim marginile
while (st<dr)
	{m=(st+dr)/2;
	if(x>v[m]){st=m+1;
				continue;}
	if(x<v[m]){dr=m-1;
				continue;}
	if(x==v[m]){cout<<x<<' '<<"a fost gasit!"<<endl;
				gasit=1;
				break;}
	}
fin.close();
}

Cum compilăm un algoritm

Cu ceva timp în urmă, Dragoș a prezentat un program care ne ajuta sa scriem un algoritm. Programul se numește MinGW iar tutorialul îl găsiți aici. Acest tutorial este o continuare a ceea ce a făcut Dragoș. Așadar, astăzi vom scrie și executa un algoritm C++.

Algoritmul prezentat, citește dintr-un fișier un șir de numere și stabilește automat valorile maximă, minimă și medie. Apoi la cererea noastră, poate afișa valorile dintr-un anumit interval pe care îl stabilim în prealabil.

Deși pare destul de complicat, codul nu e chiar indescifrabil. Dacă vă veți uita cu atenție la tutorial, dacă veți urmări tutorialul lui Dragoș și dacă veți citi toate articolele pe care le găsiți în categoria Algoritmi C++, atunci cu siguranța veți reuși să înțelegeți ceea ce am vrut să arăt eu și veți putea face și voi mai mult decât copy/paste.

© 2024 PC-Config

Theme by Anders NorenUp ↑