Функции Шаблоны Массивы

Тема в разделе "C/C++/C#", создана пользователем prettynetty, 3 мар 2012.

Статус темы:
Закрыта.
  1. prettynetty

    prettynetty Гость

    Дано несколько массивов чисел (типы массивов различны). Длины массивов вводятся пользователем. Требуется для каждого массива выполнить заданные действия.
    Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:
    1) произведение положительных элементов массива;
    2) сумму элементов массива, расположенных до минимального элемента.
    3) Упорядочить по возрастанию отдельно элементы, стоящие на четных местах, и элементы, стоящие на нечетных местах.

    для целочисленного массива все считает и выводит, а с вещественным возникают проблемы
    <!--shcode--><pre><code class='"[i'>[/i]"]#include<windows.h>
    #include<stdio.h>
    #include<math.h>
    template <class Type> void VVOD(Type *mas1, int m);
    template <class Type> void VYVOD(Type mas1, int m);
    template <class Type> Type PR(Type *mas1, int m, bool &x);
    template <class Type> Type SUM(Type *mas1, int m);
    template <class Type> void OBR(Type *mas1, int m);
    main()
    {
    SetConsoleOutputCP(1251);
    int mas1[25],m,n,pr1;
    float pr2;
    bool x;
    printf("Введите размерности m и n:\n");
    scanf("%d%d",&m,&n);
    float *mas2=new float[n];
    printf("Для массива типа int:\n");
    VVOD(mas1,m);
    printf("Для массива типа float:\n");
    VVOD(mas2,n);
    printf("Массив типа int:\n");
    VYVOD(mas1,m);
    printf("Массив типа float:\n");
    VYVOD(mas2,n);
    pr1=PR(mas1,m,x);
    if(x==true)
    {
    printf("Произведение положительных элементов массива типа int равно: %d\n", pr1);
    }
    else printf("Положительных элементов нет\n");
    pr2=PR(mas2,n,x);
    if(x==true)
    {
    printf("Произведение положительных элементов массива типа float равно:%f\n", pr2);
    }
    else printf("Положительных элементов нет:\n");
    printf("Произведение положительных элементов массива типа float равно:%f\n", pr2);
    printf("Сумма положительных элементов, расположенных до минимального равна:\n");
    printf("для массива типа int: %d\n",SUM(mas1,m));
    printf("для массива типа float: %f\n\n ",SUM(mas2,n));

    printf("Преобразованные массивы:\n");
    OBR(mas1,m);
    OBR(mas2,n);
    printf("\n");
    VYVOD(mas1,m);
    printf("\n");
    VYVOD(mas2,n);
    return 0;
    }
    template <class Type> void VVOD(Type *mas1, int m)
    {
    int i;
    for(i=0;i<m;i++)
    {
    printf("Введите %d-ый элемент массива:\n",i);
    scanf("%d", &mas1);
    }
    return;
    }
    template <class Type> void VYVOD(Type mas1, int m)
    {
    int i;
    for(i=0;i<m;i++)
    printf("%d\t",mas1);
    printf("\n");
    return;
    }
    template <class Type> Type PR(Type *mas1, int m, bool &x)
    {
    x=false;
    int i;
    Type pr=1;
    for(i=0;i<m;i++)
    if(mas1>0)
    {
    pr*=mas1;
    x=true;
    }
    return pr;
    }
    template <class Type> Type SUM(Type *mas1, int m)
    {
    Type sum=0;
    int i,min=0;
    for(i=1;i<m;i++)
    if(mas1<mas1[min])
    min=i;
    for(i=0;i<min;i++)
    if(mas1>0)
    sum+=mas1;
    return sum;
    }
    template <class Type> void OBR(Type *mas1, int m)
    {
    bool change = true;
    while(change)
    {
    change = false;
    for(int i = 0; i < (m - 1) / 2 * 2; i += 2)
    if (mas1 > mas1[i + 2])
    {
    Type temp;
    temp=mas1;
    mas1=mas1[i+2];
    mas1[i+2]=temp;
    change = true;
    }
    }

    change = true;
    while(change)
    {
    change = false;
    for(int i = 1; i < (m - 2) / 2 * 2; i += 2)
    if (mas1 > mas1[i + 2])
    {
    Type temp;
    temp=mas1;
    mas1=mas1[i+2];
    mas1[i+2]=temp;
    change = true;
    }
    }
    }[/CODE]
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей