Страница 1 из 1

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

Добавлено: 16 дек 2009, 16:51
Templer
Собственно прошу подогнать мою прогу под условие(она неправильная ибо я чайник по с++).
Условие:Даны натуральные числа n , p , q , a1 , a2 , …, an , причем n ≥ q > p ≥1.
Найти количество членов последовательности a1 , a2 , …, aq удовлетво-
ряющих условию ai−1 ≤ ai ≥ ai+1, где i = 2, 3,..., (q −1), а также значение наи-
большего из членов последовательности ap , ap+1, …, an , удовлетворяющих
условию ai−1 ≥ ai ≤ ai+1, где i = (p +1), (p + 2),K, (n −1).
Упорядочить члены последовательности ap , ap+1, …, aq по возрастанию,
используя алгоритм сортировки методом прямого обмена.
Моя программа(делал по аналогии с методичкой,но походу сущий бред ):

Код: Выделить всё

#include <conio.h>
#include <iostream.h>
main()
{
int m,n,q,i,j,imax,p,*a,k,*temp_a,ibeg,iend,temp;
clrscr ();
cout<<"Введите количество элементов массива: ", cin>>n;
a=new int[n];
cout<<"Введите "<<n<<" элемента(ов) массива: ";
for(i=0;i<n;i++) cin>>a[i];
cout<<"Исходный массив: "<<endl;
for(i=0;i<n;i++) cout<<"a["<<i<<"]="<<a[i]<<" ";
cout<<endl;
cout<<"Введите q: ", cin>>q;
cout<<"Введите p: ", cin>>p;
for(int[i]=1;k=0;i<q-1;i++){
if (a[i-1]>=a[i])&&(a[i+1]=<a[i+1]) K++;}
for(imax=0,i=1;i<p;i++){
if(a[i]>a[imax]) imax=i;
}
cout<<"Максимальный элемент: a["<<imax<<"]="<<a[imax]<<endl;
temp_a=a;
m=n+ibeg-iend;
a=new int[m];
for(i=0;j=0;i<ibeg;i++,j++) a[j]=temp_a[i];
a[j++]=s_pos;
for(i=iend+1;i<n;i++,j++) a[j]=temp_a[i];
delete []temp_a;
for(i=m-1;i;i--)
for(j=0;j<i;j++)
if(a[j]>a[j+1])
temp=a[j],a[j]=a[j+1],a[j+1]=temp;
cout<<"Otcorturovanui macciv: "<<endl;
for(i=0;i<m;i++) cout<<"a['<<i<<"]="<<a[i]<<" ";
cout<<endl;
cout<<"Press me";
getch();
delete []a;
return 0;
}

Re: Динамический массив и сортировка прямого обмена(пузырька)

Добавлено: 16 дек 2009, 17:36
Albor
Что подгонять? Проверь синтаксис своего кода - это раз, сортировка пузырьком на этом форуме разжёвана не раз, нужно только поискать - это два.

Re: Динамический массив и сортировка прямого обмена(пузырька)

Добавлено: 16 дек 2009, 18:07
Templer
Синтаксис я то поправлю,саму структуру программы незнаю как сделать.
Т.е


Найти количество членов последовательности a1 , a2 , …, aq удовлетво-
ряющих условию ai−1 ≤ ai ≥ ai+1, где i = 2, 3,..., (q −1), а также значение наи-
большего из членов последовательности ap , ap+1, …, an , удовлетворяющих
условию ai−1 ≥ ai ≤ ai+1, где i = (p +1), (p + 2),..., (n −1).


Как это записать в моей программе,чтобы можно было отсортировать

Re: Динамический массив и сортировка прямого обмена(пузырька)

Добавлено: 16 дек 2009, 19:04
Albor
if (a[i-1]>=a)&&(a[i+1]=<a[i+1]) K++;}
А это не количество? Только, опять же, с ошибками (выделил жирным)

Re: Динамический массив и сортировка прямого обмена(пузырька)

Добавлено: 16 дек 2009, 19:08
Templer
Ну да само условие правильно,а где и как записать в программе я незнаю,в этом собственно и просьба

Re: Динамический массив и сортировка прямого обмена(пузырька)

Добавлено: 16 дек 2009, 19:13
Albor
Templer писал(а):Ну да само условие правильно,а где и как записать в программе я незнаю,в этом собственно и просьба
Что именно записать и где ты хочешь записать? Выражайся яснее.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Наверное ты хочешь это

Код: Выделить всё

cout<<"Кол-во элементов...: "<<К;

Re: Динамический массив и сортировка прямого обмена(пузырька)

Добавлено: 16 дек 2009, 19:29
Templer

Код: Выделить всё

#include <conio.h>
#include <iostream.h>
main()
{
int m,n,q,i,j,imax,p,*a,k,*temp_a,ibeg,iend,temp;
clrscr ();
cout<<"Введите количество элементов массива: ", cin>>n;
a=new int[n];
cout<<"Введите "<<n<<" элемента(ов) массива: ";
for(i=0;i<n;i++) cin>>a[i];
cout<<"Исходный массив: "<<endl;
for(i=0;i<n;i++) cout<<"a["<<i<<"]="<<a[i]<<" ";
cout<<endl;
cout<<"Введите q: ", cin>>q;
cout<<"Введите p: ", cin>>p;
for(int[i]=1;k=0;i<q-1;i++){
if (a[i-1]>=a[i])&&(a[i]=<a[i+1]) K++;}
for(imax=0,i=1;i<p;i++){
if(a[i]>a[imax]) imax=i;
}
cout<<"Максимальный элемент: a["<<imax<<"]="<<a[imax]<<endl;
Незнаю как записать эту часть программы правильно,чтобы можно было начать сортировать неизвесным мне методом пузырька.(сори за такие тупые вопросы,но я полный 0 в информатике)