Como varrer um vetor de int (Dúvida muito Básica) [RESOLVIDO]

1. Como varrer um vetor de int (Dúvida muito Básica) [RESOLVIDO]

Apprentice X
ApprenticeX

(usa FreeBSD)

Enviado em 06/02/2022 - 16:16h

Boa Tarde a todos!

Tenho o seguinte vetor declarado e quero imprimir na tela apenas os valores existentes nele!
Não faço idéia de como fazer pra saber qts registros tem no vetor!
int List[10] = {0, 1, 2}; 

OBS: É um vetor com capacidade para 10 Registros, ONDE foram utilizados apenas 3 Registros. Desejo que meu programa DESCUBRA qts registros foram usados neste vetor de 10 registros!

Alguém pode ajudar?


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 06/02/2022 - 23:57h

Bruuh escreveu:

Sempre que você inicia um array, todos os valores são iguais a zero, de forma que a única coisa q tu tem que fazer é pegar o tamanho do array e usar como argumento em um loop for que checa x vezes se o valor do vetor é ou não zero.


Cuidado, porque C não é Java.

Em C, declarar um array só é suficiente para garantir que seus elementos serão todos preenchidos com zero se for um array alocado estaticamente (e.g. em escopo de arquivo ou em escopo de bloco mas com o modificador static). Arrays declarados com alocação automática (escopo de bloco sem o modificador static) e que não possuam uma lista de valores de inicialização para seus elementos têm valores iniciais indeterminados para tais elementos. Também arrays alocados dinamicamente com malloc(), realloc() e alloca() têm valores iniciais indefinidos para seus elementos. Por outro lado, se houver uma lista de inicialização acompanhando a declaração, os elementos com valores explicitamente discriminados terão esses valores, e os demais elementos terão valor zero, independentemente do tipo de alocação ser estática ou automática.
// Escopo de arquivo: alocação estática.
int arr1[10]; // Todos os 10 elementos têm valor zero.
int arr2[10]={1, 2, 3}; // Equivalente a {1, 2, 3, 0, 0, 0, 0, 0, 0, 0};

void func(void){
// Escopo local.
static char arr3[10]; // Alocação estática: todos os dez elementos têm valor zero.
char arr4[10]; // Alocação automática simples: valores iniciais desconhecidos.
char arr5[10]="Teste"; // Alocação automática com lista de inicialização: equivalente a {'T', 'e', 's', 't', 'e', 0, 0, 0, 0, 0};

int *arr6=malloc(10*sizeof *arr6); // Alocação dinâmica em memória livre: valores iniciais desconhecidos.
int *arr7=calloc(10, sizeof *arr7); // Alocação dinâmica em memória livre com calloc(): valores iniciais zerados.
int *arr8=alloca(10*sizeof *arr8); // Alocação dinâmica em memória automática (não precisa de desalocação manual, pois é recolhido ao final da função): valores iniciais desconhecidos.

/* ... */

// Devolve valores alocados dinamicamente à memória livre.
free(arr7);
free(arr6);
}


Em java ficaria assim:

int list[] = new list[10];
list[0] = 1;

int count = 0;

for(int i = 0; i < list.length; i++){
if(list[i] != 0){
count++;
}
}

System.out.println(count + " registros foram usados no vetor");


Claro que, se você declarar algum valor como zero, não funcionaria. Mas se fosse uma List, e não um Array, você poderia simplesmente usar o método nomeDaLista.size(), já que cada valor da list tem que ser declarado manualmente, sendo impossível declarar valores vazios.


Pois é: não creio que, num caso geral, possa-se assumir que se um valor é zero então não está em uso.

Usando apenas os tipos nativos do C, a única forma de saber quantos elementos de um array estão em uso é ter uma variável companheira do array que fica guardando a quantidade de elementos em uso, e é responsabilidade do programador atualizar o valor dessa variável a cada inclusão ou exclusão de elementos no array.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)

