1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Adicionar um elemento a um array

Discussão em 'Programação' iniciada por khador, 21 de Novembro de 2012. (Respostas: 2; Visualizações: 961)

  1. khador

    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.
     
  2. xBoShY

    xBoShY Power Member

    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.
     
  3. khador

    khador Power Member

    nao resultou mano
     

Partilhar esta Página