Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2012, 16:26   #1
prettynetty
Пользователь
 
Регистрация: 03.03.2012
Сообщений: 11
По умолчанию Функции Шаблоны Массивы (С++)

Дано несколько массивов чисел (типы массивов различны). Длины массивов вводятся пользователем. Требуется для каждого массива выполнить заданные действия.

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

ПРОБЛЕМА возникает с вещественным массивом
Код:
#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[i]);
	}
return;
}
template <class Type> void VYVOD(Type mas1, int m)
{
	int i;
	for(i=0;i<m;i++)
		printf("%d\t",mas1[i]);
	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[i]>0) 
		{
			pr*=mas1[i];
			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[i]<mas1[min])
			min=i;
	for(i=0;i<min;i++)
		if(mas1[i]>0)
		sum+=mas1[i];
	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[i] > mas1[i + 2])
            {    
                Type temp;
                temp=mas1[i];
                mas1[i]=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[i] > mas1[i + 2])
            {    
                Type temp;
                temp=mas1[i];
                mas1[i]=mas1[i+2];
                mas1[i+2]=temp;
                change = true;
            }
    }
}
prettynetty вне форума Ответить с цитированием
Старый 03.03.2012, 17:10   #2
AlexDark
Форумчанин
 
Аватар для AlexDark
 
Регистрация: 23.12.2011
Сообщений: 117
По умолчанию

Ввод/Вывод выполняется как для int в любом случае

scanf("%d", &mas1[i]);
printf("%d\t",mas1[i]);

Чем заслужили немилость cin \ cout раз под с++ пишем?
AlexDark вне форума Ответить с цитированием
Старый 03.03.2012, 18:06   #3
prettynetty
Пользователь
 
Регистрация: 03.03.2012
Сообщений: 11
По умолчанию

Цитата:
Сообщение от AlexDark Посмотреть сообщение
Ввод/Вывод выполняется как для int в любом случае

scanf("%d", &mas1[i]);
printf("%d\t",mas1[i]);

Чем заслужили немилость cin \ cout раз под с++ пишем?
по мне так scanf и printf менее громоздкие, да и в обращении проще. но тут они не прокатят

исправленный вариант:
Код:
#include<iostream.h>
#include<windows.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;
	cout<<"Введите размерности m и n:"<<endl;
	cin>>m>>n;
	float *mas2=new float[n];
	cout<<"Для массива типа int:"<<endl;
	VVOD(mas1,m);
	cout<<"Для массива типа float:"<<endl;
	VVOD(mas2,n);
	cout<<"Массив типа int:"<<endl;
	VYVOD(mas1,m);
	cout<<"Массив типа float:"<<endl;
	VYVOD(mas2,n);
	pr1=PR(mas1,m,x);
	if(x==true) 
	{
		cout<<"Произведение положительных элементов массива типа int равно:";
		cout<<pr1;
		cout<<endl;
	}
	else cout<<"Положительных элементов нет"<<endl;
	pr2=PR(mas2,n,x);
	if(x==true) 
	{
		cout<<"Произведение положительных элементов массива типа float равно:";
		cout<<pr2;
		cout<<endl;
	}
	else cout<<"Положительных элементов нет:"<<endl;
	cout<<endl;
	cout<<"Произведение положительных элементов массива типа float равно:"<<endl;
	cout<<pr2;
	cout<<endl;
	cout<<"Сумма положительных элементов, расположенных до минимального равна:";cout<<endl<<endl;
	cout<<"для массива типа int:"<<SUM(mas1,m);
	cout<<endl;
	cout<<"для массива типа float:"<<SUM(mas2,n);
	cout<<endl<<endl;
	cout<<"Преобразованные массивы:"<<endl;
	OBR(mas1,m);
	OBR(mas2,n);
	cout<<endl;
	VYVOD(mas1,m);
	cout<<endl;
	VYVOD(mas2,n);
	return 0;
}
template <class Type> void VVOD(Type *mas1, int m)
{
	int i;
	for(i=0;i<m;i++)
	{
		cout<<endl<<"Введите ";
		cout<<i+1<<"-ый элемент массива:";
		cout<<endl;
		cin>>mas1[i];
	}
return;
}
template <class Type> void VYVOD(Type mas1, int m)
{
	int i;
	for(i=0;i<m;i++)
	cout<<mas1[i]<<"   ";
	cout<<endl;

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[i]>0) 
		{
			pr*=mas1[i];
			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[i]<mas1[min])
			min=i;
	for(i=0;i<min;i++)
		if(mas1[i]>0)
		sum+=mas1[i];
	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[i] > mas1[i + 2])
            {    
                Type temp;
                temp=mas1[i];
                mas1[i]=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[i] > mas1[i + 2])
            {    
                Type temp;
                temp=mas1[i];
                mas1[i]=mas1[i+2];
                mas1[i+2]=temp;
                change = true;
            }
    }
}
prettynetty вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функции и массивы SkrudjMakdak JavaScript, Ajax 2 03.10.2010 22:08
Функции и массивы. 3.14rojoke Общие вопросы C/C++ 1 14.04.2010 15:32
Функции и массивы Baaandit Общие вопросы C/C++ 11 21.03.2010 00:22
Массивы и функции на Си Wertex Помощь студентам 5 17.09.2009 23:59
С++ шаблоны функции napanin Помощь студентам 2 11.06.2009 19:26