Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите разобраться с программой (http://www.tehnari.ru/f41/t82716/)

bulding 22.12.2012 02:47

Помогите разобраться с программой
 
Из массива 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;
}


Николай_С 22.12.2012 03:33

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

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

Вот как-то-так....


Часовой пояс GMT +4, время: 04:04.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.