Jump to content

[Algoritmi și Tehnici de Programare] PostIncrementare vs PreIncrementare


Soulrayne
 Share

Recommended Posts

Problema Reala

 

Operatorii de incrementare ("++") si decrementare("--") , dupa cum cunoastem , pot fi situati atat inainte de variabila cat si dupa variabila . Prima poarta denumire de pre-(in/de)crementare iar cea de a doua , post-(in/de)crementare . Am trecut "in/de" deoarece desi , sunt operatiuni diametral opuse (una creste si cealalalta scade cu o unitate) , acestea au o problema comuna . 

Totusi , care-i problema ? Problema e constituita de DIFERENTA dintre post/pre . Astfel , ca intr-un anumit context , ele pot avea intelesuri diferite . 

 

SITUATIA 1

 

#include <stdio.h>

int main()
{

	// Sa presupunem doua variabile intregi 

	int i = 0, j = 0;


	// In Situatia 1 : 

	i++; // PostIncrementare cu o unitate 
	++j; // PreIncrementare cu o unitate 

	printf("i : %d : \t j : %d \n", i,j); // Afisam 

	// i = 0 ; j = 0 // Ambele se insumeaza cu o unitate 

	// La fel si Decrementarea 

	i--; // PostDecrementare cu o unitate 
	--j; // PreDecrementare cu o unitate 

	printf("i : %d : \t j : %d \n", i, j); // Afisam 

	// i == 0 ; j == 0 

	return 0;
}

 

OBSERVATIE : IN ACEST CONTEXT , NU EXISTA DIFERENTE INTRE POST/PRE (IN/DE)CREMENTARE !! 

 

SITUATIA 2

 

#include <stdio.h>

int main()
{
// SITUATIE 2 

	// Sa presupunem ca adaugam inca o variabila 

	int k = 0; 

	//**  **/ Si dorim efectuam o postincrementare 

	k = i++; // i == 1 && k == 0  

	// K PREIA VALOAREA LUI I (0) INAINTE DE INCREMENTARE !!! 
	
	printf("k : %d : \t i : %d \n", k, i); // Afisam 

	j = i--; // j == 1 && i = 0  

	// J PREIA VALOAREA LUI I (1) INAINTE DE DECREMENTARE !!!

	printf("j : %d : \t i : %d \n", j, i); // Afisam


	// PRE-IN(DE)CREMENTARE 

	k = ++i;  ///  k == 1 &  i == 1 

	// LUI K II SE ATRIBUIE VALOAREA DEJA INCREMENTATA A LUI I !! 

	printf("k : %d : \t i : %d \n", k, i); // Afisam


	j = --i; // j == 0  && i == 0

	// LUI J II SE ATRIBUIE VALOAREA DEJA DECREMENTATA A LUI I !! 

	printf("J : %d : \t i : %d \n", j, i); // Afisam

	return 0;
}

 

PE SCURT :

PRE(IN)DECREMENTAREA PRIORITIZEAZA INCREMENTAREA IAR APOI , ATRIBUIREA !!! (POATE FI CEVA MAI RAPID DECAT A DOUA VARIANTA !)

POST(IN)DECREMENTAREA PRIORITIZEAZA ATRIBUIREA IAR APOI , INCREMENTAREA !!!  

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.