מיזוג שלשה מערכים למערך רביעי חדש, ומיונו בסדר יורד

bennyArraysLeave a Comment

discription: the program merged 3 arrays to a new array and allso sorted the new array

  1. על התכנית לקלוט איברים לשלושה מערכים. לכל מערך ייקלטו לא יותר מעשרה איברים. (סיום הקלט למערך לא מלא יסומן ב- 0). איברי המערך הנקלטים יהיו שלמים, חיוביים וממוינים בסדר יורד (ללא איברים כפולים).
    התכנית תמזג את שלושת המערכים למערך רביעי, שאיבריו יהיו ממוינים בסדר לא עולה (כלומר: סדר יורד, אך יתכנו איברים כפולים).
    על התכנית להדפיס את איברי המערך הממוזג.

הערה: אם הקלט אינו תקין (המספרים שנקלטו למערך אינם בסדר יורד בלי כפילויות), יש להוציא הודעת  ERROR  ולקלוט מחדש את כל המספרים אך ורק במערך שקלט מספרים לא תקינים.

האלגוריתם של מיזוג שלמדתם בהרצאה צריך להופיע בפונקציה נפרדת.

קלט הנתונים יהיה בפונקציה נפרדת ולא בתוך התכנית.

 

דוגמאות הרצה:

enter values for the first vector:

6 4 2 0

enter values for the second vector:

21 19 17 14 13 12 9 6 3 2

enter values for the third vector:

3 2 1 0

merged vector is:

21 19 17 14 13 12 9 6 6 4 3 3 2 2 2 1

 

דוגמא נוספת:

enter values for the first vector:

4 2 0

enter values for the  second vector:

5 4 3 3 0

ERROR

5 23 0

ERROR

4 3 0

enter values for the third vector:

7 6 5 4 3 2 1 0

merged vector is:

7 6 5 4 4 4 3 3 2 2 1

 

 

 

 

 

/*************************

discription: the program  merged 3 arrays to a new array and allso sorted the new array .
**************************/
#include <iostream>
using namespace std;


int cinArray(int array[])
{
	int m = 0, i = 0, size ,firstElement=1;

	do                      // the input loop
	{
		i = 0;	m = 0; size = 0;
		cin >> array[i];              //   the input first elemant input
		size++;                       // 'size' is the numbers of the elements in the array.
		if (array[0]==0)
		{
			size=0;                      // 'size' is 0 becauze: 0 is the sign for STOP , in this case(array[0]=0) the array is completely empty 🙁 .
			firstElement=0;
		}

		for (i = 1; i < 10&&(firstElement); i++) // the second condition is to make sure that: if the first elemant is 0, the program not ask mor input. { cin >> array[i];
			size++;
			if (array[i] == 0)    //  if the  elemant is 0, STOP!
			{
				size -= 1;            //0 is the sign for STOP so : 0 not include in the array
				break;
			}
			if (array[i] >= array[i - 1])    //  if the next elemant is bigger or equal from the privies elemant let me know
			{
				m = 1;     // let me know if is not sorted (to print ERROR and statr the input loop all over again).
			}

		}
		if (m == 1)
		{
			cout << "ERROR" << endl;
		}

	} while (m == 1);



	return size;            // we need the array size for the merged loops.
}

	void marrageArray(int array1[],int array2[],int array3[] ,int newArray[30] ,int size1  ,int size2,int size3) //the merged function.
	{
	int i=0 ,j,c, k=0 ,b=0;               // indexs

	for ( i = 0; i < size1; i++)      // enter the  first array to the new Array
	{
		newArray[i] = array1[i];
	}

	for ( k=0, j = i; k < size2; k++,j++)   // enter the second array to the new Array
	{
		newArray[j] = array2[k];
	}
	for ( b = 0, c = j; b < size3; c++, b++)      // enter the third array to the new Array
	{
		newArray = array3[b];
	}



		bool flag; int temp;     // bubble sort for the new array that contian the 3 arrays. 
	flag = true;

while (flag)
{
        flag = false;
        for (j = 0; j < c-1; j++)
    {
        if (newArray[j] < newArray[j + 1] )     // if elamant is smaller from the next one replace between them.
        {
           temp = newArray[j];                      
           newArray[j] = newArray[j + 1];           
           newArray[ j + 1] = temp;				  
           flag = true;							  
        }
    }
   
}

	for (int f = 0; f < c; f++)                  // merged vector output
	{
		cout << newArray[f] << " ";
	}


}


