• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите разобраться с программой

  • Автор темы Автор темы bulding
  • Дата начала Дата начала

bulding

Новые
Регистрация
10 Дек 2012
Сообщения
26
Реакции
0
Баллы
0
Помогите разобраться с программой

Из массива X(N) все положительные элементы записать в массив Y(K), а все отрицательные элементы - в массив Z(m).Найти в каждом массиве максимальный по модулю элемент.Удалить в каждом массиве первый элемент. В программе написать функцию формирования массивов Y и Z, определения максимального по модулю элемента,удаление элемента.Мой друг написал ее,а комментарии нет.Помогите разобраться.С++

Код:
#include <iostream>
#include <iomanip>
using namespace std;
int maximum(int *arr, int size)
{
   int max;
   max = arr[0];
   for(int i=0; i<size; i++)
    {
        if(arr[i]>max)
        {
            max = arr[i];
        }
    }
  return max;
}
void deleted(int *arr,int size)
{
	int i;
	for(i=0;i<size-1;i++)
	{
		arr[i]=arr[i+1];

	}
	--size;
	cout<<"New";
	for(i=0;i<size;i++)
		cout<<setw(2)<<arr[i];

	cout<<endl;
}

void run(const int *begin, const int *end, int *pos, int *neg, int **p_pos, int **p_neg)
{
   *p_pos = pos;
   *p_neg = neg;

   for(const int* p = begin; p != end; ++p)
   {
      if(*p > 0) **p_pos = *p, ++(*p_pos);
      else if(*p < 0) **p_neg = *p, ++(*p_neg);
   }
}

int main()
{
   const int n = 5;
   int t=0,u=0;

   int arr[n];

   for(int i=0;i<n;i++)
   {cout<<"Array=";
   cin>>arr[i];}
   int pos[n];
   int neg[n];

   int *p_pos, *p_neg;

   run(arr, arr + n, pos, neg, &p_pos, &p_neg);

   cout<< "positives: "<<endl;
   for(int i=0;i<n;i++)
	   if(pos[i]>0) t++;
   for(int i=0;i<n;i++)
	   if(pos[i]<0) u++;
   for(const int* p = pos; p != p_pos; ++p)
      cout<<*p<<"\t";

      cout<<"MaxElement= "<<maximum(pos,n);
	  cout<<endl;
	  cout<<"New Massiv= ";deleted(pos,t);
	  cout<<endl;

   cout << "negatives: "<<endl;
   for(const int* p = neg; p != p_neg; ++p)
      cout<<*p<<"\t";

      cout<<"MaxElement= "<<maximum(neg,n);
	  cout<<endl;
	  cout<<"New Massiv= ";deleted(neg,u);
      cout<<endl;

	system ("pause");
    return 0;
}
 
Написать-то друг написал, только ошибок насажал...
Первая грубейшая ошибка в функции maximum() - числа массива используются "как есть", хотя, в задании сказано, что их надо брать по модулю. Вторая ошибочка - цикл нужно начинать не с 0, а с 1. Какой смысл сравнивать нулевой элемент массива сам с собой? Да и пременную i было бы неплохо объявить, а то компилятор заругается...

Описание простое:
- функция maximum() должна возвращать максимальное значение ПО МОДУЛЮ преданного в неё массива.
- подпрограмма deleted() удаляет первый элемент со здвигом массива. Если честно, я бы не стал вообще ничего удалять и сдвигать. Достаточно просто увеличить на единицу указатель на массив.
- подпрограмма run() разделяет исходный массив на два по заданному условию. Только вот непонятно, что она должна делать с нулевыми значениями? В том виде, что есть, она их просто игнорирует.
- функция main() является основной программой - она объявляет и заполняет массивы, запускает другие подпрограммы и функции.

Вот как-то-так....
 
Назад
Сверху