Differences

This shows you the differences between two versions of the page.

Link to this comparison view

programare-ca:laboratoare:lab03 [2012/09/28 18:05]
andrei.parvu
— (current)
Line 1: Line 1:
-===== Instructiunile limbajului C. ===== 
- 
-**Responsabili:​** 
-  * [[emil.racec@gmail.com|Emil Racec (2012)]] 
-  * [[octavian.rinciog@gmail.com|Octavian Rînciog (2010)]] 
- 
-==== Obiective ==== 
- 
-În urma parcurgerii acestui laborator studentul va fi capabil să: 
-  * scrie programe C utilizând structuri condiţionale si de repetiţie 
- 
-==== Noţiuni teoretice ==== 
- 
-=== Instrucţiuni condiţionale === 
- 
-== If-else == 
- 
-''​if...else''​ este cea mai simplă instrucţiune condiţională. Poate fi folosită în mai multe forme: 
- 
-<code c> 
-if (condition) { 
-  // instructions 
-  //... 
-} 
-</​code>​ 
- 
-<code c> 
-if (condition) { 
-  //​instructions 
-  //... 
-} else { 
-  //alte instructions 
-  //... 
-} 
-</​code>​ 
- 
-<code c> 
-if (condition1) { 
-  ... 
-} else if (condition2) { 
-  ... 
-} 
-  ... 
-else if (conditionN) { 
-  ... 
-} 
-</​code>​ 
- 
-Instrucţiunea evaluează expresia ''​condiţie''​ şi execută instrucţiunile dintre acolade doar dacă rezultatul este nenul. În varianta cu ''​else'',​ pentru rezultat nul este executat blocul de instrucţiuni aflat după ''​else''​. 
- 
-În al treilea caz, sunt evaluate pe rând condiţiile şi este executat blocul corespunzător primei condiţii adevărate. Un exemplu de folosire este: 
- 
-<code c> 
-if (a == b) { 
-  printf("​Numerele sunt egale"​);​ 
-} else if (a > b) { 
-  printf("​A este mai mare"​);​ 
-} 
-</​code>​ 
- 
-== Switch == 
- 
-''​switch''​ este o instrucţiune menită să simplifice structurile condiţionale cu mai multe condiţii. 
- 
-<code c> 
-switch (expression) { 
-  case constant1: 
-    //​instructions1 
-  case constant2: 
-    //​instructions2 
-  ... 
-  default: 
-    //​instructions 
-} 
-</​code>​ 
- 
-Valoarea ''​expresie''​ este evaluată la un tip intreg, apoi această valoare este comparată cu fiecare constantă; este rulat blocul de instrucţiuni al valorii găsite. În caz ca numărul nu este egal cu nici una dintre constante, este executat blocul aflat după ''​default''​. 
- 
-<note important>​ 
-După executarea ultimei instrucţiuni dintr-un bloc ''​case'',​ execuţia nu continua după blocul ''​switch'',​ ci la inceputul următorului bloc ''​case //​constantă//''​ sau ''​default''​. Pentru a ieşi din blocul ''​switch'',​ se foloseşte instrucţiunea ''​break''​. 
-</​note>​ 
- 
-<code c> 
-int main() { 
-  char c; 
-  printf("​Alegeţi o opţiune:​\n\t[a] afişare\n\t[s] ştergere\n\t[e] ieşire\n"​);​ 
-  scanf("​%c",​ &c); 
-  printf("​Aţi ales: "); 
-  
-  switch (c) { 
-    case '​a':​ 
-      printf("​afişare"​);​ 
-      break; 
-  
-    case '​s':​ 
-      printf("​ştergere"​);​ 
-      break; 
-  
-    case '​e':​ 
-      printf("​ieşire"​);​ 
-      break; 
-  
-    default: 
-      printf("​O opţiune inexistentă"​);​ 
-      break; 
-  } 
-  return 0; 
-} 
-</​code>​ 
- 
-<code c> 
-int main() { 
-  int n, n2; 
-  printf("​Introduceţi o valoare între 0 şi 5:"); 
-  scanf("​%d",​ &n); 
-  n2 = 1; 
-  switch (n) { 
-    case 5: 
-      n2 *= 2; 
-      /* fără break, continuă la următoarea instrucţiune */ 
-    case 4: 
-      n2 *= 2; 
-    case 3: 
-      n2 *= 2; 
-    case 2: 
-      n2 *= 2; 
-    case 1: 
-      n2 *= 2; 
-    case 0: 
-      printf("​2 la puterea %d este %d\n", n, n2); 
-      break; 
-  
-    default: 
-      printf( "​Valoare invalidă\n"​ ); 
-  } 
-  return 0; 
-} 
-</​code>​ 
- 
-=== Instrucţiuni de repetiţie === 
- 
-== while == 
- 
-''​while''​ execută un bloc de instrucţiuni atâta timp cât o anumită condiţie este adevărată. Forma generală a unui ciclu while este: 
- 
-<code c> 
-while (expression) { 
-  // instructions 
-} 
-</​code>​ 
- 
-Câtă vreme ''​expresie''​ are o valoare nenulă, instrucţiunile din blocul de după ''​while''​ sunt executate. Expresia este reevaluată după fiecare ciclu. Un astfel de ciclu poate să se execute o dată, de mai multe ori sau niciodată, în funcţie de valoarea la care se evaluează expresia. 
- 
-== do ... while == 
- 
-''​do ... while''​ este o instrucţiune repetitivă similara cu cea precedentă,​ singura diferenţa fiind că expresia este evaluată după executarea instrucţiunilor,​ nu înainte. Astfel, blocul va fi executat cel puţin o dată. 
- 
-<code c> 
-do { 
-  //​instructions 
-} while (expression);​ 
-</​code>​ 
- 
-== for == 
- 
-''​for''​ reprezintă o formă mai simplă de a scrie un while însotit de o expresie iniţiala şi de o expresie de incrementare. Forma sa este: 
- 
-<code c> 
-for (expression1;​ expression2;​ expression3) { 
-  // instructions 
-} 
-</​code>​ 
- 
-Secvenţa de cod de mai sus este echivalentă cu: 
- 
-<code c> 
-expression1 
-while (expression) { 
-  instructions 
-  expression 
-} 
-</​code>​ 
- 
-În cazul instrucţiunii ''​for'',​ oricare dintre cele 3 expresii poate lipsi. Lipsa expresiei condiţionale este echivalentă cu o buclă infinită, cum ar fi: 
- 
-<code c> 
-for ( ; ; ) { 
-  /* instrucţiunile de aici sunt intr-o buclă infinită */ 
-} 
-</​code>​ 
- 
-<note important>​ 
-În acest caz, ieşirea din buclă trebuie făcută explicit, cu ajutorul instrucţiunii ''​break''​. 
-</​note>​ 
- 
-Exemplul următor prezintă un ciclu cu funcţionalitate identică (tipărirea primelor 10 numere naturale), folosind cele 3 instrucţiuni repetitive: 
- 
-<code c> 
-int main() { 
-  short i; 
-  printf("​Ciclu for\n"​);​ 
-  
-  for (i = 1; i <= 10; i++) { 
-    printf("​i=%d\n",​ i); 
-  } 
-  
-  printf("​Ciclu while\n"​);​ 
-  i = 1; 
-  while (i <= 10) { 
-    printf("​i=%d\n",​ i); 
-    i++; 
-  } 
-  
-  printf("​Ciclu do while\n"​);​ 
-  i = 0; 
-  do { 
-    i++; 
-    printf("​i=%d\n",​ i); 
-  } while(i < 10); 
-} 
-</​code>​ 
- 
-În exemplu nu am mai pus acolade la instrucţiunea executată de for. Pentru blocuri de o singură instrucţiune,​ nu este nevoie sa folosim acoladele. 
- 
-=== Instrucţiuni speciale === 
- 
-== break == 
- 
-''​break'',​ pe lângă utilizarea descrisă la instrucţiunea switch, poate fi folosită pentru a ieşi forţat dintr-o instrucţiune de repetiţie. Secventa următoare este echivalentă cu cele de mai sus: 
- 
-<code c> 
-i = 0; 
-for( ; ; ) { 
-  i++; 
-  if (i > 10) { 
-    break; /* ieşire forţată din bucla */ 
-  } 
-  printf( “i=%d\n”,​ i ); 
-} 
-</​code>​ 
- 
-== continue == 
- 
-''​continue''​ forţează terminarea iteraţiei curente a buclei si trecerea la iteraţia următoare. În cazul instrucţiunii ''​for'',​ acest lucru presupune executarea instrucţiunii de incrementare;​ apoi se evaluează condiţia de continuare a buclei. Exemplul următor demonstrează implementarea unei bucle infinite cu ajutorul instrucţiunii ''​continue'':​ 
- 
-<code c> 
-for (i = 0; i < 10; ) { 
-  if (i == 0) { 
-    continue; 
-  } 
-  i++; 
-} 
-</​code>​ 
- 
-== return == 
- 
-''​return''​ este instrucţiunea de terminare a funcţiei curente. Aceasta poate fi apelată in forma ''​return'';​ în cazul funcţiilor care returnează ''​void''​ şi în forma ''​return //​rezultat//'';​ pentru funcţiile care întorc o valoare. 
- 
-== goto == 
- 
-''​goto''​ este o instrucţiune de salt a execuţiei. Instrucţiunea primeşte ca parametru o etichetă; următoarea instrucţiune executată după ''​goto''​ este cea de la eticheta dată. 
- 
-<code c> 
-int main() { 
-  goto et;  
-  printf(“Asta nu apare la executie\n”);​ 
-  
-et: 
-  printf(“Asta apare la rulare\n”);​ 
-  return 0; 
-} 
-</​code>​ 
- 
-<note important>​ 
-În majoritatea cazurilor, utilizarea instrucţiunii ''​goto''​ nu este recomandată şi poate fi evitată folosind alte instrucţiuni de control şi funcţii. Programele care folosesc această instrucţiune pentru a sări între secvenţe îndepărtate de cod sunt dificil de depanat şi analizat. 
-</​note>​ 
- 
-==== Exerciţii de Laborator ==== 
- 
-  - Se citeşte de la tastatură un număr întreg si pozitiv N. Să se scrie un program care determină care număr cuprins intre 2 si N are suma divizorilor nebanali maximă (adică printre divizori nu sunt considerate numerele 1 si N). Dacă există mai multe asemenea numere se va afişa numai primul dintre ele.\\ **Exemplu** <​code>​ 
-N=100 
-OUT: 96 //are suma divizorilor 155 
-</​code>​ 
-  - De la tastatură se introduc mai multe numere întregi si pozitive, terminate printr-un număr negativ. După fiecare număr introdus, se va afişa lista divizorilor lui nebanali sau textul PRIM. La sfârşit se va afişa numărul de numere prime găsite.\\ **Exemplu** <​code>​35 
-OUT: 5 7 
-36 
-OUT: 2 3 4 6 9 12 18 
-17 
-OUT: PRIM 
-2 
-OUT: PRIM 
-12 
-OUT: 2 3 4 6 
-25 
-OUT: 5 
-53 
-OUT: PRIM 
--4 
-OUT: S-au găsit 3 numere prime. 
-</​code>​ 
-  - Fie funcţia ''​f:​[u,​v] − > [min,​max],​f(x) = a * x2 + b * x + c''​ , în care a, b, c, u si v sunt date. Determinaţi min si max, apoi rezolvaţi ecuaţia f(x)=0 în mulţimea numerelor reale. Afişaţi doar rădăcinile din intervalul ''​[u,​v]''​. 
-  - Scrieţi un program care să convertească numere din baza 2 în baza 10 şi invers. Numerele se introduc de la tastatură până la intâlnirea unui număr negativ. Pentru fiecare număr introdus, se va afişa pe o linie rezultatul. 
-  - Scrieţi un program care verifică dacă un număr citit de la tastatură este palindrom. Un număr se consideră palindrom dacă citit invers este identic cu numărul iniţial. 
-  - De la tastatură se introduc N(fiind dat şi el de la tastatură) numere citite pe rând. Găsiţi cel mai mare divizor comun al acestor N numere, fără a folosi vectori. 
- 
-==== Referinţe ==== 
- 
-  * [[http://​www.tutorialspoint.com/​ansi_c/​c_control_statements.htm|C - Control Statements]] 
  
programare-ca/laboratoare/lab03.1348844751.txt.gz · Last modified: 2012/09/28 18:05 by andrei.parvu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0