int main()
{
	int array1[10], array2[10], array3[10],newArray[30];
	int size1, size2, size3;
	cout << "enter values for the first vector:" << endl;

	size1 = cinArray(array1);                                       // go to the function to get numbers for the first array , and return the first array size
	cout << "enter values for the second vector:" << endl;

	size2 = cinArray(array2);                                         // go to the function to get numbers for the second array , and return the second array size
	cout << "enter values for the third vector:" << endl;

	size3 = cinArray(array3);                                       // go to the function to get numbers for the third array , and return the third array size

	cout <<"merged vector is:"<<endl;
	marrageArray( array1, array2, array3 , newArray , size1  , size2, size3);

	system("pause");
	return 0;
}
/********OUTPUT 1**********
 enter values for the first vector:
6 4 2 0
enter values for the second vector:
21 19 17 14 13 12 9 6 3 2
enter values for the third vector:
3 2 1 0
merged vector is:
21 19 17 14 13 12 9 6 6 4 3 3 2 2 2 1
**************************/

/********OUTPUT 2**********
enter values for the first vector:
6 5 4 1 2 3 0
ERROR
3 2 1 0
enter values for the second vector:
9 8 6 4 3 2 1 0
enter values for the third vector:
1 2 0
ERROR
6 5 4 3 2 1 0
merged vector is:
9 8 6 6 5 4 4 3 3 3 2 2 2 1 1 1 
**************************/

קוד נוסף


//Absorbing two arrays and their length and mergers.
#include <iostream>
#include <ctime>
using namespace std;
//Absorption values according to the conditions required.
int kelet (int arr[],int &i)
{
	int m = 1;
	while (m>0)
	{
		m = 0;
		cin >> arr[i];
		while (i<10&&arr[i]!=0) { i++; cin >> arr[i];
		
        if (arr[i - 1] <= arr[i]) m++; } if (m > 0)
		{
			i = 0;
			cout << "error" << endl;
		}
	}
	return i-1;
}
//The algorithm of merging arrays.
void action(int arr[], int brr[], int index1, int index2, int target[])
{
	int index_a = 0, index_b = 0, index_target = 0;

	while (index_a < index1 && index_b < index2) { if (arr[index_a] >= brr[index_b])
		{
			target[index_target] = arr[index_a];
			index_target++;
			index_a++;
		}

		else
		{
			target[index_target] = brr[index_b];
			index_target++;
			index_b++;
		}
	}
	if (index_a == index1)
	{
		while (index_b < index2)
		{
			target[index_target] = brr[index_b];
			index_target++;
			index_b++;
		}
	}
	else
	{
		while (index_a < index1)
		{
			target[index_target] = arr[index_a];
			index_target++;
			index_a++;
		}
	}

}




int main()
{
	int a[10], b[10], c[10], m = 1, g, colel[30], half[20],i=0,j=0,k=0;
	//Absorbing arrays and their length.
	cout << "enter values for the first vector:" << endl;
	kelet(a,i);
	cout << "enter values for the second vector:" << endl;
	kelet(b, j);
	cout << "enter values for the third vector:" << endl;
	//Summoning actionsז
	kelet(c, k);
	action(a, b, i, j, half);
	g = i + j;
	action(half, c, g, k, colel);
	g += k;
	//Emission merged array
	cout << "merged vector is:" << endl;
	for (int i = 0; i < g; i++)
	{
		cout << colel[i] << " ";
	}
	return 0;
}

/*
enter values for the first vector:
3
2
1
0
enter values for the second vector:
6
5
4
0
enter values for the third vector:
9
8
7
0
merged vector is:
9 8 7 6 5 4 3 2 1 Press any key to continue . . .
*/

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *