Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Помогите исправить программу по одномерным массивам

Автор: Neon6868 7.04.2007 19:20

Одномерный массив, состоящий из n целых элементов, преобразовать таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечётных позициях, а во второй половине - элементы, стоявшие в чётных позициях.

Я прогу написал, но она правильно преобразует только половину массива, а вторую половину она преобразует неправильно, так как после первого преобразования массив изменяется!!!!!Как это можно исправить?????

Вот программа:

# include <iostream.h>
# include <stdlib.h>
void main()
{
const int n=10;
int i,a[n];
cout<<"Isxodnii massiv:\n";
randomize();
for (i=0;i<n;i++)
{
a[i]=random(50)-25;
cout<<a[i]<<' ';
}
int m=0;
for (i=1;i<n;i+=2)
{
a[m]=a[i];
m+=1;
}
for (i=0;i<n;i+=2)
{
a[m]=a[i];
m+=1;
}
cout<<"Preobrazovannii massiv:\n";
for (i=0;i<n;i++)
cout<<a[i]<<' ';
}

Автор: volvo 7.04.2007 19:43

В данном конкретном случае (число элементов четное) - вот так:

#include <iostream.h>
#include <stdlib.h>

int main() {

const int n=10;
int i, a[n];

cout << endl << "Isxodnii massiv:\n";
randomize();
for(i = 0;i < n; i++) {
a[i] = random(50)-25;
cout << a[i] << " ";
}

int T;
for(i = 0; i < n - 1; i += 2) {
T = a[i]; a[i] = a[i + 1]; a[i + 1] = T;
}
for(int k = 1; k <= n/2; ++k) {
T = a[k];
for(i = k + 1; i < n; ++i) a[i - 1] = a[i];
a[n - 1] = T;

}
cout << endl << "Preobrazovannii massiv:\n";
for(i = 0; i < n; i++) cout << a[i] << " ";
return 0;
}


Автор: Neon6868 7.04.2007 20:07

Цитата(volvo @ 7.04.2007 16:43) *

В данном конкретном случае (число элементов четное) - вот так:


А что если число элементов нечётное????? blink.gif

Автор: Neon6868 7.04.2007 20:58

Я сделал с помощью второго массива, но если в массиве нечётное количество элементов, например 11, то в преобразованном массиве выводится последний элемент, равный 1094!!!!! Кто-нибудь знает как исправить это?????

Вот программа:

# include <iostream.h>
# include <stdlib.h>
void main()
{
const int n=11;
int i,a[n],b[n];
cout<<endl<<"Isxodnii massiv:\n";
randomize();
for (i=0;i<n;i++)
{
a[i]=random(50)-25;
cout<<a[i]<<' ';
}
int x,j,m=0;
for (i=0;i<n/2;++i)
b[i]=a[2*i+1];
for (i=0;i<n/2;++i)
b[n/2+i]=a[2*i];
cout<<"Preobrazovannii massiv:\n";
for (i=0;i<n;i++)
cout<<b[i]<<' ';
int imax=0;
for (i=1;i<n;i++)
if (b[i]>b[imax]) imax=i;
cout<<"Nomer maksimalnogo elementa massiva:\n"<<imax;
}

Автор: volvo 7.04.2007 21:43

Не ТЫ, а ТЕБЕ сделали...

Я уже ответил тебе на том форуме, сюда копировать не буду...

Автор: Neon6868 7.04.2007 22:42

Цитата(volvo @ 7.04.2007 18:43) *

Я уже ответил тебе на том форуме, сюда копировать не буду...


Прога работает, большое спасибо за помощь! smile.gif