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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2010, 00:53   #1
vl@d0s
 
Регистрация: 13.12.2010
Сообщений: 7
По умолчанию Указатели

Вместо классического доступа к элементам массива и выполнения операций над элементами использовать указатели. Обраработку массива выполнить в функции. Функцию в главной программе вызвать через указатель. Память под массив выделить динамически.

Код:
#include "stdafx.h" // подключаем необходимые библиoтеки
#include "stdlib.h"
#include "time.h"
#include <iostream>
using namespace std; // пользуемся именованым пространством std

int f1(int mas[],int num),num; // ф-ция вычисляет сумму отрицательных элементов массива
int f2(int mas[],int num); // ф-ция вычисляет произведение элементов массива, расположенных между максимальным и минимальным элементами
int f3(int mas[],int num);

int main()
{	
	int n=1; // счётчик тестов программы
	char choice; // индикатор повтора теста программы
	while(1) // бесконечный цикл
	{   
		cout<<"				TEST #"<<n<<endl<<endl;
		cout<<"Input number of elements of massive  ";
		cin>>num; // вводим количество элементов массива
		int *mas=new int[num]; // создаём массив при помощи динамического выделения памяти
		srand(time(0)); // инициализация генератора случайных чисел
		for(int i=0;i<num;i++) // заполняем массив числами
		mas[i]=rand()%20-7; // генерируем случайные числа от -7 до 12
		f1(mas,num); // вызываем ф-ции
		f2(mas,num);
		f3(mas,num);
		cout<<"\nInput 'y' if you want to test program once more "; // провести ещё тест
		cin>>choice;
		if(choice=='y')
			system("cls"); // очищаем экран
		else
		{
			delete []mas;
			break; // завершаем работу программы и удаляем динамический массив
		}
		n++; // счётчик тестера +1
		delete []mas; // удаляем динамический массив
	}	
	return 0;
}

int f1(int mas[],int num)
{
	int sum=0;
	for(int i=0;i<num;i++)
	{
		cout<<"mas["<<i<<"]="<<mas[i]<<endl; // выводим массив на экран
		if(mas[i]<0)
			sum+=mas[i]; // вычисляем сумму отрицательных элементов
	}
	cout<<"\nThe sum of elements<0 is "<<sum<<endl; // выводим сумму на экран
	return 0;
}

int f2(int mas[],int num)
{
	bool flag; // флаг последовательности минимального и максимального эелементов
	int nMax=0,nMin=0,increase=1,max=mas[0],min=mas[0];
	for(int i=1;i<num;i++) // вычисляем минимальный, максимальный элементы и их индексы
	{
		if(mas[i]>=max)
		{
			nMax=i;
			max=mas[i];
		}
		if(mas[i]<=min)
		{
			nMin=i;
			min=mas[i];
		}
	}
	
	// вычисляем произведение элементов массива, расположенных между максимальным и минимальным элементами в зависимости от их расположения

	for(int j=nMin;j<=nMax;j++)
	{
		flag=true;
		increase*=mas[j]; 
	}
	if(nMax<nMin)
	{
		flag=false;
	}
	if(!flag)
	{
		for(int j=nMin;j>=nMax;j--)
		{
			increase*=mas[j];
		}
	}
	cout<<"incerase of mas[Max] and mas[Min]= "<<increase<<endl; // выводим произведение на экран
	return 0;
}

int f3(int mas[],int num)
{
	int temp,p,i; // временные переменные
	for(p=1;p<num;p++)  // кол-во  проходов по массиву
		for(int i=0;i<num-1;i++)
			if(mas[i]>mas[i+1]) // перестанавливаем элементы местами
			{
				temp=mas[i];
				mas[i]=mas[i+1];
				mas[i+1]=temp;
			}
	  
	cout <<"Massive after sorting"<<endl; // выводим массив после сортировки
	for (i=0;i<num;i++)
		cout <<mas[i]<<endl;
	return 0;
}
Вот написал код программы, можете помочь выполнить поставленную задачу. Память под массив выделил динамически это я разобрался.Обраработку массива выполнил в функции. Можете помочь переделать код, чтобы функцию в главной программе вызвать через указатель.

Последний раз редактировалось ACE Valery; 17.12.2010 в 01:10.
vl@d0s вне форума Ответить с цитированием
Старый 17.12.2010, 00:54   #2
vl@d0s
 
Регистрация: 13.12.2010
Сообщений: 7
По умолчанию

Вообще задание такое
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
1) произведение отрицательных элементов массива;
2) сумму положительных элементов массива, расположенных до максимального элемента.
Изменить порядок следования элементов в массиве на обратный.
vl@d0s вне форума Ответить с цитированием
Старый 17.12.2010, 11:15   #3
TranceSmile
Смайлик :)
Форумчанин
 
Аватар для TranceSmile
 
Регистрация: 12.12.2010
Сообщений: 445
По умолчанию

Код:
#include <iostream.h>
#include <conio.h>
#include <dos.h>
int *getmem(int count);
void inputdata(int *pdata, int count);
void changedata(int *pdata, int count);
void outputdata(int *pdata, int count);
void main()
	{
		clrscr();
		int n;
		cout << "Vvedite chyslo do kotorogo vybirat prostye:";
		cin >> n;
		int *array=getmem(n);
		inputdata(array,n);
		changedata(array,n);
		outputdata(array,n);
		getch();
	}
int *getmem(int count)
	{
		int *temp= new int[count];
		return temp;
	}
void inputdata(int *pdata, int count)
	{
		int i=0;
		for(; i<count; i++)
			*(pdata+i) = i+1;
	}

void changedata(int *pdata, int count)
	{
	  int i;
	  int w;
	  int y;
	  for(i=1;i<count/2;i++)
		{
			y=i+1;
			for(w=y;w<count;)
				{
					w=w+y;
					*(pdata+w-1)=0;
				}
		}
	}
void outputdata(int *pdata, int count)
	{
		int i=0;
		cout << "Простые числа:\n";
		for(; i<count; i++)
			if(*(pdata+i)>0)
			{
			cout <<  *(pdata+i) << "\n";
			delay(150);
			}

	}
Вот тут найдешь полезности =)
Самый перспективный framework Yii (c)
TranceSmile вне форума Ответить с цитированием
Старый 17.12.2010, 18:08   #4
vl@d0s
 
Регистрация: 13.12.2010
Сообщений: 7
По умолчанию

можете сделать для моего примера!
vl@d0s вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
указатели в С++ Aleksa_ks Помощь студентам 3 27.04.2010 19:31
Указатели(С++) Scarletred Помощь студентам 0 05.04.2010 22:53
Указатели(С++) Scarletred Помощь студентам 0 05.04.2010 22:50
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39
Указатели!!!!!!!!!!!!!!! focus888 Паскаль, Turbo Pascal, PascalABC.NET 2 01.05.2009 09:13