Преобразовать последовательность по заданному правилу - 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);
}

Объяснение кода листинга программы

В данном коде реализована сортировка массива методом сортировки пузырьком. Список действий:

  1. В функции main инициализируется генератор случайных чисел с помощью srand(time(0)).
  2. Вызывается функция Task(), которая содержит основной код задачи.
  3. В функции Task создается массив m_vec типа double размером SIZE_ARR (20) и заполняется случайными числами с помощью функции getNextRand().
  4. Производится сортировка массива m_vec методом сортировки пузырьком.
  5. В цикле for с переменной left начиная с 0 и не включая mid (размер массива/2), выполняется следующее: a. Переменная right инициализируется как left+10. b. Если m_vec[left] меньше m_vec[right], то выполняется обмен значений между m_vec[left] и m_vec[right].
  6. После завершения цикла, массив m_vec печатается с помощью функции printArray().
  7. В функции main возвращается 1, что означает успешное выполнение программы. Таким образом, данный код генерирует случайный массив чисел, сортирует его методом сортировки пузырьком и выводит на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы