Ir ao conteúdo

Posts recomendados

Postado

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:

Expandir  

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 

Postado

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 

Postado
  Em 10/04/2022 às 15:27, 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 

Expandir  

Como assim? não entendi

Postado

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
Postado
  Em 10/04/2022 às 15:32, 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

Expandir  

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.

Postado
  Em 10/04/2022 às 15:42, 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.

Expandir  

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]

 

Postado
  Em 10/04/2022 às 15:49, 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]

 

Expandir  

Não deu certo 😕

  Em 10/04/2022 às 16:27, Pietra Ester disse:

Não deu certo 😕

Expandir  

Especifique melhor sua solução

Postado

Olá tudo bem? Eu espero que esteja bem!

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

Não sei como posso contar um sequencia de zeros 

Expandir  

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.

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!