3. Re: Como varrer um vetor de int (Dúvida muito Básica) [RESOLVIDO]

Bruh
Bruuh

(usa Arch Linux)

Enviado em 06/02/2022 - 19:08h


ApprenticeX escreveu:

Boa Tarde a todos!

Tenho o seguinte vetor declarado e quero imprimir na tela apenas os valores existentes nele!
Não faço idéia de como fazer pra saber qts registros tem no vetor!
int List[10] = {0, 1, 2}; 

OBS: É um vetor com capacidade para 10 Registros, ONDE foram utilizados apenas 3 Registros. Desejo que meu programa DESCUBRA qts registros foram usados neste vetor de 10 registros!

Alguém pode ajudar?


Sempre que você inicia um array, todos os valores são iguais a zero, de forma que a única coisa q tu tem que fazer é pegar o tamanho do array e usar como argumento em um loop for que checa x vezes se o valor do vetor é ou não zero.
Em java ficaria assim:


int list[] = new list[10];
list[0] = 1;

int count = 0;

for(int i = 0; i < list.length; i++){
if(list[i] != 0){
count++;
}
}

System.out.println(count + " registros foram usados no vetor");



Claro que, se você declarar algum valor como zero, não funcionaria. Mas se fosse uma List, e não um Array, você poderia simplesmente usar o método nomeDaLista.size(), já que cada valor da list tem que ser declarado manualmente, sendo impossível declarar valores vazios.

"A emoção mais antiga e mais forte da humanidade é o medo, e o mais antigo e mais forte de todos os medos é o medo do desconhecido."



4. Re: Como varrer um vetor de int (Dúvida muito Básica) [RESOLVIDO]

Apprentice X
ApprenticeX

(usa FreeBSD)

Enviado em 06/02/2022 - 22:19h

ApprenticeX escreveu:
Boa Tarde a todos!

Tenho o seguinte vetor declarado e quero imprimir na tela apenas os valores existentes nele!
Não faço idéia de como fazer pra saber qts registros tem no vetor!
int List[10] = {0, 1, 2}; 

OBS: É um vetor com capacidade para 10 Registros, ONDE foram utilizados apenas 3 Registros. Desejo que meu programa DESCUBRA qts registros foram usados neste vetor de 10 registros!

Alguém pode ajudar?


Bruuh escreveu:Sempre que você inicia um array, todos os valores são iguais a zero, de forma que a única coisa q tu tem que fazer é pegar o tamanho do array e usar como argumento em um loop for que checa x vezes se o valor do vetor é ou não zero.

No Caso do meu array ele já está preenchido com os valores 0,1,2 e os outros valores não estão preenchidos! E como informo na pergunta eu quero saber identificar qts valores foram preenchidos!

Obrigado por responder! Mas minha pergunta é baseada exatamente nisso!
Motivo pelo qual que meu primeiro registro é 0.
Motivo também que é um array int.

Eu sei varrer arrays em inúmeras condições. Mas não sei fazer isso no array da minha pergunta! Justamente porque ele tem ZERO! Logo 0 nunca poderá ser o fator de varredura do array.


5. Re: Como varrer um vetor de int (Dúvida muito Básica) [RESOLVIDO]

Apprentice X
ApprenticeX

(usa FreeBSD)

Enviado em 07/02/2022 - 13:12h

paulo1205 escreveu: Usando apenas os tipos nativos do C, a única forma de saber quantos elementos de um array estão em uso é ter uma variável companheira do array que fica guardando a quantidade de elementos em uso, e é responsabilidade do programador atualizar o valor dessa variável a cada inclusão ou exclusão de elementos no array.

Então se entendi bem sua resposta, no meu exemplo acima, da forma como declarei, Eu que preciso controlar e saber qts registros existem certo?


6. Re: Como varrer um vetor de int (Dúvida muito Básica) [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/02/2022 - 13:19h

Sim.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts