Ir para conteúdo
Fórum Script Brasil

Diogo Fonseca

Membros
  • Total de itens

    5
  • Registro em

  • Última visita

Posts postados por Diogo Fonseca

  1. 12 minutos atrás, isrnick disse:

    Se tiver qualquer dúvida sobre o código é só perguntar.

    Havia umas partes que estavam mal mas deu para entender a lógica ficando assim no final o que voce acha?

     

    #include <stdio.h>
    
    unsigned int findsaw(int value);
    
    int main(){
        int number = 0xEAEA476B;
        printf("%d\n", findsaw(number));
        
        return 0;
    }
    
    unsigned int findsaw(int value1) {
        int last;
        int count, bigger;
        int idx, biggerIdx;
        unsigned value = value1;
        
        last      = value & 01;
        count     = 1;
        bigger    = 1;
        idx          = 0;
        biggerIdx = 0;
       
        
        for (value1 >>= 1; value != 0; value >>= 1){
            
            if (last != (value & 01))
                ++count;
            else {
                if(count > bigger){
                    bigger       = count;
                    biggerIdx = idx;
                }
                count = 1;
            }
            last = value & 01;
            ++idx;    
        }
        
        if(count > bigger){
            bigger       = count;
            biggerIdx = idx;
        }
            
        return biggerIdx-bigger;
    }

    Obrigado desde já :)

  2. O

    3 horas atrás, isrnick disse:

    Para postar códigos aperte o botão <> no topo do campo de respostas, este é o botão da tag CODE.

     

    Acho que é melhor sempre armazenar o bit do ciclo anterior e comparar com o atual, e contar se forem diferentes. Aqui eu fiz uma solução:

    
    unsigned int findsaw(int value) {
        int previous, index = 0, count = 0, maxcount = 0, bigger = 0;
        previous = value & 0x01;
        for (value >>= 1; value != 0; value >>= 1) {
            if( (value & 0x01) != previous)
                count++;
            else {
                if (count > maxcount) {
                    maxcount = count;
                    bigger = index - count;
                }
                count = 0;
            }
            previous = value & 0x01;
            index++;
        }
        if (count > maxcount) {
            maxcount = count;
            bigger = index - count;
        }
        return bigger;
    }

     

    Muito obrigado pela ajuda Valeu :)

  3. Ola pessoal, primeiro obrigado a quem responder.

    Estou com duvidas neste exercicio e não consigo chegar a resposta.

    O Exercicio é o seguinte:

    Escreva a função float_with_int_cmp, que compara o valor da parte inteira de fvalue com o valor inteiro ivalue. A função devolve um valor positivo se a parte inteira de fvalue for maior que ivalue, um valor negativo se a parte inteira de fvalue for menor que ivalue ou zero se forem iguais. Na implementação da função só podem ser utilizadas operações aritméticas e lógicas sobre inteiros. Qualquer operação de vírgula flutuante invalida o exercício.

    int float_with_int_cmp(float fvalue, int ivalue);

    OBS: eu nao estou a conseguir percerber como funciona o Float e as suas mantissas.

    O codigo seguinte funciona mas não posso fazer assim o exercicio, ou seja não posso fazer Cast nenhum:

     

     

    #include <stdio.h>
    
    int float_with_int_cmp (float fvalue, int ivalue);
    
    int main (){
        printf("%d\n", float_with_int_cmp(2.5, 1));
        return 0;
    }
    
    int float_with_int_cmp (float fvalue, int ivalue){
        
        if((int)fvalue > ivalue)
            return 1;
        else if((int)fvalue <ivalue)
            return -1;
        
        return 0;
    }
    

    Tenho que utilizar os conceitos das imagens mas não entendo.

    Obrigado desde já :)

    IEEE-754-ENGLISH.jpg

  4. Ola pessoal, primeiro brigado a quem responder.

    Estou com duvidas neste exercicio ja pensei e pensei e não consigo chegar a resposta.

    O Exercicio é o seguinte:

    Escreva a função findsaw que procura, no inteiro value, a mais longa sequência de bits consecutivos com valores alternados. A função retorna apenas o índice do primeiro bit dessa sequência, sendo 0 o índice do bit de menor peso. No caso de haver mais do que uma resposta possível, deve ser retornada a que corresponder ao menor índice. Por exemplo, a chamada findsaw(0xEAEA476B) deve retornar 23.

    unsigned int findsaw(int value);

    OBS: eu fiz algumas coisas so que não estou a conseguir encontrar a "máscara" necessária para resolver o problema

    Abaixo Segue o que eu consegui fazer.

    [code]

    #include <stdio.h>

    unsigned int findsaw(int value);

    int main(){
        printf("%d\n", findsaw(0x6));
        return 0;
    }

    unsigned int findsaw(int value){
        int count;
        int bigger;
        
        for(count = 0; value != 0; value >>= 1){
            if((value & 01) || (value & 010))
                count++;
            else if((value & 00) || (value & 011)){
                if(count > bigger)
                    bigger = count;
                count = 0;
            }
            bigger = count;
        }
                
        return bigger;
    }

    [/code]

    Ups sou novo neste forum e não consegui por o codigo bem desculpem pensava que tinha de usar

     [\code]
    
    
    

    mas não deu

    Penso que dá para entender de qualquer forma 

    Obrigado desde já :)

×
×
  • Criar Novo...