Ir para conteúdo
Fórum Script Brasil

Felipe222

Membros
  • Total de itens

    89
  • Registro em

  • Última visita

Posts postados por Felipe222

  1. De forma resumida, o problema parece estar acontecendo por causa de um problema ( componente ) chamado " Buffer do Teclado ", simplesmente ele tem a função de armazenar todos os caracteres de entrada do teclado, porem, em algumas situações funções como ( scanf ) não eliminam o ultimo caractere inserido normalmente Nova Linha ( \n ), normalmente associado ao presionar a tecla ENTER para finalizar a entrada de dados.

    Isso faz com que da proxima vez em que o Loop iniciar e tentar ler algo do teclado, ele simplesmente irá verificar que já existe um caractere no Buffer e se o mesmo for o ( \n ), a função ( scanf ) finalizará a entrada de dados causando o problema que você está tendo!

    Uma das formas de se resolver o problema é utilizando alguma função que faça a limpeza do Buffer do Teclado, logo apos alguma entrada:

    - No Linux existe a função __fpurge ( stdin );

    - No Windows existe a função fflush ( stdin );

    Apenas observando que a função fflush ( stdin ) não foi criada especificamente para este proposito, sendo que seu uso está associado a varios problemas que são causados por um comportamente indefinido da função, então lhe aconselho a não utiliza-la!

    - algo que você tambem pode fazer é utilizar a função getchar(); apos cada entrada do teclado.

    - Se não me engano tambem existe a possibilidade de se realizar a Limpeza do Buffer com algum caractere de escape definido pela propria função ( scanf ) só não me lembro qual . . .

     

    Por hora é só . . . tente buscar informações sobre a Limpeza do Buffer do Teclado e ver qual metodo é o mais indicado para o seu problema!

  2. Bom, ao que parece o problema parece estar sendo causado pelo chamado ( Buffer do Teclado ), é um elemento responsavel por detectar a entrada de dados provenientes do teclado, em certas situações ao presionarmos a tecla ( Enter ) um caractere "\n" nova linha fica armazenado como ultimo caractere inserido, infelizmente tambem é usado em certas situações para indicar o fim da entrada de dados do teclado, sendo assim pula a entrada de novos dados ( livros ) neste caso!

    Sendo assim algo que voce deve fazer é realizar a ( limpeza de Buffer ) que eliminará o caractere "\n" a cada entrada de dados ( fgets ), ( scanf ) ou similares!

    Normalmente voce encontrará para windows a função fflush( stdin ); porem recomendo que não a use uma vez que ela costuma ter uma comportamento indefinido passivel de causar problemas em seu programa!

    No proprio forum existem alguns topicos falando sobre problemas similares, recomendo que dê uma pesquisada sobre o assunto!

  3. Olha, não vou ter muito tempo para olhar o codigo, mas na pressa tentei dar uma adaptada para tentar encontrar o problema, vou deixar o codigo abaixo:

    #include <stdio.h>
    #include <string.h>
    
    int main ( void )
    
     {
        struct Alunos
        {
           char nome [ 30 ];
           float matematica, fisica, media;
        };
    
        struct Alunos alunos [ 5 ];
        int count;
        char Busca [ 15 ];
    
        for ( count = 0 ; count < 5 ; count++ )
           {
              fflush ( stdin );
              printf ( "\nNome do aluno %d: ", count + 1 );
              scanf ( "%s", alunos [ count ].nome );
    
              printf ( "Nota de matematica: " );
              scanf ( "%f", &alunos [ count ].matematica );
    
              printf ( "Nota de fisica: " );
              scanf ( "%f", &alunos [ count ].fisica );
    
              alunos [ count ].media = ( alunos [ count ].matematica + alunos [ count ].fisica ) / 2;
            }
    
        printf ( "\nExibindo nomes e medias:\n" );
    
        for ( count = 0 ; count < 5 ; count++)
           {
              printf("\nAluno %d\n", count + 1 );
              printf("Nome: %s\n",alunos [ count ].nome );
              printf("Media: %.2f\n", alunos [ count ].media );
           }
    
            printf ( "\n Digite o nome do aluno a ser buscado: \n" );
            printf ( "Aluno: " );
            scanf ( "%s", Busca );
    
        for ( count = 0; count < 5; count++ )
           {
              if ( strcmp ( Busca, alunos [ count ].nome ) == 0 )
                {
                  printf(" | ");
                }
           }
    
        return 0;
    
    }

     

  4. Bom!

    Alem de tambem ser iniciante no mundo da programação, não sou lá muito bom em termos de matematica, mas . . . vamos lá!

    Dando uma olhada simples, não vi nada de errado, executei o seu codigo tanto em Python 2X quanto Python 3X, na plataforma Linux Ubuntu 32-bit e o codigo aparentemente faz corretamente o que deveria fazer.

    Se o erro existe provavelmente deve ser um ( erro de logica ), tente ver extamente o que o corretor automatico do seu curso, diz exatamente, para ver se isso ajuda a encontrar o erro de forma mais rapida!

    Caso contrario, você terá de realizar teste calculando valores, exemplo:

    32456876 = 375 dias, 15 horas, 47 minutos e 56 segundos

    Aqui deu o resultado certinho, pelo menos pelos testes que fiz!

  5. Olá!

    Olha de certa forma tambem sou iniciante, não dei uma observada na sitaxe em si e no que o algoritmo deveria fazer, mas . . .

    Aqui eu encontrei 2 problemas principais:

    - Ao que parece identação de certas partes do código estavam erradas e precisaram ser corrigidas:

    def tente ( qtdnome ):
        naleatorio = random.randint ( 1, 15 )
        while qtdnome > 0:
             print ( 'Digite um numero maior que 0: ' + int ( input ( palpite ) ) )
             qtdnome = qtdnome -1
             if int( palpite ) == naleatorio:
                 print ( 'Parabens! Voce ganhou , o numero aleatorio era: ' + naleatorio )
                 return 1
             elif palpite <= 0:
                 print ( 'Voce digitou um numero invalido' )
                 qtdnome = qtdnome+1
             else:
                 print ( 'Voce errou, tente novamente!' )
             if qtdnome == 0:
                 print ( 'Voce perdeu!' )
                 return 0

    - Outro problema era com relação ao erro de sintaxe incorreta quando tentando usar ++ como incremento:

    acertos = acertos++

    sendo assim eu a substitui por:

    acertos = acertos + 1

    - Alem de outros pequenos problemas que tenho certeza que voce vai conseguir sanar!

    Obs.: Aqui eu teste o codigo no Python 3.4.3 embora na maior parte absoluta das vezes não seja dificil de se descobrir, é sempre bom especificar a versão Python usada!

     

    Ubuntu 14.04 LTS   -   Python 2.7.6   -   Python 3.4.3

     

    Esperto Ter Ajudado ! ! !

  6. Olá!

     

    Bom, dei uma compilada rapida e fiz algumas correções simples:

    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
      char email [ 50 ], dominio [ 10 ];
      
      printf ( "\nDigite seu e-mail: " );
      scanf ( "%s", email );
    
      char google [ 11 ];
    
      int i, j;
    
      for ( i = strlen ( email ) - 10, j = 0; j < 10; j++, i++ )
         {
            google [ j ] = email [ i ];
         }
    
      if ( strcmp ( google, "@gmail.com" ) == 0 )
        {
           printf ( "Email valido.\n" );
        }
    else
        {
           printf ( "Email invalido.\n" );
        }
      return 0;
    }

    Só vou adiantando que não dei a minima para a sintaxe do codigo, sendo assim vou deixar testes mais apurados para voce, mas ate onde pude ver o codigo parece estar funcionando!

     

    Só tenho 1 dica para você:

    Tente buscar informações sobre possiveis problemas envolvendo o uso das funções gets() e fflush ( stdin ), pois, estas funções possuem caracteristicas de funcionamento que podem causar Bugs em diversos codigos!

     

    Vou deixar 2 pequenos Links caso esteja interesado:

     

    http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/

    http://forum.imasters.com.br/topic/537641-funcao-gets/

     

    Ubuntu 14.04 LTS   -   GCC 4.8.4   -   CodeBlocks 13.12

     

    Espero Ter Ajudado ! ! !

  7. Olá!

     

    O problema parece estar na seguinte linha:

     

    while ( num <= 10 )

     

    O correto seria usar a variavel ( count ) . . .

     

    Alem disso, a não ser que seja extremamente necessario, tente não utilizar a bilbioteca ( conio.h ) e nenhuma de suas funções, ela é uma bilbioteca antiga, obsoleta e feita apenas paera sistemas windows, reduzindo e muito a portabilidade e compatibilidade para outras plataformas!

     

    Ubuntu 14.04 LTS   -   GCC 4.8   -   CodeBlocks 16.01

     

    Espero Ter Ajudado ! ! !

  8. Olá!

     

    Sei que já faz tempo do post, mas acho que posso oferecer um pequeno mas importante detalhe quanto a respostas!

     

    Olha sou iniciante em Programação e em Python, então me desculpem se dizer algo errado, mas . . .

     

    O problema que está acontecendo com você é comum a pessoas que iniciam na linguagem Python, isto porque a linguagem está em constante evolução, sendo assim existem varias versões do interpretador Python.

     

    A mais comum de se encontrar em termos de material é a Python 2.7.6, e uma das ultimas versões revisadas é a Python 3.4.3 sendo assim de uma versão para a outra alguns componentes na sintaxe da linguagem podem mudar, exigindo alterações no código, e um pouco de atenção quanto aos estudos na linguagem.

     

    No seu código você tentou utilizar 2 versões diferentes de Python:

     

    input() - essa função em Python 2.7.6 é usada para a entrada de valores numéricos, sendo assim quando você tenta entrar com uma string, o interpretador lhe retorna o erro mencionado por você, neste caso o ideal seria utilizar a função raw_input() para a entrada de strings.

     

    input() - essa função em Python 3.4.3 é usada para a entrada de strings, sendo que se você tentar utilizar a função raw_input(), o interpretador lhe retornará um erro, pois essa função já não é mais padrão da linguagem Python 3.4.3

     

    print() - essa função em Python 2.7.6 é usada para exibir algum valor na tela, porem, em Python 2.7.6 você pode fazê-lo com a seguinte sintaxeprint vNome, sem problemas, pois a sintaxe da versão Python lhe permite isso.

     

    print() - essa função em Python 3.4.3 é usada para exibir algum valor na tela, porem, em Python 3.4.3 você não pode fazê-lo com a sintaxeprint vNome, pois, houve uma mudança na sintaxe da linguagem e isso não é mais permitido, sendo a nova sintaxeprint ( vNome )

     

    Acho que era isso o que estava causando o seu problema . . . e como eu disse, sou inciante em Python então me desculpem se disse algo errado . . .

     

    Ubuntu 14.04 LTS   -   Python 2.7.6   -   Python 3.4.3

     

    Espero Ter Ajudado ! ! !

  9. Olá!

     

    Não sei se seria o mais adequado para este caso, mas . . . Você pode tentar usar o metodo .count()

     

    lista = [ "string", "string", "string", "palavra", "velocidade" ]
    
    contagem = lista.count( "string" )
    
    print ( contagem )

     

    O metodo tambem pode ser usado para strings individuais:

     

    lista = [ "string", "string", "string", "palavra", "velocidade" ]
    
    contagem = lista [ 3 ].count ( "a" )
    
    print ( contagem )

     

    Ubuntu 14.04 LTS   -   Python 2.7.6   -   Python 3.4.3

     

    Espero Ter Ajudado ! ! !

  10. Olá!

     

    Olha sou inciante em Python, mas . . . veja se isso serve . . .

    import random
    
    lista = list ( range ( 1, 101 ) )
    amostra = random.sample ( lista, 10 )
    print(amostra)

     

    Ubuntu 14.04 LTS   -   Python 2.7.6   -   Python 3.4.3

     

    Espero Ter ajudado ! ! !

     

  11. Olá!

     

    Um detalhe que deixei passar . . .

     

    Vi no seu codigo que voce tentou utilizar a função fflush(stdin); para realizar a limpeza de buffer do teclado, não utilize a função para isso.

    Embora ela funcione na maior parte das vezes, ela não foi desenvolvida para a tarefa, sendo assim nas vezes em que ela não funciona, a função  costuma apresentar um comportamento indefinido, causando os mais diversos problemas durante a execução do programa, então não a use para essa tarefa!

     

    Vou deixar alguns links abaixo sobre este e outros assuntos:

     

    https://www.scriptbrasil.com.br/forum/topic/183218-dúvida-fflush-cc/#comment-688514

    http:// http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/

    http:// https://www.vivaolinux.com.br/tópico/C-C++/fflush(stdin);

     

    Valeu e ate a proxima ! ! !

  12. Olá!

     

    Olha sou iniciante em C, sem contar que estou um pouco enferrujado na linguagem, mas . . .

     

    Aqui o compilador retornou os seguintes alertas:

     

    Linha 106: warning: unused variable ‘logo’ 106 – pelo que o alerta diz a variavel logo não está sendo usada em nenhuma parte do seu codigo

     

    Linha 231: Warning: suggest parentheses around ‘&&’ within ‘||’ - aqui o compilador sugere que sejam colocados parentes, que separem as avaliações nas quais o “||” se encontra, por falta de experiencia na linguagem não tenho como afirmar se é isso mesmo o que o alerta diz e quais as possivies consequencias seguindo ou não o alerta, mas de todo modo tai o que entendi!

     

    pasando disso:

     

    if ( A == C && A != B && B != C || A == B && A != C && B != C || C == B && C != A && B != A )

     

    para isso:

     

    if ( ( A == C && A != B && B != C ) || ( A == B && A != C && B != C ) || ( C == B && C != A && B != A ) )

     

    Obs.: alem disso, como uso o Sistema Linux, me foi retornado um erro relativo a bliboteca “conio.h” e tambem em realação a função getch(); sendo assim eliminei o arquivo cabeçalho relativo a biblioteca, e substiui getch(); por getchar();

     

    Alem disso lhe recomendo a não usar a biblioteca “conio.h” e/ou qualquer função relativa a mesma, visto que ela é uma biblioteca obsoleta, que foi desenvolvida para o sistema windows, o que causou o erro que enfrentei, sem contar que pelos motivos já citados, a biblioteca pode reduzir a compatibilidade e/ou portabilidade com outros sistemas.

     

    - sobre a execução do programa, o mesmo parece ser finalizado quando o mesmo não consegue encontrar o arquivo de texto para abri-lo, sendo assim só posso ir ate aqui . . .

     

    Ubuntu 14.04 LTS   -   GCC 4.8   -   CodeBlocks 16.01

     

    Espero Ter Ajudado ! ! !

     

  13. Olá!

     

    Olha não vou ter muito tempo de olhar e explicar o seu codigo, então vou lhe falar do que acho o mais relevante . . .

     

    Uma string não passa de uma cadeia de caracteres, e não um único caractere, em casos como esse a logica nos diria que:

     

    if ( uma_string == 'a' || uma_string == 'A' )

     

    mostraria o resultado esperado, mas não é assim, a sintaxe da linguagem C não permite esse tipo de logica, isso acontece porque uma string é uma cadeia de caracteres ( vetor ), ou seja, um monte de char uns atrás do outro em sequencia, cada qual em sua própria posição.

     

    char string [ 25 ] = sou uma string

     

    Sendo que quando nos referimos a uma string na linguagem C, o endereço do primeiro elemento da string é um(a) ponteiro ( referencia ) para se encontrar todos os outros elementos do vetor.

     

    Neste caso a logica correta seria a de que você terá de ler cada caractere existente na string e comparar cada uma com as condições que você deseja, lembrando que as posições se iniciam em e não em 1 como seria o bom senso, neste caso a logica correta para a comparação seria:

     

    int i = ;
    
    
    while ( uma_string [ i ] != '\0' )
        {
          if ( uma_string [ i ] == 'a' || uma_string [ i ] == 'A' )
            {
              vogais++;
            }
          i++;
        }

     

    Bom por hora é isso . . . tente criar um novo projeto apenas para reproduzir a logica que lhe mostrei . . . e como disse não vou ter tempo de dar uma olhada no resto do codigo por hora!

     

    Ubuntu 14.04 LTS   -   GCC 4.8   -   MonoDevelop 4.0.12   -   CodeBlocks 13.12

     

    Espero Ter Ajudado ! ! !

     

  14. Olá!

     

    Aqui o programa retornou um erro de segmentação segmentation falt ( core dumped ) sendo assim o programa parou de funcionar!

     

    Tenho algumas Observações a fazer:

     

    - A biblioteca ( conio.h ) é uma biblioteca usada no sistema Windows, o que pode reduzir a portabilidade e/ou a compatibilidade com outros Sistemas como no meu caso Linux – Ubuntu 14.04 LTS, além do mais essa biblioteca esta obsoleta, então tanto quanto possível não use está biblioteca ou qualquer função que venha dela.

     

    - não sei qual o uso exato que você deu no seu código para a função fflush ( stdin ); mas se foi com o intuito de limpeza de buffer do teclado, não use a função para isso, ela é muitas vezes definida como tendo um comportamento ( indefinido ) o que pode causar problemas durante a execução do programa, então evite-a ao máximo possível, o mesmo vale caso você esteja usando a função para qualquer outra coisa!

     

    Vou deixar alguns links abaixo sobre a função e outros assuntos:

     

    https://www.scriptbrasil.com.br/forum/topic/183218-dúvida-fflush-cc/#comment-688514

     

    http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/

     

    https://www.vivaolinux.com.br/tópico/C-C++/fflush(stdin);

     

    Bom com o seu alerta e correções, ainda assim me foram retornados alguns alertas:

     

    |37|warning: return type defaults to ‘int’ [-Wreturn-type]| - você não definiu o tipo da função main() e neste caso o compilador o definiu como sendo do tipo ( int )

     

    |177|warning: control reaches end of non-void function [-Wreturn-type]| - como o tipo de retorno da função main() foi definida pelo compilador como sendo do tipo ( int ) ela deve retornar algum valor ao final de sua execução, é só colocar um return 0; antes da ultima chave de fechamento da função

     

    |43|warning: unused variable ‘atual’ [-Wunused-variable]| - você declarou uma variável que não está sendo usada em nenhuma parte do programa

     

    |47|warning: ‘aux’ is used uninitialized in this function [-Wuninitialized]| - este alerta está lhe alertando para o fato de que a sua variável está sendo usada sem antes ter sido iniciada com algum valor seguro para a sua utilização, é só inicializar ela com algum valor, caso contrario corre o risco de utilizar lixo de memoria!

     

    |47|warning: ‘point’ is used uninitialized in this function [-Wuninitialized]| - o mesmo que o alerta anterior

     

    |209|warning: too many arguments for format [-Wformat-extra-args]| - aqui basicamente tinha um numero ( 9 ) dentro do scanf()

     

    Os 2 alertas a seguir ficaram empatados e retornaram 11 alertas cada:

     

    |752|warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘char (*)[40]’ [-Wformat=]|

     

    |211|warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘long unsigned int *’ [-Wformat=]|

     

    Eles parecem estar lhe alertando para o fato de que o tipo do código de formatação parece ser diferente do tipo da variável, o que pode acarretar os mais diversos problemas de execução, é só buscar colocar o codigo apropriado.

     

    E neste caso ao que parece você tentou criar algum tipo de código de identificação para o cadastro da pessoa, a não ser que você vá realizar alguma operação matemática com o valor, eu costumo definir este tipo de variável como do tipo string, ex: ( char código [40]; )

     

    Além disso tem o ( int cpf; ) embora exista a possibilidade de uma pessoa digitar apenas os números, não tenho certeza se o tipo ( int ) seria o mais indicado para esta variável, você pode usar o tipo string ( char cpf [15]; ) ou mesmo utilizar algo como ( long int cpf; )

     

    Estou um pouco enferrujado com relação a C, mas tenho quase certeza de que você vai ter de dar uma olha nos códigos de formatação usados no programa, alguns estão dentro de printf() outros dentro de scanf()

     

    |734|warning: format ‘%d’ expects argument of type ‘int’, but argument 5 has type ‘long unsigned int’ [-Wformat=]| - é basicamente o mesmo alerta do anterior

     

    Bom por hora é só . . . veja se o que lhe disse acima serve de algo para lhe ajudar . . . vou estar bastante ocupado esta semana, mas se possivel tento vir aqui para ajudar em alguma coisa . . .

     

    Valeu e ate a proxima ! ! !

  15. Olá!

     

    Olha sou iniciante em Programação e em C, alem de que sou uma completa vergonha quanto a Ponteiros e Referencia, alem de que muito provavelmente não seria capaz de lhe ajudar com o seu código, mas . . .

     

    Cara, dei uma compilada rápida usando as IDEs CodeBlocks e MonoDevelop, e aqui o console retornou um monte de mensagens de erros e alertas que não tem fim, então lhe aconselho a dar uma olhada nas mensagens de erros e alertas que a sua IDE lhe retorna e estudar o que cada mensagem significa . . .

     

    Exemplo:

     

    - Algumas das suas variáveis não estão recebendo uma valor que lhe seria atribuido:

     

    |710|error: expected expression before ‘;’ token|

     

    aux->prox = ;

     

    Pelo que pude ver a maior parte dos erros e alertas é referente a pequenos deslizes comuns em códigos como os que você está criando, acho que seguindo a dica que lhe dei você vai conseguir resolver a maior parte dos problemas!

     

    Bom por hora é isso . . . Tente o que lhe disse acima e diga o resultado . . .

     

    Ubuntu 14.04 LTS   -   GCC 4.8   -   MonoDevelop 4.0.12   -   CodeBlocks 13.12

     

    Espero Ter Ajudado ! ! !

  16. Olá!


    Olha para mim o único erro que apareceu foi esse:

    Traceback (most recent call last):
      File "/home/felipe/forum - problema com lista.py", line 16, in <module>
        impar += numero
    TypeError: 'int' object is not iterable


    Basicamente eis o que esta acontecendo:

    Dentro do laço for você esta chamando a sua variável numero, que é uma lista, e esta colocando para ela o valor inteiro que o usuário digitar, o problema é que em Python o tipo de uma variável muda conforme o valor que ela deve armazenar.

    Ou seja, a variável numero é declarada como lista, pois você a qualifica como tal número = [], porem nesta linha: 

    numero = int ( input ( "Digite um número: " ) ) 

    a variável numero não será mais uma lista e sim um inteiro, pois é isso que ela armazenará, então primeiro precisamos definir uma única variável que sempre será do tipo inteira e que apenas receberá os valores introduzidos pelo usuário, ex: 

    digito = int ( input ( "Digite um número: " ) )

    Agora vem outro problema, quando você quer introduzir ou retirar valores de dentro de uma lista, o ideal é que você trabalhe com métodos especialmente feitos para a tarefa, sendo assim existem 2 métodos essenciais:

    .append () - que adiciona um elemento a uma lista

    .remove() - que remove um elemento de uma lista

     

    Sendo assim o seu novo código será:

    numero = []
    par = []
    impar = []
    
    for i in range ( 4 ):
        
        digito = int ( input ( "Digite um número: " ) )
        
        numero.append ( digito )
        
        if ( digito % 2 ) == 0:
            par.append ( digito )
        else:
            impar.append ( digito )
    
    print ( numero )
    print ( par )
    print ( impar )

     

    Vou deixar um Link de um canal no YouTube muito bom que contem excelentes Video aulas sobre Python:

     

    Ignorância zero: https://www.youtube.com/channel/UCmjj41YfcaCpZIkU-oqVIIw

     

     

    Ubuntu 14.04 LTS   -   Python 2.7.6   -   Python 3.4.3

     

    Esero Ter AJudado ! ! !

  17. Olá!

     

    Sou iniciante em C, mas posso dar uma força, tente dar uma pesquisada no forum que é certo que voce vai conseguir encontrar material complementar aos itens do seu problema, mas de todo modo . . .

     

    Dê uma olhada nos links de um tópico que respondi, tenho certeza que lhe darão uma direção a seguir:


    https://www.scriptbrasil.com.br/forum/topic/183210-pograma-em-c-registro-de-cadastro-alterar-e-remover-clientes-produtos/#comment-688484

     

     

    Qualquer coisa poste o que voce já conseguiu ate agora . . .

     

    Ubuntu 14.04 LTS  -   MonoDevelop 4.0.12   -   CodeBlocks 13.12

     

    Espero Ter Ajudado ! ! !

  18. Olá!

     

    Sou inciante em C, mas acho que posso dar uma força . . .

     

    Eu vi que você cometeu alguns equívocos:

     

    1 - quando você declara uma função, você tem de especificar que tipo de valor a mesma irá retornar, neste caso ( int converte() ) tá ok, mas ao declarar os parâmetros da função ( hora, minutos, segundo, total ) você também precisa declarar qual o tipo de cada parâmetro, sendo assim ( int hora, int minutos, int segundo, int total )

     

    2 - quando você quer chamar ( usar uma função ) principalmente as que devolvem ( retornam ) algum valor, existe algumas formas que você pode usar para manipular o valor retornado por uma função:

     

    - ou você armazena o valor de retorno da função em uma variável a qual chamará a sua função:

     

    int main()

    {

        int total = 0;

        total = converte ( hora, minuto, segundo );

    }

     

    - ou você pode exibir diretamente o valor desejado, desde que seja compatível com a ação desejada, neste caso o valor retornado pela função converte() é usado como argumento para a função printf():

     

    int main()

    {

        printf ( “\nO tempo total em segundos é: %d ”, converte ( hora, minuto, segundo ) );

    }

     

    3 - quando você vai chamar uma função você deve passar para ela todos os argumentos de que a mesma precisa, ou seja, se você declarou uma função com 4 variáveis, as 4 variáveis precisam ser passadas ao chamar a função, sendo assim:

     

    printf ( "\nO horario atual em segundos é: %d", converte ( total ) ); vai retornar uma erro, dizendo que a função está sendo chamada com poucos argumentos, você deve passar os valores correspondentes as variáveis que você declarou dentro de main() podendo manipular o valor de retorno das 2 formas como lhe expliquei acima:

     

    printf ( "\nO horario atual em segundos é: %d", converte ( hora, minuto, segundo ) );

     

    4 - se voce desejar:

     

    - a sua variavel int total; pode ser declarada apenas dentro da função converte(); e ela armazenará o valor antes da função retorna-la ( return total; )

     

    - ou voce não declara a funcao total, e retorna apenas o valor em si:  return ( ( hora * 3600 ) + ( minuto * 60 ) + ( segundo ) );

     

    Bom por hora é só, qualquer coisa é só falar . . .

     

    Ubuntu 14.04 LTS   -   MonoDevelop 4.0.12    -   Code block 13.12

     

    Espero Ter Ajudado ! ! !

  19. Olá!

     

    Olha sou iniciante em C e uso o sistema Linux ( Ubuntu 14.04 LTS ), bom ao que parece em um primeiro momento a função fflush ( stdin ); parece funcionar na limpeza de buffer do teclado, tanto em sistemas Windows quanto em sistema Linux, porem . . .

     

    Eu já havia ouvido falar desta característica da função quando desenvolvia pequenos algorítimos e usava a função para a limpeza do buffer, foi só quando um dos algoritmos que desenvolvi apresentou problemas é que tive de parar de usar a função.

     

    Ao que parece a complexidade do algoritmo é um dos principais motivos para a falha da função, deixando claro que podem existir outras variáveis que podem estar causando o problema como incompatibilidade com outras funções do programa, alguma caracteristica especifica de um compilador ao mesmo da Linguagem C.

     

    A função aparenta funcionar tanto no Windows quanto no Linux, porem o problema acontece em ambos por isso deve-se evitar tanto quanto possível a utilização da função para a limpeza de buffer do teclado.

     

    No Linux uso a função __fpurge ( stdin ); ate agora nunca tive problemas com ela, para o Windows não conheço uma função especifica para o sistema, mas . . .

     

    Tanto no Linux quanto no Windows existem pequenos truques que podem ser tentados, apenas não me lembro em quais sistemas e compiladores estes truques funcionaram comigo, mas garanto que funcionam:

     

    - ao utilizar a função scanf() colocar um pequeno espaço entre o abre aspas e o simbolo de porcentagem, pode ajudar na limpeza de buffer

     

    - outra coisa que se pode tentar é usar a função getchar(); após cada entrada do teclado

     

    - outra seria colocando o código de formatação %*c dentro do scanf ( “%*c%s” ), apenas não me lembro se o código é colocado na frente ou atrás do outro

     

    não sei nada de C++ então não posso dizer muito sobre a limpeza na linguagem . . .

     

    Bom por hora é só . . .

     

    Ubuntu 14.04  LTS   -   MonoDevelop 4.0.12

     

    Espero ter Ajudado ! ! !

  20. Olá!


    Bom você simplesmente vai ter de criar 2 structs uma para armazenar os produtos e outra para os clientes, apenas que você terá de criar um vetor de structs para armazenar cada registro.


    Vou deixar abaixo os Links de 2 topicos com uma ideia muito próxima ao que você precisa:

     

    https://www.scriptbrasil.com.br/forum/topic/182313-programa-simples-em-c-struct/#comment-686295


    https://www.scriptbrasil.com.br/forum/topic/183118-struct-em-c/#comment-688222


    Acho que os links acima já lhe darão uma direção a qual seguir . . .


    Ubuntu 14.04 LTS   -   MonoDevelop 4.0.12


    Espero ter Ajudado ! ! !

  21. Olá!

     

    Bom aqui agora estou usando o MonoDevelop, e ele apontou 2 erros, que no Code Blocks e talvez outras IDEs seriam tratados apenas como alertas:

     

    - os erros ( alertas ) dizem respeito sobre as linhas 18 e 22 onde você colocou os códigos de formatação errados ( %d – inteiro ) para as variáveis, quando o correto seria ( %f – flutuante )

     

    - o erro que parece estar causando os valores errados diz respeito aos valores ( + 13; ) e ( -13; ) usados para o calculo, neste caso é só substitui-los por ( +0.065; ) e ( -0.065; ) o equivalente a 6 centímetros calculo eu, e pelo que pude entender da formula dando uma olhada na Web.

     

    Além disso é sempre bom você colocar por segurança e melhor organização do código parênteses separando cada parte da expressão a ser resolvida na ordem correta:

     

    return ( ( altx + alty ) / 2 + 0.065;

    return ( ( altx + alty ) / 2 - 0.065;

     

    Obs.: a função fflush ( stdin ); é uma função que deve ser evitada ser usada na limpeza de buffer do teclado, ela é uma função que não foi feita para esta tarefa especifica, embora funcione, existe a possibilidade de ela apresentar um comportamento indefinido, causando os mais diversos problemas no codigo, sendo assim não a use tente buscar outras solução para a limpeza de buffer do teclado.

     

    Ubuntu 14.04 LTS    MonoDvelop 4.0.12

     

    Espero Ter Ajudado ! ! !

  22. Olá!

     

    Cara dei um executada basica no codigo sem contar que não comecei a estudar a fundo Orientação a Objetos, mas aqui só me foram retornados 2 erros:

     

    - O Primeiro erro abaixo parece estar relacionado ao atributo de um objeto ( Nome ) que não existe, sendo que acho que se você queria mostrar o nome do ( Pai ), por simples intuição eu só alterei a ordem de ( Nome.Pai ) para ( Pai.Nome ) para esta primeira parte rodar sem erro e mostrar o nome do ( Pai ), não me pergunte como apenas funcionou:

     

    ===== RESTART: /home/felipe/scriptbrasil-forum - Ajuda em Python oop.py =====

    Luciana

    Traceback (most recent call last):

    File "/home/felipe/scriptbrasil-forum - Ajuda em Python oop.py", line 12, in <module>

    print(Nome.Pai)

    NameError: name 'Nome' is not defined

     

     

    - O Segundo erro abaixo parece estar relacionado ao fato de você tentar acessar um atributo inexistente de um objeto, o atributo em questão é:

     

    print ( f.olho )

     

    ===== RESTART: /home/felipe/scriptbrasil-forum - Ajuda em Python oop.py =====

    Luciana

    Maria

    Rio de Janeiro

    Traceback (most recent call last):

    File "/home/felipe/scriptbrasil-forum - Ajuda em Python oop.py", line 15, in <module>

    print(f.olho)

    AttributeError: 'Filha' object has no attribute 'olho'

     

    Para consertar esta parte você deve introduzir o atributo olho, na classe ou então simplesmente não usar este atributo.

     

    Bom por hora é só . . . veja se isso já resolve parte do problema . . .

     

    Ubuntu 14.04  -  Python 2.7.6  -  Python 3.4.3

     

    Espero Ter Ajudado ! ! !

  23. Olá!

     

    Já que voce quer um comando ou função, voce pode tentar usar a função sum(), ela pega os itens de uma lista e soma todos . . .

     

    media = sum ( lista ) / quantidade

     

    Aqui entrando 4 notas, e todas com o valor 5, o resultado final foi media 5

     

    Espero Ter Ajudado ! ! !

  24. Olá!

     

     

    Sou iniciante em Python, mas acho que posso dar uma força . . .

     

    Bom, você tem 2 dígitos importantes: [ 4 , 2 ]

     

    - o primeiro diz a quantidade de dígitos existentes na sequencia

     

    - o segundo a quantidade de dígitos a serem removidos da sequencia

     

    Sendo o saldo da conta: 1435

     

    Onde neste caso você deve deixar na sequencia os 2 maiores dígitos da sequencia ( 5 e 4 ) para que sejam utilizados para o maior saldo final possivel?

     

    Mas isso deve obedecer alguma regra especifica?

     

    Ex:

     

    Na ordem original: 1435, o valor final do saldo seria 45 obedecendo o posicionamento original dos caracteres, ou deveria ser 54 obedecendo ao maior valor possível de se conseguir combinando todos os caracteres restantes?

     

    - Caso seja a primeira opção:

     

    Que é basicamente uma variação da segunda opção:

     

    O que eu fiz aqui foi, criar um laço while que será executado enquanto uma variável de controle ( contagem ) for menor que a quantidade de dígitos a serem retirados da sequencia, neste caso 2.

     

    Dentro do laço while, utilizei o método .remove(), para retirar da sequencia ( lista ) original o menor dígito encontrado na lista ( sequencia ) original, sendo que o processo se repetirá ate que a condição do laço seja atingida, 1 item a cada iteração, mas não alterando o posicionamento original dos elementos.

     

    Obs.: Não esquecendo de adicionar 1 a variável de controle ( contagem ) antes de terminar o laço.

     

    - Caso seja a segunda opção:

     

    O que eu fiz aqui foi, criar um laço while que será executado enquanto uma variável de controle ( contagem ) for menor que a quantidade de dígitos a permanecerem na sequencia, neste caso 2.

     

    Dentro do laço while, utilizei o método .append() para adicionar à uma nova lista ( sequencia ), o maior dígito encontrado na lista ( sequencia ) original, sendo que o processo se repetirá ate que a condição do laço seja atingida, 1 item a cada iteração.

     

    Obs.: não esquecendo de após descobrir o maior digito da sequencia ( lista ) originaleliminá-lo da mesma, caso contrario a nova sequencia terá todos os seus elementos ( dígitos ) repetidos.

     

    Obs.: Não esquecendo de adicionar 1 a variável de controle ( contagem ) antes de terminar o laço.

     

     

    Dependendo da opção escolhida, o valor de retorno de:

     

    [ 4 , 2 ]

    1435

     

    vai ser 45 para a primeira opção

     

    vai ser 54 para a segunda opção

     

     

    Bom por hora é só . . . não sei se é isso que procura mas está ai . . . sem contar que sou pessimo em Matematica, e combinando isso com a hora em que estou acordado e o fato de que sou iniciante em programação, é quase certo que não é a solução que voce procura!

     

     

    Ubuntu 14.04 - Python 2.7.6 - Python 3.4.3

     

    Espero Ter Ajudado ! ! !

×
×
  • Criar Novo...