Ir ao conteúdo
  • Cadastre-se

C Como contar um numero que esta em sequencia repetidos no vetor


Pietra Ester

Posts recomendados

Olá, estou desenvolvendo um exercicio em c, onde preciso contar um numero que esta esta repetido e em sequencia em um vetor dinâmico, por exemplo:

image.png.16079f0543bafd9ce6197d7e230f6910.pngimage.png.294f90f07516013096f1c4de0e4934fb.png

Citação

Exemplo 2:

v[10] = {1,0,0,1,0,1,1,0,0,0};

Onde os zeros em vermelho precisam ser contados, como se fosse o algoritmo FIRT FIT.

DEPOIS o usuario escolhe o tamanho do processo  e o programa mostra a primeiro posição da memoria para o tamanho desejado. Se o usuario escolher 3 mostrara a posição 7 nesse vetor, pois o unico espaço suficiente de 3 zeros em seguida que possui no vetor (v[10] = {1,0,0,1,0,1,1,0,0,0};)

Por enquanto esta assim meu algoritmo:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//1 MEMÓRIA OCUPADA
//0 MEMÓRIA LIVRE

int *cria_vet(int n);
int inicializa(int *vet, int tam);
void mostra(int *vet, int tam);

//VARÁVEL GLOBAL PARA O TAMANHO DO VETOR
int tam_v, tam_p;

//CRIA VETOR
int *cria_vet(int n)
{
    int *vet;
    int i;
    printf("Digite o tamanho do vetor: ");
    scanf("%d", &tam_v);
    //cria um vetor de n posições
    vet = (int *) malloc (tam_v*sizeof(int));
    return vet;
}

//INICIALIZA
int inicializa(int *vet, int tam)
{
    int i;
    //SEMENTE ALEATÓRIA DO VETOR VET
    srand(time(NULL));
    for (i=0; i<tam; i++)
        vet[i]= rand() % 2;
    return *vet;

}

//MOSTRA
void mostra(int *vet, int tam_v)
{
    int i;
    printf("\nVetor gerado:\n");
    for (i=0; i<tam_v; i++)
        printf("%d ", vet[i]);
}

//FUNÇÃO FIRT FIT
int firtfit(int *vet, int tam_v, int tam_p)
{
    int i, cont = 0;
    //contagem de memoria vazia (quantidade de zeros)
    for(i=0; i<tam_v; i++)
        if(vet[i] == 0)
            cont++;

    printf("Memoria vazia = %d\n", cont);
}

int main()
{
    //VARIÁVEIS
    int *vet, n;
    //CABEÇALHO
    printf("---> Trabalho de Algoritmo\n");
    printf("---> Gerenciamento de memoria FIRST FIT\n");
    printf("---------------------------------------\n");

    //FUNÇÃO QUE CRIA O VETOR
    cria_vet(n);
    //FUNÇÃO QUE INICIALIZA O VETOR
    inicializa(vet, tam_v);
    //FUNÇÃO QUE IMPRIME O VETOR
    mostra(vet, tam_v);

    //SOLICITA O TAMANHO DO PROCESSO
    printf("\n\n-> Digite o tamanho do processo (-1 ENCERRA): ");
    scanf("%d", &tam_p);

    //FUNÇÃO QUE CHAMA O FIRT FIT
    firtfit(vet, tam_v, tam_p);

    return 0;
}

Não sei como posso contar um sequencia de zeros 

Link para o comentário
Compartilhar em outros sites

3 minutos atrás, Estalha disse:

Primeiro você não pode se esquecer de dar free no final do código.

Você pode fazer um

 

i = posicao inicial;

contador = 0;

while(i != tamanho vetor){

	if(vetor[i] == 0){
		contador ++;
		i++;
	}else{
		i++;
	}

}

não sei se te ajudei com o que precisa 

Como assim? não entendi

Link para o comentário
Compartilhar em outros sites

Perdão, entendi errado a pergunta.

Você pode fazer uma variável auxiliar contadora e uma variável maior_seq_zeros = -1

if( vetor[i] == 0){
	auxiliar ++;
	i++
}
if(vetor[i] == 1){
	if(auxiliar > maior_seq_zero){
		maior_seq_zero = auxiliar;
		auxliar = 0;
		i++;
	}
}

isso dentro do while

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

8 minutos atrás, Estalha disse:

Perdão, entendi errado a pergunta.

Você pode fazer uma variável auxiliar contadora e uma variável maior_seq_zeros = -1

if( vetor[i] == 0){
	auxiliar ++;
	i++
}
if(vetor[i] == 1){
	if(auxiliar > maior_seq_zero){
		maior_seq_zero = auxiliar;
		auxliar = 0;
		i++;
	}
}

isso dentro do while

Ta, mas ele tem que mostrar o endereço da memoria que se encaixe a quantidade de zeros em sequencia solicitado pelo usuario, o while não da certo pois preciso usar o for e percorrer o vetor novamente.

Link para o comentário
Compartilhar em outros sites

5 minutos atrás, Pietra Ester disse:

Ta, mas ele tem que mostrar o endereço da memoria que se encaixe a quantidade de zeros em sequencia solicitado pelo usuario, o while não da certo pois preciso usar o for e percorrer o vetor novamente.

você pode fazer uma variável auxiliar que mostra essa posição, dentro do if que mostra o fim da sequência, você coloca um 

enderecao maior = i - auxiliar.

e a posicao do endereço é  vetor[endereco]

 

Link para o comentário
Compartilhar em outros sites

38 minutos atrás, Estalha disse:

você pode fazer uma variável auxiliar que mostra essa posição, dentro do if que mostra o fim da sequência, você coloca um 

enderecao maior = i - auxiliar.

e a posicao do endereço é  vetor[endereco]

 

Não deu certo 😕

agora, Pietra Ester disse:

Não deu certo 😕

Especifique melhor sua solução

Link para o comentário
Compartilhar em outros sites

Olá tudo bem? Eu espero que esteja bem!

Em 10/04/2022 às 11:56, Pietra Ester disse:

Não sei como posso contar um sequencia de zeros 

Depende dos assuntos anteriormente estudados sendo um caso em que o como responde é MELHOR que só responder e a lógica (que eu sei) não é distante da realidade|natural dos fatos, experimente porque é simples, responda à pergunta (sem código). Notará uma contagem crescente|decrescente a partir da ocorrência do 0, que reinicia sempre que encontra 1, do contrário responde com a posição que iniciou sua contagem, além disso, se atingir o limite da lista antes de terminar, a resposta não é uma posição porque falhou.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!