Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- *
- * 1.
- Напишете процедура на езика C, която обръща съдържанието на участък от целочислен (int) масив.
- Параметри на процедурата трябва да са масивът и индексите p и q, такива, че е вярно p ≤ q.
- Индексите задават полуотворен интервал [p,q), съдържанието на който трябва да се обърне.
- Например, ако p = 3 и q = 7, а масивът съдържа 1 2 3 4 5 6 7 8 9 10, процедурата трябва да го промени на 1 2 3 7 6 5 4 8 9 10.
- Процедурата трябва да работи „на място" - без да използва друг масив.
- 0 1 2 3 4 5 6 7 8 9
- 1 2 3 4 5 6 7 8 9 10
- 1 2 3 7 6 5 4 8 9 10.
- >=3 <7
- 2.
- Като използвате процедурата от т.1 напишете процедура, която разменя съдържанието на два съседни участъка в целочислен масив.
- Параметри на процедурата трябва да са масивът и индексите p, q и r, такива, че е вярно p ≤ q ≤ r.
- Индексите задават полуотворените интервали [p,q) и [q,r), които трябва да разменят местата си.
- Например, ако p = 4, q = 7 и r = 9, а масивът съдържа 1 2 3 4 5 6 7 8 9 10, процедурата трябва да го промени на 1 2 3 4 8 9 5 6 7 10.
- Процедурата трябва да работи „на място" - без да използва друг масив.
- */
- #include <stdio.h>
- #define Arraysize(a) (sizeof(a)/sizeof(a[0]))
- void PrintArray(int a[], int n)
- {
- for (int i = 0; i < n; i++)
- printf("%d ", a[i]);
- printf("\n");
- }
- void swap(int *a, int *b)
- {
- int temp = *a;
- *a = *b;
- *b = temp;
- }
- void reverseArray(int arr[], int n)
- {
- int nMax = n-1;
- for(int i=0; i<5;i++)
- {
- swap(&arr[i], &arr[nMax--]);
- }
- }
- // Reverse subarray with indexes [p,q)
- void reverseArrayPart(int arr[], int n, int p, int q)
- {
- int nMax = q - 1;
- int range = (q - p) / 2;
- for (int i = p; i < p+range; i++)
- {
- swap(&arr[i], &arr[nMax--]);
- }
- }
- // Rotating subarray to left one time
- void leftRotateByOneSubRange(int arr[], int begin, int end)
- {
- int temp = arr[begin];
- for (int i = begin; i < end - 1; i++)
- {
- arr[i] = arr[i + 1];
- }
- arr[end- 1] = temp;
- }
- // Rotating the arr with range [p-r)
- void rotateSubArray(int arr[], int n, int p, int q, int r)
- {
- p = p - 1;
- int steps = q - p - 1;
- for (int i = 0; i < steps; i++)
- {
- leftRotateByOneSubRange(arr, p+1,r);
- }
- }
- int main()
- {
- int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
- int array2[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // second array for the second procedure
- int arrSize = Arraysize(array);
- PrintArray(array, arrSize);
- reverseArrayPart(array, arrSize,3,7); // Task 1
- PrintArray(array, arrSize);
- rotateSubArray(array2, arrSize,4,7,9); // Task 2
- PrintArray(array2, arrSize);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement