Ir ao conteúdo
  • Cadastre-se

Ansi C

Membro Pleno
  • Posts

    3.301
  • Cadastrado em

  • Última visita

posts postados por Ansi C

  1. Boa noite.

     

    Essa pergunta é/foi mais um exemplo, como muitos outros que li até agora, do porquê devo ativar todas as opções de alerta do compilador e aprender com isso.

     

    Veja (máximize a tela para visão completa) :

    Capturar(1).png.b10636d256e5a8f9eb8dfd5e2839c1f3.png

     

    Olha aí, ele diz o mesmo que os colaboradores do fórum: bom d+

    Agora seu programinha compila.

    
    #include <stdio.h>
    
    #define ALUNO	2
    
    struct identidade 
      {
       char nome[32] , sobrenome[32];
      };
    struct aluno 
      {
       float nota;
       struct identidade id;
      };
    
    int main ()
    {
     struct aluno classe[ALUNO];
     for (int aluno= 0 ; aluno<ALUNO; ++aluno)
       {
        printf ("Digite o nome do Aluno\n");
        scanf ("%s%s",classe[aluno].id.nome,classe[aluno].id.sobrenome);
        printf ("Digite a nota do Aluno\n");
        scanf ("%f", &classe[aluno].nota);
       }
     for (int aluno= 0; aluno<ALUNO; ++aluno)
       {
        if (classe[aluno].nota >= 5.0f)
            printf ("O Aluno %s %s tem foi aprovado.",classe[aluno].id.nome,
                    classe[aluno].id.sobrenome);
       }
     putchar ('\n');
    }

     

     

     

     

  2. @Geraldo Cavalcante

    Boa Noite!

     

    Aquilo que descreveu como problema é a função scanf fazendo seu trabalho, espaços em branco também são caracteres, é necessário sinalizar para não quando não; faz assim, acrescenta um espaço no início da corda de formato.

     

    " %c"


    Seu programinha compilou, deste jeitinho aqui:

    
    #include <stdio.h>
    
    #define ALUNO	5
    #define questão	10
    
    int main () 
    {
     char matrizNotas[ALUNO][questão], vetorGabarito[questão];
     int resultado[ALUNO], i, j;
     for (i = 0; i < questão; i++)
       {
        printf("\n Informe a resposta correta da %dº questão: ",i);
        scanf(" %c", &vetorGabarito[i]);
       }
     for (i = 0; i < ALUNO; i++)
     for (j = 0; j < questão; j++)
       {
        printf(" Informe a resposta do %dº aluno para a questão %d: ",i,j);
        scanf(" %c", &matrizNotas[i][j]);
       }
     for (i = 0; i < ALUNO; i++)
     for (j = 0; j < questão; j++)
       {
        if (matrizNotas[i][j]==vetorGabarito[j])
           resultado[i]++;
       }
     for (int aluno= 0 ; aluno<ALUNO ; ++aluno)
        printf ("%d ",resultado[aluno]);
    }

    ***

     

  3. Boa tarde.

     

    Concordaria com as duas interpretações, mas o termo retorna é normal em função.

     

                                                                                FUNÇÕES

    Com Matrizes e talvez alocação dinâmica

     

    Geralmente, lê-se escreva ou mostre até imprima e informe para saídas,

    porém aqui o enunciado usa retorne (retornar), mais o quê?

    A chamada da função.

     

    Deste jeitinho fofo aqui:

    Em 10/09/2022 às 18:33, weslley334 disse:

    Aqui encontra-se a questão 

    {

            Leia (n o número de alunos em uma turma),

                     Leia As  n  (notas P1)

                     Leia As  n  (notas P2 )

                    

             Informando (a maior média)

             Retorne As  n  Médias Parciais

    }

     

    Que lindo, não é? Maravilhoso!

    Fica fácil agora? O dado aluno é uma linha com duas notas, ou seja, duas notas é um aluno i de n alunos.

     

    Sim gafanhoto, médias parciais é uma dado composto,  uma matriz de n médias calculadas no laço n.

     

    — Não é para você? Tudo bem, porque para mim é!

    Agora, expresse-se conforme o enunciado (a questão).

  4. Boa tarde

    Parece uma pergunta nível bebê;

     

    São primeiros passos, fica entre o básico dos operadores

    aritméticos, de comparação, lógicos e comandos IF-ELSE.

     

    Ou seja,

                                                                               DECISÕES

     

    Somente isso já ajudou.

     

    Agora, sabes a revisão para expressar uma tentativa honesta

    de solução, talvez resolução. A propósito, no seu primeiro

    programa de exercício assuma entradas ideias, ou seja, sem

    falhas. Não pense de mais, ponha de lado o tratamento de erros,

    mau uso, otimização,  etc. Foco no enunciado do problema,

    fatio-o em 3 partes: entrada, processamento e saída;

    continue até não poder mais e daí...

    EXPRESSA-SE

     

    Por exemplo, isto abaixo é o enunciado indentado.

    Escreva um programa que,
    {
     Leia (duas notas obtidas por um aluno)
     Leia (o número de aulas ministradas)
     Leia (o número de aulas assistidas)
    
     Calcule (a média final deste aluno)
    
     Decida Se (ele foi aprovado ou reprovado)
    	Considere que para um aluno ser aprovado 
    	ele deve obter média final igual ou maior a 6 
    	e ter no mínimo 75% de frequência.
        Mostre ()
    }
    Se alguém puder me ajudar, agradeço
    
    
    

     

    Muito comum nas linguagens, esse destaque produz um texto semelhante ao pseudocódigo quando aplicado nos enunciados e ajuda — um pouquinho — o entendimento.

     

     

    Sinceramente, não parece uma expressão para computador, um programa?

    Na C, associo LEIA e MOSTRE a respectivamente SCANF e PRINTF.

    Calcule e Decida Se são expressas como comandos no bloco da main, isso é uma exigência do nível do exercício, que ainda não expressa função, só usa as existentes no padrão (biblioteca padrão).

     

    Fim  da revisão!

  5. Bom dia!

     

     

                                                                                                                       MATRIZES

     

    O problema.

    Pede para comparar valores nas posições dos vetores (ou vetor); gabarito, a primeira

    linha, aluno, a segunda e as colunas como questionário. Os ponteiros do exercício

    como escalares/índice de colunas.

     

    Parece fácil?

    Tavez seja mesmo.

     

    Por exemplo,

    Expresse a leitura do valor como quantidade de quesitos no exame;

    ... a alocação de memória e atribua os ponteiros gabarito e aluno;

    ... a leitura com laço da linha para gabarito;

    ...                       laço da linha para aluno;

    ... a reposição dos ponteiros para os endereços iniciais;

    ... a alocação de acertos;

    ... o laço que compara os valores em gabariro e aluno,

    ... que teste os valores para iguais, se verdadeiro, adicione 1+ acerto;

    ... se acerto tem valor não nulo,

    ... e é maior que 1, escrava "acertos",

    ...  senão escreva "acerto"

    Fim da expressão

     

    Pense deste modo: assuma que a linha (ou dado) é ideal, ou seja, não haverá linhas

    sem formato, por exemplo, não haverá letras em campo numérico, e não haverá erros

    de entrada, internos ou qualquer além do enunciado.

    NÃO PENSE D+

     

    Em algumas perguntas do fórum, regularmente, sugere e/ou argumentam que 2 arrays

    em situações semelhantes são desnecessários, porque acessa um durante a extração do

    outro e assim economiza alguma coisa…

    BOBAGEM!!!

     

                                                       O momento é delas!

     

     

    Por exemplo, com arranjos estáticos,

    c'11 - gcc'11.4

    #include <stdio.h>
    
    typedef int questão;
    int main ()
    {
     /* isto define a memória  */
     questão quesito[BUFSIZ];
     /* isto solicita n */
     size_t n= 0;
     scanf ("%zu",&n);
    /* isto define memória de ...  */
     questão *gabarito= quesito;
     questão *aluno= quesito + n;
    /* isto ler ... */
     for (questão *ultima= gabarito + n ; gabarito<ultima ; ++gabarito)
         scanf (" %i",gabarito);
     for (questão *ultima= aluno + n ; aluno<ultima ; ++aluno)
         scanf (" %i",aluno);
    /* isto reposiciona agaba...e determina  acerto's */
     gabarito= quesito;
     aluno= quesito + n;
     questão acert= 0;
     for (questão *ultima= gabarito + n ; gabarito<ultima ; ++aluno , ++gabarito)
         if (*aluno==*gabarito) ++acert;
    /* isto exibe acerto's */
     if (acert) 
       { 
        printf ("%d%s",acert," acerto");
        if (acert>1) putchar ('s');
       }
     putchar ('\n');
    }

     

     

    — Uma expressão assim inicialmente já me satisfaz!

    A outros nem tanto, então, faça a sua você mesmo!

  6. Boa tarde!

     

    A calculadora com C.

    Falhou ao compilar com pelo menos dois alerta, sendo um crítico e outro relacionado.

    a.c: Na função main’:
     a.c:13:9: aviso: formato ‘%i espera argumento do tipo int *’, mas argumento 2 tem tipo int [-Wformat=]
        13 |  scanf("%i",operação);
           |         ~^ ~~~~~~~~
           |          | |
           |          | int
           |          int *
     a.c:13:1: aviso: operacao é usado não inicializado [-Wuninitialized]
        13 |  scanf("%i",operação);
           |  ^~~~~~~~~~~~~~~~~~~~

    Linha 13 exige o endereço!

     

    No programa, não expressou um caso para operador inválido, sendo senso comum nesse exercício e outro que também não fez é o “Divisão por zero”, que acrescentei.

     

    Agora sua calculadora compila!

    c'11 - gcc11.4

    
    #include <stdio.h>
    
    int main ()
    {
      int operacao , n1 , n2 , resultado;
      printf ("Digite um numero: ");
      scanf ("%i",&n1);
      printf ("Digite outro numero: ");
      scanf ("%i",&n2);
      printf ("Digite [1] para somar\n");
      printf ("Digite [2] para multiplicar\n");
      printf ("Digite [3] para dividir\n");
      printf ("Digite [4] para subtrair\n");
      scanf ("%i",&operacao);
      switch (operacao)
        {  
         case 1:
           resultado = n1 + n2;
           printf("%i",resultado);
           break;
         case 2:
           resultado = n1 * n2;
           printf ("%i",resultado);
           break;
         case 3:
           if (n2)
             {
              resultado = n1 / n2;
              printf ("%i",resultado);
             }
           else
             {
              printf ("%s%c","Divisão por zero!",'\n');
             }
           break;       
         case 4:
           resultado = n1 - n2;
           printf ("%i",resultado);
           break;
         default:/*
                  *  Operador Inválido
                  */
           printf ("%s%c","Operação inválida",'\n');
           break;
        }
    }

     

    • Curtir 1
  7. Boa tarde!

     

    A calculadora com C.

    No teste, noto um último 'probleminha', ela não consegue interagir de fato com o usuário, porque não instrui, não lista suas operações, e essa instrução é de bom senso nesta atividade.

     

    Custa um printf 🙂 

     

    E não tem o "Divisão por zero!" e sua expressão lógica.

     

  8. Bom Dia!

     

    Apliquei as sugestões e/ou correções e acho que não esqueci nada.

     

    c'11 - gcc'11.4 

    #include <stdio.h>
    
    int main ()
    {
      float term1= 0 , term2= 0;
      int r= 0;
      char operador= 0;
      do
        {
        /* isto solicita e escanea um 1x termo */
         printf ("Digite um número: ");
         scanf ("%f",&term1);
         printf ("Digite outro número: ");
         scanf ("%f",&term2);
         /* ... um operador aritmético */
         printf ("Qual operação você deseja fazer:\n[1]+\n[2]-\n[3]x\n[4]/\n?");
         scanf (" %c",&operador);
         /* isto seleciona o 'circuito' dum dos cinco resultados */
         switch ((int)operador)
           {  
             case '1':/* soma */
               term1+= term2;
               break;
             case '2':/* diferença */
               term1-= term2;
               break;
             case '3':/* produto */
               term1*= term2;
               break;
             case '4':/* quociente */
               if (term2>0.0f) term1/= term2;
               else
                 {
                  printf ("%s%c","Divisão por zero.",'\n');
                  term1= 0;
                 }
               break;
             default: /* não é uma operação */
               printf ("%s","Operador inválido");
              /* isto lava uma linha: um extração de texto */
               while ((r= getchar ())!=EOF && r!='\n');
               term1= 0;
               break;
           }
         /* escreve o resultado */
         printf ("O resultado é %f",term1);
         printf ("%c%s",'\n',"Continuar [s para sim]? ");
         r= scanf (" %c",&operador); 
        }
      while (EOF!=r && 's'==operador);
      putchar ('\n');
    }

     

    obrigado!

  9. @Endmmans

    Boa Dia

     

    Testei seu programinha, ele tem uma falha comum nessa categoria de expressões, essa falha fica na escolha do operador antes de um escaneamento do segundo valor.

     

    A falha aqui consiste na extração dum caractere em branco por razão da combinação com o especificador 'c'. Esse caractere extraido é o quebra de linha (nova linha) e/ou entrar (enter).

    Observe o que ele fez:

    Qual o primeiro valor? 2022
    Qual o segundo valor? 12
    Qual a operação desejada? (+ para somar, - para subtrair)O resultado é 0.000000

     

    Sabe-se que a função scanf absorve inicialmente os “em branco” quando há espaço na corda de formato (para mais detalhes, confirme/confira na documentação). 

     

    Basta um espaço à frente do especificador, assim no início da formato " %c", que resolvemos esse problema, especificmente.

     

    c'11 - gcc'11.4

    
    #include <stdio.h>
    
    int main ()
    {
      float valor1 , valor2 , resultado;
      char sinal;
      printf ("Qual o primeiro valor? ");
      scanf ("%f", &valor1);
      printf ("Qual o segundo valor? ");
      scanf ("%f", &valor2);
      printf ("Qual a operação desejada? (+ para somar, - para subtrair)");
      scanf (" %c", &sinal);
      if (sinal == '+')  resultado = valor1 + valor2;
      else if (sinal == '-') resultado = valor1 - valor2;
      printf ("O resultado é %f", resultado);
    }

     

  10. @DanielC4

    Bom Dia

     

    Para mim, teu programa falhou já no início, isso mesmo, meu mestre!

    Ao solicitar um termo… alguém entrou com ele e o programa escreveu isto:

    0
    0
    0
    ...

    É coluna densa de valores desconexos.

    A propósito, o número que alguém entrou era um inteiro.

     

    Veja:

    Digite um termo inicial:
    0xff
    
    Digite uma razão:
    
    Digite um número a ser pesquisado na sequência:
    
    
    0
    
    ...
    
    145003
    
    ...
    
    0
    
    -13008
    
    7
    ...

     

    Em 13/06/2022 às 20:07, DanielC4 disse:

    Peça ao usuário que informe dois inteiros

    Ele informou, 0xff um inteiro, né?

    Deu nisso, sequer tem a oportunidade dum segundo.

    ...

     

    O especificador nos argumentos da scanf não concorda com a mensagem na solicitação, que também não está de acordo com enunciado. Parece bobagem, eu sei!

     

     

     

     

    @devair1010  tua expressão também falhou no valor para termo.

  11. Boa Noite!

     

    Para mim, já falha no começo, isso mesmo no LEIA... porque do jeitinho fofo que está ..., talvez o programa não leia o dado inteiro (15). 

     

    O programa escreve:

    Insira os valores do vetor-
    _

     

    O enunciado diz: 15 posições de números inteiro

    Alguém Entra

    Insira os valores do vetor
    034 0xff 0 9 8 7 6 5 4 3 2 1 20 22 02

     

    Sim, meu bem! Acima, alguém entrou com seus 15 números no escaneamento, que apesar de enunciar inteiro, extrai em decimal, sendo 1/3 das bases que normalmente se estuda antes dessa categoria de exercício.

     

    Não chegará ao ranqueamento, mas se chegar terá resultado duvidoso, né? Daí adicione ao fato `maior_valor` que matou o sentido de usar matriz no exercício que é de matrizes - cultura deste fórum (CdH)

     

    Enfim, com uns ajustes até compila:

     

    c'11 - gcc'11.4

    #include <stdio.h>
    
    int main ( ) 
    {
      int vet [15]= {0};
      int i= 0 , maior= 0;
    /* isto ler inteiro (15) */
      printf("Insira valores do vetor (15)\n");
      for(i= 0 ; i<15 ; i++)
        {
        int r= scanf ("%i", &vet[i]);
        if (EOF==r) return 1;
        if (1==r) continue;
        getchar ();
        --i;
        }
    /* isto ranquea o maior */
      for (i= 0 ; i<15 ; i++)
        if (vet[maior]<vet[i]) maior= i;
    /* isto faz o produto  */
      for (i= 0 ; i<15 ; i++) vet[i]*= vet[maior];
    /* isto escreve int... */
      for (i= 0 ; i<15 ; i++) printf ("%i ",vet[i]);
      putchar ('\n');
    }

     

  12. Boa Noite

     

    Já é um Padrão do Fórum

    Com certeza, exercícios de nível iniciante sobre vetores (de n-milhares) que insinua na resposta a inutilidade dos vetores num exercício dos vetores.

     

    Em 16/10/2022 às 19:39, jorge.b disse:

    o código que fiz é o seguinte:

    #include <stdio.h>
    
    int main() {
      int n[19];
      int media = 0, soma = 0, i = 0;
      do {
        printf("Insira um numero :");
        scanf("%d", n);
        soma == soma + n;
        i = i + 1;
      }
      while (i < 20);
      media = (soma / n);
      printf("A media é %f .", media);
      return 0;
    }

     

    c'11 - gcc'11.4

    a.c: Na função main’:
     a.c:9:10: erro: comparação entre ponteiro e inteiro
         9 |  soma == soma + n;
           |       ^~
     a.c:9:10: erro: instrução sem efeito [-Werror=unused-value]
         9 |  soma == soma + n;
           |  ~~~~~^~~~~~~~~~~
     a.c:13:17: erro: operandos inválidos para binário / (possuem int e int *’)
        13 |  media = (soma / n);
           |                ^
           |                |
           |                int *
     a.c:14:22: erro: formato ‘%f espera argumento do tipo double’, mas argumento 2 tem tipo int [-Werror=format=]
        14 |  printf("A media é %f.", media);
           |                    ~^    ~~~~~
           |                     |    |
           |                     |    int
           |                     double
           |                    %d
     cc1: todos os avisos sendo tratados como erros

    Então moço!?

     

    A última falha é atentar contra a vida do vetor no exame de vetor!

    Em fim, com algumas correções, seu programinha até compila, assim:

    
    #include <stdio.h>
    
    int main ()
    {
      int n= 20;
      int termo[n];
      int i= 0;
    /* isto solicita os termos */
      do
        {
        printf ("Insira um termo: ");
        scanf ("%d",&termo[i]);
        i= i + 1;
        }
      while (i < n);
    /* isto faz um somatório */
      int soma= 0;
      i= 0;
      do
        {
        soma = soma + termo[i];
        i= i + 1;
        }
      while (i < n);
    /* isto faz uma média */
      float media= (float)soma / n;
      printf("A media é %f\n",media);
      return 0;
    } /* isto retorna ao sistema operacional rsrsrs :D */

     

     

  13. @Samuel Fortes Brasil

    Boa Terde!

     

    Ocorre por razão da instrução, seu comportamento e a ordem dos comandos no seu bloco de comando.  Esses comandos e sua ordem exata estão escritos logo abaixo:

     

    ordem. comandos

    0. repita

    1. Escreval

    2. contador <- contador + 1

    3. Ate (contador = 10)

     

    Acompanhe o ritual comigo… O que acontece depois do incremento (2), vem a expressão lógica (3), a sua condição é? Até 10, ou seja…

     

    1. escreve 9

    2. adiciona 1

    3.10 é igual a 10 pare

     

     

    A propósito, se queres a simulação até 10, incluso; expresse desta maneira:

    Algoritmo "Conte Ate 10 (inclusive)"
    var
       contador: Inteiro
    
    Inicio
       contador <- 0
       repita
          contador <- contador + 1
          Escreval(contador)
       Ate (contador = 10)
    
    
    Fimalgoritmo

     

    • Obrigado 1
  14. Em 16/06/2022 às 16:44, Edinei Almeida disse:

    @devair1010 no caso voce criou uma matriz de strings ? e isso ?

     

    Em 16/06/2022 às 16:48, devair1010 disse:

    @Edinei Almeida    não  ,aí é um vetor de string's 

    e uma matriz seria isso:

    char cores[21][2][50];  /// 21 linhas e duas colunas com nomes de até 49 caracteres cada
                            /// e seria no total 21 * 2 nomes = 42 nomes de 49 caracteres

     

     

    Hoje tenho uma filosofia diferente.

     

    Na C, string é um valor como texto, e não um tipo como int. Ou seja, a string “Hello W...” está para char [] da mesma maneira que 2022 está para int.

     

    Sei que parece tolice, mas, “de” e “para”, essas palavras que mudam o significado têm capacidade para cortar o raciocínio.

     

     

     

    E a pergunta foi: como 'criar' um vetor para receber varias strings?

     

    Suponho que para você existiu a opção estática, nela, declare-se o seu comprimento, depois declarem-se variáveis da definição. Deste modo, o processo ficaria um pouquinho mais documental.

     

    Assim:

    
    #include <stdio.h>
    
    typedef char Tinta [128];
    int main ()
    {
      Tinta paleta [132];/* Cores ... */
      /* ... */
    }

     

     

    • Curtir 1
  15. @kgin

    Boa Tarde 

     

    Tua expressão joga da velha não abriu.

    E esse exercício do jogo é de nível intermediário nas MATRIZES, sendo que essas são as únicas abstrações necessárias à solução.

     

    E MATRIZES!!!

  16. @FLASHLEGENDS

    Boa Dia!

     

    Disso

    Em 10/06/2022 às 21:06, FLASHLEGENDS disse:
    int divisivel ( int i, int j , int matriz[5][5] )
    {
      if( matriz[i][j] % 3 == 0 )   
      {
        return 1;  /// marca como divisivel
      }
      else
      {
        return 0; /// marca como não divisIveL
      }

     

    Tem-se, simplesmente isso:

    int divisivel3 (int i,int j,int matriz[5][5])
    {
        return  matriz[i][j] % 3;
    }

    Ou ainda...

    inline int divisivel3 (int i,int j,int matriz[5][5])
    {
        return  matriz[i][j] % 3;
    }

    ... Ao avaliar a pergunta da função, ela é bem sucedida com retorno de valor 0, sendo, a propósito, apenas por curiosidade o valor na constante EXIT_SUCCESS.

     

    Por último, não notou que há uma na declaração e outra na definição

    a.c: Na função main’:
     a.c:18:9: erro: declaração implícita da função divisivel’;  você quis dizer divisivel3’?  [-Wimplicit-function-declaration]
        18 |  if( divisivel ( i , j , matriz ) == 1 )
           |      ^~~~~~~~~
           |  divisivel3
     ac:7:14: aviso: parâmetro não utilizado argc [-Wunused-parameter]
         7 |  int main(int argc, char const *argv[])
           |           ~~~~^~~~
     ac:7:32: aviso: parâmetro não utilizado argv [-Wunused-parameter]
         7 |  int main(int argc, char const *argv[])
           |                     ~~~~~~~~~~~~^~~~~~

    c'11 - gcc'11.4

     

    Compilável

    #include <stdio.h>
    
    int divisivel3 ( int i, int j , int matriz[5][5] );
    
    int main ()
    {
      int j , i;
      //Matriz com valores fixo para não fazer a leitura
      int matriz[5][5] = {{15,9,23,43,49},
                          {3,36,55,53,18},
                          {12,42,51,57,34},
                          {6,32,28,25,62},
                          {72,91,81,16,41}
                         };
      for(i=0; i<5; i++)
      for(j=0; j<5; j++)
        if( divisivel3 (i, j, matriz) ) // Atenção: re avaliar a pergunta
          printf("O Numero %3d e divisivel por 3\n",matriz [i][j]);
      return 0;
    }
    inline int divisivel3 ( int i, int j , int matriz[5][5] )
    {
      return matriz[i][j] % 3;
    }

     

  17. @devair1010

     

    Boa Noite!

     

    De fato, não precisa de um vetor para resolver esse problema. Foi um desejo que tive de momento. Minha solução é a tua solução: nela também o extremo inferior cresce a cada palpite ⇒escolha⇐ e o extremo superior diminui até que a diferença entre eles (isuperior - inferior) gera palpites próximos do número escolhido e por último ele.

     

     

    Obrigado! 🙂 

     

     

     

    • Obrigado 1
  18. Boa Noite!

    ...

     

    MATRIZES

    É matriz na leitura, processo e saída.

     

    Sinto que existe um complô entre os editores de apontamento ou apostila das escolas  e universidades furrecas, suspeito que combinaram de neutralizar ou inutilizar as matrizes nos exercícios que são das matrizes.

     

    Opinião

    Alguns alunos não querem usar e ousar nas matrizes a trava, suponho que não tenham consciência ou tenham medo de errar, acabam por pensar além da conta.

     

     

     

    O Problema

     

    Em 30/04/2023 às 14:38, jessicardiax disse:

    Elabore um programa que solicita e armazena 3 notas de 5 alunos em uma matriz 5 x 3. Por fim, calcula e exibe a média aritmética obtida por cada aluno.

     

     

    Sem pensar muito, são 5 dados compostos de 3!

    É o que me diz, "3 notas de 5 alunos" ou cada aluno no programa é um dado composto de 3 notas, 3 notas é (abstração) um aluno ...

     

    Logo,

    Em 30/04/2023 às 14:38, jessicardiax disse:
            printf("informe sua %i nota",i++);

    Ai Está! 😄  minha opinião é outra!

    O contratado é: Informe as notas %i Aluno: * * *

     

    Por exemplo, nesse rascunho

     

    C'11- gcc'11.4

    
    #include <stdio.h>
    #include <ctype.h>
    
    typedef float  Aluno;
    
    int main () {
      /* solicitar a turma de 5 alunos */
      Aluno turma[5] [3]= {0};
      for (size_t a= 0 ; 5>a ; ++a) {
        int r;
        printf ("%s%zu%s%c","Informe as notas ",a+ 1,"º Aluno",'\n');
        for (size_t n= 0 ; 3>n ; ++n) {
          r= getchar ();
          if (EOF==r) {
             perror ("Falha na solicitação");
             a= 5;
             break;
    }
          if ('\n'==r) {
            ungetc (r,stdin);
            break;
    }
          if ('-'==r || ' '==r) {
            --n;
            continue;
    }
        ungetc (r,stdin);
       r=  scanf (" %f",&turma[a][n]);
       if (1!=r) {
         getchar ();
         --n;
    }
    }
        while (EOF!=(r= getchar()) && '\n'!=r);
        putchar ('\n');
    }
      printf ("%c%s%c",'\n',"Turma       Notas",'\n');
      for (size_t a= 0 ; 5>a ; ++a) {
        printf ("%zu%s",a+ 1,"º Aluno: ");
        for (size_t n= 0 ; 3>n ; ++n) {
           printf ("%.1f ",turma[a][n]);
    }
        putchar ('\n');
    }
      /* ... */
    }

    image.png.24b5a9ca8844a770bd59d9b1d939a231.pngSendo uma solicitação e não uma leitura, os escaneamentos terminam sempre na nova linha, de modo que cada linha é um aluno (para mim).

     

    A proposito, se fosse uma leitura, o programa ficaria preso até pegar  turma.

     

    RASCUNHE UMA SOLUÇÃO SEM PENSAR MUITO!

     

    Porque pensam d+ 😄 

     

     

     

     

  19. Boa Noite!

     

    Scanf meus jovens

    O nome completo é um composto separado por espaço em branco, certo? A função scanf argumenta com especificador '%s' e juntos correspondem a qualquer caractere que não seja espaço, OK!

     

    Em 18/12/2022 às 11:24, João Parolini disse:

    Exemplos:

    Maria das Graças Pimenta

     

    Use scanf!

    • Curtir 1
  20. @Emerson2156547384729849

    Boa Noite

     

    Sem pensar muito, basta unir os dois tipos dos diferentes tipos dos vetores e definir a matriz da união, claro que sim... declarar uma união exclusivamente para ter essa matriz, já que esse é o problema!  Ou definir a matriz para o tipo que não há perda nas configurações: cuja única consequência no final é num especificador.

     

    obrigado por lê isso 🙂 

     

     

     

     

     

     

     

     

     

  21. 57 minutos atrás, arfneto disse:

    Ao reviver um tópico de 4 anos atrás talvez fosse mais produtivo para os leitores do forum fazer o simples e útil postar algum código compilável, completo

     

    Sou leitor e discordo disso que você tão amargamente escreve.

     

    Entretanto, pelo menos, essa minha postagem, que foi toda desqualificada, feita de fezes, atraiu você que me proporciona diversão.

     

    Por mim, tudfo bem.

    • Obrigado 1
  22. Concertei o daqui, que agora pelo menos compila;

     

    c'11 - gcc'11.4

    
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct valores { 
              float x;
              float y;
              float resultado;
    } Valores;
    
    int calculadora (Valores *pv) {
      int escolha= 0;
      while (escolha!=5) {
        printf ("\n Escolha operador + opcao 1");
        printf ("\n Escolha operador - opcao 2");
        printf ("\n Escolha operador * opcao 3");
        printf ("\n Escolha operador / opcao 4");
        printf ("\n digite 5 para sair");
        printf ("\n\n Escolha uma opcao: ");
        scanf ("%d",&escolha);
    }
        switch (escolha) {
           case 1: 
                 {
                 printf("\n\n Opcao escolhida: 1 ");
                 pv->resultado= pv->x + pv->y;
                 }
           break;
           case 2: 
                 {
                 printf("\n\n Opcao escolhida: 2 ");
                 pv->resultado= pv->x - pv->y;
                 }
           break;
           case 3:
                 {
                 printf("\n\n Opcao escolhida: 3 ");
                 pv->resultado= pv->x * pv->y;
                 }
           break;
           case 4:
                 {
                 printf("\n\n Opcao escolhida: 4 ");
                 pv->resultado= pv->x / pv->y; 
                 }
           break;
           default:
                 printf("\n\n opcao invalida");
                 exit (1);
           break;
    }
      return 0;
    }
    void captura (Valores *pv) {
      printf ("Forneca dois numeros.");
      scanf (" %f%f",&pv->x,&pv->y);
    }
    void resultado (Valores *pv) {
      printf ("Resultado: %f", pv->resultado);
    }
    int main (void) {
      Valores sv;
      captura (&sv);
      calculadora (&sv);
      resultado (&sv);
      return (0);
    
    }

     

  23. Em 17/08/2023 às 16:17, PensadorNato1987 disse:

    Está certo essa calculadora em C?

     

    A expressão estava sintaticamente correta; quero dizer, apesar de sintaticamente correta para a maioria dos compiladores, esta expressão em c talvez produza resultados errados, falhos ou alertas quando submetida em outros compiladores, e depois há, hipoteticamente, usuários que a utilizem erradamente, por exemplo, entrar com letra num campo númerico.

     

    c'11 - gcc'11.4

    
    #include <stdio.h>
    
    typedef float  NUMERO;
    
    int main () {
      NUMERO SalarioMensal ,Dias ,Resultado;
      printf ("Digite o salario mensal:\n");
      scanf ("%f",&SalarioMensal);
      printf ("Digite a quantidade de dias:\n");
      scanf ("%f",&Dias);
      Resultado= SalarioMensal/ 365* Dias;
      printf("O seu decimo é :R$ %.2f\n",Resultado);
    }

     

    Prompt

    Dependendo do exercício, interessa ou não!

            Digitar e entrar com palavras ao invés de número, num campo numérico (salario) e logicamente, observar o programa falhar até o resultado e pensar nisso.

     

     

  24. Por exemplo,

     

    c'11 - gcc'11.4

    
    #include <stdio.h> /* Include the header file for input and output */
    
    #define NUMERO                  " %lf"
    #define OPERADOR                 " %c"
    #define ADICAO                     '+'
    #define SUBTRACAO                  '-'
    #define MULTIPLICACAO              'x'
    #define DIVISAO                    '/'
    #define RESULTADO(r)   "%.2f%c",r,'\n'
    
    typedef double  Numero;
    typedef char  Operador;
    
    int main (void) {
      Numero esquerdo ,direito;
      Operador operacao;
    
      int l= scanf (NUMERO,&esquerdo);
      int r= scanf (NUMERO,&direito);
      int u= scanf (OPERADOR,&operacao);
    
      if (l!=1 || r!=1 || u!=1) {
        perror ("Falhou na solicitação");
        return 1;
    }
       switch (operacao) {
          case ADICAO :
               esquerdo+= direito;
          break;
          case SUBTRACAO :
               esquerdo-= direito;
          break;
          case MULTIPLICACAO :
               esquerdo*= direito;
          break;
          case DIVISAO :
               if (direito==0.0) {
                 printf ("%s%c","Divisão por zero",'\n');
                 operacao= 0;
    }            
                   else
                 esquerdo/= direito;
          break;
          default: /* 
                    * Operação Inválida 
                    */
               printf ("%s%c","Operador Inválido",'\n');
               operacao= 0;
          break;
    }
      if (operacao) printf (RESULTADO(esquerdo));
      return 0;
    }

    ...

  25. Bom Dia!

     

    Em 30/06/2022 às 17:09, Gabrielga_99 disse:

    NÃO CONSEGUI FAZER ESTE EXERCÍCIO alguém ME AJUDA

     

    Tem o básico de expressões lógicas, aritmética e condicionais.

            If else | == eq | switch | ?: ternário | scanf | printf

     

     

    Como Resolver ?

            Escanear-se o dado composto de 2 double como números, 1 char como símbolo da operação (o operador), checa-se com instruções condicionais e fluxo de controle o símbolo\sinal da operação. Deste modo, redireciona-se o programa para os comandos designados pelo símbolo conforme o enunciado no problema (do exercício). 

     

            Sugerem o uso do switch para expressar o fluxo das operações.

     

     

     

     

    • Curtir 1

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!