Ir ao conteúdo
  • Cadastre-se

devair1010

Membro Pleno
  • Posts

    6.252
  • Cadastrado em

  • Última visita

posts postados por devair1010

  1. @DaviFonsecx    seu código está funcionando bem , sim , tanto no codeblocks quanto no Visual Studio Code ,  e nesse último , talvez você ainda não sabe que precisa colocar a extensão do arquivo que você inseriu no VS Code , que é o indicador de qual linguagem é o código ,  e você postou na linguagem C então coloque "Nome_Do_Codigo.c" , senão ele não será reconhecido pelo compilador ,  e você pode incluir uma função de pausa para ver os resultados , pode ser o comando "Sleep"  da biblioteca "windows.h" ou  o comando "getch();" da biblioteca "<conio.h>"  que apesar de não ser padrão da linguagem c , ainda funciona , ou mesmo criar uma função para esse objetivo , como essa aqui :

    for(int j=0; j<6000; j++)
      for(int i=0; i<60000; i++);// pausa de +/- 1 Segundo

    e organizar os números do resultado em colunas , facilitando a leituras :

    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    #include <stdlib.h>
    #include <locale.h>
    
    int main()
    {
        int lado1;
        int lado2;
        int hipotenusa;
        int soma_catetos;
    
        setlocale(LC_ALL, "portuguese");
    
        for (lado1 = 1; lado1 <= 500; lado1++)
        {
            for (lado2 = 1; lado2 <= 500; lado2++)
            {
                for (hipotenusa = 1; hipotenusa <= 500; hipotenusa++)
                {
                    soma_catetos = pow(lado1, 2) + pow(lado2, 2);
                    if (soma_catetos == pow(hipotenusa, 2))
                    {
                        printf("%3d²(%6d) + %3d²(%6d) = %3d²(%6d)\n",
                            lado1    ,lado1*lado1, lado2,lado2*lado2,
                            hipotenusa, hipotenusa*hipotenusa
                        );
                        getch();
                    }
                }
            }
        }
    
        return 0;
    }

    triplasdePitagoras.thumb.jpg.3f03976ef32dbc6ee656aefa6a6a0028.jpg

  2. @Gustavo Alves7    conforme explicado nesse link :

    https://pt.stackoverflow.com/questions/389799/É-possível-passar-um-vetor-como-parâmetro-no-visualg

    o vetor no visualG 3.0.6.5 é um tipo de estruturado e não pode ser passado como parâmetros ,  porém você pode criar uma função ,  que serve de subrotina  sem enviar o vetor pois no visualG as variáveis usadas no bloco principal do compilador ,  que é tudo que esteja entre o "Inicio e o Fimalgoritmo" , precisam ser criadas lá no início do código na seção "Var" e portanto são globais e assim podem ser acessadas em qualquer local do código , e a subrotina / função  fará a ordenação dos números e ao retornar  poderão ser escritos  .

    e seu código ficaria assim :

    Algoritmo "EXE4SUBROTINAS_02"
    Var
       Vet            : Vetor[1..10] de Inteiro
       L, A, Aux, ret : Inteiro
    
    funcao sub_rotina(tam_vet : inteiro):inteiro
    Var
      A,L : inteiro
    Inicio
       Para    L de 1 ate 9      Faca
          Para A de 1 ate 10 - L Faca
             Se Vet[A    ] >  Vet[A + 1] então
                Aux        := Vet[A    ]
                Vet[A    ] := Vet[A + 1]
                Vet[A + 1] := aux
             FimSe
          FimPara
       FimPara
       retorne tam_vet
    Fimfuncao
    Inicio
       Para L := 1 ate 10 Faca
          Escreva("Digite um numero: ")
          Leia(Vet[L])
       FimPara
       // passagem de parâmetro dos Tipos : Logico  Real  inteiro ou caractere
       
       ret <- sub_rotina(10) // enviou o num 10 como parAmetro para a FunCAo
         
       {
       // essa ordenaCAo será na funCAo
       Para L de 1 ate 9 Faca
          Para A de 1 ate 10 - L Faca
             Se (Vet[A] > Vet[A + 1]) então
                Aux := Vet[A]
                Vet[A] := Vet[A + 1]
                Vet[A + 1] := aux
             FimSe
          FimPara
       FimPara
       }
       // Aqui escreve os nUmeros que estarAo ordenados
       Escreval("")
       Escreval("Valor retornado da Função ",ret) // ret Eh o valor retornado
       Escreval("")
       Para L := 1 ate 10 Faca
          Escreva(Vet[L])
       FimPara
       Escreval("")
    Fimalgoritmo

     

  3. @Pedro Vinicius G. C.    essa é a versão  mais recente , versão 3.0.7.0 (última de revisão 21/03/2019) release OK conforme diz nesse link :

    https://sourceforge.net/projects/visualg30/

    mas essa versão tem alguns "bug's" , e seria melhor usar o da versão anterior a essa , 

    VISUALG 3.0.6.5 (revisão 65 em 28/02/2017) , e que está nesse link:

    https://antonionicolodi.blogspot.com/2015/06/visualg-30-revisao-4-em-25062015.html

     

    @Luigi Milleo    você encontra o visualG 3.0.6.5 , nesse link:

    https://sourceforge.net/projects/visualg30/files/

    na Aba "FILE" , tem algumas versões do visualg

    visualG3.0.6.5.thumb.jpg.39bbdc898e1955983e1900c942527439.jpg

     

    e  no seu código existem dois erros , sendo um o que a msg diz   ( linha 3 : "comando fora da seção apropriada )  e que se refere ao comando  "Inicio" , pois antes dele precisa haver o comando "Var" ,  e outro é no cálculo da Área , onde a variável "r" * "r" não foi criada e assim  causam um erro . e também você poderia usar a função "quad"  para Raio ao Quadrado , e seu código ficou assim  :

    /// https://sourceforge.net/projects/visualg30/files/
    /// Link Do VisualG 3.6.0.5
    
    Algoritmo "area"
    Var
      raio,area : real
    Inicio
      escreva("Escreva o valor do Raio do CircuLo ")
      leia(raio)
    
      // area <- PI * raio * raio
      area <- PI * quad(raio)
      escreval("")
      escreval("Aera :",area)
    
    FimAlgoritmo

     

    • Curtir 2
  4. Em 16/05/2024 às 11:19, arfneto disse:

    fgets só deixa o '\n' lá se tiver espaço. Não pode ir lá cegamente e colocar um 0 porque se o usuário entrar com 50 ou mais dígitos fgets vai colocar exatamente os 50 lá. 

    isso ainda não sabia ,   porém nesse caso será apenas um caractere que se perderia    ,   e creio que você quis dizer que fgets pega o '\n' digitado pelo usuário se houver espaço na variável para guarda lo  ali ,  e  se não couber ,  a string vai ficar sem o '\n' e receberá  o '\0' finalizando a string ?    

    • Obrigado 1
  5.     realmente essa variável      "b"   minúsculo :

    h1 = A;        /// considera que A seja a hipotenuza
    if(B>A && B>C) /// B Eh o maior Lado ?
    {
      h1 = B;
      B  = A;
    }
    else           /// C Eh o maior Lado ?
    {
                   /// if(C>A && C>b)
      if( C > A && C > B )
      {
        h1 = C;
        C  = A;
      }
    }

    não está nesse código ,  e sim o  "B"  maiúsculo ,   pois editei o código no próprio site e ficou  assim ,  porém aqui no codeblocks não apresentou esses outros erros e warning's .

    codeblocksmaioraltura.thumb.jpg.2977735901bb37c6fb956cb2e1b255b3.jpg

    • Obrigado 1
  6. O enunciado diz para  ler os lados de um triangulo retângulo e também mostrar a maior altura e também a área do triangulo ,  então imagino que o programa precisa detectar se o triângulo é retângulo e também  a maior altura e a hipotenusa para assim fazer os cálculos ,  e também coloquei alguns controles para  validar o que o usuário digitar na entrada dos dados ,  e o programa ficou assim :

    #include    <stdio.h>
    #include    <stdlib.h>
    #include    <string.h>
    #include    <windows.h>
    #include    <math.h>
    #include    <time.h>
    #include    <locale.h>
    
    int main(int argc, char* argv[] )
    {
        srand(time(NULL));
        setlocale(LC_ALL,"");// usar vIrgula para casas decimais
        int   repetir =    0;
        int   ret     =    0;
        float area    =  0.0;
        float A       =  0.0;
        float B       =  0.0;
        float C       =  0.0;
        float c1      =  0.0;
        float c2      =  0.0;
        float h1      =  0.0;
        float h2      =  0.0;
        do
        {
            repetir = 0;
            printf("coloque vIrgula para separar casas decimais dos nUmeros"
                   "Digite o tamanho do lado A do triangulo retangulo: ");
            ret = scanf("%f",&A);
            printf("val A = %.2f\nval retorno = %d\n",A,ret);
            if(ret != 1)return 0;
            printf("Digite o tamanho do lado B do triangulo retangulo: ");
            ret = scanf("%f",&B);
            printf("val B = %.2f\nval retorno = %d\n",B,ret);
            if(ret != 1)return 0;
            printf("Digite o tamanho do lado C do triangulo retangulo: ");
            ret = scanf("%f",&C);
            printf("val C = %.2f\nval retorno = %d\n",C,ret);
            if(ret != 1)return 0;
            ///  ver qual eh a hipotenusa ?
            h1 = A;        /// considera que A seja a hipotenuza
            if(B>A && B>C) /// B Eh o maior Lado ?
            {
              h1 = B;
              B  = A;
            }
            else /// C Eh o maior Lado ?
            {
              if(C>A && C>b)
              {
                h1 = C;
                C  = A;
              }
            }
            /// ver se o triangulo eh retAngulo
            c1 = B  * B;
            c2 = C  * C;
            h2 = h1 * h1;     /// ver qual eh a maior altura
            A = B;
            if(C > A) A = C;
            if(h2 != c1 + c2 )/// se hipotenuza ao quadrado diferente da soma do quadrado dos catetos
            {
                printf("esse triangulo não eh retangulo.\n"
                       "Hipotenuza %.2f diferente (B)² %.2f + (C)² %.2f = %.2f\n"
                       ,h2,c1,c2,c1+c2);
                repetir = 1;
            }
        }
        while( repetir != 0);/// repete enquanto não for tringulo retangulo
        area = B * C / 2;    /// calculando a Area do triAngulo
        printf("\nHipotenuza %.2f X %.2f -> %.2f IguaL %.2f => (B)%.2f + (C)%.2f\n"
               "\nEsse TrianGulo eh RetanguLo.       \n\n"
               "A Maior Altura eh %.2f               \n\n"
               "a Area do TrianguLo eh  %.2f         \n\n"
               ,h1,h1,h2, c1 + c2,c1, c2, A, area    );
        return   0;
    }

     

    • Obrigado 1
  7. @higor7   como  disse @arfneto  o erro  é por que está lendo dois blocos e sendo que no "fwrite" gravou apenas um bloco de cada vez ,  e na função  exibirContatosCadastrados coloque uma pausa ao final que pode ser a função "Sleep(3000);"  ou  outra de sua preferência , e seu código com algumas modificações ficou assim :

    #include <stdio.h>
    ///#include <conio.h> não eh biblioteca padrão da linguagem C
    #include <stdlib.h>
    #include <windows.h>
    #include <string.h>
    #define _h GetStdHandle(STD_INPUT_HANDLE)
    typedef struct
    {
      int  sequencial;
      char nome    [30];
      char email   [30];
      ///long int telefone; /// esse nUmero gigante não servirAh para nada
      char telefone[15];    /// melhor que seja string
    } ContatoProfissional;
    
    ContatoProfissional Contato;
    
    int  contSequencial = 1; /// var Global
    int  menu            ();
    void inserirContato  ();
    void exibirContatosCadastrados();
    void gettch          ();
    int main             ()
    {
      int opcao = -1;
    
      do
      {
        system("cls");
        opcao = menu();
        printf("\n");
    
        switch (opcao)
        {
        case 1:
          inserirContato();
          break;
        case 2:
          exibirContatosCadastrados();
          break;
        default:
          printf("OpCAo invAlida, digite novamente.");
          break;
        }
      } while (opcao != 0);
    }
    
    int menu()
    {
      int opcao = -1;
      printf
      (
        " 0 - Sair.\n"
        " 1 - Inserir um contato.\n"
        " 2 - Exibir os contatos cadastrados.\n"
        " 3 - Alteracao de dados de um contato.\n"
        " 4 - Excluir um contato.\n"
        " 5 - Consultar os dados de um determinado contato.\n"
        " >> "
      );
      scanf("%d", &opcao);
      return opcao;
    }
    
    void inserirContato()
    {
      FILE *arquivoContatos = fopen("contatos.dat", "ab");
    
      if (arquivoContatos)
      {
        getchar();
        printf("Digite o nome do contato: ");
        fgets(Contato.nome, 50, stdin);
        Contato.nome[strlen(Contato.nome)-1] = 0;/// remove o newLine pego por fgets
    
        printf("Digite o email: ");
        fgets(Contato.email, 30, stdin);
        Contato.email[strlen(Contato.email)-1] = 0;/// remove o newLine
    
        printf("Digite o telefone (00 90000 0000): ");
        ///scanf("%ld", &Contato.telefone);/// esse nUmero gigante não servirA para nada
        int ret = scanf("%s", Contato.telefone); /// melhor que seja string e essa funCAo não pega o newLine nem espaCo
        if(ret != 1)return;
    
        Contato.sequencial = contSequencial;
        contSequencial++;
    
        fwrite(&Contato, sizeof(Contato), 1, arquivoContatos);
        fclose(arquivoContatos);
      }
      else
      {
        printf("ERRO AO ABRIR O ARQUIVO.\n");
      }
    }
    
    void exibirContatosCadastrados()
    {
      ContatoProfissional LerContatos;
      FILE *arquivoContatos = fopen("contatos.dat", "rb");
    
      if (arquivoContatos)
      {
        while (fread(&LerContatos, sizeof(Contato), 1, arquivoContatos))/// apenas um Bloco de cada vez
        {
          printf
          (
            "Nome ------: %s\n"
            "Email -----: %s\n"
            "Telefone --: %s\n"
            "Sequencia -: %d\n"
            "'----------------------------------'\n\n"
            ,LerContatos.nome   , LerContatos.email    ,
            LerContatos.telefone, LerContatos.sequencial
          );
        }
        fclose(arquivoContatos);
      }
      else
      {
        printf("ERRO AO ABRIR O ARQUIVO.\n");
      }
      gettch();
      ///Sleep(3000); pausa pelo tempo determinados
    }
    void	     gettch() /// pausa etherna até teclar algo
    {
      fprintf(stdout,"\tTecle !");
      FlushConsoleInputBuffer(_h );
      WaitForSingleObject(_h, INFINITE);
    }

     

  8. @Ansi C @Ansi C      você tem razão,  esse algoritmo  poderia ser feito usando vetor ,   e com certeza ficaria muito bom ,  te agradeço pela dica, porém no enunciado não diz que precisa ser com vetor,  e   na época não observei que o usuário pensa no número , mas também digita tal número , e assim o computador sabe qual número o usuário pensou , e também  se mentiu .       E nesse código que postei ficaram invertidos os operadores lógicos ">=" e "<=" e faltou o "default:" no switch / case , e o código ficou assim nessa nova versão :

     

    #include    <stdio.h>
    #include    <windows.h>
    #include    <time.h>
    #include    <locale.h>
    /// did you mean => você quis dizer
    
    void adivinha( int );
    
    int main(int argc, char* argv[] )
    {
      srand(time(NULL));
      setlocale(LC_ALL,"");
    
      int tentar_de_novo=1;
      do
      {
        printf("Pense e digite um número de 1 a 100\n");
        scanf("%d",&numero);
        adivinha();
        printf("Se você deseja jogar novamente digite um qualquer numero, se não digite 0\n");
        scanf("%d",&tentar_de_novo);
      }while(tentar_de_novo);
    
      printf("\n\n\n");
      return   0;
    }
    void adivinha( int numero )
    {
      int  aleatorio   = 0   ,
           ultimo      = 100 ,
           primeiro    = 1   ,
           tentativas  = 0   ;
      char simbolomate = 0   ;
      do
      {
        aleatorio = primeiro + ( ultimo - primeiro ) / 2;
        tentativas++;
        printf ("O número que você escolheu é maior,menor ou igual a %d  ?\n"
                "Digite '>', '<' ou '=' respectivamente  \n"
                "Número de tentativas -----: %d \n",aleatorio,tentativas);
        scanf  (" %c",& simbolomate);
        switch (simbolomate)
        {
        case '=':
          if(aleatorio != numero)
            printf("Mentiu !\n");
          else
            printf("número correto");
          break;
        case '>':
          if(aleatorio >= numero)
            printf("Mentiu !\n");
          if(numero  > aleatorio)
            primeiro = aleatorio + 1;
          break;
        case '<':
          if(aleatorio <= numero)
            printf("Mentiu !\n");
          if(numero < aleatorio)
            ultimo  = aleatorio - 1;
          break;
        default:
          printf("Opção inváLida . . . !\n");
        }
      } while( aleatorio != numero || simbolomate != '=' );
    }

     

    • Curtir 1
  9. @Samuel Fortes Brasil   as mensagens de erro emitidas pelo visualG não são exatas ,  mas apenas informa que tem um erro , e é o programador que precisa descobrir qual erro é , e geralmente é erro de sintaxe , como comandos escrito errado , grudado na palavra seguinte , e variáveis não criadas ,  então quando aparece essas msg é preciso verificar o código para descobrir o que está errado .  o visualG é um bom compilador , pois usa os comandos em português , porém é bem simples e poucos recursos , é para iniciantes e não se pode exigir muito dele ,   e também ajuda quem está começando pois assim força o programador a descobrir como corrigir os erros ,   e o erro nesse seu código e como o   @Ansi C   lhe explicou ,  falta mesmo essa variável "MaiorNota"   , então coloca lá no início como sendo do tipo "Real" ,

    turma           : Inteiro
    N1,N2,N3,N4,N5  : Inteiro
    Nota, MaiorNota : Real

     

  10. @Samuel Fortes Brasil   o erro "esperava encontrar faca"  e por que o enquanto está grudado no texto seguinte a ele e sem espaço ,  assim o compilador reconhece como sendo uma coisa só ,  e a informação que ele lança não é exata , pois o que faltava mesmo é o "enquanto"  que está de fato escrito , mas mesmo para humanos essa escrita , "enquanto(valorInicial  "  , está errada,  pois está tudo escrito junto .

    e uma forma de mostrar os números tanto seja de forma progressiva ou Regressiva , seria verificar os valores  inicial e final e decidir de onde começar a escrever os números no intervalo ,  pois se o final for menor que o inicial , então fazer uma troca deles um pelo outro ,  e assim só usaria mesmo um loop ao invés de dois ,  

    Algoritmo "erro no enquanto_faca "
    Var
       valorInicial,valorFinal, auxiliar : inteiro
       contPersonalizada, contador, flg  : Inteiro
    Inicio
       Escreval("-----------------------------        ")
       Escreval("    CONTADOR INTELIGENTE             ")
       Escreval("-----------------------------        ")
       Escreva ("Qual o valor inicial da contagem? "   )
       Leia    ( valorInicial                          )
       Escreva ("Até quando o contador deverá contar? ")
       Leia    ( valorFinal                            )
       Escreval("-----------------------------        ")
       Escreva ("Pretende fazer uma contagem ( normal ")
       Escreva ("ou regressiva) de quanto em  quantos ")
       Escreval("números ?                            ")
       Escreval("Por exemplo: 1 + 2 ao invés de 1 + 1.")
       Escreva ("Resposta.: "                          )
       Leia    ( contPersonalizada                     )
    
       contador <- valorInicial
          
       se valorInicial      >  valorFinal então
          contador          <- valorInicial
          auxiliar          := valorFinal
          valorFinal        := valorinicial
          valorInicial      := auxiliar
          flg               <- 1
          contPersonalizada <- contPersonalizada * -1
       fimse
       Se valorInicial > 0 então
          Enquanto     valorInicial <= valorFinal faca
             se flg <> 0 então
                valorInicial <- valorInicial + contPersonalizada * -1
             senao
                valorInicial <- valorInicial + contPersonalizada
             fimse
             Escreval( contador )
             contador <- contador + contPersonalizada
          FimEnquanto
       FimSe
    Fimalgoritmo

     

  11. @Samuel Fortes Brasil    não são os parênteses que causam problemas ,  mas não são necessários nesse caso específico ,  pois ali tem apenas uma comparação , e se tivessem duas comparações , aí sim precisaria de colocar os parênteses  ,  e o algoritmo está contando só até 14 por que foi isso que você indicou no código , ou seja para escrever o valor dessa variável  "valorInicial"  enquanto ela for MenorQue o valorFinal ,  e sendo que para escrever também o valorFinal  precisa inclui-lo  com o sinal de "=" junto ao  "<"  MenorQue , assim :

    Enquanto valorInicial <= valorFinal faca // vai atee enquanto o valor seja monor ou igual ao valorFinaL
       Escreval( valorInicial )
       valorInicial <- valorInicial + contPersonalizada
    FimEnquanto

     

  12. @Samuel Fortes Brasil     você postou no tópico de portugol ,   mas esse código é do VisualG  , que é portugol, mas cuja sintaxe  é diferente do portugol studio ,  e é nesse que se usa o '\n' para quebrar a linha , e no visualG seria assim :

    Escreva(/n"Vou pagar em quantas parcelas ?") // essa Linha
    Escreva("/nVou pagar em quantas parcelas ?") // quebrar a linha no Portugol Studio
    // e no VisualG seria assim :
    EscrevaL("Vou pagar em quantas parcelas ?")

     

    • Obrigado 1
  13. @jaireugenio     desculpe , por esses comandos esquisitões , mas eles são comandos simples e não fazem nada demais  não,   apenas manipula som e cores no console, e aqui no codeblock's esse esboço de Algorítimo com essa estrutura e várias bibliotecas já é criado automáticamente ao iniciar um novo arquivo ou projeto, e na hora de postar não removi esses comandos , e nesse código eles poderiam ser excluídos e não afetaria em nada o funcionamento de seu código ,  e você disse que precisa encontrar 9 números ,  porém nesse novo código que postou , se na entrada for informado "9" , só mostrará "7" e sendo que para mostrar os 9 números precisa informar "43" logo na entrada ,  aqui seu código para apresentar também a Quantidade encontrada :

     

    #include <stdio.h>
    int main ()
    {
        int    n     = 0, divisor = 0;
        size_t soma1 = 0, soma2   = 0;
        size_t y     = 0, x       = 0;
        size_t cont  = 0, r       = 0;
        printf("Encontrar Quantos nUmeros Amigos ");
        scanf("%d", &x);
        if( x > 3 )
            y = x * 1500;
        else
            y = x * 1000;
        for (n = 2; n <= y; n++)
        {
            soma1 = 1;
            for (divisor = 2; divisor <= n/2; divisor++)
            {
                if (n % divisor == 0) soma1+=divisor; //calcula a soma dos divisores
            }
            soma2 = 1;
            if (soma1 != n)
                for (divisor = 2; divisor <= soma1/2; divisor++)
                {
                    if (soma1 % divisor == 0)
                        soma2 += divisor; //calcula a soma dos divisores
                }
            if (soma2 == n && n < soma1) //verificar se a soma dos divisores eh igual ao numero
            {
                cont += 1;
                printf(" %d -> (%7d,%7d)\n",cont, n, soma1);
            }
        }
        return 0;
    }

     

    • Obrigado 1
  14. @Thaianny Oliveira   no primeiro código você está incrementando a variável que controla o loop for e assim vai pular de dois em dois , e lerá apenas cinco números , 

    scanf("%i", &idade);
    /// count++; já incrementada pelo "for" 

    e no segundo você colocou um loop "while" dentro do "for" sem necessidade ,  e se que apenas mostrar as idades maior ou igual a 18 então só precisa de uma comparação " if "

     

    printf("Informe 10 idades para o sistema:\n");
    for(int count=0; count<10; count++)
    {
        /// while(count<10)
        /// {
        printf("Informe a %d idade -: ",count+1);
        scanf("%i", &idade);
        /// count++;
        if ( idade >= 18 )
        {
            printf("\n%i Idade -> %d\n\n",count+1, idade);
        }
        /// }
    }

    e outro modo mais elaborado seria usar um vetor para armazenar todas as idades com um loop "for" indo de zero até enquanto for menor que 10 , e depois outro loop para fazer a comparação e mostrar tais idades ,  e outra coisa também é que o mais comum é começar o loop em zero "0"  pois na linguagem c os vetores se iniciam pela posição zero mesmo , apesar de que não terá erro se começar em " 1 " , mas se assim o fizer vai perder duas posições do vetor,  a primeira e a última posição  , pois essa última posição não estará reservada . 

    • Curtir 1
    • Obrigado 1
  15. @santicide   você postou no tópico de C++ , mas esse código é todo da linguagem C ,  e então você vai fazer em Qual linguagem ?  ,   e pode ser na linguagem  C mesmo , então essa função sorteio_manual não funciona pois está em loop infinito , já que essa variável "i" que foi criada mas não  foi inicializada e assim ela terá um valor aleatório qualquer , 

    #define     _WIN32_WINNT 0x600
    #define     _h GetStdHandle(STD_OUTPUT_HANDLE)
    #include    <stdio.h>
    #include    <conio.h>
    #include    <iso646.h>
    #include    <stdlib.h>
    #include    <iostream>
    #include    <string.h>
    #include    <windows.h>
    #include    <math.h>
    #include    <time.h>
    #include    <stdbool.h>
    #include    <locale.h>
    using namespace std;
    int sorteio_manual()
    {
        int i,                  /// var não inicializada , pode ter qq valor 
            numeroSorteioM = 0, /// inicializa uma variAvel "int" 
            numeroDigitadoM, verificaNumeroM, numeroJaDigitadoM, 
            numerosM[6] = {0};  /// inicializando um vetor de "int" todos elementos zerados 
        while(i < 6)            /// só vai entrar nesse loop se i for menor que 6
        {                       /// e só vai sair qundo "i" for maior Que zero
            printf("Val I= %d\n",i); /// para ver o valor da var "i"

    e essas funções são ineficazes pois não recenem nenhum argumento e nem retornam nada .

  16. @gui_3824    o enunciado diz que os dados precisam estar um arquivo txt e depois de calcular a área do polígono , mostrar na tela .

    2. O que deve ser feito Escreva, em C, um algoritmo para determinar a área de uma região poligonal cujos vértices estão organizados em um arquivo texto. Nesse arquivo, a primeira linha mostra o número de lados (ou vértices) do polígono e cada uma das linhas a seguir trazem as coordenadas x e y desses vértices separadas por um espaço. Por exemplo, caso o polígono tenha vértices   (1, 2), (3, 8 ] e (5, 1),      o arquivo de entrada terá o seguinte aspecto: Como saída, o programa deve informar a área desse polígono em uma mensagem exibida no painel terminal ou no prompt de comando. Assim, no caso do triângulo indicado acima, a saída deveria ser: “A área do polígono é 13”.

    poligono.jpg.e4cb2d74ccb9ae07f3ac5879373ddc5d.jpg

    se você já tem um código sobre esse exercício , poste aqui e ajudaremos .

    • Obrigado 1
  17. @Eli Almeida   seu código está funcionando bem ,  porém não entendi o modo de jogar , pois parece que seja para apenas um jogador ,  ou talvez para dois jogadores humanos ,  sendo  que cada um joga  e espera o outro fazer a jogada dele ,   e se fosse para jogar contra o computador  poderia colocar para que o computador escolhesse  aleatoriamente uma das posições usando a função "randi" .

    • Amei 1
  18. @jaireugenio   para esse código não repetir os mesmos números você pode colocar uma variável que armazena os números encontrados e assim evitar imprimi los novamente ,  porém não sei se esses números encontrados pelo programa são realmente números amigos ,  e com essa modificação seu código ficou assim  :

    #define     _WIN32_WINNT 0x600
    #define     _h GetStdHandle(STD_OUTPUT_HANDLE)
    #include    <stdio.h>
    #include    <conio.h>
    #include    <iso646.h>
    #include    <stdlib.h>
    #include    <string.h>
    #include    <windows.h>
    #include    <math.h>
    #include    <time.h>
    #include    <stdbool.h>
    #include    <locale.h>
    char cor( int, int );
    int main(int argc, char* argv[] )
    {
        srand(time(NULL));
        int letra,fundo;
        CONSOLE_SCREEN_BUFFER_INFO _c                            ;
        if( GetConsoleScreenBufferInfo     ( _h, & _c )          )
        {
            letra = (   _c.wAttributes & 0xFF )            & 0x0F;
            fundo = ( ( _c.wAttributes & 0xFF ) >> 4    )  & 0x0F;
        }
        cor(12,14);
        setlocale(LC_ALL,"");
        ///-------------------------------------------------------
    
        int n, divisor, r, soma1, soma2, y, x;
        int flag = 0;
        scanf("%d", &x);
        if(x>3)
        {
            y=x*1500;
        }
        else
          y=x*1000;
        for (n = 2; n <= y; n++)
        {
            soma1 = 1;
            for (divisor = 2; divisor <= n/2; divisor++)
            {
                if (n % divisor == 0) soma1+=divisor; //calcula a soma dos divisores
            }
            soma2 = 1;
            if (soma1 != n)
              for (divisor = 2; divisor <= soma1/2; divisor++)
              {
                if (soma1 % divisor == 0) soma2+=divisor; //calcula a soma dos divisores
              }
            if (soma2 == n && flag != n) //verificar se a soma dos divisores eh igual ao numero
            {
              printf("  (%7d,%7d)  \n",n, soma1);
              flag = soma1; /// armazena para q não repita esses mesmos num's
            }
    
        }
    
        for(int f=0; f<10; f++) Beep(rand()%3000,rand()%150+150);
    
        ///-------------------------------------------------------
        cor(letra,fundo);
        printf("\n\n\n");
        return   0;
    }
    char cor( int L, int F )
    {
        SetConsoleTextAttribute( _h, L +( F << 4 ) );
    }

     

    • Curtir 1
    • Obrigado 1
  19. @jaireugenio    seu programa está em loop infinito , por que você colocou a condição de saida do while como "num1"  igual a zero  , e isso nunca acontece pois sempre que é zero recebe incremento  .

    while(num1)  /// repita enquanto for diferente de zero
    {
      while(num2)
      {
        if(amigo(num1,num2)==1)
        { 
          f = num1;
          k = num2;
          printf("(%d,%d)",num1,num2);
          num1 = 0; /// num1 recebe valor zero
          num2 = 0;
        }
        num1++; /// incrementa, e assim nunca sairA desse Loop etherno
      }
    }

     

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!