#include <stdio.h>
#include <string.h>

#define MAX_ELEMENTS	10
#define EMPTY_ELEMVAL	0

#define ARR_ISEMPTY(arr)	( (arr)[0] == EMPTY_ELEMVAL )//εάν το πρώτο τμήμα του arr είναι 0 τότε επέστρεψε 0 αλλιώς 1
#define ARR_ISFULL(arr, len)	( (arr)[(len)-1] != EMPTY_ELEMVAL )//εάν το τελευταίο τμήμα του arr είναι γεμάτο τότε επέστρεψε 0 αλλιώς 1

typedef enum { FALSE=0, TRUE } Bool;//Δημιούργησε ένα enum με τις μεταβλητές TRUE FALSE και τις τιμές 0 1 αντίστοιχα

// -------------------------------------------------------------------------------------
void arr_print( int arr[], int maxelems )
{
	register int i;

	for (i=0; i < maxelems; i++)//ενώ(i=0;i είναι μικρότερο του maxelems;i++)
		printf("%d ", arr[i]);//Εκτύπωσε το iοστό του arr
	putchar('\n');//Εκτύπωσε '\n'

	return;
}
// -------------------------------------------------------------------------------------
int arr_append( int arr[], int maxelems, int val)
{
	if ( ARR_ISFULL(arr, maxelems) )//εάν είναι γεμάτο το arr
		return -1;

	if ( ARR_ISEMPTY(arr) ) {       //εάν είναι άδειο το arr
		arr[0] = val;				//το val εκχωρείται στο arr[0]
		return 0;
	}
	register int i;
	for (i=maxelems-1; arr[i] == EMPTY_ELEMVAL; i--)//ενώ(i=maxlems-1;το iοστό του arr = 0;i--)
		;
	arr[++i] = val;//στο i+1 του arr εκχωρείται η τιμή του val
	return i;
}
// -------------------------------------------------------------------------------------
Bool arr_prepend( int arr[], int maxelems, int val)
{
	if ( ARR_ISFULL(arr, maxelems) )//εάν είναι γεμάτο το arr
		return FALSE;				//επέστρεψε 1

	memmove( &arr[1], &arr[0], (maxelems-1) * sizeof(int) );
	arr[0] = val;                  //το πρώτο του arr ισούται με 0

	return TRUE;				   //επέστρψε 0
}
// --------------------------------------------------------------------------------------
int arr_elemindex( int arr[], int maxelems, int val )
{
	register int i;
	for (i=0; i < maxelems && arr[i] != val; i++)//ενώ(i=0;i είναι μικτρότερο του maxlems και το iοστό του arr δεν είναι ίσο με το val;i++)
		;
	return i == maxelems ? -1 : i;               //σε περίπτωση που το i είναι ίσο με το maxlems επέστρεψε -1 αλλιώς i
}
// -------------------------------------------------------------------------------------
Bool arr_delete( int arr[], int maxelems, int val)
{
	register int i;
	register int elem = arr_elemindex( arr, maxelems, val);
	if ( elem == -1 )//εάν το elem ισούται με -1
		return FALSE;//επέστρεψε 1

	for (i=elem; arr[i+1] != EMPTY_ELEMVAL && i < maxelems-1; i++)//ενώ(i=elem;το (i+1)ιοστό του arr δεν είναι 0 και το i είναι μικρότερο του (maxlems-1);i++)
		arr[i] = arr[i+1];//Το iοστό του arr είναι ίσο με το επόμενό του
	arr[i] = EMPTY_ELEMVAL;//Το iοστό του arr είναι 0

	return TRUE;
}
// -------------------------------------------------------------------------------------

int delete_all(int arr[],int maxelems)	{
	register int i;
	for(i=0;i<maxelems;i++)    {                     //ενώ(i=0;i είναι μικρότερο του maxelems;i++)
	arr[i] = 0;					 //το iοστό του arr = 0
	}
	return TRUE;
}

int main( void )
{
	int arr[ MAX_ELEMENTS ] = {10, 20, 30, 40, 50, 60, 70, 80, 0, 0};

	arr_print( arr, MAX_ELEMENTS );

	delete_all(arr,MAX_ELEMENTS);
	
	arr_print( arr, MAX_ELEMENTS );
	
	return 0;
}

