Ir ao conteúdo
  • Cadastre-se

Mazze

Membro Júnior
  • Posts

    12
  • Cadastrado em

  • Última visita

posts postados por Mazze

  1. Alguem consegue me ajudar a arrumar esse código?

     

    O enunciado do exercício está em anexo mas basicamente o programa é sobre o circo de josephus onde os judeus se reunem em um circulo e são eliminados de acordo com o salto.

    O usuario digita o número total de pessoas (M), a posição do josephus(P) e o número do salto (N) e o programa deve imprimir MORTO e o número do sobrevivente caso a posição do josephus seja atingida e VIVO caso ele sobreviva.

    Na plataforma que eu preciso entregar o programa está dando incompleto e não passou em nenhum caso de teste e no exemplo das entradas 2=M 1=P 1=N deveria imprimir VIVO porém esta imprimindo MORTO 2, preciso de ajuda para arrumar.

     

    
    #include <stdio.h>
    #include <stdlib.h>
     
    struct no
    {
        int num;
        struct no *proximo;
    };
     
    void inserir(struct no **);
    int sobrevive(struct no **, int);
     
    int main()
    {
        struct no *ini = NULL;
        int sobrev, n, p;
     
        inserir(&ini);
        scanf("%d %d", &p, &n);
        sobrev = sobrevive(&ini, n);
        
        if(sobrev!=p){
        	printf("MORTO %d\n", sobrev);
    	}else{
    		printf("VIVO\n");
    	}
        free(ini);
     	
        return 0;
    }
    
    void inserir(struct no **ini)
    {
        struct no *aux, *fim;
        int m, i;
     
        scanf("%d", &m);
    		 
         for(i=0;i<m-1;i++)
        {
            aux = (struct no *)malloc(sizeof(struct no));
            aux->num = m;
            aux->proximo = NULL;
            if (*ini == NULL)
            {
                *ini = aux;
            }
            else
            {
                fim->proximo = aux;
            }
            fim = aux;
            		
        }
        fim->proximo = *ini;
    }
     
    int sobrevive(struct no **ini, int aux)
    {
        struct no *a, *b;
        int i;
     
        b = a = *ini;
        while (a->proximo != a)
        {
            for (i = 0; i < aux-1 ; i++)
            {
                b = a;
                a = a->proximo;
            }
            b->proximo = a->proximo;
            
            free(a);
            a = b->proximo;
        }
        *ini = a;
     
        return (a->num);
    }
     

     

    Massada (1).pdf

  2. Boa noite pessoal, estou precisando de ajuda com um trabalho.

    Seguinte:

    O programa deve receber 3 variáveis de entrada

    m= número total de pessoas, p= posição da pessoa escolhida, n= numero de saltos.

    a pessoa que está na posição onde o salto cai morre, o programa deve rodar até ter apenas 1 sobrevivente.

    no final deve ser exibido MORTO e o número do sobrevivente caso o salto caia na posição escolhida e VIVO caso não caia.

     

    Fiz um código mas não está totalmente certo, o problema é que o programa deve continuar rodando até ter apenas um sobrevivente, e a cada rodada deve ser eliminado os numeros que 'morrem', não estou conseguindo fazer isso só com contador e vetor. Pensei em implementar com uma lista circular mas não sei como fazer, alguem pode ajudar?

    Caso seja necessário estou anexando o exercício e uma imagem para melhor entendimento.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main (){
    	
    	int m, p, n,i, morre, score,sobrevive, j=0;
    	
    	scanf("%d %d %d",&m , &p, &n);
    
    	int vet[m];
    		for(i=1;i<=m;i++){
    			vet[i]=i;
    		}
    		morre=vet[n+1];
    		i=1;
    		for(j=0;j<m;j++){
    				if(i>m){
    					i=i-m;
    					morre = vet[i];
    				}
    				if(morre==p){
    					score=1;
    					sobrevive=vet[i--];	
    				}
    				i=i+n;
    				morre = vet[i];		
    			}
    	
    	if(score==1){
    		printf("MORTO \n");
    	}else{
    		printf("VIVO");
    	}
    
    }

     

     

    Massada (1).pdf

    massada.png

  3. Pessoal estou precisando de uma ajuda pra arrumar esse código:

    #include <stdio.h>
    #include <stdlib.h>
    
    
    typedef struct pilha{
    	int numero;
    	struct pilha * proximo;
    } pilha;
    
    void inserir(pilha **top){
    	pilha * c;
    	
    	c = (pilha *)malloc(sizeof(pilha));
    	if(c==NULL){
    		
    		printf("Sem espaço na memoria ");
    		exit(1);
    		
    	}else{
    		scanf("%d",&c->numero);
    		if(*top==NULL){
    			c->proximo = NULL;
    		}else{
    			c->proximo = *top;
    		}
    		*top = c;
    	}
    }
    
    void listar(pilha *top){
    	pilha *aux;
    	if(top==NULL){
    		printf("FOME \n");
    	}else {
    		aux=top;
    		printf("%d ",aux->numero);
    		aux = aux->proximo;
    	}
    }
    
    void excluir(pilha **top){
    	pilha *aux;
    	aux = (*top)->proximo;
    	free(*top);
    	*top = aux;
    }
    
    int main(){
    	
    	pilha * topo = NULL;
    	int Q, opc;
    	scanf("%d", &Q);
    	if(Q<= (10 ^7)){
    		
    		do{
    			scanf("%d", &opc);
    			switch(opc){
    				case 1:
    					listar(topo);
    					excluir(&topo);
    					printf("\n");
    					break;
    				case 2:
    					inserir(&topo);
    					break;
    			}
    			Q= Q-1;
    		}while(Q > 0);
    	}
    	
    }

    o compilador está acusando erro de segmentação e com o gdb apontou erro em excluir() e main () (erro na imagem)

     

     

    erro.png.57be66928907370c5eb3ddb301a9003e.png

    • Curtir 1
  4. 1 hora atrás, MB_ disse:

    Desculpa, mais é que toda essa regra citada não me traz sentido. Contudo nesse caso o centro é um tipo de ponto médio? Ou seja, se nós ligamos todos os pontos o centro da figura é o centro da circunferência!

     

    Conclusão: Existe muito no enunciado que não enxergo ou ele foi mal escrito porque falta elementos essências pra o entendimento natural do problema.

    é exatamente isso, 

     

    o contexto completo esta nesse pdf

    Flordaesbornia (1).pdf

    • Obrigado 1
  5. Boa tarde, voce conseguiu resolver?

     

    me falaram que pra descobrir as coordenadas do centro eu teria que somar a maior coordenada com a menor x e tirar a media, o mesmo pra y,no caso do exemplo seria 0,00 + 3,00 / 2 da 1.50 e 0.0 + 2,0 / 2 = 1,00 porém ainda esta dando reposta incorreta e saida mal formatada.

     

    Encontrei também um exemplo dizendo que pra encontrar o centro teria que somar todas as coordenadas de x e dividir por n, e o mesmo com y. Porém se for assim não bate com a saída do problema: por exemplo 0.0+0.0+1.0+1.0+2.0 = 4,00 / 5 = 0,8.

    print1.jpeg

    print2.jpeg

    • Curtir 1
  6. Boa noite pessoal,

    Estou precisando de ajuda com um código em c.

    Segue a descrição do exercício:

     

    Entrada: Esse problema é composto por vários exemplos. A primeira linha é composta por um inteiro N, 1<=N<=100, e indica o número de integrantes da quadrilha. As próximas N linhas contêm o posicionamento dos integrantes da quadrilha a partir de suas coordenadas X e Y no plano cartesiano do Jardim Botânico de Merculia. As coordenadas são números reais. Seu programa deve encerrar a execução quando 0 for o valor de N dado na entrada.

    Saída Para cada instância, imprima uma linha dizendo a coordenada X e a coordenada Y do centro e o raio da circunferência com precisão de duas casas decimais.

     

    Para encontrar o centro, tirar a média da maior e menor coordenada de x, e a media da maior e menor coordenada de y.

     

    Fiz esse código, alguém pode por favor me ajudar a encontrar o erro? 

     

    int main (){
    	int N, i;
    	float maiorx, menorx, maiory, menory, r, cx, cy;
    	scanf("%d", &N);
    	float x[100], y[100];
    	while(N!=0){
    		for(i = 0; i < N;i ++){
    			scanf("%f %f", &x[i], &y[i]);
    			maiorx  = x[i];
    			menorx = x[i];
    			maiory = y[i];
    			menory = y[i];
    		}
    		
    		for(i=0; i<N; i++){
    			if(maiorx < x[i]){
    				maiorx = x[i];
    			}
    			if(menorx > x[i]){
    				menorx=x[i];
    			}
    			if(maiory < y[i]){
    				maiory = y[i];
    			}
    			if(menory > y[i]){
    				menory = y[i];
    			}
    		}
    		cx = (maiorx + menorx) / 2;
    		cy = (maiory + menory) / 2;
    		r = sqrt((maiorx - cx) * (maiorx - cx) + (maiory - cy) * (maiory - cy));
    		printf("%.2f %.2f %.2f\n", cx, cy, r);
    		
    		scanf("%d", &N);
    	}
    	return 0;
    }

     

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!