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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2013, 22:06   #1
lisica198808
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 64
Вопрос найти сумму до и после удаления максимального и минимального элемента массива

Дан массив действительных чисел. Удалить максимальный и минимальный элементы, найти сумму до и после удаления.

Массив задаю, максимум и минимум нахожу, сумму до удаления тоже считается. А как удалить максимальный и минимальный элементы не знаю..
Подскажите пожалуйста, как правильно записать удаление этих элементов.

вот код того , что считается:
Код:
#include<stdio.h>
#include<math.h>
#include<iostream>
#include <stdlib.h>
using namespace std;/*это обявление пространства имён std.*/
 
class zadachka
  {public:
          float *mas;
          int n;
          float max,min,sum;
   public:      
    zadachka();  
   void vivod_mas();
   void maximin();
   void vivod();
   void sum_el();  
   void vivod_sum_el();
   void sred();
    ~zadachka();  
       };
   
zadachka::zadachka()
{cout<<"\n    Vvedite dliny massiva: "<<endl;
 cin>>n;
 mas=new float[n];
 for(int i=0;i<n;i++)
 mas[i]=0.001*rand();
 cout<<"\n     Rabotal konstryktor1"<<endl;
 }   
/*----------------------------------------------------------------------------*/
zadachka::~zadachka()
{cout<<"\n     Rabotal destryktor1"<<endl;
delete[]mas;} 
/*----------------------------------------------------------------------------*/
void zadachka::vivod_mas()
{cout<<"\n     Massiv: "<<endl;
   for(int i=0;i<n;i++)
    cout<<mas[i]<<"  ";
}
/*----------------------------------------------------------------------------*/
void zadachka::maximin()
{max=-100000;
 for(int i=0;i<n;i++)
 if (mas[i]>max) max=mas[i];
 min=100000;
 for(int i=0;i<n;i++)
 if (mas[i]<min)  min=mas[i];
}
 
 
void zadachka::vivod()
{cout<<endl<<"\n     Minimal'nij element massiva= "<< min<<endl;
 cout<<endl<<"\n     Maksimal'nij element massiva= "<< max<<endl;}
/*----------------------------------------------------------------------------*/
void zadachka::sum_el()
{ sum=0;
  for(int i=0;i<n;i++)
  sum=sum+mas[i];
}
/*----------------------------------------------------------------------------*/
void zadachka::vivod_sum_el()
{cout<<endl<<"\n     Symma elementov massiva= "<< sum<<endl;}
/*----------------------------------------------------------------------------*/
int main()
{  zadachka a;
   a.vivod_mas();
   a.maximin();
   a.vivod();
   a.sum_el();
   a.vivod_sum_el();
   system("pause"); 
}
lisica198808 вне форума Ответить с цитированием
Старый 21.10.2013, 06:35   #2
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

совет.не стоит вот так делать
Код:
max=-100000;
старайтесь работать с элементами массива
Код:
max=mas[0];
тогда поиск будет выглядеть вот так

Код:
void zadachka::maximin()
{max=mas[0];
 for(int i=1;i<n;i++)
 if (mas[i]>max) max=mas[i];
 min=mas[0];
 for(int i=1;i<n;i++)
 if (mas[i]<min)  min=mas[i];
}
Цитата:
удалить максимальный и минимальный элементы
значит сдвинуть элементы в местах максимального и минимального элементах.
Алгоритм:
- ищем минимальный и его индекс
- ищем максимальный и его индекс
- начиная от индекса минимального сдвиг на 1 эл-т влево т.е. mas[i]=mas[i+1]
- аналогично для максимального.
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 21.10.2013 в 06:39.
SaLoKiN вне форума Ответить с цитированием
Старый 23.10.2013, 21:39   #3
lisica198808
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 64
По умолчанию написала код на удаление максимального элемента в программе..

написала код на удаление максимального элемента в программе.. запускается через раз.. и подвисает((
компилятор выдает ошибку 111:25 D:\адрес к файлу\4.cpp [Warning] '\040'
что я опять сделала не так???????????????????????????
Код:
#include<stdio.h>
#include<math.h>
#include<iostream>
#include <stdlib.h>
using namespace std;/*это обявление пространства имён std.*/

class zadachka
  {public:
          float *mas;
          int n,i_max, i_min,j;
          float max,min,sum,sum_yd;
   public:      
    zadachka();  /*konstryktor*/
   void vivod_mas();/*vivod massiva*/
   void maximin();/*poisk maksimyma i minimyma*/
   void vivod();/*vivod maksimyma i minimyma*/
   void sum_el();  /*symma vsex elementov massiva*/
   void vivod_sum_el();/*vivod symmi vsex elementov massiva*/
 void ydalenie();

    ~zadachka();  /*destryktor*/
       };
   
zadachka::zadachka()
{cout<<"\n    Vvedite dliny massiva: "<<endl;
 cin>>n;
 mas=new float[n];
 for(int i=0;i<=n;i++)
 mas[i]=0.001*rand();
 cout<<"\n     Rabotal konstryktor1"<<endl;
 }   
/*----------------------------------------------------------------------------*/
zadachka::~zadachka()
{cout<<"\n     Rabotal destryktor1"<<endl;
delete[]mas;} 
/*----------------------------------------------------------------------------*/
void zadachka::vivod_mas()
{cout<<"\n     Massiv: "<<endl;
   for(int i=0;i<n;i++)
    cout<<mas[i]<<"  ";
}
/*----------------------------------------------------------------------------*/

void zadachka::sum_el()
{ sum=0;
  for(int i=0;i<=n;i++)
  sum=sum+mas[i];
}
/*----------------------------------------------------------------------------*/
void zadachka::vivod_sum_el()
{cout<<endl<<"\n     Symma elementov massiva= "<< sum<<endl;}
/*----------------------------------------------------------------------------*/
void zadachka::maximin()
{max=mas[0];
 for(int i=1;i<n;i++)
 if (mas[i]>max) {max=mas[i]; i_max=i;}
 min=mas[0];
 for(int i=1;i<n;i++)
 if (mas[i]<min)  {min=mas[i];i_min=i;}
}

/*----------------------------------------------------------------------------*/
void zadachka::vivod()
{cout<<endl<<"\n     Minimal'nij element massiva= "<< min<<endl;
 cout<<endl<<"\n     Maksimal'nij element massiva= "<< max<<endl;}
/*----------------------------------------------------------------------------*/
void zadachka::ydalenie()
{for(int j=i_max;j<=n-1;j++)
 mas[j]=mas[j+1];
 for(int j=1;j<=n-1;j++)
  cout<<"\n     Massiv posle ydalenija max: "<<mas[j]<<endl;
  
}


/*----------------------------------------------------------------------------*/


/*ОДИНОЧНОЕ НАСЛЕДОВАНИЕ*/
class massiv2:public zadachka /*ПРОИЗВОДНЫЙ КЛАСС*/
 { public: float sr, zn; 
   public:
        massiv2();/*konstryktor*/
        void srednee(); ;/*srednee arifmeticheskoe*/
        void vivod_srednee();/*vivod srednego arifmeticheskogo  */
        void znach();/*zadannoe znachenie po yslovijy*/
        void vivod_znach();/*vivod zadannogo znachenija*/
        void yslovie();/*yslovie zadachi*/
        
        ~massiv2()/*destryktor*/
        {cout<<"\n     Rabotal destryktor2"<<endl;}     
 };
 /*----------------------------------------------------------------------------*/
massiv2::massiv2():zadachka()
    { cout<<"\n     Rabotal konstryktor2\n"<<endl;}
 /*----------------------------------------------------------------------------*/
void massiv2::srednee()  /*sum_el()- наследуется с преыдущего класса */
    { sr=sum/n;}
/*----------------------------------------------------------------------------*/
void massiv2::vivod_srednee()
    {cout<<endl<<"\n\n     Srednee arifmeticheskoe massiva= "<< sr<<endl;};
 /*----------------------------------------------------------------------------*/
void massiv2::znach()    /* maximin()- наследуется с преыдущего класса */
    {zn=(max+min)/2;}/**/
/*----------------------------------------------------------------------------*/
void massiv2::vivod_znach()
    {cout<<endl<<"\n     zn=(max+min)/2= "<< zn<<endl;}
/*----------------------------------------------------------------------------*/
void massiv2::yslovie()
    {if (sr>zn) cout<<endl<<"\n     sr bol'she zn   \n\n"<<endl; 
       else cout<<endl<<"\n\     zn bol'she sr   \n\n"<<endl;}
 /*----------------------------------------------------------------------------*/
 
int main()
{  zadachka a;
   a.vivod_mas();
   a.maximin();
   a.vivod();
   a.ydalenie();

   a.sum_el();
   a.vivod_sum_el();

   massiv2 b;
   b.vivod_mas();
   b.maximin();
   b.vivod();
   b.sum_el();
   b.vivod_sum_el();  
   b.srednee();
   b.vivod_srednee();
   b.znach();
   b.vivod_znach();
   b.yslovie();
   
system("pause");  
}
lisica198808 вне форума Ответить с цитированием
Старый 24.10.2013, 05:37   #4
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

компилятор выдает вам предупреждение,а не ошибку. в строке 111 символ 25. [Warning] '\040' это символ пробела вроде....
я думаю эта строка
Код:
 else cout<<endl<<"\n\     zn bol'she sr   \n\n"<<endl;}
должна быть такой
Код:
 else cout<<endl<<"\n     zn bol'she sr   \n\n"<<endl;}
