PDA

Просмотр полной версии : Одномерный масив



Alpha_winner
13.04.2009, 21:04
Помогите написать прогу на С++ !
Очень надо здать лабу, я пробовал сам, но не очень получается.
Вот задание:
"Сформировать случайным чином массив из 20 элементов. Упорядочить элементы массива таким образом, чтобы сначала следовали отрицательные элементы в порядке роста модуля, а затем положительные в порядке уменьшения."

Все что я намудрил:


#include <cstdlib>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

using namespace std;

int main(int argc, char *argv[])
{
srand(1);

int i;

int masiv[20];
int m1[20];
int temp;
for (unsigned char i=0;i<20;i++)
{
masiv[i] =rand()/2-rand();
cout<<masiv[i]<<" "<<'\n';
}
int j;
int min = masiv[0];
int rang[20];
// for (i=0; i<19; i++);
// {
// if(masiv[i]<0 && masiv[i+1]<0 )
// {
for (unsigned char i=0;i<20;i++)
{
min = abs (masiv[0]);

for (j=i; j<20; j++)
if( abs (masiv[j])< abs (min))
{
// temp = masiv[i];
// min = masiv[j];
// masiv[j] = temp;
}

masiv[j] = min ;

}
for (unsigned char j=0;j<20;j++)
cout<< masiv[j];

// }


// else
// cout<< masiv[i]<<'\n';
//}


system("PAUSE");
return EXIT_SUCCESS;
}

помогите, очень прошу!!!:rolleyes:

9e9names
14.04.2009, 10:04
Если не пренебрегать изобретением велосипедов и забыть про библиотечные алгоритмы, то можно например так (да простят меня ценители прекрасного за пузырьковую сортировку и обмен без буфера :D):


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

using namespace std;

void bubbleSort(int arr[], const int count);
void invertArray(int arr[], const int count);

int main()
{
const int size = 20;
int a[size] = {0};
int bound = 0;

srand(time(NULL));
for (int i = 0; i < size; i++)
{
a[i] = rand()%size - size/2;
cout << a[i] << " ";
}
cout << endl;

bubbleSort(a, size);

// посчитаем сколько отрицательных элементов
for (bound = 0; a[bound] < 0; bound++){}

// инвертируем отрицательную часть
if (bound > 0)
invertArray(a, bound);

// пропускаем нули
for (bound; a[bound] == 0; bound++){}

// инвертируем положительную часть
if (bound < size)
invertArray(&a[bound], size - bound);

for (int i = 0; i < size; i++)
cout << a[i] << " ";
cout << endl;
}

void bubbleSort(int arr[], const int count)
{
bool was_changed = false;
for (int pass = 1; pass<count; pass++)
{
for (int i = 0; i<count-pass; i++)
{
if (arr[i] > arr[i + 1])
{
arr[i] += arr[i + 1];
arr[i + 1] = arr[i] - arr[i + 1];
arr[i] = arr[i] - arr[i + 1];
was_changed = true;
}
}
if (!was_changed) break;
}
}

void invertArray(int arr[], const int count)
{
for (int i = 0; i < count/2; i++)
{
arr[i] += arr[count - i - 1];
arr[count - i - 1] = arr[i] - arr[count - i - 1];
arr[i] = arr[i] - arr[count - i - 1];
}
}

Alpha_winner
14.04.2009, 17:22
Если не пренебрегать изобретением велосипедов и забыть про библиотечные алгоритмы, то можно например так (да простят меня ценители прекрасного за пузырьковую сортировку и обмен без буфера :D):




Сенкс!!!))) Кажется я разобрался))):)
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Вот что я сам придумал:


#include <cstdlib>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

using namespace std;

int main(int argc, char *argv[])
{
srand(1);

int i;
int k;
int m;
int masiv[20];
int m1[20];
int temp;
int tp;
cout<<'\n';
for (unsigned char i=0;i<20;i++)
{
masiv[i] =rand()%10-rand()%5;
cout<<masiv[i]<<" "<<'\t';
}

cout<<'\n'<<'\n'<<'\n'<<'\n'<<"Yporadkovanuy: "<<'\n'<<'\n'<<'\n';
int j;
int min = masiv[0];
int rang[20];
// for (i=0; i<19; i++);
// {
// if(masiv[i]<0 && masiv[i+1]<0 )
// {
for ( j=0;j<20;j++)
{
for (unsigned char i=0;i<20;i++)
{
if (masiv[i]>=0)

{
temp = masiv[i];
masiv[i] = masiv[j];
masiv[j] = temp;
}



}
}
for (unsigned char j=0;j<20;j++)
cout<< masiv[j]<<'\t';


/////////////////////////////////////

for (unsigned char j=0;j<20;j++)
{
if (masiv[j]<0)
k = j;
}
cout<<'\n'<<'\n'<<'\n'<<k<<'\n'<<'\n'<<'\n';

////////////////////////////////////////


for ( m=0;m<=k;m++)
{
for (unsigned char j=0;j<k;j++)
{
if (abs (masiv[j])> abs (masiv[j+1]))
{
tp = masiv[j];
masiv[j] = masiv[j+1];
masiv[j+1] = tp;

}

}
}






for ( m=k+1;m<20;m++)
{
for (unsigned char j=k+1;j<20;j++)
{
if (abs (masiv[j])< abs (masiv[j+1]))
{
tp = masiv[j];
masiv[j] = masiv[j+1];
masiv[j+1] = tp;
}
}
}




for (unsigned char m=0; m<20; m++)
cout<< masiv[m]<<'\t';



system("PAUSE");
return EXIT_SUCCESS;
}




Найдите пожалуста ошибку!!!