Одномерный масив

Ответить
Alpha_winner
Сообщения: 3
Зарегистрирован: 13 апр 2009, 20:36

13 апр 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
Сообщения: 4
Зарегистрирован: 11 апр 2009, 23:47

14 апр 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
Сообщения: 3
Зарегистрирован: 13 апр 2009, 20:36

14 апр 2009, 17:22

9e9names писал(а):Если не пренебрегать изобретением велосипедов и забыть про библиотечные алгоритмы, то можно например так (да простят меня ценители прекрасного за пузырьковую сортировку и обмен без буфера :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 =rand()%10-rand()%5;
cout<<masiv<<" "<<'\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<0 && masiv[i+1]<0 )
// {
for ( j=0;j<20;j++)
{
for (unsigned char i=0;i<20;i++)
{
if (masiv>=0)

{
temp = masiv;
masiv = 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;
}




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