start     Articole     Despre mine     Contact     Cursul ABCprog    

Cum iei decizii in limbajul C

Hai sa trecem la lucruri serioase! Programarea adevarata nu inseamna doar calcule predefinite, ci inseamna si posibilitatea de a schimba cursul programului in functie de indeplinirea anumitor conditii.

 

Dar stii deja asta foarte bine daca ai parcurs “Abecedarul“.

 

Intrebarea ta acum trebuie sa fie: Cum arata if-ul in C?

Ei bine… Surpriza! Arata fix la fel ca if-ul pe care il stii. 🙂

 

Hai sa-l vedem “la munca” intr-un program:

  #include <stdio.h>

  int main()

  {

    int v;

    printf(“Cati ani ai? “);

    scanf(“%d”, &v);

    if (v >= 18)

      printf(“Esti major(a).”);

    else

    printf(“Esti minor(a).”);

    return 0;

  }

N-am ce sa-ti explic la acest program, asa-i?… 🙂

 

Hai sa vedem unul nitel mai complicat:

#include <stdio.h>

int main()

{

  char s;

  int v;

  printf(“Barbat, sau femeie? (b/f) “);

  scanf(“%c”, &s);

  printf(“Varsta? “);

  scanf(“%d”, &v);

  if (s == ‘b’)

  {

    if (v >= 18)

      printf(“Esti major.”);

    else

      printf(“Esti minor.”);

  }

  else

  {

    if (v >= 18)

      printf(“Esti majora.”);

    else

      printf(“Esti minora.”);

  }

  return 0;

}

Banuiesc ca mai stii cum e cu acoladele, asa ca nu mai reiau subiectul. (Oricum, banuiesc ca exemplele de mai sus ti-au reamintit variantele posibile.)

 

As putea sa inchei lectia aici, dar cred ca ti-ar fi util sa stii ca in C exista si o instructiune care iti permite sa iei decizii multiple, in functie de valoarea pe care o are o variabila din programul tau.

Instructiunea se numeste switch (“comuta”, adica) si arata cam asa:

switch (expresie)

{

  case valoare1:

    intructiuni 1

    break;

  case valoare2:

    instructiuni 2

    break;

  …

  default:

    instructiuni

}

 

Poate ca o viziune mai grafica asupra problemei iti va face lucrurile un pic mai clare.

Asta ar fi instructiunea if. Iar instructiunea switch ar fi asa:

 

E clar, da?

Daca rezultatul evaluarii expresiei este egal cu valoare1, atunci se va executa secventa de instructiuni instructiuni 1; daca valoarea expresiei este egala cu valoare2, atunci se va executa secventa de instructiuni instructiuni 2; s.a.m.d..

Iar daca rezultatul expresiei a fost diferit de toate valorile din case-uri, se vor executa instructiunile de la default.

 

E destul de simplu. Trebuie doar sa exersezi un pic.

(Te las pe tine sa descoperi ce se intampla daca omiti un “break;“. Si tot pe tine te las sa te gandesti daca ai putea gasi vreo utilitate pentru comportamentul observat.)

 

Hai sa vedem un exemplu de utilizare a instructiunii switch:

#include <stdio.h>
int main()
{
	char litera;
	printf("Cu ce litera sa inceapa?... ");
	scanf("%c", &litera);
	printf("Un animal care incepe cu litera '%c' este ", litera);
	switch(litera)
	{
		case 'a':
			printf("antilopa.\n");
			break;
		case 'b':
			printf("babuin.\n");
			break;
		case 'c':
			printf("camila.\n");
			break;
		case 'd':
			printf("dinozaur :-).\n");
			break;
		case 'e':
			printf("elefant.\n");
			break;
		default:
			printf("Nu stiu. (Stiam doar cu litere de la 'a' la 'e'.)\n");
	}
	return 0;
}

Iti dai seama ca puteai face acest program si fara switch, da?

...
if (litera == 'a')
		printf("antilopa.\n");
	else if (litera == 'b')
		printf("babuin.\n");
	else if (litera == 'c')
		printf("camila.\n");
	else if (litera == 'd')
		printf("dinozaur :-).\n");
	else if (litera == 'e')
		printf("elefant.\n");
	else
		printf("Nu stiu. (Stiam doar cu litere de la 'a' la 'e'.)\n");
...

Exista situatii cand utilizarea lui switch e practic imposibila, varianta asta cu if-uri si else if-uri inlaintuite fiind solutia. Hai sa ne uitam la urmatorul exemplu:

#include <stdio.h>
int main()
{
	int v; // varsta
	printf("Cati ani are?... ");
	scanf("%d", &v);
	printf("Inseamna ca este ");
	
	if (v <= 1) printf("sugar");
	else if (v <= 3) printf("copil mic");
	else if (v < 6) printf("\"gradinar\"");
	else if (v < 15) printf("scolar");
	else if (v < 18) printf("adolescent");
	else printf("tanar");
	
	printf(".\n");
}

Ce zici? Ar fi mers si cu switch?…

...
switch(v)
	{
		case 0:
		case 1:
			printf("sugar");
			break;
		case 2:
		case 3:
			printf("copil mic");
			break;
		case 4:
		case 5:
			printf("\"gradinar\"");
			break;
		case 6:
		case 7:
		case 8:
		case 9:
		case 10:
		case 11:
		case 12:
		case 13:
		case 14:
			printf("scolar");
			break;
		case 15:
		case 16:
		case 17:
			printf("adolescent");
			break;
		default:
			printf("tanar");
	}
...

Mda, ar cam fi mers. Dar cred ca iti dai seama de ce n-ar fi fost o idee prea buna varianta asta. (Gandeste-te ce modificari ar trebui sa faci in programul tau daca ulterior ar trebui sa schimbi pragurile de delimitare a categoriilor de varsta. Sau daca ai vrea sa introduci noi categorii (gen “adult” si “batran”).)

 

Gata lectia! Astea au fost deciziile in C. Ma intreb ce decizii o sa iei tu in continuare pentru viata ta de programator. 🙂

 

Alatura-te celor peste 7800 de oameni din armata noastra de creiere cu muschi si vei primi testul care iti va spune daca ai sau nu minte de programator.

In plus, vei fi mereu la curent cu tot ce pun la cale.

(Vei primi automat un email in care ti se va solicita acordul de prelucrare a datelor cu caracter personal.)

 

Cu drag,

Florin Bîrleanu





Loading Facebook Comments ...