Adicionar um elemento a um array

khador

Power Member
Problema: Dado um array de inteiros(numbers[]), o seu numero de elementos(n_numbers), o seu valor a introduzir(x), na posição desejada(y) terá de adicionar esse elemento (x) na posição y do array inserido por exemplo:


inserindo na consola do C:
n_numbers: 5
numbers[]: 2 7 4 8 9
x: 16 (valor a introduzir na posição y)
y: 2 (posição desejada para inserir o novo elemento)

Inserindo esses valores o resultado terá de ser:
Antes: 2 7 4 8 9
Resultado: 2 7 16 4 8 9

código:

Nota: isto é apenas a funçao para inserir o elemento, a funçao que pede os valores penso que nao seja necessaria.

ints_insert_at(int *numbers, int n_numbers, int x, int y)
{
int i;
for (i=0;i<n_numbers;i++)
if (n_numbers == y)
{
numbers[y] = x;
}
return i;
}

Até a este momento com este codigo o resultado é: 2 7 16 8 9, ou seja, esta apenas a substituir o 4 pelo 16 mas o pretendido é inserir o 16 na posicao 2 onde esta o valor 4 e avançar o resto dos numeros uma casa a frente, mas sou iniciante e nao sei como se faz alguem ajuda ? :D obrigado pessoal.
 
Considerando que o array numbers já tem espaço suficiente alocado:
Código:
ints_insert_at(int *numbers, int n_numbers, int x, int y) {
	int i, tmp;
	for (i=0;i<n_numbers;i++)
		if ([COLOR="#B22222"]i >= y[/COLOR]) {
[COLOR="#B22222"]			tmp = numbers[i];
			numbers[i] = x;
			x = tmp;[/COLOR]
        }
	return i;
}

Senão, terás que aumentar o tamanho do array:
Código:
ints_insert_at(int *numbers, int n_numbers, int x, int y) {
	int i, tmp;
	[COLOR="#B22222"]numbers = (int*) realloc (numbers, (n_numbers + 1) * sizeof(int));[/COLOR]
	for (i=0;i<n_numbers;i++)
		if (i >= y) {
			tmp = numbers[i];
			numbers[i] = x;
			x = tmp;
        }
	return i;
}
Neste caso, atenção que não faço testes ao realloc.
 
Back
Topo