и если что endl и "\n" оба отвечают за перевод строки ;-)
next
в конструкторе вы вводите n элементов,после чего в некоторых местах работаете с n-1.
Код:
for(int i=0;i<=n;i++)
поэтому используйте всегда строгие знаки равенства, все равно элементов будет n. т.к. нумерация с 0.
next
Код:
 
for(int j=1;j<=n-1;j++)
  cout<<"\n     Massiv posle ydalenija max: "<<mas[j]<<endl;
зачем вам n-1 надписей
Цитата:
Massiv posle ydalenija max
? и почему нумерация с 1?
делайте так
Код:
  cout<<"\n     Massiv posle ydalenija max: "<<endl;
 for(int j=0;j<n-1;j++)
  cout<<"  "<<mas[j];

next
тут не хватает
Код:
void zadachka::maximin()
{max=mas[0];
i_max=0;
i_min=0;
 for(int i=1;i<n;i++)
 if (mas[i]>max) {max=mas[i]; i_max=i;}
 min=mas[0];
 for(int i=1;i<n;i++)
 if (mas[i]<min)  {min=mas[i];i_min=i;}
}
с учетом всех этих исправлений у меня все работает ;-) ах да.... зачем вам такой огромный rand()? я думаю вполне достаточно
Код:
zadachka::zadachka()
{cout<<"\n    Vvedite dliny massiva: "<<endl;
 cin>>n;
 srand(time(0));
 mas=new float[n];
 for(int i=0;i<n;i++)
 mas[i]=0.001*(rand()%1000);
 cout<<"\n     Rabotal konstryktor1"<<endl;
 }
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 24.10.2013 в 06:22.
SaLoKiN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти сумму модулей элемента массива, расположенных после первого отрицательного ? МоЗгАвеД Общие вопросы C/C++ 0 12.12.2011 17:36
В матрице в каждой строке найти сумму N Элементов расположенных после максимального элемента этой строки lexflax Паскаль, Turbo Pascal, PascalABC.NET 0 20.04.2011 14:41
Поиск максимального (минимального) элемента массива в Delphi ICE1589 Помощь студентам 0 08.04.2011 13:32
Поиск максимального и минимального элемента массива(с существенным дополнением) Dayterius Паскаль, Turbo Pascal, PascalABC.NET 6 20.05.2009 11:37
Поиск минимального (максимального) элемента массива Radamant Помощь студентам 10 24.12.2008 17:44