vetor [RESOLVIDO]

1. vetor [RESOLVIDO]

Iago Lira
iagolira

(usa Debian)

Enviado em 02/10/2015 - 15:40h

como alocar todas as componentes de um vetor de uma só vez?

exemplo:

a[1] = 0;
a[2] = 3;
a[3]= 0;
b[1] = 0;
b[2] = 2;
b[3]= 0;

como faço pra imprimir estes vetores num loop?
printf (argumento) a(), b()

Não quero que imprima assim: printf (argumento) a[1], a[2]... etc
Saida:
graphics top triangle {0 3 0} {0 2 0}



  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/10/2015 - 20:23h

C tem filosofia e propósito diferentes de Fortran. Veja, por exemplo, que enquanto Fortran usa comandos para fazer entrada e saída de dados, C não tem qualquer comando para tanto, confiando tais operações, quando necessárias, a funções da biblioteca.

Um dos objetivos de C é permitir criar bibliotecas com facilidade. Sem entrar no mérito de comparar tal objetivo declarado com o que se consegue fazer em Fortran -- até porque eu não conheço Fortran o suficiente para fazer uma comparação justa --, é muito simples criar uma função que escreva um array numa forma semelhante à que você mostrou para Fortran.

/*
Função para imprimir array unidimensional de inteiros.
Note que a função inclui tratamento de erros.
*/
int printarray1d(int array[], int array_size){
if(array_size>0){
if(printf("%d", array[0])<0)
return EOF;
for(size_t i=1; i<array_size; i++)
if(printf(" %d", array[i])<0)
return EOF;
}
return (int)array_size;
}


Se você garantir que vai usar a função sempre com arrays (e não com ponteiros que apenas casualmente apontem para um array), pode até criar uma macro que dispense a especificação explícita de segundo parâmetro.

/* A macro abaixo calcula o número de elementos do array a partir do seu nome. */
#define prtarr1d(arr) printarray1d(arr, sizeof arr/sizeof arr[0])


3. Re: vetor

Paulo
paulo1205

(usa Ubuntu)

Enviado em 02/10/2015 - 17:04h

A pergunta sobre como definir os valores todos de uma vez é bem elementar. Se o livro-texto ou apostila que você está usando não ensinar a fazer isso, provavelmente é o caso de trocar por outro livro melhor.

Pelos exemplos que você colocou, há outro aspecto básico em que você parece também estar deficiente. Em C, um array com N elementos tem índices que vão de 0 até N-1, e não de 1 a N.

int arr[3]={-1, 0, 1};
/* arr[0]==-1 && arr[1]==0 && arr[2]==1 */


Você não vai conseguir imprimir arrays genéricos com printf() sem ser imprimindo elemento a elemento. O que você pode fazer é criar uma função para imprimir arrays, que terá dois parâmetros: um ponteiro que apontará para o primeiro elemento e a quantidade de valores a ser impressa. Dentro da função, você imprime elemento por elemento, mas em outras partes do programa apenas passa seus arrays e seus respectivos tamanhos como argumentos da função.


4. Re: vetor [RESOLVIDO]

Iago Lira
iagolira

(usa Debian)

Enviado em 04/10/2015 - 18:58h

paulo1205 escreveu:

A pergunta sobre como definir os valores todos de uma vez é bem elementar. Se o livro-texto ou apostila que você está usando não ensinar a fazer isso, provavelmente é o caso de trocar por outro livro melhor.

Pelos exemplos que você colocou, há outro aspecto básico em que você parece também estar deficiente. Em C, um array com N elementos tem índices que vão de 0 até N-1, e não de 1 a N.

int arr[3]={-1, 0, 1};
/* arr[0]==-1 && arr[1]==0 && arr[2]==1 */


Você não vai conseguir imprimir arrays genéricos com printf() sem ser imprimindo elemento a elemento. O que você pode fazer é criar uma função para imprimir arrays, que terá dois parâmetros: um ponteiro que apontará para o primeiro elemento e a quantidade de valores a ser impressa. Dentro da função, você imprime elemento por elemento, mas em outras partes do programa apenas passa seus arrays e seus respectivos tamanhos como argumentos da função.


Muito obrigado pela sua crítica e sugestão!

Em Fortran isto é muito fácil; basta apenas fazer:


a(1)=1; a(2)=3, a(3)=4
write(*,*) "tres numeros: ", a
!Saida: tres numeros: 1 3 4


Nome: Francisco Iago Lira Passos
Curso: Bacharelado em Física






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts