Преобразовать последовательность по заданному правилу - 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, что означает успешное выполнение программы. Таким образом, данный код генерирует случайный массив чисел, сортирует его методомсортировки пузырькоми выводит на экран.