Differences

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

Link to this comparison view

ii:lab:laborator4 [2016/12/08 00:49]
iulian_gabriel.radu [Comenzi de bază GDB]
ii:lab:laborator4 [2016/12/08 10:03] (current)
iulian_gabriel.radu [Exerciții și aplicații]
Line 7: Line 7:
 GDB este folosit în principal pentru a depana programe scrise în C sau C++. Acesta poate fi folosit în două moduri pentru a depana un program: GDB este folosit în principal pentru a depana programe scrise în C sau C++. Acesta poate fi folosit în două moduri pentru a depana un program:
  
-rulându-l folosind comanda gdb +  * rulându-l folosind comanda gdb 
-folosind fişierul core generat în urma unei erori grave (de obicei segmentation fault)+  ​* ​folosind fişierul core generat în urma unei erori grave (de obicei segmentation fault)
  
 În acest laborator vom analiza doar prima modalitate de depanare. În acest laborator vom analiza doar prima modalitate de depanare.
Line 127: Line 127:
 ===== Exerciții și aplicații ===== ===== Exerciții și aplicații =====
  
-  - Folosiți gdb pentru a depana următorul program C: <code c divide.c>​+  - <code c divide.c>​
 #include <​stdio.h>​ #include <​stdio.h>​
  
Line 150: Line 150:
     return 0;     return 0;
 }</​code>​ }</​code>​
-  - TODO+ 
 +  - <code c quick.c>​ 
 +#include <​stdio.h>​ 
 +#include <​stdbool.h>​ 
 +#define MAX 7 
 + 
 +#define MAGIC 100000 
 +int intArray[MAX] = {4,​6,​3,​2,​1,​9,​7};​ 
 + 
 +void printline(int count) { 
 +   ​int i; 
 + 
 +   for(i = 0;i <count-1;i++) { 
 +      printf("​="​);​ 
 +   } 
 + 
 +   ​printf("​=\n"​);​ 
 +
 + 
 +void display() { 
 +   int i; 
 +   ​printf("​["​);​ 
 + 
 +   // navigate through all items 
 +   for(i = 0;​i<​MAX;​i++) { 
 +      printf("​%d ",​intArray[i]);​ 
 +   } 
 + 
 +   ​printf("​]\n"​);​ 
 +
 + 
 +void swap(int num1, int num2) { 
 +   int temp = intArray[num1];​ 
 +   ​intArray[num1+MAGIC] = intArray[num2];​ 
 +   ​intArray[num2] = temp; 
 +
 + 
 +int partition(int left, int right, int pivot) { 
 +   int leftPointer = left -1; 
 +   int rightPointer = right; 
 + 
 +   ​while(true) { 
 +      while(intArray[++leftPointer] < pivot) { 
 +         //do nothing 
 +      } 
 + 
 +      while(rightPointer > 0 && intArray[--rightPointer] > pivot) { 
 +         //do nothing 
 +      } 
 + 
 +      if(leftPointer >= rightPointer) { 
 +         ​break;​ 
 +      } else { 
 +         ​printf("​ item swapped :​%d,​%d\n",​ intArray[leftPointer],​intArray[rightPointer]);​ 
 +         ​swap(leftPointer,​rightPointer);​ 
 +      } 
 +   } 
 + 
 +   ​printf("​ pivot swapped :​%d,​%d\n",​ intArray[leftPointer],​intArray[right]);​ 
 +   ​swap(leftPointer,​right);​ 
 +   ​printf("​Updated Array: "); 
 +   ​display();​ 
 +   ​return leftPointer;​ 
 +
 + 
 +void quickSort(int left, int right) { 
 +   ​if(right-left <= 0) { 
 +      return; 
 +   } else { 
 +      int pivot = intArray[right];​ 
 +      int partitionPoint = partition(left,​ right, pivot); 
 +      quickSort(left,​partitionPoint-1);​ 
 +      quickSort(partitionPoint+1,​right);​ 
 +   } 
 +
 + 
 +int main() { 
 +   ​printf("​Input Array: "); 
 +   ​display();​ 
 +   ​printline(50);​ 
 +   ​quickSort(0,​MAX-1);​ 
 +   ​printf("​Output Array: "); 
 +   ​display();​ 
 +   ​printline(50);​ 
 +}</​code>​
  
ii/lab/laborator4.1481150963.txt.gz · Last modified: 2016/12/08 00:49 by iulian_gabriel.radu
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