Ir ao conteúdo
  • Cadastre-se

eduheavy

Membro Júnior
  • Posts

    11
  • Cadastrado em

  • Última visita

posts postados por eduheavy

  1. Em 12/05/2021 às 01:32, arfneto disse:

     

    Esse programa

     

    
    #include <stdio.h>
    
    int DV( const char*);
    
    int main(void)
    {
        const char string[] = { "\
    para formatacao do valor como: .(ponto), -(traco), virgula 1234 e 5678 outros;"
        };
    
        printf( "Exemplo de entrada: \"%s\"\n", string);
        int valor = DV(string);
        printf( "DV() retornou %d\n", valor );
        return 0;
    }
    
    int DV(const char* linha)
    {
        return -1;
    }
    
    // fim do grande programa

     

    Que eu te mostrei dias atrás quando postou o MESMO problema parece que não te deu nenhuma luz, nem nada do que eu e outros publicamos lá em
     

    E o programa até compila e roda. Tentou escrever a função e colocar lá dentro?

     

    E também não respondeu à pergunta sobre onde está o resto da definição do cálculo do DV em seu enunciado, já que parece incompleto....
     

    EXEMPLO de cálculo para o DV módulo 11

     

    Usando 1541253, o número do tópico aqui....

     

    São 7 dígitos, de um total de possíveis 30. E os multiplicadores são OITO: 9 8 7 6 5 4 3 2

     

    Então alinhe os valores e faça as contas. Trata-se de multiplicar o dígito pelo "peso"...
     

    
        1    5    4    1    2    5    3  : o valor
        9    8    7    6    5    4    3  : os pesos
    
        9   40   28    6   10   20    9  : as parcelas

     

     

     

    Medíocre a redação do cara que escreveu seu enunciado.  O que eu imagino que ele queria dizer é que se somam os dígitos de cada parcela e não os valores: 40 soma 4, 28 soma 10, 20 soma 2 mais 0 e acho que deu pra entender, certo?

     

    
        1    5    4    1    2    5    3  : o valor
        9    8    7    6    5    4    3  : os pesos
    
        9   40   28    6   10   20    9  : as parcelas
    
        9  + 4 + 10  + 6  + 1  + 2  +  9  : a soma da soma dos digitos
        9   13   23   29   30   32    41
    
    Eis o total: 41 = 3 x 11 + 8. Esse é o tal módulo 11: o resto da divisão por 11. 
    Então o DV nesse caso é 11 - 8 = 3. 

     

    O resto da divisão por 11 fica entre 0 e 10 e então cada entidade tem que resolver o que fazer quando o resto for 10.

     

    Foi por isso que eu te perguntei 2 vezes sobre o resto da definição.

     

    Mas o cálculo é esse. 

     

    @eduheavyAcha que agora sabe escrever a função que eu te mostrei, DV(), lá declarada em um programa completo no tópico #6?

     

    Tente escrever, afinal é só o que está aqui acima. Se não conseguir escreva de novo e preencho um exemplo no programa que te mostrei semanas atrás.

     

     

    Não, isso foi ideia do prof. Wirth, ao criar Pascal nos anos 70: procedure não retorna valor, function retorna valor. E isso  ficou em Visual Basic com Function e Sub. E foi um progresso porque o Basic só tinha Sub. :D e não era Visual! 

     

    image.png.f276213e53095572fb7d6ebbae1dd11c.pngA razão era, no caso do Pascal, porque o prof. Niklaus tinha idéias muito pessoais sobre correção e filosofia de como escrever programas e de como FORTRAN podia destruir o mundo e Algol (de onde ele inspirou Pascal) nunca foi justamente valorizado. 

     

    :D Eu tenho o livro. Não é a primeira edição :( mas sim a segunda, de '78 

     

    Isso não aparece em C em lugar algum. Logo ficou claro, ainda nos 70, que de nada servia essa distinção e 50 anos depois parece não ter ainda.

     

     

     

     

    Consegui resolver depois de muita luta, mas ainda não consegui fazer a chamada da função isso que não entendo.

     

    
    /********************************************************
    Programa:
    Objetivo:
    Autor: Luiz Eduardo E. de souza
    Data:
    **********************************************************/
    
    #include <stdio.h>
    #include <locale.h>
    #include <string.h>
    #include <stdlib.h>
    #include <conio.h>
    
    
    int calcula_dv(int soma_main)
    {
    	int mult_mod, mod_divmult, mod11;
    	mult_mod = soma_main * 10;
    	mod_divmult = mult_mod/11 * 11;
    	mod11 = mult_mod -mod_divmult;	
    	return(mod11);
    	
    }
    
    int main()
    {
    	
    	char texto [30], aux_conv[2] = {'\0','\0'};
    	int result_dv, i, peso, mult, soma;
    	
    	setlocale(LC_ALL, "Portuguese"); // incluindo a linguagem PT-BR
    	
    	printf("Desenvolvido por: \n");
    	printf("Luiz");
    	printf("\n\n\nEntre com uma string com valores decimais (máximo 30 caracteres):\n");
    	printf(            "Digite FIM para encerrar o programa:\n"                 );
    	
    	fgets(texto, 30, stdin);
    	texto[strlen(texto)-1]='\0';
    	strupr(texto); //coloca todo texto em maiúscula
    	
    	if(strcmp(texto,"FIM") == 0)
    	{
    		return 0;
    	}
    	
    	peso=2;
    	for(i=strlen(texto)-1; i>=0; i--)
    	{
    		aux_conv[0] = texto[i];
    		if(peso>9)
    		{
    			peso=2;
    		}
    		mult = atoi(aux_conv) * peso;
    		printf("numero %d peso %d mult %d\n",atoi(aux_conv),peso,mult);
    		peso++;
    		soma = soma + mult;
    	}
    	printf("O valor de soma é: %d", soma);
    	result_dv = calcula_dv(soma); //chamada da função
    	printf("O digito verificado é: %d", result_dv);
    	
    	getch();
     	return 0;
    }

     

    A função ai está dentro do "main", pela descrição do problema ela deve ficar fora

  2. O programa deverá solicitar a entrada de uma string (máximo de 30 caracteres) com caracteres decimais, a string pode possuir caracteres utilizados para formatação do valor como: .(ponto), -(traço), virgula e outros;

    FEITO

     solicitação da entrada de strings será finalizada apenas quando o usuário digitar “FIM” em qualquer padrão. Mensagem: "Digite 'FIM' para encerrar o programa.”;

    ACHO QUE ESTÁ CORRETO

    Caso o usuário digite uma string onde não seja possível calcular o dígito verificador, emitir a mensagem: "Atenção!!! Valor informado inválido."

    O cálculo do dígito verificador de ser realizado por uma função com nome “calcula_dv”

    FEITO

    A string informada pelo usuário deve ser passada para a função calcula_dv() através de chamada por valor;

    FEITO PARCIALMENTE

    A função calcula_dv() deve retornar um valor inteiro, ou seja, se o cálculo for bem sucedido retornar DV, caso contrário retornar valor -1;

    Se cálculo do DV for bem sucedido enviar mensagem para o usuário: DV calculado com sucesso: + string digitada + “-“ + DV calculado.

    TRAVEI NESSA PARTE

    Regras para cálculo do dígito verificador módulo 11.

    Para obter o DV da string digitada pelo usuário, multiplica-se cada caracter da string sem o DV pelos multiplicadores 9,8,7,6,5,4,3,2 nesta ordem (repetir está sequência quantas vezes for necessário), soma-se as unidades das dezenas.

    
    /********************************************************
    Programa:
    Objetivo:
    Autor: Luiz Eduardo E. de souza
    Data:
    **********************************************************/
    
    #include <stdio.h>
    #include <locale.h>
    #include <string.h>
    #include <stdlib.h>
    
    
    void calcula_dv (void);
    
    
    int main()
    {
    	
    	char texto[30], aux_conv[2] = {'\0','\0'};
    	int i, peso = 2, valor;
    	
    	setlocale(LC_ALL, "Portuguese");
    	
    	printf("Desenvolvido por: \n");
    	printf("Luiz");
    	printf("\n\n\nEntre com uma string com valores decimais (máximo 30 caracteres):\n");
    	printf(            "Digite FIM para encerrar o programa:\n"                 );
    	
    	fgets(texto, 30, stdin);
    	texto[strlen(texto)-1]='\0';
    	strupr(texto); //coloca todo texto em maiúscula
    	
    	if(texto == "fim")
    	{
    		return 0;
    	}
    	
    	valor = atoi(texto); // converte em int
    	calcula_dv();
    	printf("DV calculado com sucesso: " "%c", texto, "-" ,"%d" valor);
    	
    	
    
    }
    
    	void calcula_dv (void)
    	{
    		for(i=strlen(texto)-1; i >=0; i--)
    			{
    				aux_conv[0] = texto[i];
    				soma = atoi(aux_conv) * peso;
    			}
    	}
    	

     

  3. @arfneto  estou totalmente travado

     

    
    #include<stdio.h>
    #include<locale.h>
    //#define TOTREG 3
    #define TOTREG 3
    //typedef struct 
    typedef struct
    {
    	char num[31];
    
    } Pessoa;
    
    Pessoa pes[TOTREG];
    //char num [30];
    
    
    //}entrada_dados;
    
    //entrada_dados dados [TOTREG];
    //************************************************FUNÇÃO CALCULA_DV******************************************************************//
    void caucula_dv(){
    	
    }
    
    //***********************************************************************************************************************************/
     main()
    
    {
    	
    	setlocale(LC_ALL, "Portuguese");
    
    
     
     char idx;
     char FIM;
     
     printf("Desenvolvido por:\n\nIsrael Carlos\nLuiz Eduardo\nGuilherme Garbin\n\n");
     
        	printf(            "Digite FIM para encerrar o programa:\n"                    );
     
     for(idx=0;idx<31;idx++)
     {
     
            
        		
            printf("Entre com uma string com valores decimais (máximo 30 caracteres):\n");
        	scanf ("%c", &idx);
        	
        	if(idx < 0 )
    		{
        		printf("\nAtenção!!! Valor informado inválido.\n\n");
        		
    		}
    	    if (idx == FIM)
    	    {
    	    	
    		}
    
    	    
    }
    		
        
    	
        
       
    
    
    
    }
    
    //FIM DO PROGRAMA

     

  4. 19 horas atrás, arfneto disse:

     Por favor, não faça isso. Você anexou um link para um arquivo externo. Eis o que eu DEVO fazer então: 

    • vou abrir um arquivo compactado de destino desconhecido
    • depois vou ter que arrumar algo para abrir uma biblioteca do tipo rar, que não é portável. zip seria mais como no Windows, rpm no Linux.
    • Aí vou extrair os arquivos para uma pasta do MEU computador para poder ler
    • E esse é um forum público. Cada um que achar que pode ajudar e cada um com um problema semelhante vai ter que fazer a mesma coisa se quiser entender

     

    Outra opção:

     

    • você posta o conteúdo bem aqui na tela

     

    Qual opção eu prefiro 🤔❓

    a segunda. Não me leve a mal.

    Mil desculpas, entendo seu ponto nessa questão, é que como eu vi que o fórum permite o compartilhamento .zip ou .rar achei que não teria este problema, mas entendi sim o que quis dizer.

  5. 3 horas atrás, arfneto disse:

     

    Não escreva seus programas assim. Vai levar uma eternidade para fazer. Outra para testar. E com duas eternidades já gastas pode ficar tudo difícil ;) e faltar tempo.

     

    Pode fazer o contrário e começar então por um programa simples que chama a tal função. É trivial. O que importa é prosseguir logo. Testar logo.

     

    Copiando um trecho do enunciado e acrescentando uns números

     

    
    para formatacao do valor como: .(ponto), -(traco), virgula 1234 e 5678 outros;"

     

    levou 10s. É claro que a string tem traços e ponto e vírgula já que eu copiei do enunciado :D e claro que tem uns números porque dá pra ver daqui. E eles estão até separadinhos para ter mais graça...

     

    E escrever um  programa assim:
     

    
    #include <stdio.h>
    
    int DV( const char*);
    
    int main(void)
    {
        const char string[] = { "\
    para formatacao do valor como: .(ponto), -(traco), virgula 1234 e 5678 outros;"
        };
    
        printf( "Exemplo de entrada: \"%s\"\n", string);
        int valor = DV(string);
        printf( "DV() retornou %d\n", valor );
        return 0;
    }
    
    int DV(const char* linha)
    {
        return -1;
    }
    
    // fim do grande programa

     

    quanto tempo leva?

     

    E rodar o tal programa?
     

    
    ch$  gcc x.c
    ch$  ./a.out
    Exemplo de entrada: "para formatacao do valor como: .(ponto), -(traco), virgula 1234 e 5678 outros;"
    DV() retornou -1
    ch$  

     

    E não é que funcionou?

     

    E agora? Sabe que a string deve virar "12345678" que são os números que tem lá, certo?

     

    E os multiplicadores não são 
     

     

    E então não deve dar pra multiplicar os caras e somar?

     

    
    	12345678
    	98765432
    
    	9 + 16 + 21 + 24 + 25 24 + 21 + 16 = 156 ? 
    
    	156 * 10 = 1560, 1560 = 141 * 11 + 9 então DV() deve retornar 9
    
    
    	12345678-9 seria o oficial então ...

     

     

    Você cortou a definição :D :D  mas uma maneira popular é somar essas parcelas, multiplicar por 10 e usar o módulo 11 como DV. Tem métodos que somam os dígitos das parcelas --- 24 somaria 6 por exemplo --- e não o total, mas não faz diferença: faça o que tem que fazer apenas.

     

    Entende o que quero dizer? O que importa é testar logo. chegar a algo. Não "travar" se ainda sabe fazer algo.

     

     

     

    Anexei o exemplo de como ele deve ficar para ficar mais claro.

    verificador.rar

  6. 16 minutos atrás, arfneto disse:

     

    Então não sabe nem declarar uma função
     

     

    cujo nome está aí acima. recebe um valor e retorna um valor inteiro que ;e o DV ou -1?

     

    Tem um livro? Uma apostila? Já escreveu algum programa?

     

     

     

    Essa parte também não saberia escrever? um loop lendo e mostrando uma string e que para quando a string for "fim"?

     

    E se conseguir isso não conseguiria fazer um loop, do índice 0 até o fim da string, ignorando os caracteres que não sejam numero e mostrando na tela?

     

    E se conseguir isso não pode declarar um contador e ir multiplicando os dígitos conforme aparecem na string pelos pesos
     

     

    e somando até chegar ao valor do DV?

     

     

    Consegue calcular o DV de seu RG usando essa técnica? De um CPF? do número 1234? 

     

     

    O problema é a parte do Dv vou escrever as demais partes e retorno aqui onde travou.

  7. Pessoal estou travado no desenvolvimento de um programa podem me ajudar?

    Consegui fazer apenas o esqueleto dele.

    //Exercício: calcula_digito_verifcador
    
    //Autor:Luiz Eduardo Eleuterio de Souza.
    
    //Professor: Eduardo
    
    #include<stdio.h>
    #include<locale.h>
    #define TOTREG 3
    
    typedef struct 
    {
    float num [30];
    char fim [3];	
    
    }entrada_dados;
    
    entrada_dados dados [TOTREG];
    
    
    int main()
    
    {
    	
    	setlocale(LC_ALL, "Portuguese");
    
    
     int idx;
     
     printf("Desenvolvido por:\n\n Luiz Eduardo Eleuterio de Souza\n");
     
     for (idx =0; idx <TOTREG; idx ++)
        
        {
        	
        	printf("Digite FIM para encerrar o programa:\n");
        	//fgets(dados[idx].fim,3,stdin);
        	//fflush(stdin);
        	
        		
        	printf("Entre com uma string com valores decimais (máximo 30 caracteres):");
        	scanf("%f",&dados[idx].num);
        	fflush(stdin);
        	
        
        }
    
    
    
    }
    
    //FIM DO PROGRAMA

     

    A primeira informação a ser disponibilizada deve ser o nome completo de todos os alunos que integram o grupo;

    O programa deverá solicitar a entrada de uma string (máximo de 30 caracteres) com caracteres decimais, a string pode possuir caracteres utilizados para formatação do valor como: .(ponto), -(traço), virgula e outros;

    A solicitação da entrada de strings será finalizada apenas quando o usuário digitar “FIM” em qualquer padrão. Mensagem: "Digite 'FIM' para encerrar o programa.”;

    Caso o usuário digite uma string onde não seja possível calcular o dígito verificador, emitir a mensagem: "Atenção!!! Valor informado inválido."

    Caracteres não decimais (utilizados na formatação) devem ser ignorados no cálculo do dígito verificador;

    O cálculo do dígito verificador de ser realizado por uma função com nome “calcula_dv”;

    A string informada pelo usuário deve ser passada para a função calcula_dv() através de chamada por valor;

    A função calcula_dv() deve retornar um valor inteiro, ou seja, se o cálculo for bem sucedido retornar DV, caso contrário retornar valor -1;

    Se cálculo do DV for bem sucedido enviar mensagem para o usuário: DV calculado com sucesso: + string digitada + “-“ + DV calculado.

    Regras para cálculo do dígito verificador módulo 11.

    Para obter o DV da string digitada pelo usuário, multiplica-se cada caracter da string sem o DV pelos multiplicadores 9,8,7,6,5,4,3,2 nesta ordem (repetir está sequência quantas vezes for necessário), soma-se as unidades das dezenas.

  8. Galera seguinte, estou escrevendo um artigo sobre segurança do PFSense, preciso simular ataques DDOS nas maquinas virtuais que configurei e gerar relatórios para demonstrar a eficiência e falhas que podem existir, não entendo praticamente nada de Linux e os programas que encontrei para fazer os testes são todos para linux, alguem tem alguma ideia de como posso fazer esses testes?

  9. 1 hora atrás, devair1010 disse:

    @eduheavy    você precisa colocar uma variável para somar o total de números entrados ,  para no final dividir e ter a média 

    
    
    int num_total = 0;

    e depois do scanf 

    
    
    num_total += numero;

    e ali depois do while 

    
    
    num_total = / (qtd1+qtd2+qtd3+1td4);

    e no seu código , esse qtd2 não recebeu nenhum valor  .

     

    /********************************************************
    Programa: 
    Objetivo:
    Autor: Luiz Eduardo E. de souza
    Data: 
    **********************************************************/
    
    #include <stdio.h>
    
    int main() 
    {
    
     
    
    int numero, qtde1=0, qtde2=0,qtde3=0,qtde4=0,qtde=0, num_total=0, media;
    
    printf("=============================\n");
    
    printf("Selicione as opcao abaixo \n");
    
    printf("=============================\n");
    
    printf("1-) Digite um numero inteiro \n");
    
    printf("2-) Digite 0 para sair \n");
    
    printf("=============================\n");
    
    scanf("%d", &numero);
    num_total += numero;
    
     
    
    while (numero!=0) {
    
     
    
                 
    
               if ((numero>0) && (numero<10)) {
    
      qtde1=qtde1+1;
    
     }
    
         if ((numero>10) && (numero<99)) {
    
      qtde2=qtde2+1;
    
     }
    
         if ((numero>100) && (numero<999)) {
    
      qtde3=qtde3+1;
    
     }
    
         if ((numero>1000) && (numero<10000)) {
    
      qtde4=qtde4+1;
    
     }
    
         if (numero>10000) {
    
      qtde=qtde+1;
    
     }
    
         if (numero<0) {
    
      printf("Atencao!!! voce digitou um valor invalido.");
    
     }
    
         scanf("%d", &numero);
    
                   
    
                   
    
           
    
     
    
    }
    media = (qtde1+qtde2+qtde3+qtde4+qtde) / num_total;
    printf("Media = %d\n",media);
    printf("============================================================\n");
    
    printf("Foram digitados %d valores no intervalo de 1 a 9", qtde1);
    
    printf("\n==========================================================\n");
    
    printf("Foram digitados %d valores no intervalo de 10 a 99", qtde2);
    
    printf("\n==========================================================\n");
    
    printf("Foram digitados %d valores no intervalo de 100 a 999", qtde3);
    
    printf("\n==========================================================\n");
    
    printf("Foram digitados %d valores no intervalo de 1000 a 10000", qtde4);
    
    printf("\n===========================================================\n");
    
    printf("Foram digitados %d valores no intervalo de numero > 10000", qtde);
    
    printf("\n===========================================================\n");
    
     
    
    return 0;
    
    }

    Fiz as alterações aqui aparece o resultado mas não tenho certeza de que a logica esta correta.

  10. Galera podem me dar uma ajuda?

    Tenho um trabalho da Faculdade para fazer consegui desenvolver o codigo todo porém a media solicitada pelo professor não consigo desenvolver, apenas a media simples, segue abaixo a descrição do trabalho e meu codigo desenvolvido.

     

     

    O programa desenvolvido deve conter as seguintes funcionalidades:

    A primeira informação a disponibilizada é nome completo de todos os alunos que entegram o grupo;

    O programa deverá solicitar a entrada de números inteiros positivos e diferentes de 0(zero);

    A solicitação da entrada de números inteiros será finalizada apenas quando o usuário digitar o número 0(zero);

    Caso o usuário digite um número negativo o programa deve enviar a seguinte mensagem: "Atenção!!! Você digitou um valor inválido."

    Quando o usuário entrar com o valor 0(zero), o programa deverá apresentar o seguinte resultado:

    Você digitou N números, sendo que:  (N indica a quantidade total de números digitados)

         Você digitou N números entre 1 e 9. (N indica a quantidade total de números digitados entre 1 e 9)

         Você digitou N números entre 10 e 99. (N indica a quantidade total de números digitados entre 10 e 99)

         Você digitou N números entre 100 e 999. (N indica a quantidade total de números digitados entre 100 e 999)

         Você digitou N números entre 1.000 e 10.000. (N indica a quantidade total de números digitados entre 1.000 e 10.000)

         Você digitou N números com outros valores. (N indica a quantidade total de números digitados acima de 10.000)

         

         O cálculo da media dos número digitados é => MEDIA".  (MEDIA corresponde a soma de todos os valores digitados dividido pela quantidade total de números digitados, e deverá ter no máximo 2 casas decimais)

     

    Se o usuário não digitou nenhum número, o programa deverá enviar a seguinte mensagem: "Atenção !!!! Você não digitou nenhum número.




     

    /********************************************************
    Programa: 
    Objetivo:
    Autor: Luiz Eduardo E. de souza
    Data: 
    **********************************************************/
    
    #include <stdio.h>
    
    int main()
    {
        int numero, qtd1=0, qtd2=0, qtd3=0, qtd4=0, qtd=0, media;
        
        printf("=============================\n");
        printf("Selicione as opcao abaixo \n");
        printf("=============================\n");
        
        printf("1-) Digite um numero inteiro \n");
        printf("2-) Digite 0 para sair \n");
        printf("=============================\n");
        
        scanf("%d", &numero);
        
        while (numero!=0)
        {
            
            if ((numero>0) && (numero<10))
            {
                qtd1=qtd1+1;
            }
                if ((numero>10) && (numero<99))
                {
                    qtd3=qtd3+1;
                }
                
                     if ((numero>1000) && (numero<10000))
                     {
                         qtd4=qtd4+1;
                     }
                         
                         if (numero>10000)
                         {
                             qtd=qtd+1;
                         }
                         
                         if (numero<0)
                         {
                             printf("Atencao!!! voce digitou um valor invalido.");
                         }
                         
                         scanf("%d", &numero);
            
        }
        media = (qtd1+qtd2+qtd3+qtd4+qtd) / 2;
        printf("Media = %d\n",media);
        printf("============================================================\n");
        printf("Foram digitados %d valores no intervalo de 1 a 9", qtd1);
        printf("\n==========================================================\n");
        printf("Foram digitados %d valores no intervalo de 10 a 99", qtd2);
        printf("\n==========================================================\n");
        printf("Foram digitados %d valores no intervalo de 100 a 999", qtd3);
        printf("\n==========================================================\n");
        printf("Foram digitados %d valores no intervalo de 1000 a 10000", qtd4);
        printf("\n===========================================================\n");
        printf("Foram digitados %d valores no intervalo de numero > 10000", qtd);
        printf("\n===========================================================\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!