Преобразовать последовательность по заданному правилу - C (СИ)
Формулировка задачи:
Прощу вашей помощи при преобразовании из c++ на си
Даны действительные числа a1, ..., a20. Преобразовать эту последовательность по правилу: большее из двух чисел ai и a10+i (i=1,...,10) принять в качестве нового значения ai, а меньшее – в качестве нового значения a10+i.
#include <vector> #include <algorithm> using namespace std; template <typename T> T getNextRand(){ return rand()%100 -50; } template <typename T> void Task(){ vector<T> m_vec; for (unsigned i = 0; i<20;++i) m_vec.push_back(getNextRand<T>()); const vector<T>::iterator mid = m_vec.begin() + m_vec.size()/2; for (vector<T>::iterator left = m_vec.begin(); left != mid; ++left){ const vector<T>::iterator right = left+10; if (*left < *right) std::iter_swap(left,right); } } void main(int argc, _TCHAR* argv[]){ Task<double>(); }
Решение задачи: «Преобразовать последовательность по заданному правилу»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #define SIZE_ARR 20 double getNextRand(void); void printArray(double *arr, int size); void Task(void); int main(void){ srand(time(0)); Task(); return 1; } double getNextRand(void) { return rand()%100 -50; } void printArray(double *arr, int size) { int i; for (i = 0; i < size; i++) printf("%3.1lf ", arr[i]); printf("\n"); } void Task(void) { int i, left, right, mid; double m_vec[SIZE_ARR] = { 0 }; for (i = 0; i < SIZE_ARR; ++i) m_vec[i] = getNextRand(); //printArray(m_vec, SIZE_ARR); mid = SIZE_ARR/2; for (left = 0; left != mid; ++left){ right = left+10; if (m_vec[left] < m_vec[right]) double tmp = m_vec[left]; m_vec[left] = m_vec[right]; m_vec[right] = tmp; } //printArray(m_vec, SIZE_ARR); }
Объяснение кода листинга программы
В данном коде реализована сортировка массива методом сортировки пузырьком
.
Список действий:
- В функции
main
инициализируется генератор случайных чисел с помощьюsrand(time(0))
. - Вызывается функция
Task()
, которая содержит основной код задачи. - В функции
Task
создается массивm_vec
типаdouble
размеромSIZE_ARR
(20) и заполняется случайными числами с помощью функцииgetNextRand()
. - Производится сортировка массива
m_vec
методомсортировки пузырьком
. - В цикле
for
с переменнойleft
начиная с 0 и не включаяmid
(размер массива/2), выполняется следующее: a. Переменнаяright
инициализируется какleft+10
. b. Еслиm_vec[left]
меньшеm_vec[right]
, то выполняется обмен значений междуm_vec[left]
иm_vec[right]
. - После завершения цикла, массив
m_vec
печатается с помощью функцииprintArray()
. - В функции
main
возвращается 1, что означает успешное выполнение программы. Таким образом, данный код генерирует случайный массив чисел, сортирует его методомсортировки пузырьком
и выводит на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д